diff options
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; |