Merge "Hide UserSwitchTransitionView if it is not hidden within timeout." into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
d42606d7c4
@@ -118,4 +118,7 @@
|
|||||||
<item>com.android.systemui.car.window.SystemUIOverlayWindowManager</item>
|
<item>com.android.systemui.car.window.SystemUIOverlayWindowManager</item>
|
||||||
<item>com.android.systemui.car.volume.VolumeUI</item>
|
<item>com.android.systemui.car.volume.VolumeUI</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
|
<!-- How many milliseconds to wait before force hiding the UserSwitchTransitionView -->
|
||||||
|
<integer name="config_userSwitchTransitionViewShownTimeoutMs" translatable="false">5000</integer>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import android.widget.ImageView;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.android.internal.annotations.GuardedBy;
|
import com.android.internal.annotations.GuardedBy;
|
||||||
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.settingslib.drawable.CircleFramedDrawable;
|
import com.android.settingslib.drawable.CircleFramedDrawable;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.car.window.OverlayViewController;
|
import com.android.systemui.car.window.OverlayViewController;
|
||||||
@@ -49,12 +50,22 @@ import javax.inject.Singleton;
|
|||||||
public class UserSwitchTransitionViewController extends OverlayViewController {
|
public class UserSwitchTransitionViewController extends OverlayViewController {
|
||||||
private static final String TAG = "UserSwitchTransition";
|
private static final String TAG = "UserSwitchTransition";
|
||||||
private static final String ENABLE_DEVELOPER_MESSAGE_TRUE = "true";
|
private static final String ENABLE_DEVELOPER_MESSAGE_TRUE = "true";
|
||||||
|
private static final boolean DEBUG = false;
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
private final Resources mResources;
|
private final Resources mResources;
|
||||||
private final UserManager mUserManager;
|
private final UserManager mUserManager;
|
||||||
private final IWindowManager mWindowManagerService;
|
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")
|
@GuardedBy("this")
|
||||||
private boolean mShowing;
|
private boolean mShowing;
|
||||||
@@ -76,6 +87,8 @@ public class UserSwitchTransitionViewController extends OverlayViewController {
|
|||||||
mResources = resources;
|
mResources = resources;
|
||||||
mUserManager = userManager;
|
mUserManager = userManager;
|
||||||
mWindowManagerService = windowManagerService;
|
mWindowManagerService = windowManagerService;
|
||||||
|
mWindowShownTimeoutMs = mResources.getInteger(
|
||||||
|
R.integer.config_userSwitchTransitionViewShownTimeoutMs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -98,6 +111,9 @@ public class UserSwitchTransitionViewController extends OverlayViewController {
|
|||||||
populateDialog(mPreviousUserId, newUserId);
|
populateDialog(mPreviousUserId, newUserId);
|
||||||
// next time a new user is selected, this current new user will be the previous user.
|
// next time a new user is selected, this current new user will be the previous user.
|
||||||
mPreviousUserId = newUserId;
|
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;
|
if (!mShowing) return;
|
||||||
mShowing = false;
|
mShowing = false;
|
||||||
mHandler.post(this::stop);
|
mHandler.post(this::stop);
|
||||||
|
mHandler.removeCallbacks(mWindowShownTimeoutCallback);
|
||||||
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
int getWindowShownTimeoutMs() {
|
||||||
|
return mWindowShownTimeoutMs;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void populateDialog(@UserIdInt int previousUserId, @UserIdInt int newUserId) {
|
private void populateDialog(@UserIdInt int previousUserId, @UserIdInt int newUserId) {
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ package com.android.systemui.car.userswitcher;
|
|||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
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 static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -122,6 +124,29 @@ public class UserSwitchTransitionViewControllerTest extends SysuiTestCase {
|
|||||||
any());
|
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
|
private final class TestableUserSwitchTransitionViewController extends
|
||||||
UserSwitchTransitionViewController {
|
UserSwitchTransitionViewController {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user