summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJorge Ruesga <jorge@ruesga.com>2014-06-30 20:52:24 +0000
committerGerrit Code Review <gerrit@cyanogenmod.org>2014-06-30 20:52:24 +0000
commitf5359925f5492d399190f8fed3884d9b45f46eac (patch)
tree5bb305c3b85f9efcaec35a5ff0b0763746b6e453
parent8a4d46b82d447cf0f68c14f14fab2cc419789d73 (diff)
parent6b1870214493abb004c296467fc08bdbdfb7f27d (diff)
downloadandroid_packages_apps_Email-cm-11.0-XNPH33R-bacon-3628510d76.tar.gz
android_packages_apps_Email-cm-11.0-XNPH33R-bacon-3628510d76.tar.bz2
android_packages_apps_Email-cm-11.0-XNPH33R-bacon-3628510d76.zip
Merge "email: allow to remove an email account" into cm-11.0cm-11.0-XNPH33R-bacon-3628510d76cm-11.0-XNPH30O-bacon-4f280f505a
-rw-r--r--res/values/cm_strings.xml12
-rwxr-xr-xres/xml/account_settings_preferences.xml10
-rw-r--r--src/com/android/email/activity/setup/AccountSettingsFragment.java90
3 files changed, 111 insertions, 1 deletions
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
index b52549b5a..0be05c7e0 100644
--- a/res/values/cm_strings.xml
+++ b/res/values/cm_strings.xml
@@ -22,4 +22,16 @@
<string name="account_setup_options_mail_check_frequency_2hour">Every 2 hours</string>
<string name="account_setup_options_mail_check_frequency_4hour">Every 4 hours</string>
<string name="account_setup_options_mail_check_frequency_1day">Every day</string>
+
+ <!-- Account settings -->
+ <string name="account_settings">Account settings</string>
+
+ <!-- Delete account -->
+ <string name="delete_account_title">Delete account</string>
+ <string name="delete_account_summary">Delete this account and all its settings and data</string>
+ <string name="delete_account_confirmation_msg">This will delete all the settings and the emails
+ of the account <xliff:g id="account">%s</xliff:g>. This operation cannot be undone.\n\nContinue?</string>
+ <string name="deleting_account_msg">Deleting account\u2026</string>
+ <string name="delete_account_failed">Couldn\'t delete the account</string>
+
</resources>
diff --git a/res/xml/account_settings_preferences.xml b/res/xml/account_settings_preferences.xml
index 142a6c9b8..f0e6586cb 100755
--- a/res/xml/account_settings_preferences.xml
+++ b/res/xml/account_settings_preferences.xml
@@ -171,4 +171,14 @@
android:summary="@string/account_settings_retry_summary" />
</PreferenceCategory>
+ <PreferenceCategory
+ android:key="account_settings"
+ android:title="@string/account_settings">
+
+ <Preference
+ android:key="delete_account"
+ android:title="@string/delete_account_title"
+ android:summary="@string/delete_account_summary" />
+ </PreferenceCategory>
+
</PreferenceScreen>
diff --git a/src/com/android/email/activity/setup/AccountSettingsFragment.java b/src/com/android/email/activity/setup/AccountSettingsFragment.java
index eb6df6b8b..71b6958ec 100644
--- a/src/com/android/email/activity/setup/AccountSettingsFragment.java
+++ b/src/com/android/email/activity/setup/AccountSettingsFragment.java
@@ -16,10 +16,13 @@
package com.android.email.activity.setup;
+import android.accounts.AccountManager;
import android.app.Activity;
+import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
@@ -28,11 +31,14 @@ import android.media.RingtoneManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
import android.os.Vibrator;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceCategory;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceFragment;
@@ -42,6 +48,8 @@ import android.provider.Settings;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuInflater;
+import android.view.Window;
+import android.widget.Toast;
import com.android.email.R;
import com.android.email.SecurityPolicy;
@@ -78,7 +86,7 @@ import java.util.Map;
* could reduce flicker.
*/
public class AccountSettingsFragment extends PreferenceFragment
- implements Preference.OnPreferenceChangeListener {
+ implements OnPreferenceChangeListener, OnPreferenceClickListener {
// Keys used for arguments bundle
private static final String BUNDLE_KEY_ACCOUNT_ID = "AccountSettingsFragment.AccountId";
@@ -108,9 +116,15 @@ public class AccountSettingsFragment extends PreferenceFragment
private static final String PREFERENCE_SYSTEM_FOLDERS_TRASH = "system_folders_trash";
private static final String PREFERENCE_SYSTEM_FOLDERS_SENT = "system_folders_sent";
+ private static final String PREFERENCE_DELETE_ACCOUNT = "delete_account";
+
+
// Request code to start different activities.
private static final int RINGTONE_REQUEST_CODE = 0;
+ // Message codes
+ private static final int MSG_DELETE_ACCOUNT = 0;
+
private EditTextPreference mAccountDescription;
private EditTextPreference mAccountName;
private EditTextPreference mAccountSignature;
@@ -125,8 +139,10 @@ public class AccountSettingsFragment extends PreferenceFragment
private CheckBoxPreference mSyncContacts;
private CheckBoxPreference mSyncCalendar;
private CheckBoxPreference mSyncEmail;
+ private Preference mDeleteAccount;
private Context mContext;
+ private Handler mHandler;
/**
* mAccount is email-specific, transition to using mUiAccount instead
@@ -170,6 +186,16 @@ public class AccountSettingsFragment extends PreferenceFragment
@Override public void abandonEdit() {}
}
+ private final android.os.Handler.Callback mHandlerCallback = new android.os.Handler.Callback() {
+ @Override
+ public boolean handleMessage(Message msg) {
+ if (msg.what == MSG_DELETE_ACCOUNT) {
+ deleteAccount();
+ }
+ return false;
+ }
+ };
+
/**
* If launching with an arguments bundle, use this method to build the arguments.
*/
@@ -200,6 +226,7 @@ public class AccountSettingsFragment extends PreferenceFragment
LogUtils.d(Logging.LOG_TAG, "AccountSettingsFragment onCreate");
}
super.onCreate(savedInstanceState);
+ mHandler = new Handler(mHandlerCallback);
setHasOptionsMenu(true);
@@ -406,6 +433,30 @@ public class AccountSettingsFragment extends PreferenceFragment
}
}
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ final String key = preference.getKey();
+ if (key.equals(PREFERENCE_DELETE_ACCOUNT)){
+ AlertDialog.Builder alertBuilder = new AlertDialog.Builder(mContext);
+ alertBuilder.setTitle(R.string.delete_account_title);
+ String msg = getString(R.string.delete_account_confirmation_msg, mAccountEmail);
+ alertBuilder.setMessage(msg);
+ alertBuilder.setCancelable(true);
+ final DialogInterface.OnClickListener cb = new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ mHandler.dispatchMessage(Message.obtain(mHandler, MSG_DELETE_ACCOUNT));
+ }
+ };
+ alertBuilder.setPositiveButton(android.R.string.ok, cb);
+ alertBuilder.setNegativeButton(android.R.string.cancel, null);
+ alertBuilder.create().show();
+ return true;
+ }
+ return false;
+ }
+
/**
* Called when the fragment is no longer in use.
*/
@@ -918,6 +969,9 @@ public class AccountSettingsFragment extends PreferenceFragment
dataUsageCategory.removePreference(mSyncCalendar);
dataUsageCategory.removePreference(mSyncEmail);
}
+
+ mDeleteAccount = findPreference(PREFERENCE_DELETE_ACCOUNT);
+ mDeleteAccount.setOnPreferenceClickListener(this);
}
/**
@@ -1023,4 +1077,38 @@ public class AccountSettingsFragment extends PreferenceFragment
intent.putExtra("android.intent.extra.ringtone.DIALOG_THEME", R.style.Theme_RingtoneDialog);
startActivityForResult(intent, RINGTONE_REQUEST_CODE);
}
+
+ private void deleteAccount() {
+ // Display an alert dialog to advise the user that the operation is in progress
+ AlertDialog.Builder alertBuilder = new AlertDialog.Builder(mContext);
+ alertBuilder.setMessage(R.string.deleting_account_msg);
+ alertBuilder.setCancelable(false);
+ AlertDialog dialog = alertBuilder.create();
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.show();
+
+ try {
+ ContentResolver resolver = mContext.getContentResolver();
+ int ret = resolver.delete(mUiAccount.uri, null, null);
+ if (ret <= 0) {
+ Toast.makeText(mContext, R.string.delete_account_failed, Toast.LENGTH_SHORT).show();
+ return;
+ }
+
+ // And now we remove the system account that holds the email service
+ AccountManager accountManager = (AccountManager)getActivity().getSystemService(
+ Context.ACCOUNT_SERVICE);
+ android.accounts.Account account = mUiAccount.getAccountManagerAccount();
+ NotificationUtils.clearAccountNotifications(mContext, account);
+ accountManager.removeAccount(account, null, null);
+
+ // We deleted the account, so we need to clear the activity stack, so just show
+ // the settings fragment and clear the activity stack
+ Intent intent = new Intent(getActivity(), AccountSettings.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ getActivity().startActivity(intent);
+ } finally {
+ dialog.dismiss();
+ }
+ }
}