Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e7af0f5a authored by Youngjun Kwak's avatar Youngjun Kwak Committed by Automerger Merge Worker
Browse files

Merge "Hide UserSwitchTransitionView if it is not hidden within timeout." into...

Merge "Hide UserSwitchTransitionView if it is not hidden within timeout." into rvc-dev am: d42606d7 am: 1f8448a0 am: a2c606b7

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11838963

Change-Id: I30bfd6dcb2c0e3ee8d9af3b651993069357e4b2d
parents 1aff23bc a2c606b7
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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>
+22 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -76,6 +87,8 @@ public class UserSwitchTransitionViewController extends OverlayViewController {
        mResources = resources;
        mUserManager = userManager;
        mWindowManagerService = windowManagerService;
        mWindowShownTimeoutMs = mResources.getInteger(
                R.integer.config_userSwitchTransitionViewShownTimeoutMs);
    }

    /**
@@ -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);
        });
    }

@@ -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) {
+25 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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 {