Loading services/core/java/com/android/server/content/SyncManager.java +15 −1 Original line number Diff line number Diff line Loading @@ -1402,12 +1402,24 @@ public class SyncManager { } } private void restoreLostPeriodicSyncsIfNeeded(int userId) { List<SyncOperation> periodicSyncs = new ArrayList<SyncOperation>(); for (SyncOperation sync : getAllPendingSyncs()) { if (sync.isPeriodic && sync.target.userId == userId) { periodicSyncs.add(sync); } } mSyncStorageEngine.restorePeriodicSyncsIfNeededForUser(userId, periodicSyncs); } private void onUserUnlocked(int userId) { // Make sure that accounts we're about to use are valid. AccountManagerService.getSingleton().validateAccounts(userId); mSyncAdapters.invalidateCache(userId); restoreLostPeriodicSyncsIfNeeded(userId); EndPoint target = new EndPoint(null, null, userId); updateRunningAccounts(target); Loading Loading @@ -2578,9 +2590,11 @@ public class SyncManager { } } // Cancel all jobs from non-existent accounts. AccountAndUser[] allAccounts = AccountManagerService.getSingleton().getAllAccounts(); List<SyncOperation> ops = getAllPendingSyncs(); for (SyncOperation op: ops) { if (!containsAccountAndUser(accounts, op.target.account, op.target.userId)) { if (!containsAccountAndUser(allAccounts, op.target.account, op.target.userId)) { getJobScheduler().cancel(op.jobId); } } Loading services/core/java/com/android/server/content/SyncStorageEngine.java +29 −0 Original line number Diff line number Diff line Loading @@ -826,6 +826,35 @@ public class SyncStorageEngine extends Handler { return true; } /** * STOPSHIP This is a temporary workaround and should be removed before shipping: b/28052438 */ void restorePeriodicSyncsIfNeededForUser(int userHandle, List<SyncOperation> periodicSyncs) { if (mPeriodicSyncAddedListener == null) { return; } synchronized (mAuthorities) { for (int i = 0; i < mAuthorities.size(); i++) { AuthorityInfo authority = mAuthorities.valueAt(i); if (authority.target.userId == userHandle && authority.enabled) { boolean periodicSyncAlreadyExists = false; for (SyncOperation sync : periodicSyncs) { if (authority.target.matchesSpec(sync.target)) { periodicSyncAlreadyExists = true; break; } } // The periodic sync must have been lost due to previous bug. if (!periodicSyncAlreadyExists) { mPeriodicSyncAddedListener.onPeriodicSyncAdded(authority.target, new Bundle(), DEFAULT_POLL_FREQUENCY_SECONDS, calculateDefaultFlexTime(DEFAULT_POLL_FREQUENCY_SECONDS)); } } } } } public void setMasterSyncAutomatically(boolean flag, int userId) { synchronized (mAuthorities) { Boolean auto = mMasterSyncAutomatically.get(userId); Loading Loading
services/core/java/com/android/server/content/SyncManager.java +15 −1 Original line number Diff line number Diff line Loading @@ -1402,12 +1402,24 @@ public class SyncManager { } } private void restoreLostPeriodicSyncsIfNeeded(int userId) { List<SyncOperation> periodicSyncs = new ArrayList<SyncOperation>(); for (SyncOperation sync : getAllPendingSyncs()) { if (sync.isPeriodic && sync.target.userId == userId) { periodicSyncs.add(sync); } } mSyncStorageEngine.restorePeriodicSyncsIfNeededForUser(userId, periodicSyncs); } private void onUserUnlocked(int userId) { // Make sure that accounts we're about to use are valid. AccountManagerService.getSingleton().validateAccounts(userId); mSyncAdapters.invalidateCache(userId); restoreLostPeriodicSyncsIfNeeded(userId); EndPoint target = new EndPoint(null, null, userId); updateRunningAccounts(target); Loading Loading @@ -2578,9 +2590,11 @@ public class SyncManager { } } // Cancel all jobs from non-existent accounts. AccountAndUser[] allAccounts = AccountManagerService.getSingleton().getAllAccounts(); List<SyncOperation> ops = getAllPendingSyncs(); for (SyncOperation op: ops) { if (!containsAccountAndUser(accounts, op.target.account, op.target.userId)) { if (!containsAccountAndUser(allAccounts, op.target.account, op.target.userId)) { getJobScheduler().cancel(op.jobId); } } Loading
services/core/java/com/android/server/content/SyncStorageEngine.java +29 −0 Original line number Diff line number Diff line Loading @@ -826,6 +826,35 @@ public class SyncStorageEngine extends Handler { return true; } /** * STOPSHIP This is a temporary workaround and should be removed before shipping: b/28052438 */ void restorePeriodicSyncsIfNeededForUser(int userHandle, List<SyncOperation> periodicSyncs) { if (mPeriodicSyncAddedListener == null) { return; } synchronized (mAuthorities) { for (int i = 0; i < mAuthorities.size(); i++) { AuthorityInfo authority = mAuthorities.valueAt(i); if (authority.target.userId == userHandle && authority.enabled) { boolean periodicSyncAlreadyExists = false; for (SyncOperation sync : periodicSyncs) { if (authority.target.matchesSpec(sync.target)) { periodicSyncAlreadyExists = true; break; } } // The periodic sync must have been lost due to previous bug. if (!periodicSyncAlreadyExists) { mPeriodicSyncAddedListener.onPeriodicSyncAdded(authority.target, new Bundle(), DEFAULT_POLL_FREQUENCY_SECONDS, calculateDefaultFlexTime(DEFAULT_POLL_FREQUENCY_SECONDS)); } } } } } public void setMasterSyncAutomatically(boolean flag, int userId) { synchronized (mAuthorities) { Boolean auto = mMasterSyncAutomatically.get(userId); Loading