1
0
mirror of https://github.com/oliexdev/openScale.git synced 2025-08-23 16:53:04 +02:00

Add options menu to data entry activity

- Remove buttons at the bottom and instead use the back button to go
  back or cancel an add or edit. As for adding a measurement or saving
  an edit, a text button is now shown in the toolbar when adding or
  editing a measurement.
- Hide left/right arrows while in edit mode to make it clear that the
  entry must be saved before one can navigate away.
- Show evaluator view by default the first time the activity is shown
  to let new users see it.
This commit is contained in:
Erik Johansson
2018-02-06 18:54:06 +01:00
committed by OliE
parent ec13477c6a
commit b8800193a3
5 changed files with 254 additions and 273 deletions

View File

@@ -19,12 +19,16 @@ import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.ColorStateList;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.support.design.widget.FloatingActionButton; import android.support.v4.graphics.drawable.DrawableCompat;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.TableLayout; import android.widget.TableLayout;
@@ -56,23 +60,23 @@ import java.text.DateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import lecho.lib.hellocharts.util.ChartUtils;
public class DataEntryActivity extends AppCompatActivity { public class DataEntryActivity extends AppCompatActivity {
public static String EXTRA_ID = "id"; public static String EXTRA_ID = "id";
private static String PREF_EXPAND = "expandEvaluator";
private MeasurementView.MeasurementViewMode measurementViewMode;
private ArrayList<MeasurementView> dataEntryMeasurements; private ArrayList<MeasurementView> dataEntryMeasurements;
private TableLayout tableLayoutDataEntry; private TableLayout tableLayoutDataEntry;
private TextView txtDataNr; private TextView txtDataNr;
private Button btnAdd;
private Button btnOk;
private Button btnCancel;
private Button btnLeft; private Button btnLeft;
private Button btnRight; private Button btnRight;
private FloatingActionButton imageViewDelete;
private FloatingActionButton switchEditMode; private MenuItem saveButton;
private FloatingActionButton expandButton; private MenuItem editButton;
private MenuItem expandButton;
private MenuItem deleteButton;
private ScaleMeasurement scaleMeasurement; private ScaleMeasurement scaleMeasurement;
private ScaleMeasurement previousMeasurement; private ScaleMeasurement previousMeasurement;
@@ -93,6 +97,12 @@ public class DataEntryActivity extends AppCompatActivity {
setContentView(R.layout.activity_dataentry); setContentView(R.layout.activity_dataentry);
Toolbar toolbar = (Toolbar) findViewById(R.id.dataEntryToolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle("");
context = this; context = this;
tableLayoutDataEntry = (TableLayout) findViewById(R.id.tableLayoutDataEntry); tableLayoutDataEntry = (TableLayout) findViewById(R.id.tableLayoutDataEntry);
@@ -114,33 +124,38 @@ public class DataEntryActivity extends AppCompatActivity {
dataEntryMeasurements.add(new DateMeasurementView(context)); dataEntryMeasurements.add(new DateMeasurementView(context));
dataEntryMeasurements.add(new TimeMeasurementView(context)); dataEntryMeasurements.add(new TimeMeasurementView(context));
txtDataNr = (TextView) findViewById(R.id.txtDataNr);
btnLeft = (Button) findViewById(R.id.btnLeft);
btnRight = (Button) findViewById(R.id.btnRight);
btnLeft.setVisibility(View.INVISIBLE);
btnRight.setVisibility(View.INVISIBLE);
btnLeft.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
moveLeft();
}
});
btnRight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
moveRight();
}
});
updateOnView();
onMeasurementViewUpdateListener updateListener = new onMeasurementViewUpdateListener(); onMeasurementViewUpdateListener updateListener = new onMeasurementViewUpdateListener();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final boolean expand = getIntent().hasExtra(EXTRA_ID)
? prefs.getBoolean(PREF_EXPAND, true) : false;
for (MeasurementView measurement : dataEntryMeasurements) { for (MeasurementView measurement : dataEntryMeasurements) {
tableLayoutDataEntry.addView(measurement); tableLayoutDataEntry.addView(measurement);
measurement.setOnUpdateListener(updateListener); measurement.setOnUpdateListener(updateListener);
measurement.setExpand(expand);
} }
txtDataNr = (TextView) findViewById(R.id.txtDataNr);
btnAdd = (Button) findViewById(R.id.btnAdd);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel);
btnLeft = (Button) findViewById(R.id.btnLeft);
btnRight = (Button) findViewById(R.id.btnRight);
imageViewDelete = (FloatingActionButton) findViewById(R.id.imgViewDelete);
switchEditMode = (FloatingActionButton) findViewById(R.id.switchEditMode);
expandButton = (FloatingActionButton) findViewById(R.id.expandButton);
btnAdd.setOnClickListener(new onClickListenerAdd());
btnOk.setOnClickListener(new onClickListenerOk());
btnCancel.setOnClickListener(new onClickListenerCancel());
imageViewDelete.setOnClickListener(new onClickListenerDelete());
btnLeft.setOnClickListener(new onClickListenerLeft());
btnRight.setOnClickListener(new onClickListenerRight());
switchEditMode.setOnClickListener(new onClickListenerToggleButton());
expandButton.setOnClickListener(new onClickListenerToggleButton());
updateOnView();
} }
@Override @Override
@@ -161,8 +176,92 @@ public class DataEntryActivity extends AppCompatActivity {
} }
} }
private void updateOnView() @Override
{ public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.dataentry_menu, menu);
// Apply a white tint to all icons in the toolbar
for (int i = 0; i < menu.size(); ++i) {
MenuItem item = menu.getItem(i);
final Drawable drawable = item.getIcon();
if (drawable == null) {
continue;
}
final Drawable wrapped = DrawableCompat.wrap(drawable.mutate());
DrawableCompat.setTint(wrapped, Color.WHITE);
item.setIcon(wrapped);
}
saveButton = menu.findItem(R.id.saveButton);
editButton = menu.findItem(R.id.editButton);
expandButton = menu.findItem(R.id.expandButton);
deleteButton = menu.findItem(R.id.deleteButton);
// Hide/show icons as appropriate for the view mode
if (getIntent().hasExtra(EXTRA_ID)) {
setViewMode(MeasurementView.MeasurementViewMode.VIEW);
}
else {
setViewMode(MeasurementView.MeasurementViewMode.ADD);
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.saveButton:
final boolean isEdit = scaleMeasurement.getId() > 0;
saveScaleData();
if (isEdit) {
setViewMode(MeasurementView.MeasurementViewMode.VIEW);
}
else {
finish();
}
return true;
case R.id.expandButton:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final boolean expand = !prefs.getBoolean(PREF_EXPAND, true);
prefs.edit().putBoolean(PREF_EXPAND, expand).apply();
for (MeasurementView measurement : dataEntryMeasurements) {
measurement.setExpand(expand);
}
return true;
case R.id.editButton:
setViewMode(MeasurementView.MeasurementViewMode.EDIT);
return true;
case R.id.deleteButton:
deleteMeasurement();
return true;
// Override the default behaviour in order to return to the correct fragment
// (e.g. the table view) and not always go to the overview.
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
if (measurementViewMode == MeasurementView.MeasurementViewMode.EDIT) {
setViewMode(MeasurementView.MeasurementViewMode.VIEW);
updateOnView();
}
else {
super.onBackPressed();
}
}
private void updateOnView() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
for (MeasurementView measurement : dataEntryMeasurements) { for (MeasurementView measurement : dataEntryMeasurements) {
@@ -182,25 +281,8 @@ public class DataEntryActivity extends AppCompatActivity {
} }
OpenScale openScale = OpenScale.getInstance(context); OpenScale openScale = OpenScale.getInstance(context);
boolean doExpand = false;
if (id > 0) { if (id > 0) {
// keep edit mode state if we are moving to left or right
if (prefs.getBoolean(String.valueOf(switchEditMode.getId()), false)) {
setViewMode(MeasurementView.MeasurementViewMode.EDIT);
switchEditMode.setBackgroundTintList(ColorStateList.valueOf(ChartUtils.COLOR_GREEN));
} else {
setViewMode(MeasurementView.MeasurementViewMode.VIEW);
switchEditMode.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#D3D3D3")));
}
doExpand = prefs.getBoolean(String.valueOf(expandButton.getId()), false);
if (doExpand) {
expandButton.setBackgroundTintList(ColorStateList.valueOf(ChartUtils.COLOR_ORANGE));
} else {
expandButton.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#D3D3D3")));
}
// Show selected scale data // Show selected scale data
if (scaleMeasurement == null) { if (scaleMeasurement == null) {
ScaleMeasurement[] tupleScaleData = openScale.getTupleScaleData(id); ScaleMeasurement[] tupleScaleData = openScale.getTupleScaleData(id);
@@ -212,8 +294,6 @@ public class DataEntryActivity extends AppCompatActivity {
btnRight.setEnabled(nextMeasurement != null); btnRight.setEnabled(nextMeasurement != null);
} }
} else { } else {
setViewMode(MeasurementView.MeasurementViewMode.ADD);
if (openScale.getScaleMeasurementList().isEmpty()) { if (openScale.getScaleMeasurementList().isEmpty()) {
// Show default values // Show default values
scaleMeasurement = new ScaleMeasurement(); scaleMeasurement = new ScaleMeasurement();
@@ -226,49 +306,55 @@ public class DataEntryActivity extends AppCompatActivity {
scaleMeasurement.setDateTime(new Date()); scaleMeasurement.setDateTime(new Date());
scaleMeasurement.setComment(""); scaleMeasurement.setComment("");
} }
isDirty = true;
} }
for (MeasurementView measurement : dataEntryMeasurements) { for (MeasurementView measurement : dataEntryMeasurements) {
measurement.loadFrom(scaleMeasurement, previousMeasurement); measurement.loadFrom(scaleMeasurement, previousMeasurement);
measurement.setExpand(doExpand);
} }
txtDataNr.setText(DateFormat.getDateTimeInstance( txtDataNr.setText(DateFormat.getDateTimeInstance(
DateFormat.LONG, DateFormat.SHORT).format(scaleMeasurement.getDateTime())); DateFormat.LONG, DateFormat.SHORT).format(scaleMeasurement.getDateTime()));
} }
private void setViewMode(MeasurementView.MeasurementViewMode viewMode) private void setViewMode(MeasurementView.MeasurementViewMode viewMode) {
{ measurementViewMode = viewMode;
int dateTimeVisibility = View.VISIBLE; int dateTimeVisibility = View.VISIBLE;
switch (viewMode) { switch (viewMode) {
case VIEW: case VIEW:
btnOk.setVisibility(View.VISIBLE); saveButton.setVisible(false);
btnAdd.setVisibility(View.GONE); editButton.setVisible(true);
imageViewDelete.setVisibility(View.VISIBLE); expandButton.setVisible(true);
deleteButton.setVisible(true);
btnLeft.setVisibility(View.VISIBLE); btnLeft.setVisibility(View.VISIBLE);
btnRight.setVisibility(View.VISIBLE); btnRight.setVisibility(View.VISIBLE);
expandButton.setVisibility(View.VISIBLE);
switchEditMode.setVisibility(View.VISIBLE);
dateTimeVisibility = View.GONE; dateTimeVisibility = View.GONE;
break; break;
case EDIT: case EDIT:
btnOk.setVisibility(View.VISIBLE); saveButton.setVisible(true);
btnAdd.setVisibility(View.GONE); saveButton.setTitle(R.string.save);
imageViewDelete.setVisibility(View.VISIBLE);
btnLeft.setVisibility(View.VISIBLE); editButton.setVisible(false);
btnRight.setVisibility(View.VISIBLE); expandButton.setVisible(true);
expandButton.setVisibility(View.VISIBLE); deleteButton.setVisible(true);
switchEditMode.setVisibility(View.VISIBLE);
break; btnLeft.setVisibility(View.GONE);
case ADD: btnRight.setVisibility(View.GONE);
btnOk.setVisibility(View.GONE); break;
btnAdd.setVisibility(View.VISIBLE); case ADD:
imageViewDelete.setVisibility(View.GONE); saveButton.setVisible(true);
saveButton.setTitle(R.string.label_add);
editButton.setVisible(false);
expandButton.setVisible(false);
deleteButton.setVisible(false);
btnLeft.setVisibility(View.GONE); btnLeft.setVisibility(View.GONE);
btnRight.setVisibility(View.GONE); btnRight.setVisibility(View.GONE);
expandButton.setVisibility(View.GONE);
switchEditMode.setVisibility(View.GONE);
break; break;
} }
@@ -281,16 +367,71 @@ public class DataEntryActivity extends AppCompatActivity {
} }
private void saveScaleData() { private void saveScaleData() {
if (isDirty) { if (!isDirty) {
OpenScale openScale = OpenScale.getInstance(getApplicationContext()); return;
}
OpenScale openScale = OpenScale.getInstance(getApplicationContext());
if (openScale.getSelectedScaleUserId() == -1) {
AlertDialog.Builder infoDialog = new AlertDialog.Builder(context);
infoDialog.setMessage(getResources().getString(R.string.info_no_selected_user));
infoDialog.setPositiveButton(getResources().getString(R.string.label_ok), null);
infoDialog.show();
return;
}
if (scaleMeasurement.getId() > 0) {
openScale.updateScaleData(scaleMeasurement); openScale.updateScaleData(scaleMeasurement);
isDirty = false; }
else {
openScale.addScaleData(scaleMeasurement);
}
isDirty = false;
}
private void deleteMeasurement() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean deleteConfirmationEnable = prefs.getBoolean("deleteConfirmationEnable", true);
if (deleteConfirmationEnable) {
AlertDialog.Builder deleteAllDialog = new AlertDialog.Builder(context);
deleteAllDialog.setMessage(getResources().getString(R.string.question_really_delete));
deleteAllDialog.setPositiveButton(getResources().getString(R.string.label_yes), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
doDeleteMeasurement();
}
});
deleteAllDialog.setNegativeButton(getResources().getString(R.string.label_no), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
deleteAllDialog.show();
}
else {
doDeleteMeasurement();
}
}
private void doDeleteMeasurement() {
OpenScale.getInstance(getApplicationContext()).deleteScaleData(scaleMeasurement.getId());
Toast.makeText(context, getResources().getString(R.string.info_data_deleted), Toast.LENGTH_SHORT).show();
final boolean hasNext = moveLeft() || moveRight();
if (!hasNext) {
finish();
}
else if (measurementViewMode == MeasurementView.MeasurementViewMode.EDIT) {
setViewMode(MeasurementView.MeasurementViewMode.VIEW);
} }
} }
private boolean moveLeft() { private boolean moveLeft() {
if (previousMeasurement != null) { if (previousMeasurement != null) {
saveScaleData();
getIntent().putExtra(EXTRA_ID, previousMeasurement.getId()); getIntent().putExtra(EXTRA_ID, previousMeasurement.getId());
updateOnView(); updateOnView();
return true; return true;
@@ -301,7 +442,6 @@ public class DataEntryActivity extends AppCompatActivity {
private boolean moveRight() { private boolean moveRight() {
if (nextMeasurement != null) { if (nextMeasurement != null) {
saveScaleData();
getIntent().putExtra(EXTRA_ID, nextMeasurement.getId()); getIntent().putExtra(EXTRA_ID, nextMeasurement.getId());
updateOnView(); updateOnView();
return true; return true;
@@ -326,121 +466,4 @@ public class DataEntryActivity extends AppCompatActivity {
} }
} }
} }
private class onClickListenerAdd implements View.OnClickListener {
@Override
public void onClick(View v) {
OpenScale openScale = OpenScale.getInstance(getApplicationContext());
int selectedUserId = openScale.getSelectedScaleUserId();
if (selectedUserId == -1) {
AlertDialog.Builder infoDialog = new AlertDialog.Builder(context);
infoDialog.setMessage(getResources().getString(R.string.info_no_selected_user));
infoDialog.setPositiveButton(getResources().getString(R.string.label_ok), null);
infoDialog.show();
} else {
for (MeasurementView measurement : dataEntryMeasurements) {
measurement.saveTo(scaleMeasurement);
}
openScale.addScaleData(scaleMeasurement);
finish();
}
}
}
private class onClickListenerOk implements View.OnClickListener {
@Override
public void onClick(View v) {
saveScaleData();
finish();
}
}
private class onClickListenerLeft implements View.OnClickListener {
@Override
public void onClick(View v) {
moveLeft();
}
}
private class onClickListenerRight implements View.OnClickListener {
@Override
public void onClick(View v) {
moveRight();
}
}
private class onClickListenerCancel implements View.OnClickListener {
@Override
public void onClick(View v) {
finish();
}
}
private class onClickListenerDelete implements View.OnClickListener {
@Override
public void onClick(View v) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(v.getContext());
boolean deleteConfirmationEnable = prefs.getBoolean("deleteConfirmationEnable", true);
if (deleteConfirmationEnable) {
AlertDialog.Builder deleteAllDialog = new AlertDialog.Builder(v.getContext());
deleteAllDialog.setMessage(getResources().getString(R.string.question_really_delete));
deleteAllDialog.setPositiveButton(getResources().getString(R.string.label_yes), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
deleteMeasurement();
}
});
deleteAllDialog.setNegativeButton(getResources().getString(R.string.label_no), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
deleteAllDialog.show();
}
else {
deleteMeasurement();
}
}
void deleteMeasurement() {
int delId = scaleMeasurement.getId();
OpenScale.getInstance(getApplicationContext()).deleteScaleData(delId);
Toast.makeText(context, getResources().getString(R.string.info_data_deleted), Toast.LENGTH_SHORT).show();
isDirty = false;
final boolean hasNext = moveLeft() || moveRight();
if (!hasNext) {
finish();
}
}
}
private class onClickListenerToggleButton implements View.OnClickListener {
@Override
public void onClick(View v) {
FloatingActionButton actionButton = (FloatingActionButton) v;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(v.getContext());
if (prefs.getBoolean(String.valueOf(actionButton.getId()), false)) {
prefs.edit().putBoolean(String.valueOf(actionButton.getId()), false).commit();
} else {
prefs.edit().putBoolean(String.valueOf(actionButton.getId()), true).commit();
}
updateOnView();
}
}
} }

