Merge "Fix remote wipe with mobile sync server"

This commit is contained in:
Marc Blank 2010-10-11 11:15:12 -07:00 committed by Android (Google) Code Review
commit 92f30bedf2
3 changed files with 15 additions and 3 deletions

View File

@ -1391,17 +1391,29 @@ public class EasSyncService extends AbstractSyncService {
sp.updatePolicies(mAccount.mId); sp.updatePolicies(mAccount.mId);
if (pp.getRemoteWipe()) { if (pp.getRemoteWipe()) {
// We've gotten a remote wipe command // We've gotten a remote wipe command
ExchangeService.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)
ExchangeService.stopNonAccountMailboxSyncsForAccount(mAccount.mId);
// If we're not the admin, we can't do the wipe, so just return // If we're not the admin, we can't do the wipe, so just return
if (!sp.isActiveAdmin()) return false; if (!sp.isActiveAdmin()) {
ExchangeService.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 // 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 // we wipe the device regardless of any errors in acknowledgment
try { try {
ExchangeService.alwaysLog("!!! Acknowledging remote wipe to server");
acknowledgeRemoteWipe(pp.getPolicyKey()); acknowledgeRemoteWipe(pp.getPolicyKey());
} catch (Exception e) { } catch (Exception e) {
// Because remote wipe is such a high priority task, we don't want to // Because remote wipe is such a high priority task, we don't want to
// circumvent it if there's an exception in acknowledgment // circumvent it if there's an exception in acknowledgment
} }
// Then, tell SecurityPolicy to wipe the device // Then, tell SecurityPolicy to wipe the device
ExchangeService.alwaysLog("!!! Executing remote wipe");
sp.remoteWipe(); sp.remoteWipe();
return false; return false;
} else if (sp.isActive(ps)) { } else if (sp.isActive(ps)) {

View File

@ -1288,7 +1288,7 @@ public class ExchangeService extends Service implements Runnable {
* *
* @param acctId * @param acctId
*/ */
static public void folderListReloaded(long acctId) { static public void stopNonAccountMailboxSyncsForAccount(long acctId) {
ExchangeService exchangeService = INSTANCE; ExchangeService exchangeService = INSTANCE;
if (exchangeService != null) { if (exchangeService != null) {
exchangeService.stopAccountSyncs(acctId, false); exchangeService.stopAccountSyncs(acctId, false);

View File

@ -118,7 +118,7 @@ public class FolderSyncParser extends AbstractSyncParser {
mContentResolver.delete(Mailbox.CONTENT_URI, ALL_BUT_ACCOUNT_MAILBOX, mContentResolver.delete(Mailbox.CONTENT_URI, ALL_BUT_ACCOUNT_MAILBOX,
new String[] {Long.toString(mAccountId)}); new String[] {Long.toString(mAccountId)});
// Stop existing syncs and reconstruct _main // Stop existing syncs and reconstruct _main
ExchangeService.folderListReloaded(mAccountId); ExchangeService.stopNonAccountMailboxSyncsForAccount(mAccountId);
res = true; res = true;
resetFolders = true; resetFolders = true;
} else { } else {