Loading packages/CarSystemUI/res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -118,4 +118,7 @@ <item>com.android.systemui.car.window.SystemUIOverlayWindowManager</item> <item>com.android.systemui.car.volume.VolumeUI</item> </string-array> <!-- How many milliseconds to wait before force hiding the UserSwitchTransitionView --> <integer name="config_userSwitchTransitionViewShownTimeoutMs" translatable="false">5000</integer> </resources> packages/CarSystemUI/src/com/android/systemui/car/userswitcher/UserSwitchTransitionViewController.java +22 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.drawable.CircleFramedDrawable; import com.android.systemui.R; import com.android.systemui.car.window.OverlayViewController; Loading @@ -49,12 +50,22 @@ import javax.inject.Singleton; public class UserSwitchTransitionViewController extends OverlayViewController { private static final String TAG = "UserSwitchTransition"; private static final String ENABLE_DEVELOPER_MESSAGE_TRUE = "true"; private static final boolean DEBUG = false; private final Context mContext; private final Handler mHandler; private final Resources mResources; private final UserManager mUserManager; private final IWindowManager mWindowManagerService; private final int mWindowShownTimeoutMs; private final Runnable mWindowShownTimeoutCallback = () -> { if (DEBUG) { Log.w(TAG, "Window was not hidden within " + getWindowShownTimeoutMs() + " ms, so it" + "was hidden by mWindowShownTimeoutCallback."); } handleHide(); }; @GuardedBy("this") private boolean mShowing; Loading @@ -76,6 +87,8 @@ public class UserSwitchTransitionViewController extends OverlayViewController { mResources = resources; mUserManager = userManager; mWindowManagerService = windowManagerService; mWindowShownTimeoutMs = mResources.getInteger( R.integer.config_userSwitchTransitionViewShownTimeoutMs); } /** Loading @@ -98,6 +111,9 @@ public class UserSwitchTransitionViewController extends OverlayViewController { populateDialog(mPreviousUserId, newUserId); // next time a new user is selected, this current new user will be the previous user. mPreviousUserId = newUserId; // In case the window is still showing after WINDOW_SHOWN_TIMEOUT_MS, then hide the // window and log a warning message. mHandler.postDelayed(mWindowShownTimeoutCallback, mWindowShownTimeoutMs); }); } Loading @@ -105,6 +121,12 @@ public class UserSwitchTransitionViewController extends OverlayViewController { if (!mShowing) return; mShowing = false; mHandler.post(this::stop); mHandler.removeCallbacks(mWindowShownTimeoutCallback); } @VisibleForTesting int getWindowShownTimeoutMs() { return mWindowShownTimeoutMs; } private void populateDialog(@UserIdInt int previousUserId, @UserIdInt int newUserId) { Loading packages/CarSystemUI/tests/src/com/android/systemui/car/userswitcher/UserSwitchTransitionViewControllerTest.java +25 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.systemui.car.userswitcher; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import android.content.Context; Loading Loading @@ -122,6 +124,29 @@ public class UserSwitchTransitionViewControllerTest extends SysuiTestCase { any()); } @Test public void onWindowShownTimeoutPassed_viewNotHidden_hidesUserSwitchTransitionView() { mCarUserSwitchingDialogController.handleShow(/* currentUserId= */ TEST_USER_1); reset(mOverlayViewGlobalStateController); getContext().getMainThreadHandler().postDelayed(() -> { verify(mOverlayViewGlobalStateController).hideView( eq(mCarUserSwitchingDialogController), any()); }, mCarUserSwitchingDialogController.getWindowShownTimeoutMs() + 10); } @Test public void onWindowShownTimeoutPassed_viewHidden_doesNotHideUserSwitchTransitionViewAgain() { mCarUserSwitchingDialogController.handleShow(/* currentUserId= */ TEST_USER_1); mCarUserSwitchingDialogController.handleHide(); reset(mOverlayViewGlobalStateController); getContext().getMainThreadHandler().postDelayed(() -> { verify(mOverlayViewGlobalStateController, never()).hideView( eq(mCarUserSwitchingDialogController), any()); }, mCarUserSwitchingDialogController.getWindowShownTimeoutMs() + 10); } private final class TestableUserSwitchTransitionViewController extends UserSwitchTransitionViewController { Loading Loading
packages/CarSystemUI/res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -118,4 +118,7 @@ <item>com.android.systemui.car.window.SystemUIOverlayWindowManager</item> <item>com.android.systemui.car.volume.VolumeUI</item> </string-array> <!-- How many milliseconds to wait before force hiding the UserSwitchTransitionView --> <integer name="config_userSwitchTransitionViewShownTimeoutMs" translatable="false">5000</integer> </resources>
packages/CarSystemUI/src/com/android/systemui/car/userswitcher/UserSwitchTransitionViewController.java +22 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.drawable.CircleFramedDrawable; import com.android.systemui.R; import com.android.systemui.car.window.OverlayViewController; Loading @@ -49,12 +50,22 @@ import javax.inject.Singleton; public class UserSwitchTransitionViewController extends OverlayViewController { private static final String TAG = "UserSwitchTransition"; private static final String ENABLE_DEVELOPER_MESSAGE_TRUE = "true"; private static final boolean DEBUG = false; private final Context mContext; private final Handler mHandler; private final Resources mResources; private final UserManager mUserManager; private final IWindowManager mWindowManagerService; private final int mWindowShownTimeoutMs; private final Runnable mWindowShownTimeoutCallback = () -> { if (DEBUG) { Log.w(TAG, "Window was not hidden within " + getWindowShownTimeoutMs() + " ms, so it" + "was hidden by mWindowShownTimeoutCallback."); } handleHide(); }; @GuardedBy("this") private boolean mShowing; Loading @@ -76,6 +87,8 @@ public class UserSwitchTransitionViewController extends OverlayViewController { mResources = resources; mUserManager = userManager; mWindowManagerService = windowManagerService; mWindowShownTimeoutMs = mResources.getInteger( R.integer.config_userSwitchTransitionViewShownTimeoutMs); } /** Loading @@ -98,6 +111,9 @@ public class UserSwitchTransitionViewController extends OverlayViewController { populateDialog(mPreviousUserId, newUserId); // next time a new user is selected, this current new user will be the previous user. mPreviousUserId = newUserId; // In case the window is still showing after WINDOW_SHOWN_TIMEOUT_MS, then hide the // window and log a warning message. mHandler.postDelayed(mWindowShownTimeoutCallback, mWindowShownTimeoutMs); }); } Loading @@ -105,6 +121,12 @@ public class UserSwitchTransitionViewController extends OverlayViewController { if (!mShowing) return; mShowing = false; mHandler.post(this::stop); mHandler.removeCallbacks(mWindowShownTimeoutCallback); } @VisibleForTesting int getWindowShownTimeoutMs() { return mWindowShownTimeoutMs; } private void populateDialog(@UserIdInt int previousUserId, @UserIdInt int newUserId) { Loading
packages/CarSystemUI/tests/src/com/android/systemui/car/userswitcher/UserSwitchTransitionViewControllerTest.java +25 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.systemui.car.userswitcher; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import android.content.Context; Loading Loading @@ -122,6 +124,29 @@ public class UserSwitchTransitionViewControllerTest extends SysuiTestCase { any()); } @Test public void onWindowShownTimeoutPassed_viewNotHidden_hidesUserSwitchTransitionView() { mCarUserSwitchingDialogController.handleShow(/* currentUserId= */ TEST_USER_1); reset(mOverlayViewGlobalStateController); getContext().getMainThreadHandler().postDelayed(() -> { verify(mOverlayViewGlobalStateController).hideView( eq(mCarUserSwitchingDialogController), any()); }, mCarUserSwitchingDialogController.getWindowShownTimeoutMs() + 10); } @Test public void onWindowShownTimeoutPassed_viewHidden_doesNotHideUserSwitchTransitionViewAgain() { mCarUserSwitchingDialogController.handleShow(/* currentUserId= */ TEST_USER_1); mCarUserSwitchingDialogController.handleHide(); reset(mOverlayViewGlobalStateController); getContext().getMainThreadHandler().postDelayed(() -> { verify(mOverlayViewGlobalStateController, never()).hideView( eq(mCarUserSwitchingDialogController), any()); }, mCarUserSwitchingDialogController.getWindowShownTimeoutMs() + 10); } private final class TestableUserSwitchTransitionViewController extends UserSwitchTransitionViewController { Loading