Loading core/java/android/content/SyncManager.java +53 −12 Original line number Diff line number Diff line Loading @@ -16,10 +16,6 @@ package android.content; import com.android.internal.R; import com.google.android.collect.Lists; import com.google.android.collect.Maps; import android.accounts.Account; import android.accounts.AccountAndUser; import android.accounts.AccountManager; Loading @@ -27,7 +23,6 @@ import android.accounts.AccountManagerService; import android.accounts.OnAccountsUpdateListener; import android.app.ActivityManager; import android.app.AlarmManager; import android.app.AppGlobals; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; Loading Loading @@ -62,6 +57,11 @@ import android.util.EventLog; import android.util.Log; import android.util.Pair; import com.android.internal.R; import com.google.android.collect.Lists; import com.google.android.collect.Maps; import com.google.android.collect.Sets; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; Loading @@ -75,6 +75,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; import java.util.concurrent.CountDownLatch; /** Loading Loading @@ -151,7 +152,7 @@ public class SyncManager implements OnAccountsUpdateListener { private AlarmManager mAlarmService = null; private SyncStorageEngine mSyncStorageEngine; public SyncQueue mSyncQueue; final public SyncQueue mSyncQueue; protected final ArrayList<ActiveSyncContext> mActiveSyncContexts = Lists.newArrayList(); Loading Loading @@ -328,7 +329,21 @@ public class SyncManager implements OnAccountsUpdateListener { private BroadcastReceiver mUserIntentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1); if (Intent.ACTION_USER_REMOVED.equals(action)) { Log.i(TAG, "User removed - cleanup: u" + userId); onUserRemoved(intent); } else if (Intent.ACTION_USER_STARTED.equals(action)) { Log.i(TAG, "User started - check alarms: u" + userId); sendCheckAlarmsMessage(); } else if (Intent.ACTION_USER_STOPPED.equals(action)) { Log.i(TAG, "User stopped - stop syncs: u" + userId); cancelActiveSync( null /* any account */, userId, null /* any authority */); } } }; Loading Loading @@ -401,7 +416,9 @@ public class SyncManager implements OnAccountsUpdateListener { intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_USER_REMOVED); mContext.registerReceiver(mUserIntentReceiver, intentFilter); intentFilter.addAction(Intent.ACTION_USER_STARTED); mContext.registerReceiverAsUser( mUserIntentReceiver, UserHandle.ALL, intentFilter, null, null); if (!factoryTest) { mNotificationMgr = (NotificationManager) Loading Loading @@ -897,7 +914,10 @@ public class SyncManager implements OnAccountsUpdateListener { private void onUserRemoved(Intent intent) { int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1); if (userId == -1) return; removeUser(userId); } private void removeUser(int userId) { // Clean up the storage engine database mSyncStorageEngine.doDatabaseCleanup(new Account[0], userId); onAccountsUpdated(null); Loading Loading @@ -1267,7 +1287,8 @@ public class SyncManager implements OnAccountsUpdateListener { final String accountKey; if (authority != null) { authorityName = authority.authority; accountKey = authority.account.name + "/" + authority.account.type; accountKey = authority.account.name + "/" + authority.account.type + " u" + authority.userId; } else { authorityName = "Unknown"; accountKey = "Unknown"; Loading Loading @@ -1394,7 +1415,8 @@ public class SyncManager implements OnAccountsUpdateListener { final String accountKey; if (authority != null) { authorityName = authority.authority; accountKey = authority.account.name + "/" + authority.account.type; accountKey = authority.account.name + "/" + authority.account.type + " u" + authority.userId; } else { authorityName = "Unknown"; accountKey = "Unknown"; Loading Loading @@ -1924,6 +1946,10 @@ public class SyncManager implements OnAccountsUpdateListener { } Iterator<SyncOperation> operationIterator = mSyncQueue.mOperationsMap.values().iterator(); final ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); final Set<Integer> removedUsers = Sets.newHashSet(); while (operationIterator.hasNext()) { final SyncOperation op = operationIterator.next(); Loading @@ -1943,6 +1969,15 @@ public class SyncManager implements OnAccountsUpdateListener { continue; } // if the user in not running, drop the request if (!activityManager.isUserRunning(op.userId)) { final UserInfo userInfo = mUserManager.getUserInfo(op.userId); if (userInfo == null) { removedUsers.add(op.userId); } continue; } // if the next run time is in the future, meaning there are no syncs ready // to run, return the time if (op.effectiveRunTime > now) { Loading Loading @@ -1983,6 +2018,12 @@ public class SyncManager implements OnAccountsUpdateListener { operations.add(op); } for (Integer user : removedUsers) { // if it's still removed if (mUserManager.getUserInfo(user) == null) { removeUser(user); } } } // find the next operation to dispatch, if one is ready Loading Loading @@ -2168,13 +2209,13 @@ public class SyncManager implements OnAccountsUpdateListener { new ArrayList<ActiveSyncContext>(mActiveSyncContexts); for (ActiveSyncContext activeSyncContext : activeSyncs) { if (activeSyncContext != null) { // if an authority was specified then only cancel the sync if it matches // if an account was specified then only cancel the sync if it matches if (account != null) { if (!account.equals(activeSyncContext.mSyncOperation.account)) { continue; } } // if an account was specified then only cancel the sync if it matches // if an authority was specified then only cancel the sync if it matches if (authority != null) { if (!authority.equals(activeSyncContext.mSyncOperation.authority)) { continue; Loading core/java/android/content/SyncOperation.java +12 −7 Original line number Diff line number Diff line Loading @@ -95,13 +95,18 @@ public class SyncOperation implements Comparable { } public String dump(boolean useOneLine) { StringBuilder sb = new StringBuilder(); sb.append(account.name); sb.append(" (" + account.type + ")"); sb.append(", " + authority); sb.append(", "); sb.append(SyncStorageEngine.SOURCES[syncSource]); sb.append(", earliestRunTime " + earliestRunTime); StringBuilder sb = new StringBuilder() .append(account.name) .append(" u") .append(userId).append(" (") .append(account.type) .append(")") .append(", ") .append(authority) .append(", ") .append(SyncStorageEngine.SOURCES[syncSource]) .append(", earliestRunTime ") .append(earliestRunTime); if (expedited) { sb.append(", EXPEDITED"); } Loading Loading
core/java/android/content/SyncManager.java +53 −12 Original line number Diff line number Diff line Loading @@ -16,10 +16,6 @@ package android.content; import com.android.internal.R; import com.google.android.collect.Lists; import com.google.android.collect.Maps; import android.accounts.Account; import android.accounts.AccountAndUser; import android.accounts.AccountManager; Loading @@ -27,7 +23,6 @@ import android.accounts.AccountManagerService; import android.accounts.OnAccountsUpdateListener; import android.app.ActivityManager; import android.app.AlarmManager; import android.app.AppGlobals; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; Loading Loading @@ -62,6 +57,11 @@ import android.util.EventLog; import android.util.Log; import android.util.Pair; import com.android.internal.R; import com.google.android.collect.Lists; import com.google.android.collect.Maps; import com.google.android.collect.Sets; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; Loading @@ -75,6 +75,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; import java.util.concurrent.CountDownLatch; /** Loading Loading @@ -151,7 +152,7 @@ public class SyncManager implements OnAccountsUpdateListener { private AlarmManager mAlarmService = null; private SyncStorageEngine mSyncStorageEngine; public SyncQueue mSyncQueue; final public SyncQueue mSyncQueue; protected final ArrayList<ActiveSyncContext> mActiveSyncContexts = Lists.newArrayList(); Loading Loading @@ -328,7 +329,21 @@ public class SyncManager implements OnAccountsUpdateListener { private BroadcastReceiver mUserIntentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1); if (Intent.ACTION_USER_REMOVED.equals(action)) { Log.i(TAG, "User removed - cleanup: u" + userId); onUserRemoved(intent); } else if (Intent.ACTION_USER_STARTED.equals(action)) { Log.i(TAG, "User started - check alarms: u" + userId); sendCheckAlarmsMessage(); } else if (Intent.ACTION_USER_STOPPED.equals(action)) { Log.i(TAG, "User stopped - stop syncs: u" + userId); cancelActiveSync( null /* any account */, userId, null /* any authority */); } } }; Loading Loading @@ -401,7 +416,9 @@ public class SyncManager implements OnAccountsUpdateListener { intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_USER_REMOVED); mContext.registerReceiver(mUserIntentReceiver, intentFilter); intentFilter.addAction(Intent.ACTION_USER_STARTED); mContext.registerReceiverAsUser( mUserIntentReceiver, UserHandle.ALL, intentFilter, null, null); if (!factoryTest) { mNotificationMgr = (NotificationManager) Loading Loading @@ -897,7 +914,10 @@ public class SyncManager implements OnAccountsUpdateListener { private void onUserRemoved(Intent intent) { int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1); if (userId == -1) return; removeUser(userId); } private void removeUser(int userId) { // Clean up the storage engine database mSyncStorageEngine.doDatabaseCleanup(new Account[0], userId); onAccountsUpdated(null); Loading Loading @@ -1267,7 +1287,8 @@ public class SyncManager implements OnAccountsUpdateListener { final String accountKey; if (authority != null) { authorityName = authority.authority; accountKey = authority.account.name + "/" + authority.account.type; accountKey = authority.account.name + "/" + authority.account.type + " u" + authority.userId; } else { authorityName = "Unknown"; accountKey = "Unknown"; Loading Loading @@ -1394,7 +1415,8 @@ public class SyncManager implements OnAccountsUpdateListener { final String accountKey; if (authority != null) { authorityName = authority.authority; accountKey = authority.account.name + "/" + authority.account.type; accountKey = authority.account.name + "/" + authority.account.type + " u" + authority.userId; } else { authorityName = "Unknown"; accountKey = "Unknown"; Loading Loading @@ -1924,6 +1946,10 @@ public class SyncManager implements OnAccountsUpdateListener { } Iterator<SyncOperation> operationIterator = mSyncQueue.mOperationsMap.values().iterator(); final ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); final Set<Integer> removedUsers = Sets.newHashSet(); while (operationIterator.hasNext()) { final SyncOperation op = operationIterator.next(); Loading @@ -1943,6 +1969,15 @@ public class SyncManager implements OnAccountsUpdateListener { continue; } // if the user in not running, drop the request if (!activityManager.isUserRunning(op.userId)) { final UserInfo userInfo = mUserManager.getUserInfo(op.userId); if (userInfo == null) { removedUsers.add(op.userId); } continue; } // if the next run time is in the future, meaning there are no syncs ready // to run, return the time if (op.effectiveRunTime > now) { Loading Loading @@ -1983,6 +2018,12 @@ public class SyncManager implements OnAccountsUpdateListener { operations.add(op); } for (Integer user : removedUsers) { // if it's still removed if (mUserManager.getUserInfo(user) == null) { removeUser(user); } } } // find the next operation to dispatch, if one is ready Loading Loading @@ -2168,13 +2209,13 @@ public class SyncManager implements OnAccountsUpdateListener { new ArrayList<ActiveSyncContext>(mActiveSyncContexts); for (ActiveSyncContext activeSyncContext : activeSyncs) { if (activeSyncContext != null) { // if an authority was specified then only cancel the sync if it matches // if an account was specified then only cancel the sync if it matches if (account != null) { if (!account.equals(activeSyncContext.mSyncOperation.account)) { continue; } } // if an account was specified then only cancel the sync if it matches // if an authority was specified then only cancel the sync if it matches if (authority != null) { if (!authority.equals(activeSyncContext.mSyncOperation.authority)) { continue; Loading
core/java/android/content/SyncOperation.java +12 −7 Original line number Diff line number Diff line Loading @@ -95,13 +95,18 @@ public class SyncOperation implements Comparable { } public String dump(boolean useOneLine) { StringBuilder sb = new StringBuilder(); sb.append(account.name); sb.append(" (" + account.type + ")"); sb.append(", " + authority); sb.append(", "); sb.append(SyncStorageEngine.SOURCES[syncSource]); sb.append(", earliestRunTime " + earliestRunTime); StringBuilder sb = new StringBuilder() .append(account.name) .append(" u") .append(userId).append(" (") .append(account.type) .append(")") .append(", ") .append(authority) .append(", ") .append(SyncStorageEngine.SOURCES[syncSource]) .append(", earliestRunTime ") .append(earliestRunTime); if (expedited) { sb.append(", EXPEDITED"); } Loading