diff --git a/src/com/android/exchange/EasSyncService.java b/src/com/android/exchange/EasSyncService.java index 304f65ff0..20e1ea87b 100644 --- a/src/com/android/exchange/EasSyncService.java +++ b/src/com/android/exchange/EasSyncService.java @@ -1282,17 +1282,28 @@ public class EasSyncService extends AbstractSyncService { } if (pp.getRemoteWipe()) { // We've gotten a remote wipe command + SyncManager.alwaysLog("!!! Remote wipe request received"); + // Start by setting the account to security hold + sp.setAccountHoldFlag(mAccount, true); + // Force a stop to any running syncs for this account (except this one) + SyncManager.stopNonAccountMailboxSyncsForAccount(mAccount.mId); + // If we're not the admin, we can't do the wipe, so just return - if (!sp.isActiveAdmin()) return false; + if (!sp.isActiveAdmin()) { + SyncManager.alwaysLog("!!! Not device admin; can't wipe"); + return false; + } // First, we've got to acknowledge it, but wrap the wipe in try/catch so that // we wipe the device regardless of any errors in acknowledgment try { + SyncManager.alwaysLog("!!! Acknowledging remote wipe to server"); acknowledgeRemoteWipe(pp.getPolicyKey()); } catch (Exception e) { // Because remote wipe is such a high priority task, we don't want to // circumvent it if there's an exception in acknowledgment } // Then, tell SecurityPolicy to wipe the device + SyncManager.alwaysLog("!!! Executing remote wipe"); sp.remoteWipe(); return false; } else if (sp.isActive(ps)) { diff --git a/src/com/android/exchange/SyncManager.java b/src/com/android/exchange/SyncManager.java index bf8b8b0ba..3defdc5e3 100644 --- a/src/com/android/exchange/SyncManager.java +++ b/src/com/android/exchange/SyncManager.java @@ -1232,7 +1232,7 @@ public class SyncManager extends Service implements Runnable { * * @param acctId */ - static public void folderListReloaded(long acctId) { + static public void stopNonAccountMailboxSyncsForAccount(long acctId) { SyncManager syncManager = INSTANCE; if (syncManager != null) { syncManager.stopAccountSyncs(acctId, false); diff --git a/src/com/android/exchange/adapter/FolderSyncParser.java b/src/com/android/exchange/adapter/FolderSyncParser.java index ed97d315e..3706b18a2 100644 --- a/src/com/android/exchange/adapter/FolderSyncParser.java +++ b/src/com/android/exchange/adapter/FolderSyncParser.java @@ -114,7 +114,7 @@ public class FolderSyncParser extends AbstractSyncParser { mContentResolver.delete(Mailbox.CONTENT_URI, ALL_BUT_ACCOUNT_MAILBOX, new String[] {Long.toString(mAccountId)}); // Stop existing syncs and reconstruct _main - SyncManager.folderListReloaded(mAccountId); + SyncManager.stopNonAccountMailboxSyncsForAccount(mAccountId); res = true; resetFolders = true; } else {