Loading core/java/android/app/IActivityManager.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -629,6 +629,11 @@ interface IActivityManager { */ void setDisablePreviewScreenshots(IBinder token, boolean disable); /** * Return the user id of last resumed activity. */ int getLastResumedActivityUserId(); // WARNING: when these transactions are updated, check if they are any callers on the native // side. If so, make sure they are using the correct transaction ids and arguments. // If a transaction which will also be used on the native side is being inserted, add it Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +29 −64 Original line number Diff line number Diff line Loading @@ -127,7 +127,6 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, private boolean mVolumeVisible; private boolean mCurrentUserSetup; private boolean mManagedProfileFocused = false; private boolean mManagedProfileIconVisible = false; private boolean mManagedProfileInQuietMode = false; Loading Loading @@ -439,30 +438,11 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, } } private void profileChanged(int userId) { UserInfo user = null; if (userId == UserHandle.USER_CURRENT) { try { user = ActivityManager.getService().getCurrentUser(); } catch (RemoteException e) { // Ignore } } else { user = mUserManager.getUserInfo(userId); } mManagedProfileFocused = user != null && user.isManagedProfile(); if (DEBUG) Log.v(TAG, "profileChanged: mManagedProfileFocused: " + mManagedProfileFocused); // Actually update the icon later when transition starts. } private void updateManagedProfile() { if (DEBUG) { Log.v(TAG, "updateManagedProfile: mManagedProfileFocused: " + mManagedProfileFocused); } try { final boolean showIcon; if (mManagedProfileFocused && !mKeyguardMonitor.isShowing()) { final int userId = ActivityManager.getService().getLastResumedActivityUserId(); if (mUserManager.isManagedProfile(userId) && !mKeyguardMonitor.isShowing()) { showIcon = true; mIconController.setIcon(mSlotManagedProfile, R.drawable.stat_sys_managed_profile_status, Loading @@ -479,6 +459,10 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, mIconController.setIconVisibility(mSlotManagedProfile, showIcon); mManagedProfileIconVisible = showIcon; } } catch (RemoteException ex) { Log.w(TAG, "updateManagedProfile: ", ex); // ignore } } private void updateForegroundInstantApps() { Loading Loading @@ -556,35 +540,16 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, new SynchronousUserSwitchObserver() { @Override public void onUserSwitching(int newUserId) throws RemoteException { mHandler.post(new Runnable() { @Override public void run() { mUserInfoController.reloadUserInfo(); } }); mHandler.post(() -> mUserInfoController.reloadUserInfo()); } @Override public void onUserSwitchComplete(int newUserId) throws RemoteException { mHandler.post(new Runnable() { @Override public void run() { mHandler.post(() -> { updateAlarm(); profileChanged(newUserId); updateQuietState(); updateManagedProfile(); updateForegroundInstantApps(); } }); } @Override public void onForegroundProfileSwitch(int newProfileId) { mHandler.post(new Runnable() { @Override public void run() { profileChanged(newProfileId); } }); } }; Loading services/core/java/com/android/server/am/ActivityManagerService.java +20 −5 Original line number Diff line number Diff line Loading @@ -3212,18 +3212,18 @@ public class ActivityManagerService extends IActivityManager.Stub } } mWindowManager.setFocusedApp(r.appToken, true); applyUpdateLockStateLocked(r); applyUpdateVrModeLocked(r); if (mLastResumedActivity != null && r.userId != mLastResumedActivity.userId) { mHandler.removeMessages(FOREGROUND_PROFILE_CHANGED_MSG); mHandler.obtainMessage( FOREGROUND_PROFILE_CHANGED_MSG, r.userId, 0).sendToTarget(); } mLastResumedActivity = r; mWindowManager.setFocusedApp(r.appToken, true); applyUpdateLockStateLocked(r); applyUpdateVrModeLocked(r); EventLogTags.writeAmSetResumedActivity( r == null ? -1 : r.userId, r == null ? "NULL" : r.shortComponentName, Loading Loading @@ -23599,6 +23599,21 @@ public class ActivityManagerService extends IActivityManager.Stub } } /** * Return the user id of the last resumed activity. */ @Override public @UserIdInt int getLastResumedActivityUserId() { enforceCallingPermission( permission.INTERACT_ACROSS_USERS_FULL, "getLastResumedActivityUserId()"); synchronized (this) { if (mLastResumedActivity == null) { return mUserController.getCurrentUserIdLocked(); } return mLastResumedActivity.userId; } } private final class SleepTokenImpl extends SleepToken { private final String mTag; private final long mAcquireTime; Loading
core/java/android/app/IActivityManager.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -629,6 +629,11 @@ interface IActivityManager { */ void setDisablePreviewScreenshots(IBinder token, boolean disable); /** * Return the user id of last resumed activity. */ int getLastResumedActivityUserId(); // WARNING: when these transactions are updated, check if they are any callers on the native // side. If so, make sure they are using the correct transaction ids and arguments. // If a transaction which will also be used on the native side is being inserted, add it Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +29 −64 Original line number Diff line number Diff line Loading @@ -127,7 +127,6 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, private boolean mVolumeVisible; private boolean mCurrentUserSetup; private boolean mManagedProfileFocused = false; private boolean mManagedProfileIconVisible = false; private boolean mManagedProfileInQuietMode = false; Loading Loading @@ -439,30 +438,11 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, } } private void profileChanged(int userId) { UserInfo user = null; if (userId == UserHandle.USER_CURRENT) { try { user = ActivityManager.getService().getCurrentUser(); } catch (RemoteException e) { // Ignore } } else { user = mUserManager.getUserInfo(userId); } mManagedProfileFocused = user != null && user.isManagedProfile(); if (DEBUG) Log.v(TAG, "profileChanged: mManagedProfileFocused: " + mManagedProfileFocused); // Actually update the icon later when transition starts. } private void updateManagedProfile() { if (DEBUG) { Log.v(TAG, "updateManagedProfile: mManagedProfileFocused: " + mManagedProfileFocused); } try { final boolean showIcon; if (mManagedProfileFocused && !mKeyguardMonitor.isShowing()) { final int userId = ActivityManager.getService().getLastResumedActivityUserId(); if (mUserManager.isManagedProfile(userId) && !mKeyguardMonitor.isShowing()) { showIcon = true; mIconController.setIcon(mSlotManagedProfile, R.drawable.stat_sys_managed_profile_status, Loading @@ -479,6 +459,10 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, mIconController.setIconVisibility(mSlotManagedProfile, showIcon); mManagedProfileIconVisible = showIcon; } } catch (RemoteException ex) { Log.w(TAG, "updateManagedProfile: ", ex); // ignore } } private void updateForegroundInstantApps() { Loading Loading @@ -556,35 +540,16 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, new SynchronousUserSwitchObserver() { @Override public void onUserSwitching(int newUserId) throws RemoteException { mHandler.post(new Runnable() { @Override public void run() { mUserInfoController.reloadUserInfo(); } }); mHandler.post(() -> mUserInfoController.reloadUserInfo()); } @Override public void onUserSwitchComplete(int newUserId) throws RemoteException { mHandler.post(new Runnable() { @Override public void run() { mHandler.post(() -> { updateAlarm(); profileChanged(newUserId); updateQuietState(); updateManagedProfile(); updateForegroundInstantApps(); } }); } @Override public void onForegroundProfileSwitch(int newProfileId) { mHandler.post(new Runnable() { @Override public void run() { profileChanged(newProfileId); } }); } }; Loading
services/core/java/com/android/server/am/ActivityManagerService.java +20 −5 Original line number Diff line number Diff line Loading @@ -3212,18 +3212,18 @@ public class ActivityManagerService extends IActivityManager.Stub } } mWindowManager.setFocusedApp(r.appToken, true); applyUpdateLockStateLocked(r); applyUpdateVrModeLocked(r); if (mLastResumedActivity != null && r.userId != mLastResumedActivity.userId) { mHandler.removeMessages(FOREGROUND_PROFILE_CHANGED_MSG); mHandler.obtainMessage( FOREGROUND_PROFILE_CHANGED_MSG, r.userId, 0).sendToTarget(); } mLastResumedActivity = r; mWindowManager.setFocusedApp(r.appToken, true); applyUpdateLockStateLocked(r); applyUpdateVrModeLocked(r); EventLogTags.writeAmSetResumedActivity( r == null ? -1 : r.userId, r == null ? "NULL" : r.shortComponentName, Loading Loading @@ -23599,6 +23599,21 @@ public class ActivityManagerService extends IActivityManager.Stub } } /** * Return the user id of the last resumed activity. */ @Override public @UserIdInt int getLastResumedActivityUserId() { enforceCallingPermission( permission.INTERACT_ACROSS_USERS_FULL, "getLastResumedActivityUserId()"); synchronized (this) { if (mLastResumedActivity == null) { return mUserController.getCurrentUserIdLocked(); } return mLastResumedActivity.userId; } } private final class SleepTokenImpl extends SleepToken { private final String mTag; private final long mAcquireTime;