From 6814e7aa870efcd0dea2b67df8d2cbfbdc0c438c Mon Sep 17 00:00:00 2001 From: Jatin Matani <jatinm@google.com> Date: Tue, 28 Oct 2014 13:44:00 -0700 Subject: [PATCH] Provide a preference to delete data from cloud. For now, it is a debug preference, but we may make this a proper user setting in the future. Thus note that the messaging is not final. Pref looks like : 1. https://screenshot.googleplex.com/OLxW0myWD9.png 2. https://screenshot.googleplex.com/YeqWYXGstw.png Bug: 18106936 Change-Id: I88bbc1a2ee0c23a48ff3972a91d57c218b10bb65 --- .../accounts/AccountStateChangedListener.java | 9 +++++ java/res/values/strings.xml | 5 +++ java/res/xml/prefs_screen_accounts.xml | 7 ++++ .../settings/AccountsSettingsFragment.java | 38 ++++++++++++++++++- 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/java-overridable/src/com/android/inputmethod/latin/accounts/AccountStateChangedListener.java b/java-overridable/src/com/android/inputmethod/latin/accounts/AccountStateChangedListener.java index c0a599c6e9..60d420fc31 100644 --- a/java-overridable/src/com/android/inputmethod/latin/accounts/AccountStateChangedListener.java +++ b/java-overridable/src/com/android/inputmethod/latin/accounts/AccountStateChangedListener.java @@ -63,4 +63,13 @@ public class AccountStateChangedListener { */ public static void forceSync(@Nullable String account) { } + + /** + * Forces an immediate deletion of user's data. + * This should only be used for debugging purposes. + * + * @param account the account to use for sync. + */ + public static void forceDelete(@Nullable String account) { + } } diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml index e1a72c476d..5eaac09a3b 100644 --- a/java/res/values/strings.xml +++ b/java/res/values/strings.xml @@ -61,6 +61,11 @@ <string name="cloud_sync_summary" translatable="false">Sync your personal dictionary across devices</string> <string name="cloud_sync_summary_disabled_signed_out" translatable="false">Select an account to enable sync</string> <string name="sync_now_title" translatable="false">[DEBUG] Sync Now</string> + <string name="clear_sync_data_title" translatable="false">[DEBUG] Delete Google Keyboard cloud data</string> + <string name="clear_sync_data_summary" translable="false">Deletes your synced data from Google</string> + <string name="clear_sync_data_confirmation" translable="false">Your synced data will be deleted. Are you sure?</string> + <string name="clear_sync_data_ok" translable="false">Delete</string> + <string name="clear_sync_data_cancel" translable="false">Cancel</string> <!-- Option name for including other IMEs in the language switch list [CHAR LIMIT=30] --> <string name="include_other_imes_in_language_switch_list">Switch to other input methods</string> diff --git a/java/res/xml/prefs_screen_accounts.xml b/java/res/xml/prefs_screen_accounts.xml index 41642bf08c..4624885476 100644 --- a/java/res/xml/prefs_screen_accounts.xml +++ b/java/res/xml/prefs_screen_accounts.xml @@ -48,4 +48,11 @@ android:persistent="false" android:title="@string/sync_now_title" android:dependency="pref_enable_cloud_sync" /> + + <!-- This preference (acts like a button) enables the user to clear data from the cloud. --> + <Preference android:key="pref_beanstalk_clear_data" + android:persistent="false" + android:title="@string/clear_sync_data_title" + android:summary="@string/clear_sync_data_summary" + android:dependency="pref_enable_cloud_sync" /> </PreferenceScreen> diff --git a/java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java b/java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java index 4bd15d037a..0232853f72 100644 --- a/java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java +++ b/java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java @@ -50,12 +50,15 @@ import javax.annotation.Nullable; */ public final class AccountsSettingsFragment extends SubScreenFragment { private static final String PREF_SYNC_NOW = "pref_beanstalk"; + private static final String PREF_CLEAR_SYNC_DATA = "pref_beanstalk_clear_data"; static final String PREF_ACCCOUNT_SWITCHER = "account_switcher"; private final DialogInterface.OnClickListener mAccountChangedListener = new AccountChangedListener(); private final Preference.OnPreferenceClickListener mSyncNowListener = new SyncNowListener(); + private final Preference.OnPreferenceClickListener mClearSyncDataListener = + new ClearSyncDataListener(); @Override public void onCreate(final Bundle icicle) { @@ -86,13 +89,18 @@ public final class AccountsSettingsFragment extends SubScreenFragment { removePreference(PREF_ACCCOUNT_SWITCHER); removePreference(PREF_ENABLE_CLOUD_SYNC); removePreference(PREF_SYNC_NOW); + removePreference(PREF_CLEAR_SYNC_DATA); } if (!ProductionFlags.ENABLE_PERSONAL_DICTIONARY_SYNC) { removePreference(PREF_ENABLE_CLOUD_SYNC); removePreference(PREF_SYNC_NOW); + removePreference(PREF_CLEAR_SYNC_DATA); } else { final Preference syncNowPreference = findPreference(PREF_SYNC_NOW); syncNowPreference.setOnPreferenceClickListener(mSyncNowListener); + + final Preference clearSyncDataPreference = findPreference(PREF_CLEAR_SYNC_DATA); + clearSyncDataPreference.setOnPreferenceClickListener(mClearSyncDataListener); } } @@ -136,7 +144,7 @@ public final class AccountsSettingsFragment extends SubScreenFragment { final String[] accountsForLogin = LoginAccountUtils.getAccountsForLogin(context); accountSwitcher.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override - public boolean onPreferenceClick(Preference preference) { + public boolean onPreferenceClick(final Preference preference) { if (accountsForLogin.length == 0) { // TODO: Handle account addition. Toast.makeText(getActivity(), getString(R.string.account_select_cancel), @@ -229,7 +237,7 @@ public final class AccountsSettingsFragment extends SubScreenFragment { */ class AccountChangedListener implements DialogInterface.OnClickListener { @Override - public void onClick(DialogInterface dialog, int which) { + public void onClick(final DialogInterface dialog, final int which) { final String oldAccount = getSignedInAccountName(); switch (which) { case DialogInterface.BUTTON_POSITIVE: // Signed in @@ -263,4 +271,30 @@ public final class AccountsSettingsFragment extends SubScreenFragment { return true; } } + + /** + * Listener that initiates the process of deleting user's data from the cloud. + */ + class ClearSyncDataListener implements Preference.OnPreferenceClickListener { + @Override + public boolean onPreferenceClick(final Preference preference) { + final AlertDialog confirmationDialog = new AlertDialog.Builder(getActivity()) + .setTitle(R.string.clear_sync_data_title) + .setMessage(R.string.clear_sync_data_confirmation) + .setPositiveButton(R.string.clear_sync_data_ok, + new DialogInterface.OnClickListener() { + @Override + public void onClick(final DialogInterface dialog, final int which) { + if (which == DialogInterface.BUTTON_POSITIVE) { + AccountStateChangedListener.forceDelete( + getSignedInAccountName()); + } + } + }) + .setNegativeButton(R.string.clear_sync_data_cancel, null /* OnClickListener */) + .create(); + confirmationDialog.show(); + return true; + } + } } -- GitLab