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 @@ -247,6 +247,28 @@ public class EmailServiceProxy extends ServiceProxy implements IEmailService { }, "sendMeetingResponse"); } + /** + * 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 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 @@ -380,6 +380,11 @@ public abstract class EmailServiceStub extends IEmailService.Stub implements IEm // Not required } + @Override + public void deleteAccountPIMData(final String emailAddress) throws RemoteException { + AccountReconciler.reconcileAccounts(mContext); + } + @Override public int searchMessages(long accountId, SearchParams params, long destMailboxId) throws RemoteException { 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 @@ -679,6 +679,10 @@ public class EmailServiceUtils { public void sendMeetingResponse(long messageId, int response) throws RemoteException { } + @Override + public void deleteAccountPIMData(final String emailAddress) throws RemoteException { + } + @Override public int searchMessages(long accountId, SearchParams params, long destMailboxId) throws RemoteException {