Merge "Stop user faster and clear stale broadcasts" into nyc-dev
am: ec6faca007
* commit 'ec6faca0078263dfbf2b41d11cdb14586e40fd75':
Stop user faster and clear stale broadcasts
Change-Id: Ifb8e0cc842810af0c65a90cf5e923c348e6a4b3c
This commit is contained in:
@@ -119,7 +119,7 @@ public class UserSwitcherController {
|
||||
filter.addAction(Intent.ACTION_USER_REMOVED);
|
||||
filter.addAction(Intent.ACTION_USER_INFO_CHANGED);
|
||||
filter.addAction(Intent.ACTION_USER_SWITCHED);
|
||||
filter.addAction(Intent.ACTION_USER_STOPPING);
|
||||
filter.addAction(Intent.ACTION_USER_STOPPED);
|
||||
filter.addAction(Intent.ACTION_USER_UNLOCKED);
|
||||
mContext.registerReceiverAsUser(mReceiver, UserHandle.SYSTEM, filter,
|
||||
null /* permission */, null /* scheduler */);
|
||||
|
||||
@@ -730,7 +730,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
//set up the listener for user state for creating user VPNs
|
||||
IntentFilter intentFilter = new IntentFilter();
|
||||
intentFilter.addAction(Intent.ACTION_USER_STARTING);
|
||||
intentFilter.addAction(Intent.ACTION_USER_STOPPING);
|
||||
intentFilter.addAction(Intent.ACTION_USER_STOPPED);
|
||||
intentFilter.addAction(Intent.ACTION_USER_ADDED);
|
||||
intentFilter.addAction(Intent.ACTION_USER_REMOVED);
|
||||
intentFilter.addAction(Intent.ACTION_USER_UNLOCKED);
|
||||
@@ -3619,7 +3619,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
synchronized(mVpns) {
|
||||
Vpn userVpn = mVpns.get(userId);
|
||||
if (userVpn == null) {
|
||||
loge("Stopping user has no VPN");
|
||||
loge("Stopped user has no VPN");
|
||||
return;
|
||||
}
|
||||
mVpns.delete(userId);
|
||||
@@ -3664,7 +3664,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
if (Intent.ACTION_USER_STARTING.equals(action)) {
|
||||
onUserStart(userId);
|
||||
} else if (Intent.ACTION_USER_STOPPING.equals(action)) {
|
||||
} else if (Intent.ACTION_USER_STOPPED.equals(action)) {
|
||||
onUserStop(userId);
|
||||
} else if (Intent.ACTION_USER_ADDED.equals(action)) {
|
||||
onUserAdded(userId);
|
||||
|
||||
@@ -5947,6 +5947,15 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
|
||||
}
|
||||
|
||||
final boolean clearBroadcastQueueForUserLocked(int userId) {
|
||||
boolean didSomething = false;
|
||||
for (int i = mBroadcastQueues.length - 1; i >= 0; i--) {
|
||||
didSomething |= mBroadcastQueues[i].cleanupDisabledPackageReceiversLocked(
|
||||
null, null, userId, true);
|
||||
}
|
||||
return didSomething;
|
||||
}
|
||||
|
||||
final boolean forceStopPackageLocked(String packageName, int appId,
|
||||
boolean callerWillRestart, boolean purgeCache, boolean doit,
|
||||
boolean evenPersistent, boolean uninstalling, int userId, String reason) {
|
||||
|
||||
@@ -500,6 +500,8 @@ final class UserController {
|
||||
});
|
||||
}
|
||||
};
|
||||
// Clear broadcast queue for the user to avoid delivering stale broadcasts
|
||||
mService.clearBroadcastQueueForUserLocked(userId);
|
||||
// Kick things off.
|
||||
mService.broadcastIntentLocked(null, null, stoppingIntent,
|
||||
null, stoppingReceiver, 0, null, null,
|
||||
|
||||
@@ -396,8 +396,8 @@ public class SyncManager {
|
||||
onUserRemoved(userId);
|
||||
} else if (Intent.ACTION_USER_UNLOCKED.equals(action)) {
|
||||
onUserUnlocked(userId);
|
||||
} else if (Intent.ACTION_USER_STOPPING.equals(action)) {
|
||||
onUserStopping(userId);
|
||||
} else if (Intent.ACTION_USER_STOPPED.equals(action)) {
|
||||
onUserStopped(userId);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -550,7 +550,7 @@ public class SyncManager {
|
||||
intentFilter = new IntentFilter();
|
||||
intentFilter.addAction(Intent.ACTION_USER_REMOVED);
|
||||
intentFilter.addAction(Intent.ACTION_USER_UNLOCKED);
|
||||
intentFilter.addAction(Intent.ACTION_USER_STOPPING);
|
||||
intentFilter.addAction(Intent.ACTION_USER_STOPPED);
|
||||
mContext.registerReceiverAsUser(
|
||||
mUserIntentReceiver, UserHandle.ALL, intentFilter, null, null);
|
||||
|
||||
@@ -1422,7 +1422,7 @@ public class SyncManager {
|
||||
}
|
||||
}
|
||||
|
||||
private void onUserStopping(int userId) {
|
||||
private void onUserStopped(int userId) {
|
||||
updateRunningAccounts(null /* Don't sync any target */);
|
||||
|
||||
cancelActiveSync(
|
||||
|
||||
@@ -862,7 +862,6 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
|
||||
|
||||
IntentFilter userFilter = new IntentFilter();
|
||||
userFilter.addAction(Intent.ACTION_USER_REMOVED);
|
||||
userFilter.addAction(Intent.ACTION_USER_STOPPING);
|
||||
mContext.registerReceiver(new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
@@ -871,12 +870,6 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
|
||||
onRemoveUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE,
|
||||
UserHandle.USER_NULL));
|
||||
}
|
||||
// TODO: Race condition causing problems when cleaning up on stopping a user.
|
||||
// Comment this out for now.
|
||||
// else if (Intent.ACTION_USER_STOPPING.equals(action)) {
|
||||
// onStoppingUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE,
|
||||
// UserHandle.USER_NULL));
|
||||
// }
|
||||
}
|
||||
}, userFilter);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user