Add the possibility to clear all infos
Bug:27905566
Change-Id: I5bf2ffa82609509e4cfd8258cd1c27a48a6183bf
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 7885f18..f8ba76f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -39,7 +39,6 @@
<activity
android:name=".edit.EditInfoActivity"
- android:label="@string/edit_emergency_info_label"
android:theme="@style/AppTheme"
android:launchMode="singleTask">
<intent-filter>
diff --git a/res/layout/custom_action_bar.xml b/res/layout/custom_action_bar.xml
index 1648d43..04bebf8 100644
--- a/res/layout/custom_action_bar.xml
+++ b/res/layout/custom_action_bar.xml
@@ -16,6 +16,7 @@
<Toolbar android:id="@+id/action_bar"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
+ android:title="@string/app_label"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:elevation="@dimen/tab_elevation"
diff --git a/res/menu/edit_info_menu.xml b/res/menu/edit_info_menu.xml
new file mode 100644
index 0000000..fd31f5f
--- /dev/null
+++ b/res/menu/edit_info_menu.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:id="@+id/action_clear_all"
+ android:title="@string/clear_all"
+ android:showAsAction="never" />
+</menu>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 023fccd..1833191 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -15,9 +15,7 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- The name of the app. [CHAR_LIMIT=30] -->
- <string name="app_label">Emergency Information</string>
- <!-- The title of the edit info activity. "Emergency Information" should be translated using app_label above [CHAR_LIMIT=30] -->
- <string name="edit_emergency_info_label">Edit Emergency Information</string>
+ <string name="app_label">Emergency information</string>
<!-- The description of the pencil icon, for talkback. [CHAR_LIMIT=NONE] -->
<string name="edit_info">Edit emergency information</string>
<!-- The title of the emergency info tab. [CHAR_LIMIT=15] -->
@@ -192,4 +190,10 @@
<string name="emergency_info_continue">Continue</string>
<!-- Message shown when no emergency information has been provided by the user [CHAR LIMIT=NONE] -->
<string name="no_info_provided">No emergency information provided</string>
+ <!-- Label for action item on the menu of the editing screen [CHAR LIMIT=15] -->
+ <string name="clear_all">Clear all</string>
+ <!-- Label for button of dialog shown to clear all information and contacts [CHAR LIMIT=15] -->
+ <string name="clear">Clear</string>
+ <!-- Message of dialog shown to clear all information and contacts [CHAR LIMIT=NONE] -->
+ <string name="clear_all_message">Clear all information and contacts?</string>
</resources>
diff --git a/src/com/android/emergency/EmergencyTabActivity.java b/src/com/android/emergency/EmergencyTabActivity.java
index 322949a..937ae56 100644
--- a/src/com/android/emergency/EmergencyTabActivity.java
+++ b/src/com/android/emergency/EmergencyTabActivity.java
@@ -73,7 +73,6 @@
super.setContentView(layoutResID);
setupTabs();
Toolbar toolbar = (Toolbar) findViewById(R.id.action_bar);
- toolbar.setTitle(getActivityTitle());
setActionBar(toolbar);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
@@ -114,6 +113,11 @@
return mTabLayout;
}
+ /** Return the fragments. */
+ public ArrayList<Pair<String, Fragment>> getFragments() {
+ return mFragments;
+ }
+
/** Return number of fragments to show in the tabs. */
public int getNumberFragments() {
return mFragments.size();
@@ -122,9 +126,6 @@
/** Returns whether the activity is in view mode (true) or in edit mode (false). */
public abstract boolean isInViewMode();
- /** Returns the activity title. */
- public abstract String getActivityTitle();
-
/** Returns the fragments to show in the tabs. */
protected abstract ArrayList<Pair<String, Fragment>> setUpFragments();
diff --git a/src/com/android/emergency/edit/EditEmergencyContactsFragment.java b/src/com/android/emergency/edit/EditEmergencyContactsFragment.java
index 576379e..5a557bd 100644
--- a/src/com/android/emergency/edit/EditEmergencyContactsFragment.java
+++ b/src/com/android/emergency/edit/EditEmergencyContactsFragment.java
@@ -67,7 +67,14 @@
@Override
public void onResume() {
super.onResume();
- mEmergencyContactsPreferenceCategory.reloadFromPreference();
+ reloadFromPreference();
+ }
+
+ /** Reloads the contacts by reading the value from the shared preferences. */
+ public void reloadFromPreference() {
+ if (mEmergencyContactsPreferenceCategory != null) {
+ mEmergencyContactsPreferenceCategory.reloadFromPreference();
+ }
}
@Override
diff --git a/src/com/android/emergency/edit/EditEmergencyInfoFragment.java b/src/com/android/emergency/edit/EditEmergencyInfoFragment.java
index 1965f2e..6e7775b 100644
--- a/src/com/android/emergency/edit/EditEmergencyInfoFragment.java
+++ b/src/com/android/emergency/edit/EditEmergencyInfoFragment.java
@@ -26,6 +26,7 @@
import com.android.emergency.PreferenceKeys;
import com.android.emergency.R;
+import com.android.emergency.ReloadablePreferenceInterface;
import com.android.emergency.preferences.DatePreference;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.MetricsProto.MetricsEvent;
@@ -77,6 +78,23 @@
return false;
}
+ @Override
+ public void onResume() {
+ super.onResume();
+ reloadFromPreference();
+ }
+
+ /** Reloads all the preferences by reading the value from the shared preferences. */
+ public void reloadFromPreference() {
+ for (String preferenceKey : PreferenceKeys.KEYS_EDIT_EMERGENCY_INFO) {
+ ReloadablePreferenceInterface preference = (ReloadablePreferenceInterface)
+ findPreference(preferenceKey);
+ if (preference != null) {
+ preference.reloadFromPreference();
+ }
+ }
+ }
+
public static Fragment newInstance() {
return new EditEmergencyInfoFragment();
}
diff --git a/src/com/android/emergency/edit/EditInfoActivity.java b/src/com/android/emergency/edit/EditInfoActivity.java
index e26a56d..53b2f54 100644
--- a/src/com/android/emergency/edit/EditInfoActivity.java
+++ b/src/com/android/emergency/edit/EditInfoActivity.java
@@ -27,7 +27,11 @@
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.support.annotation.Nullable;
import android.util.Pair;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import com.android.emergency.EmergencyTabActivity;
import com.android.emergency.R;
@@ -43,6 +47,7 @@
*/
public class EditInfoActivity extends EmergencyTabActivity {
private static final String TAG_WARNING_DIALOG = "warning_dialog";
+ private static final String TAG_CLEAR_ALL_DIALOG = "clear_all_dialog";
private static final String KEY_LAST_CONSENT_TIME_MS = "last_consent_time_ms";
private static final long ONE_DAY_MS = 24 * 60 * 60 * 1000;
private static final String ACTION_EDIT_EMERGENCY_CONTACTS =
@@ -94,13 +99,25 @@
}
@Override
- public boolean isInViewMode() {
- return false;
+ public boolean onCreateOptionsMenu(Menu menu) {
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.edit_info_menu, menu);
+ return true;
}
@Override
- public String getActivityTitle() {
- return getString(R.string.edit_emergency_info_label);
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.action_clear_all:
+ showClearAllDialog();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public boolean isInViewMode() {
+ return false;
}
@Override
@@ -130,6 +147,33 @@
newFragment.show(ft, TAG_WARNING_DIALOG);
}
+ private void showClearAllDialog() {
+ // DialogFragment.show() will take care of adding the fragment
+ // in a transaction. We also want to remove any currently showing
+ // dialog, so make our own transaction and take care of that here.
+ FragmentTransaction ft = getFragmentManager().beginTransaction();
+ Fragment previousDialog = getFragmentManager().findFragmentByTag(TAG_CLEAR_ALL_DIALOG);
+ if (previousDialog != null) {
+ ft.remove(previousDialog);
+ }
+ ft.addToBackStack(null);
+
+ DialogFragment newFragment = ClearAllDialogFragment.newInstance();
+ newFragment.show(ft, TAG_CLEAR_ALL_DIALOG);
+ }
+
+ private void onClearAllPreferences() {
+ PreferenceManager.getDefaultSharedPreferences(this).edit().clear().apply();
+
+ ArrayList<Pair<String, Fragment>> fragments = getFragments();
+ EditEmergencyInfoFragment editEmergencyInfoFragment =
+ (EditEmergencyInfoFragment) fragments.get(0).second;
+ editEmergencyInfoFragment.reloadFromPreference();
+ EditEmergencyContactsFragment editEmergencyContactsFragment =
+ (EditEmergencyContactsFragment) fragments.get(1).second;
+ editEmergencyContactsFragment.reloadFromPreference();
+ }
+
/**
* Warning dialog shown to the user each time they go in to the edit info view. Using a {@link
* DialogFragment} takes care of screen rotation issues.
@@ -166,4 +210,30 @@
return new WarningDialogFragment();
}
}
+
+ /**
+ * Dialog shown to the user when they tap on the CLEAR ALL menu item. Using a {@link
+ * DialogFragment} takes care of screen rotation issues.
+ */
+ public static class ClearAllDialogFragment extends DialogFragment {
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ Dialog dialog = new AlertDialog.Builder(getActivity())
+ .setMessage(R.string.clear_all_message)
+ .setPositiveButton(R.string.clear, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ ((EditInfoActivity) getActivity()).onClearAllPreferences();
+ }
+ })
+ .setNegativeButton(android.R.string.cancel, null)
+ .create();
+ return dialog;
+ }
+
+ public static DialogFragment newInstance() {
+ return new ClearAllDialogFragment();
+ }
+ }
}
diff --git a/src/com/android/emergency/view/ViewInfoActivity.java b/src/com/android/emergency/view/ViewInfoActivity.java
index 2376677..ec08256 100644
--- a/src/com/android/emergency/view/ViewInfoActivity.java
+++ b/src/com/android/emergency/view/ViewInfoActivity.java
@@ -179,11 +179,6 @@
}
@Override
- public String getActivityTitle() {
- return getString(R.string.app_label);
- }
-
- @Override
protected ArrayList<Pair<String, Fragment>> setUpFragments() {
// Return only the fragments that have at least one piece of information set:
ArrayList<Pair<String, Fragment>> fragments = new ArrayList<>(2);