diff options
9 files changed, 324 insertions, 34 deletions
diff --git a/packages/CarSystemUI/res/layout/car_user_switching_dialog.xml b/packages/CarSystemUI/res/layout/car_user_switching_dialog.xml index 0a294246dfaa..09fbf7a59a8c 100644 --- a/packages/CarSystemUI/res/layout/car_user_switching_dialog.xml +++ b/packages/CarSystemUI/res/layout/car_user_switching_dialog.xml @@ -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" diff --git a/packages/CarSystemUI/res/layout/sysui_overlay_window.xml b/packages/CarSystemUI/res/layout/sysui_overlay_window.xml index 2dc499c160c6..2c9788955bfa 100644 --- a/packages/CarSystemUI/res/layout/sysui_overlay_window.xml +++ b/packages/CarSystemUI/res/layout/sysui_overlay_window.xml @@ -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" diff --git a/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java index 69766cc6c0d0..51a7245ea5c6 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java @@ -141,6 +141,11 @@ public class CarKeyguardViewController extends OverlayViewController implements } @Override + protected boolean shouldShowNavigationBar() { + return true; + } + + @Override public void onFinishInflate() { mBouncer = SystemUIFactory.getInstance().createKeyguardBouncer(mContext, mViewMediatorCallback, mLockPatternUtils, diff --git a/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java index 1eead62c042a..8d5843635e5f 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java @@ -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; @@ -197,6 +199,16 @@ public class NotificationPanelViewController extends OverlayPanelViewController } @Override + protected boolean shouldShowStatusBar() { + return true; + } + + @Override + protected int getInsetTypesToFit() { + return navigationBars(); + } + + @Override protected boolean shouldShowHUN() { return mEnableHeadsUpNotificationWhenNotificationShadeOpen; } diff --git a/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/UserSwitchTransitionViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/UserSwitchTransitionViewController.java index 45f3d342fb6e..0d77c1341ffb 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/UserSwitchTransitionViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/UserSwitchTransitionViewController.java @@ -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 diff --git a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java index 3969f92c690a..53deb9d9dc5d 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java @@ -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. @@ -140,9 +143,25 @@ public class OverlayViewController { } /** + * 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(); + } } diff --git a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java index 8e9410964313..2494242c24f0 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java @@ -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. diff --git a/packages/CarSystemUI/src/com/android/systemui/car/window/SystemUIOverlayWindowController.java b/packages/CarSystemUI/src/com/android/systemui/car/window/SystemUIOverlayWindowController.java index bcd96f63a2b4..029bd3702afe 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/window/SystemUIOverlayWindowController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/window/SystemUIOverlayWindowController.java @@ -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; diff --git a/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayViewGlobalStateControllerTest.java b/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayViewGlobalStateControllerTest.java index 20f9bc8ec1cb..ff286650ea50 100644 --- a/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayViewGlobalStateControllerTest.java +++ b/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayViewGlobalStateControllerTest.java @@ -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; @@ -58,8 +62,6 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { private ViewGroup mBaseLayout; @Mock - private CarNavigationBarController mCarNavigationBarController; - @Mock private SystemUIOverlayWindowController mSystemUIOverlayWindowController; @Mock private OverlayViewMediator mOverlayViewMediator; @@ -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); } } |