Improve SystemUIOverlayWindow control
1. Make sysui overlay window views more stable 2. hide/show system bars using insets in SystemUIOverlayWindow Bug: 161926721 Bug: 151617493 Test: Manual & Unit Tests Change-Id: I78fd2b5e8488d2f5006edd9773308e2bb9856d2b
This commit is contained in:
committed by
Heemin Seog
parent
9a85dc9c0a
commit
f0988b92e2
@@ -15,7 +15,6 @@
|
||||
~ limitations under the License.
|
||||
-->
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fitsSystemWindows="true"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
|
||||
@@ -22,12 +22,10 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<!-- TODO(b/151617493): replace marginBottom with insets. -->
|
||||
<ViewStub android:id="@+id/notification_panel_stub"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout="@layout/notification_panel_container"
|
||||
android:layout_marginBottom="@dimen/navigation_bar_height"/>
|
||||
android:layout="@layout/notification_panel_container"/>
|
||||
|
||||
<ViewStub android:id="@+id/keyguard_stub"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -140,6 +140,11 @@ public class CarKeyguardViewController extends OverlayViewController implements
|
||||
registerUserSwitchedListener();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean shouldShowNavigationBar() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinishInflate() {
|
||||
mBouncer = SystemUIFactory.getInstance().createKeyguardBouncer(mContext,
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.systemui.car.notification;
|
||||
|
||||
import static android.view.WindowInsets.Type.navigationBars;
|
||||
|
||||
import android.app.ActivityManager;
|
||||
import android.car.Car;
|
||||
import android.car.drivingstate.CarUxRestrictionsManager;
|
||||
@@ -196,6 +198,16 @@ public class NotificationPanelViewController extends OverlayPanelViewController
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean shouldShowStatusBar() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getInsetTypesToFit() {
|
||||
return navigationBars();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean shouldShowHUN() {
|
||||
return mEnableHeadsUpNotificationWhenNotificationShadeOpen;
|
||||
|
||||
@@ -91,6 +91,11 @@ public class UserSwitchTransitionViewController extends OverlayViewController {
|
||||
R.integer.config_userSwitchTransitionViewShownTimeoutMs);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getInsetTypesToFit() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes the user switch transition view appear and draws the content inside of it if a user
|
||||
* that is different from the previous user is provided and if the dialog is not already
|
||||
|
||||
@@ -16,9 +16,12 @@
|
||||
|
||||
package com.android.systemui.car.window;
|
||||
|
||||
import static android.view.WindowInsets.Type.statusBars;
|
||||
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewStub;
|
||||
import android.view.WindowInsets;
|
||||
|
||||
/**
|
||||
* Owns a {@link View} that is present in SystemUIOverlayWindow.
|
||||
@@ -139,10 +142,26 @@ public class OverlayViewController {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@code true} if status bar should be displayed over this view.
|
||||
*/
|
||||
protected boolean shouldShowStatusBar() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@code true} if this view should be hidden during the occluded state.
|
||||
*/
|
||||
protected boolean shouldShowWhenOccluded() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the insets types to fit to the sysui overlay window when this
|
||||
* {@link OverlayViewController} is in the foreground.
|
||||
*/
|
||||
@WindowInsets.Type.InsetsType
|
||||
protected int getInsetTypesToFit() {
|
||||
return statusBars();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,13 +16,17 @@
|
||||
|
||||
package com.android.systemui.car.window;
|
||||
|
||||
import static android.view.WindowInsets.Type.navigationBars;
|
||||
import static android.view.WindowInsets.Type.statusBars;
|
||||
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
import android.view.WindowInsets.Type.InsetsType;
|
||||
import android.view.WindowInsetsController;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.systemui.car.navigationbar.CarNavigationBarController;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
@@ -48,10 +52,7 @@ public class OverlayViewGlobalStateController {
|
||||
private static final String TAG = OverlayViewGlobalStateController.class.getSimpleName();
|
||||
private static final int UNKNOWN_Z_ORDER = -1;
|
||||
private final SystemUIOverlayWindowController mSystemUIOverlayWindowController;
|
||||
private final CarNavigationBarController mCarNavigationBarController;
|
||||
|
||||
private boolean mIsOccluded;
|
||||
|
||||
private final WindowInsetsController mWindowInsetsController;
|
||||
@VisibleForTesting
|
||||
Map<OverlayViewController, Integer> mZOrderMap;
|
||||
@VisibleForTesting
|
||||
@@ -60,14 +61,15 @@ public class OverlayViewGlobalStateController {
|
||||
Set<OverlayViewController> mViewsHiddenForOcclusion;
|
||||
@VisibleForTesting
|
||||
OverlayViewController mHighestZOrder;
|
||||
private boolean mIsOccluded;
|
||||
|
||||
@Inject
|
||||
public OverlayViewGlobalStateController(
|
||||
CarNavigationBarController carNavigationBarController,
|
||||
SystemUIOverlayWindowController systemUIOverlayWindowController) {
|
||||
mSystemUIOverlayWindowController = systemUIOverlayWindowController;
|
||||
mSystemUIOverlayWindowController.attach();
|
||||
mCarNavigationBarController = carNavigationBarController;
|
||||
mWindowInsetsController =
|
||||
mSystemUIOverlayWindowController.getBaseLayout().getWindowInsetsController();
|
||||
mZOrderMap = new HashMap<>();
|
||||
mZOrderVisibleSortedMap = new TreeMap<>();
|
||||
mViewsHiddenForOcclusion = new HashSet<>();
|
||||
@@ -115,7 +117,9 @@ public class OverlayViewGlobalStateController {
|
||||
}
|
||||
|
||||
updateInternalsWhenShowingView(viewController);
|
||||
refreshInsetTypesToFit();
|
||||
refreshNavigationBarVisibility();
|
||||
refreshStatusBarVisibility();
|
||||
|
||||
Log.d(TAG, "Content shown: " + viewController.getClass().getName());
|
||||
debugLog();
|
||||
@@ -185,7 +189,9 @@ public class OverlayViewGlobalStateController {
|
||||
|
||||
mZOrderVisibleSortedMap.remove(mZOrderMap.get(viewController));
|
||||
refreshHighestZOrderWhenHidingView(viewController);
|
||||
refreshInsetTypesToFit();
|
||||
refreshNavigationBarVisibility();
|
||||
refreshStatusBarVisibility();
|
||||
|
||||
if (mZOrderVisibleSortedMap.isEmpty()) {
|
||||
setWindowVisible(false);
|
||||
@@ -208,10 +214,28 @@ public class OverlayViewGlobalStateController {
|
||||
}
|
||||
|
||||
private void refreshNavigationBarVisibility() {
|
||||
mWindowInsetsController.setSystemBarsBehavior(BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
|
||||
if (mZOrderVisibleSortedMap.isEmpty() || mHighestZOrder.shouldShowNavigationBar()) {
|
||||
mCarNavigationBarController.showBars();
|
||||
mWindowInsetsController.show(navigationBars());
|
||||
} else {
|
||||
mCarNavigationBarController.hideBars();
|
||||
mWindowInsetsController.hide(navigationBars());
|
||||
}
|
||||
}
|
||||
|
||||
private void refreshStatusBarVisibility() {
|
||||
mWindowInsetsController.setSystemBarsBehavior(BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
|
||||
if (mZOrderVisibleSortedMap.isEmpty() || mHighestZOrder.shouldShowStatusBar()) {
|
||||
mWindowInsetsController.show(statusBars());
|
||||
} else {
|
||||
mWindowInsetsController.hide(statusBars());
|
||||
}
|
||||
}
|
||||
|
||||
private void refreshInsetTypesToFit() {
|
||||
if (mZOrderVisibleSortedMap.isEmpty()) {
|
||||
setFitInsetsTypes(statusBars());
|
||||
} else {
|
||||
setFitInsetsTypes(mHighestZOrder.getInsetTypesToFit());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -224,6 +248,10 @@ public class OverlayViewGlobalStateController {
|
||||
mSystemUIOverlayWindowController.setWindowVisible(visible);
|
||||
}
|
||||
|
||||
private void setFitInsetsTypes(@InsetsType int types) {
|
||||
mSystemUIOverlayWindowController.setFitInsetsTypes(types);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@link android.view.WindowManager.LayoutParams#FLAG_ALT_FOCUSABLE_IM} flag of the
|
||||
* sysui overlay window.
|
||||
|
||||
@@ -25,6 +25,7 @@ import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowInsets;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.android.systemui.R;
|
||||
@@ -99,7 +100,6 @@ public class SystemUIOverlayWindowController implements
|
||||
PixelFormat.TRANSLUCENT);
|
||||
mLp.token = new Binder();
|
||||
mLp.gravity = Gravity.TOP;
|
||||
mLp.setFitInsetsTypes(/* types= */ 0);
|
||||
mLp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
|
||||
mLp.setTitle("SystemUIOverlayWindow");
|
||||
mLp.packageName = mContext.getPackageName();
|
||||
@@ -110,6 +110,12 @@ public class SystemUIOverlayWindowController implements
|
||||
setWindowVisible(false);
|
||||
}
|
||||
|
||||
/** Sets the types of insets to fit. Note: This should be rarely used. */
|
||||
public void setFitInsetsTypes(@WindowInsets.Type.InsetsType int types) {
|
||||
mLpChanged.setFitInsetsTypes(types);
|
||||
updateWindow();
|
||||
}
|
||||
|
||||
/** Sets the window to the visible state. */
|
||||
public void setWindowVisible(boolean visible) {
|
||||
mVisible = visible;
|
||||
|
||||
@@ -16,9 +16,14 @@
|
||||
|
||||
package com.android.systemui.car.window;
|
||||
|
||||
import static android.view.WindowInsets.Type.navigationBars;
|
||||
import static android.view.WindowInsets.Type.statusBars;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.reset;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@@ -28,19 +33,18 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewStub;
|
||||
import android.view.WindowInsetsController;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.car.CarSystemUiTest;
|
||||
import com.android.systemui.car.navigationbar.CarNavigationBarController;
|
||||
import com.android.systemui.tests.R;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
import java.util.Arrays;
|
||||
@@ -57,8 +61,6 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
private OverlayViewGlobalStateController mOverlayViewGlobalStateController;
|
||||
private ViewGroup mBaseLayout;
|
||||
|
||||
@Mock
|
||||
private CarNavigationBarController mCarNavigationBarController;
|
||||
@Mock
|
||||
private SystemUIOverlayWindowController mSystemUIOverlayWindowController;
|
||||
@Mock
|
||||
@@ -71,18 +73,22 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
private OverlayPanelViewController mOverlayPanelViewController;
|
||||
@Mock
|
||||
private Runnable mRunnable;
|
||||
@Mock
|
||||
private WindowInsetsController mWindowInsetsController;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(/* testClass= */ this);
|
||||
|
||||
mBaseLayout = (ViewGroup) LayoutInflater.from(mContext).inflate(
|
||||
R.layout.overlay_view_global_state_controller_test, /* root= */ null);
|
||||
mBaseLayout = spy((ViewGroup) LayoutInflater.from(mContext).inflate(
|
||||
R.layout.overlay_view_global_state_controller_test, /* root= */ null));
|
||||
|
||||
when(mBaseLayout.getWindowInsetsController()).thenReturn(mWindowInsetsController);
|
||||
|
||||
when(mSystemUIOverlayWindowController.getBaseLayout()).thenReturn(mBaseLayout);
|
||||
|
||||
mOverlayViewGlobalStateController = new OverlayViewGlobalStateController(
|
||||
mCarNavigationBarController, mSystemUIOverlayWindowController);
|
||||
mSystemUIOverlayWindowController);
|
||||
|
||||
verify(mSystemUIOverlayWindowController).attach();
|
||||
}
|
||||
@@ -108,7 +114,7 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mCarNavigationBarController).hideBars();
|
||||
verify(mWindowInsetsController).hide(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -118,7 +124,37 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mCarNavigationBarController).showBars();
|
||||
verify(mWindowInsetsController).show(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showView_nothingAlreadyShown_shouldShowStatusBarFalse_statusBarsHidden() {
|
||||
setupOverlayViewController1();
|
||||
when(mOverlayViewController1.shouldShowStatusBar()).thenReturn(false);
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mWindowInsetsController).hide(statusBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showView_nothingAlreadyShown_shouldShowStatusBarTrue_statusBarsShown() {
|
||||
setupOverlayViewController1();
|
||||
when(mOverlayViewController1.shouldShowStatusBar()).thenReturn(true);
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mWindowInsetsController).show(statusBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showView_nothingAlreadyShown_fitsNavBarInsets_insetsAdjusted() {
|
||||
setupOverlayViewController1();
|
||||
when(mOverlayViewController1.getInsetTypesToFit()).thenReturn(navigationBars());
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mSystemUIOverlayWindowController).setFitInsetsTypes(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -168,10 +204,11 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController1);
|
||||
setupOverlayViewController2();
|
||||
when(mOverlayViewController2.shouldShowNavigationBar()).thenReturn(false);
|
||||
reset(mWindowInsetsController);
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController2, mRunnable);
|
||||
|
||||
verify(mCarNavigationBarController).hideBars();
|
||||
verify(mWindowInsetsController).hide(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -183,7 +220,46 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController2, mRunnable);
|
||||
|
||||
verify(mCarNavigationBarController).showBars();
|
||||
verify(mWindowInsetsController).show(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showView_newHighestZOrder_shouldShowStatusBarFalse_statusBarsHidden() {
|
||||
setupOverlayViewController1();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController1);
|
||||
setupOverlayViewController2();
|
||||
when(mOverlayViewController2.shouldShowStatusBar()).thenReturn(false);
|
||||
reset(mWindowInsetsController);
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController2, mRunnable);
|
||||
|
||||
verify(mWindowInsetsController).hide(statusBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showView_newHighestZOrder_shouldShowStatusBarTrue_statusBarsShown() {
|
||||
setupOverlayViewController1();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController1);
|
||||
setupOverlayViewController2();
|
||||
when(mOverlayViewController2.shouldShowStatusBar()).thenReturn(true);
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController2, mRunnable);
|
||||
|
||||
verify(mWindowInsetsController).show(statusBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showView_newHighestZOrder_fitsNavBarInsets_insetsAdjusted() {
|
||||
setupOverlayViewController1();
|
||||
when(mOverlayViewController1.getInsetTypesToFit()).thenReturn(statusBars());
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController1);
|
||||
setupOverlayViewController2();
|
||||
when(mOverlayViewController2.getInsetTypesToFit()).thenReturn(navigationBars());
|
||||
reset(mWindowInsetsController);
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController2, mRunnable);
|
||||
|
||||
verify(mSystemUIOverlayWindowController).setFitInsetsTypes(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -216,10 +292,11 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController2);
|
||||
when(mOverlayViewController1.shouldShowNavigationBar()).thenReturn(true);
|
||||
when(mOverlayViewController2.shouldShowNavigationBar()).thenReturn(false);
|
||||
reset(mWindowInsetsController);
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mCarNavigationBarController).hideBars();
|
||||
verify(mWindowInsetsController).hide(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -231,7 +308,44 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mCarNavigationBarController).showBars();
|
||||
verify(mWindowInsetsController).show(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showView_oldHighestZOrder_shouldShowStatusBarFalse_statusBarsHidden() {
|
||||
setupOverlayViewController2();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController2);
|
||||
when(mOverlayViewController1.shouldShowStatusBar()).thenReturn(true);
|
||||
when(mOverlayViewController2.shouldShowStatusBar()).thenReturn(false);
|
||||
reset(mWindowInsetsController);
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mWindowInsetsController).hide(statusBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showView_oldHighestZOrder_shouldShowStatusBarTrue_statusBarsShown() {
|
||||
setupOverlayViewController2();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController2);
|
||||
when(mOverlayViewController1.shouldShowStatusBar()).thenReturn(false);
|
||||
when(mOverlayViewController2.shouldShowStatusBar()).thenReturn(true);
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mWindowInsetsController).show(statusBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showView_oldHighestZOrder_fitsNavBarInsets_insetsAdjusted() {
|
||||
setupOverlayViewController2();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController2);
|
||||
when(mOverlayViewController1.getInsetTypesToFit()).thenReturn(statusBars());
|
||||
when(mOverlayViewController2.getInsetTypesToFit()).thenReturn(navigationBars());
|
||||
|
||||
mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mSystemUIOverlayWindowController).setFitInsetsTypes(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -402,10 +516,11 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
setupOverlayViewController2();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController2);
|
||||
when(mOverlayViewController1.shouldShowNavigationBar()).thenReturn(false);
|
||||
reset(mWindowInsetsController);
|
||||
|
||||
mOverlayViewGlobalStateController.hideView(mOverlayViewController2, mRunnable);
|
||||
|
||||
verify(mCarNavigationBarController).hideBars();
|
||||
verify(mWindowInsetsController).hide(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -418,7 +533,48 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
|
||||
mOverlayViewGlobalStateController.hideView(mOverlayViewController2, mRunnable);
|
||||
|
||||
verify(mCarNavigationBarController).showBars();
|
||||
verify(mWindowInsetsController).show(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hideView_newHighestZOrder_shouldShowStatusBarFalse_statusBarHidden() {
|
||||
setupOverlayViewController1();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController1);
|
||||
setupOverlayViewController2();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController2);
|
||||
when(mOverlayViewController1.shouldShowStatusBar()).thenReturn(false);
|
||||
reset(mWindowInsetsController);
|
||||
|
||||
mOverlayViewGlobalStateController.hideView(mOverlayViewController2, mRunnable);
|
||||
|
||||
verify(mWindowInsetsController).hide(statusBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hideView_newHighestZOrder_shouldShowStatusBarTrue_statusBarShown() {
|
||||
setupOverlayViewController1();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController1);
|
||||
setupOverlayViewController2();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController2);
|
||||
when(mOverlayViewController1.shouldShowStatusBar()).thenReturn(true);
|
||||
|
||||
mOverlayViewGlobalStateController.hideView(mOverlayViewController2, mRunnable);
|
||||
|
||||
verify(mWindowInsetsController).show(statusBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hideView_newHighestZOrder_fitsNavBarInsets_insetsAdjusted() {
|
||||
setupOverlayViewController1();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController1);
|
||||
setupOverlayViewController2();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController2);
|
||||
when(mOverlayViewController1.getInsetTypesToFit()).thenReturn(navigationBars());
|
||||
when(mOverlayViewController2.getInsetTypesToFit()).thenReturn(statusBars());
|
||||
|
||||
mOverlayViewGlobalStateController.hideView(mOverlayViewController2, mRunnable);
|
||||
|
||||
verify(mSystemUIOverlayWindowController).setFitInsetsTypes(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -441,10 +597,11 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
setupOverlayViewController2();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController2);
|
||||
when(mOverlayViewController2.shouldShowNavigationBar()).thenReturn(false);
|
||||
reset(mWindowInsetsController);
|
||||
|
||||
mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mCarNavigationBarController).hideBars();
|
||||
verify(mWindowInsetsController).hide(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -457,7 +614,48 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
|
||||
mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mCarNavigationBarController).showBars();
|
||||
verify(mWindowInsetsController).show(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hideView_oldHighestZOrder_shouldShowStatusBarFalse_statusBarHidden() {
|
||||
setupOverlayViewController1();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController1);
|
||||
setupOverlayViewController2();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController2);
|
||||
when(mOverlayViewController2.shouldShowStatusBar()).thenReturn(false);
|
||||
reset(mWindowInsetsController);
|
||||
|
||||
mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mWindowInsetsController).hide(statusBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hideView_oldHighestZOrder_shouldShowStatusBarTrue_statusBarShown() {
|
||||
setupOverlayViewController1();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController1);
|
||||
setupOverlayViewController2();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController2);
|
||||
when(mOverlayViewController2.shouldShowStatusBar()).thenReturn(true);
|
||||
|
||||
mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mWindowInsetsController).show(statusBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hideView_oldHighestZOrder_fitsNavBarInsets_insetsAdjusted() {
|
||||
setupOverlayViewController1();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController1);
|
||||
setupOverlayViewController2();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController2);
|
||||
when(mOverlayViewController1.getInsetTypesToFit()).thenReturn(statusBars());
|
||||
when(mOverlayViewController2.getInsetTypesToFit()).thenReturn(navigationBars());
|
||||
|
||||
mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mSystemUIOverlayWindowController).setFitInsetsTypes(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -479,7 +677,27 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
|
||||
mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mCarNavigationBarController).showBars();
|
||||
verify(mWindowInsetsController).show(navigationBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hideView_viewControllerOnlyShown_statusBarShown() {
|
||||
setupOverlayViewController1();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController1);
|
||||
|
||||
mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mWindowInsetsController).show(statusBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hideView_viewControllerOnlyShown_insetsAdjustedToDefault() {
|
||||
setupOverlayViewController1();
|
||||
setOverlayViewControllerAsShowing(mOverlayViewController1);
|
||||
|
||||
mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable);
|
||||
|
||||
verify(mSystemUIOverlayWindowController).setFitInsetsTypes(statusBars());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -615,7 +833,7 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase {
|
||||
|
||||
private void setOverlayViewControllerAsShowing(OverlayViewController overlayViewController) {
|
||||
mOverlayViewGlobalStateController.showView(overlayViewController, /* show= */ null);
|
||||
Mockito.reset(mCarNavigationBarController, mSystemUIOverlayWindowController);
|
||||
reset(mSystemUIOverlayWindowController);
|
||||
when(mSystemUIOverlayWindowController.getBaseLayout()).thenReturn(mBaseLayout);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user