summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--emailcommon/src/com/android/emailcommon/service/EmailServiceProxy.java22
-rw-r--r--emailcommon/src/com/android/emailcommon/service/IEmailService.aidl3
-rw-r--r--src/com/android/email/provider/EmailProvider.java13
-rw-r--r--src/com/android/email/service/EmailServiceStub.java5
-rw-r--r--src/com/android/email/service/EmailServiceUtils.java4
5 files changed, 44 insertions, 3 deletions
diff --git a/emailcommon/src/com/android/emailcommon/service/EmailServiceProxy.java b/emailcommon/src/com/android/emailcommon/service/EmailServiceProxy.java
index ce8b05d21..e10fee5b6 100644
--- a/emailcommon/src/com/android/emailcommon/service/EmailServiceProxy.java
+++ b/emailcommon/src/com/android/emailcommon/service/EmailServiceProxy.java
@@ -248,6 +248,28 @@ public class EmailServiceProxy extends ServiceProxy implements IEmailService {
}
/**
+ * Request the service to delete the account's PIM (personal information management) data. This
+ * data includes any data that is 1) associated with the account and 2) created/stored by the
+ * service or its sync adapters and 3) not stored in the EmailProvider database (e.g. contact
+ * and calendar information).
+ *
+ * @param emailAddress the email address for the account whose data should be deleted
+ */
+ @Override
+ public void deleteAccountPIMData(final String emailAddress) throws RemoteException {
+ setTask(new ProxyTask() {
+ @Override
+ public void run() throws RemoteException {
+ mService.deleteAccountPIMData(emailAddress);
+ }
+ }, "deleteAccountPIMData");
+ // This can be called when deleting accounts. After making this call, the caller will
+ // ask for account reconciliation, which will kill the processes. We wait for completion
+ // to avoid the race.
+ waitForCompletion();
+ }
+
+ /**
* Search for messages given a query string. The string is interpreted as the logical AND of
* terms separated by white space. The search is performed on the specified mailbox in the
* specified account (including subfolders, as specified by the includeSubfolders parameter).
diff --git a/emailcommon/src/com/android/emailcommon/service/IEmailService.aidl b/emailcommon/src/com/android/emailcommon/service/IEmailService.aidl
index aa4e68b33..7b9b4f4e7 100644
--- a/emailcommon/src/com/android/emailcommon/service/IEmailService.aidl
+++ b/emailcommon/src/com/android/emailcommon/service/IEmailService.aidl
@@ -53,4 +53,7 @@ interface IEmailService {
// Service control operations (i.e. does not generate a client-server message).
oneway void setLogging(int on);
+
+ // Needs to get moved into Email since this is NOT a client-server command.
+ void deleteAccountPIMData(String emailAddress);
}
diff --git a/src/com/android/email/provider/EmailProvider.java b/src/com/android/email/provider/EmailProvider.java
index fa34c2dff..acd04b034 100644
--- a/src/com/android/email/provider/EmailProvider.java
+++ b/src/com/android/email/provider/EmailProvider.java
@@ -5947,10 +5947,17 @@ public class EmailProvider extends ContentProvider {
cv.putNull(AccountColumns.SYNC_KEY);
resolver.update(Account.CONTENT_URI, cv, Account.ID_SELECTION, accountIdArgs);
- // Delete the account from the Android account manager.
- // This will delete any contacts and calendar data, stop syncs, etc.
+ // Delete PIM data (contacts, calendar), stop syncs, etc. if applicable
if (emailAddress != null) {
- AccountReconciler.reconcileAccounts(context);
+ final IEmailService service =
+ EmailServiceUtils.getServiceForAccount(context, accountId);
+ if (service != null) {
+ try {
+ service.deleteAccountPIMData(emailAddress);
+ } catch (final RemoteException e) {
+ // Can't do anything about this
+ }
+ }
}
}
diff --git a/src/com/android/email/service/EmailServiceStub.java b/src/com/android/email/service/EmailServiceStub.java
index f9d7e673b..cc7a3bfbe 100644
--- a/src/com/android/email/service/EmailServiceStub.java
+++ b/src/com/android/email/service/EmailServiceStub.java
@@ -381,6 +381,11 @@ public abstract class EmailServiceStub extends IEmailService.Stub implements IEm
}
@Override
+ public void deleteAccountPIMData(final String emailAddress) throws RemoteException {
+ AccountReconciler.reconcileAccounts(mContext);
+ }
+
+ @Override
public int searchMessages(long accountId, SearchParams params, long destMailboxId)
throws RemoteException {
// Not required
diff --git a/src/com/android/email/service/EmailServiceUtils.java b/src/com/android/email/service/EmailServiceUtils.java
index dd091867f..7fb0e7dfc 100644
--- a/src/com/android/email/service/EmailServiceUtils.java
+++ b/src/com/android/email/service/EmailServiceUtils.java
@@ -680,6 +680,10 @@ public class EmailServiceUtils {
}
@Override
+ public void deleteAccountPIMData(final String emailAddress) throws RemoteException {
+ }
+
+ @Override
public int searchMessages(long accountId, SearchParams params, long destMailboxId)
throws RemoteException {
return 0;