Loading core/java/android/app/IUserSwitchObserver.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.os.IRemoteCallback; /** {@hide} */ oneway interface IUserSwitchObserver { void onBeforeUserSwitching(int newUserId); void onUserSwitching(int newUserId, IRemoteCallback reply); void onUserSwitchComplete(int newUserId); void onForegroundProfileSwitch(int newProfileId); Loading core/java/android/app/UserSwitchObserver.java +3 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,9 @@ public class UserSwitchObserver extends IUserSwitchObserver.Stub { public UserSwitchObserver() { } @Override public void onBeforeUserSwitching(int newUserId) throws RemoteException {} @Override public void onUserSwitching(int newUserId, IRemoteCallback reply) throws RemoteException { if (reply != null) { Loading packages/SystemUI/src/com/android/systemui/settings/UserTrackerImpl.kt +4 −3 Original line number Diff line number Diff line Loading @@ -161,6 +161,10 @@ open class UserTrackerImpl internal constructor( private fun registerUserSwitchObserver() { iActivityManager.registerUserSwitchObserver(object : UserSwitchObserver() { override fun onBeforeUserSwitching(newUserId: Int) { setUserIdInternal(newUserId) } override fun onUserSwitching(newUserId: Int, reply: IRemoteCallback?) { backgroundHandler.run { handleUserSwitching(newUserId) Loading @@ -181,8 +185,6 @@ open class UserTrackerImpl internal constructor( Assert.isNotMainThread() Log.i(TAG, "Switching to user $newUserId") setUserIdInternal(newUserId) val list = synchronized(callbacks) { callbacks.toList() } Loading @@ -205,7 +207,6 @@ open class UserTrackerImpl internal constructor( Assert.isNotMainThread() Log.i(TAG, "Switched to user $newUserId") setUserIdInternal(newUserId) notifySubscribers { onUserChanged(newUserId, userContext) onProfilesChanged(userProfiles) Loading packages/SystemUI/tests/src/com/android/systemui/settings/UserTrackerImplTest.kt +3 −0 Original line number Diff line number Diff line Loading @@ -167,6 +167,7 @@ class UserTrackerImplTest : SysuiTestCase() { val captor = ArgumentCaptor.forClass(IUserSwitchObserver::class.java) verify(iActivityManager).registerUserSwitchObserver(capture(captor), anyString()) captor.value.onBeforeUserSwitching(newID) captor.value.onUserSwitching(newID, userSwitchingReply) verify(userSwitchingReply).sendResult(any()) Loading Loading @@ -290,6 +291,7 @@ class UserTrackerImplTest : SysuiTestCase() { val captor = ArgumentCaptor.forClass(IUserSwitchObserver::class.java) verify(iActivityManager).registerUserSwitchObserver(capture(captor), anyString()) captor.value.onBeforeUserSwitching(newID) captor.value.onUserSwitching(newID, userSwitchingReply) verify(userSwitchingReply).sendResult(any()) Loading @@ -308,6 +310,7 @@ class UserTrackerImplTest : SysuiTestCase() { val captor = ArgumentCaptor.forClass(IUserSwitchObserver::class.java) verify(iActivityManager).registerUserSwitchObserver(capture(captor), anyString()) captor.value.onBeforeUserSwitching(newID) captor.value.onUserSwitchComplete(newID) assertThat(callback.calledOnUserChanged).isEqualTo(1) Loading services/core/java/com/android/server/am/UserController.java +11 −0 Original line number Diff line number Diff line Loading @@ -2141,6 +2141,17 @@ class UserController implements Handler.Callback { final int observerCount = mUserSwitchObservers.beginBroadcast(); if (observerCount > 0) { for (int i = 0; i < observerCount; i++) { final String name = "#" + i + " " + mUserSwitchObservers.getBroadcastCookie(i); t.traceBegin("onBeforeUserSwitching-" + name); try { mUserSwitchObservers.getBroadcastItem(i).onBeforeUserSwitching(newUserId); } catch (RemoteException e) { // Ignore } finally { t.traceEnd(); } } final ArraySet<String> curWaitingUserSwitchCallbacks = new ArraySet<>(); synchronized (mLock) { uss.switching = true; Loading Loading
core/java/android/app/IUserSwitchObserver.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.os.IRemoteCallback; /** {@hide} */ oneway interface IUserSwitchObserver { void onBeforeUserSwitching(int newUserId); void onUserSwitching(int newUserId, IRemoteCallback reply); void onUserSwitchComplete(int newUserId); void onForegroundProfileSwitch(int newProfileId); Loading
core/java/android/app/UserSwitchObserver.java +3 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,9 @@ public class UserSwitchObserver extends IUserSwitchObserver.Stub { public UserSwitchObserver() { } @Override public void onBeforeUserSwitching(int newUserId) throws RemoteException {} @Override public void onUserSwitching(int newUserId, IRemoteCallback reply) throws RemoteException { if (reply != null) { Loading
packages/SystemUI/src/com/android/systemui/settings/UserTrackerImpl.kt +4 −3 Original line number Diff line number Diff line Loading @@ -161,6 +161,10 @@ open class UserTrackerImpl internal constructor( private fun registerUserSwitchObserver() { iActivityManager.registerUserSwitchObserver(object : UserSwitchObserver() { override fun onBeforeUserSwitching(newUserId: Int) { setUserIdInternal(newUserId) } override fun onUserSwitching(newUserId: Int, reply: IRemoteCallback?) { backgroundHandler.run { handleUserSwitching(newUserId) Loading @@ -181,8 +185,6 @@ open class UserTrackerImpl internal constructor( Assert.isNotMainThread() Log.i(TAG, "Switching to user $newUserId") setUserIdInternal(newUserId) val list = synchronized(callbacks) { callbacks.toList() } Loading @@ -205,7 +207,6 @@ open class UserTrackerImpl internal constructor( Assert.isNotMainThread() Log.i(TAG, "Switched to user $newUserId") setUserIdInternal(newUserId) notifySubscribers { onUserChanged(newUserId, userContext) onProfilesChanged(userProfiles) Loading
packages/SystemUI/tests/src/com/android/systemui/settings/UserTrackerImplTest.kt +3 −0 Original line number Diff line number Diff line Loading @@ -167,6 +167,7 @@ class UserTrackerImplTest : SysuiTestCase() { val captor = ArgumentCaptor.forClass(IUserSwitchObserver::class.java) verify(iActivityManager).registerUserSwitchObserver(capture(captor), anyString()) captor.value.onBeforeUserSwitching(newID) captor.value.onUserSwitching(newID, userSwitchingReply) verify(userSwitchingReply).sendResult(any()) Loading Loading @@ -290,6 +291,7 @@ class UserTrackerImplTest : SysuiTestCase() { val captor = ArgumentCaptor.forClass(IUserSwitchObserver::class.java) verify(iActivityManager).registerUserSwitchObserver(capture(captor), anyString()) captor.value.onBeforeUserSwitching(newID) captor.value.onUserSwitching(newID, userSwitchingReply) verify(userSwitchingReply).sendResult(any()) Loading @@ -308,6 +310,7 @@ class UserTrackerImplTest : SysuiTestCase() { val captor = ArgumentCaptor.forClass(IUserSwitchObserver::class.java) verify(iActivityManager).registerUserSwitchObserver(capture(captor), anyString()) captor.value.onBeforeUserSwitching(newID) captor.value.onUserSwitchComplete(newID) assertThat(callback.calledOnUserChanged).isEqualTo(1) Loading
services/core/java/com/android/server/am/UserController.java +11 −0 Original line number Diff line number Diff line Loading @@ -2141,6 +2141,17 @@ class UserController implements Handler.Callback { final int observerCount = mUserSwitchObservers.beginBroadcast(); if (observerCount > 0) { for (int i = 0; i < observerCount; i++) { final String name = "#" + i + " " + mUserSwitchObservers.getBroadcastCookie(i); t.traceBegin("onBeforeUserSwitching-" + name); try { mUserSwitchObservers.getBroadcastItem(i).onBeforeUserSwitching(newUserId); } catch (RemoteException e) { // Ignore } finally { t.traceEnd(); } } final ArraySet<String> curWaitingUserSwitchCallbacks = new ArraySet<>(); synchronized (mLock) { uss.switching = true; Loading