Merge "Dispatch onUserSwitched callbacks on handler thread" into mnc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
5d21f4168e
@@ -1353,6 +1353,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
static final int FOREGROUND_PROFILE_CHANGED_MSG = 53;
|
||||
static final int DISPATCH_UIDS_CHANGED_MSG = 54;
|
||||
static final int REPORT_TIME_TRACKER_MSG = 55;
|
||||
static final int REPORT_USER_SWITCH_COMPLETE_MSG = 56;
|
||||
|
||||
static final int FIRST_ACTIVITY_STACK_MSG = 100;
|
||||
static final int FIRST_BROADCAST_QUEUE_MSG = 200;
|
||||
@@ -2014,6 +2015,9 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
AppTimeTracker tracker = (AppTimeTracker)msg.obj;
|
||||
tracker.deliverResult(mContext);
|
||||
} break;
|
||||
case REPORT_USER_SWITCH_COMPLETE_MSG: {
|
||||
dispatchUserSwitchComplete(msg.arg1);
|
||||
} break;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -19910,7 +19914,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
}
|
||||
|
||||
completeSwitchAndInitalize(uss, newUserId, true, false);
|
||||
completeSwitchAndInitialize(uss, newUserId, true, false);
|
||||
}
|
||||
|
||||
void moveUserToForeground(UserState uss, int oldUserId, int newUserId) {
|
||||
@@ -19926,10 +19930,10 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
|
||||
void continueUserSwitch(UserState uss, int oldUserId, int newUserId) {
|
||||
completeSwitchAndInitalize(uss, newUserId, false, true);
|
||||
completeSwitchAndInitialize(uss, newUserId, false, true);
|
||||
}
|
||||
|
||||
void completeSwitchAndInitalize(UserState uss, int newUserId,
|
||||
void completeSwitchAndInitialize(UserState uss, int newUserId,
|
||||
boolean clearInitializing, boolean clearSwitching) {
|
||||
boolean unfrozen = false;
|
||||
synchronized (this) {
|
||||
@@ -19946,18 +19950,25 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
}
|
||||
if (unfrozen) {
|
||||
final int N = mUserSwitchObservers.beginBroadcast();
|
||||
for (int i=0; i<N; i++) {
|
||||
try {
|
||||
mUserSwitchObservers.getBroadcastItem(i).onUserSwitchComplete(newUserId);
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
mUserSwitchObservers.finishBroadcast();
|
||||
mHandler.removeMessages(REPORT_USER_SWITCH_COMPLETE_MSG);
|
||||
mHandler.sendMessage(mHandler.obtainMessage(REPORT_USER_SWITCH_COMPLETE_MSG,
|
||||
newUserId, 0));
|
||||
}
|
||||
stopGuestUserIfBackground();
|
||||
}
|
||||
|
||||
/** Called on handler thread */
|
||||
void dispatchUserSwitchComplete(int userId) {
|
||||
final int observerCount = mUserSwitchObservers.beginBroadcast();
|
||||
for (int i = 0; i < observerCount; i++) {
|
||||
try {
|
||||
mUserSwitchObservers.getBroadcastItem(i).onUserSwitchComplete(userId);
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
mUserSwitchObservers.finishBroadcast();
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the guest user if it has gone to the background.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user