View File

@@ -197,8 +197,6 @@ public abstract class MeasurementView extends TableLayout {
if (!isEditable()) { if (!isEditable()) {
editModeView.setVisibility(View.INVISIBLE); editModeView.setVisibility(View.INVISIBLE);
} }
showEvaluatorRow(false);
break; break;
case STATISTIC: case STATISTIC:
indicatorView.setVisibility(View.GONE); indicatorView.setVisibility(View.GONE);

View File

@@ -5,45 +5,14 @@
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout <android.support.v7.widget.Toolbar
android:id="@+id/dataEntryToolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary" android:background="?attr/colorPrimary"
android:gravity="right" android:elevation="4dp"
android:orientation="horizontal" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:padding="5dp"> app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/switchEditMode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:clickable="true"
android:src="@drawable/ic_editable"
app:backgroundTint="#D3D3D3"
app:fabSize="mini" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/expandButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:clickable="true"
android:src="@drawable/ic_expand"
app:backgroundTint="#D3D3D3"
app:fabSize="mini" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/imgViewDelete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:clickable="true"
android:src="@drawable/ic_delete"
app:backgroundTint="#FF4444"
app:fabSize="mini" />
</LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -99,42 +68,5 @@
</ScrollView> </ScrollView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp">
<Button
android:id="@+id/btnCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="5"
android:background="@drawable/flat_selector"
android:text="@string/label_cancel"
android:textColor="@android:color/white" />
<Space
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0.5" />
<Button
android:id="@+id/btnAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="5"
android:background="@drawable/flat_selector"
android:text="@string/label_add"
android:textColor="@android:color/white" />
<Button
android:id="@+id/btnOk"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="5"
android:background="@drawable/flat_selector"
android:text="@string/label_ok"
android:textColor="@android:color/white" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/saveButton"
android:title="@string/save"
app:showAsAction="always|withText" />
<item
android:id="@+id/editButton"
android:title="@string/edit"
android:icon="@drawable/ic_editable"
app:showAsAction="ifRoom" />
<item
android:id="@+id/expandButton"
android:title="@string/toggle_expand"
android:icon="@drawable/ic_expand"
app:showAsAction="ifRoom" />
<item
android:id="@+id/deleteButton"
android:title="@string/label_delete"
android:icon="@drawable/ic_delete"
app:showAsAction="ifRoom" />
</menu>

View File

@@ -212,5 +212,8 @@
<string name="customactivityoncrash_error_activity_error_details_copy">Copy to clipboard</string> <string name="customactivityoncrash_error_activity_error_details_copy">Copy to clipboard</string>
<string name="customactivityoncrash_error_activity_error_details_copied">Copied to clipboard</string> <string name="customactivityoncrash_error_activity_error_details_copied">Copied to clipboard</string>
<string name="customactivityoncrash_error_activity_error_details_clipboard_label">Error information</string> <string name="customactivityoncrash_error_activity_error_details_clipboard_label">Error information</string>
<string name="toggle_expand">Toggle expand</string>
<string name="edit">Edit</string>
<string name="save">Save</string>
</resources> </resources>