From b6f4a0c6728d0ec5ffab4cd29deb53953eac8fa9 Mon Sep 17 00:00:00 2001 From: Heemin Seog Date: Tue, 1 Sep 2020 16:08:29 -0700 Subject: [PATCH] DO NOT MERGE Adjust window focusable by view controller Some adjustments to note: 1. remove previous focusability changes per view controller 2. disallow calling insetsController.show/hide without window focus 3. update tests to depend on window focus 4. update DisplaySystemBarsController to refer to parent class for ime insets Bug: 163135884 Test: manual, atest :carsysui-presubmit Change-Id: If5adf599bc2c676ad296f89566534c1fdc9f2492 --- .../keyguard/CarKeyguardViewController.java | 5 +- .../NotificationPanelViewController.java | 4 +- .../FullScreenUserSwitcherViewController.java | 5 + .../window/OverlayPanelViewController.java | 2 - .../car/window/OverlayViewController.java | 19 ++- .../OverlayViewGlobalStateController.java | 31 +++- .../SystemUIOverlayWindowController.java | 3 + .../wm/DisplaySystemBarsController.java | 26 ++- .../OverlayPanelViewControllerTest.java | 29 ---- .../OverlayViewGlobalStateControllerTest.java | 156 ++++++++++++++---- 10 files changed, 189 insertions(+), 91 deletions(-) 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 51a7245ea5c6..218c95c2496f 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java @@ -141,7 +141,7 @@ public class CarKeyguardViewController extends OverlayViewController implements } @Override - protected boolean shouldShowNavigationBar() { + protected boolean shouldShowNavigationBarInsets() { return true; } @@ -177,7 +177,6 @@ public class CarKeyguardViewController extends OverlayViewController implements mKeyguardStateController.notifyKeyguardState(mShowing, /* occluded= */ false); mCarNavigationBarController.showAllKeyguardButtons(/* isSetUp= */ true); start(); - getOverlayViewGlobalStateController().setWindowFocusable(/* focusable= */ true); reset(/* hideBouncerWhenShowing= */ false); notifyKeyguardUpdateMonitor(); } @@ -192,7 +191,6 @@ public class CarKeyguardViewController extends OverlayViewController implements mBouncer.hide(/* destroyView= */ true); mCarNavigationBarController.hideAllKeyguardButtons(/* isSetUp= */ true); stop(); - getOverlayViewGlobalStateController().setWindowFocusable(/* focusable= */ false); mKeyguardStateController.notifyKeyguardDoneFading(); mHandler.post(mViewMediatorCallback::keyguardGone); notifyKeyguardUpdateMonitor(); @@ -237,7 +235,6 @@ public class CarKeyguardViewController extends OverlayViewController implements public void onCancelClicked() { if (mBouncer == null) return; - getOverlayViewGlobalStateController().setWindowFocusable(/* focusable= */ false); getOverlayViewGlobalStateController().setWindowNeedsInput(/* needsInput= */ false); mBouncer.hide(/* destroyView= */ true); 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 a7cb0d86a6a8..7cd559a11158 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java @@ -193,12 +193,12 @@ public class NotificationPanelViewController extends OverlayPanelViewController } @Override - protected boolean shouldShowNavigationBar() { + protected boolean shouldShowNavigationBarInsets() { return true; } @Override - protected boolean shouldShowStatusBar() { + protected boolean shouldShowStatusBarInsets() { return true; } diff --git a/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/FullScreenUserSwitcherViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/FullScreenUserSwitcherViewController.java index 1a8f19e46798..aac4cfbf83c4 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/FullScreenUserSwitcherViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/FullScreenUserSwitcherViewController.java @@ -77,6 +77,11 @@ public class FullScreenUserSwitcherViewController extends OverlayViewController registerCarUserManagerIfPossible(); } + @Override + protected boolean shouldFocusWindow() { + return false; + } + @Override protected void showInternal() { getLayout().setVisibility(View.VISIBLE); diff --git a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayPanelViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayPanelViewController.java index 1b00c6301011..3c9879c671a5 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayPanelViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayPanelViewController.java @@ -238,7 +238,6 @@ public abstract class OverlayPanelViewController extends OverlayViewController { } onAnimateCollapsePanel(); - getOverlayViewGlobalStateController().setWindowFocusable(false); animatePanel(mClosingVelocity, /* isClosing= */ true); } @@ -415,7 +414,6 @@ public abstract class OverlayPanelViewController extends OverlayViewController { getOverlayViewGlobalStateController().hideView(/* panelViewController= */ this); } getLayout().setVisibility(visible ? View.VISIBLE : View.INVISIBLE); - getOverlayViewGlobalStateController().setWindowFocusable(visible); } /* ***************************************************************************************** * 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 53deb9d9dc5d..8adc1adcc41c 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java @@ -136,16 +136,18 @@ public class OverlayViewController { } /** - * Returns {@code true} if navigation bar should be displayed over this view. + * Returns {@code true} if navigation bar insets should be displayed over this view. Has no + * effect if {@link #shouldFocusWindow} returns {@code false}. */ - protected boolean shouldShowNavigationBar() { + protected boolean shouldShowNavigationBarInsets() { return false; } /** - * Returns {@code true} if status bar should be displayed over this view. + * Returns {@code true} if status bar insets should be displayed over this view. Has no + * effect if {@link #shouldFocusWindow} returns {@code false}. */ - protected boolean shouldShowStatusBar() { + protected boolean shouldShowStatusBarInsets() { return false; } @@ -156,6 +158,15 @@ public class OverlayViewController { return false; } + /** + * Returns {@code true} if the window should be focued when this view is visible. Note that + * returning {@code false} here means that {@link #shouldShowStatusBarInsets} and + * {@link #shouldShowNavigationBarInsets} will have no effect. + */ + protected boolean shouldFocusWindow() { + return true; + } + /** * Returns the insets types to fit to the sysui overlay window when this * {@link OverlayViewController} is in the foreground. 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 2494242c24f0..55f0975aeccf 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java @@ -18,7 +18,6 @@ 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; @@ -118,6 +117,7 @@ public class OverlayViewGlobalStateController { updateInternalsWhenShowingView(viewController); refreshInsetTypesToFit(); + refreshWindowFocus(); refreshNavigationBarVisibility(); refreshStatusBarVisibility(); @@ -190,6 +190,7 @@ public class OverlayViewGlobalStateController { mZOrderVisibleSortedMap.remove(mZOrderMap.get(viewController)); refreshHighestZOrderWhenHidingView(viewController); refreshInsetTypesToFit(); + refreshWindowFocus(); refreshNavigationBarVisibility(); refreshStatusBarVisibility(); @@ -214,21 +215,35 @@ public class OverlayViewGlobalStateController { } private void refreshNavigationBarVisibility() { - mWindowInsetsController.setSystemBarsBehavior(BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); - if (mZOrderVisibleSortedMap.isEmpty() || mHighestZOrder.shouldShowNavigationBar()) { + if (mZOrderVisibleSortedMap.isEmpty()) { mWindowInsetsController.show(navigationBars()); - } else { + return; + } + + // Do not hide navigation bar insets if the window is not focusable. + if (mHighestZOrder.shouldFocusWindow() && !mHighestZOrder.shouldShowNavigationBarInsets()) { mWindowInsetsController.hide(navigationBars()); + } else { + mWindowInsetsController.show(navigationBars()); } } private void refreshStatusBarVisibility() { - mWindowInsetsController.setSystemBarsBehavior(BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); - if (mZOrderVisibleSortedMap.isEmpty() || mHighestZOrder.shouldShowStatusBar()) { + if (mZOrderVisibleSortedMap.isEmpty()) { mWindowInsetsController.show(statusBars()); - } else { - mWindowInsetsController.hide(statusBars()); + return; } + + // Do not hide status bar insets if the window is not focusable. + if (mHighestZOrder.shouldFocusWindow() && !mHighestZOrder.shouldShowStatusBarInsets()) { + mWindowInsetsController.hide(statusBars()); + } else { + mWindowInsetsController.show(statusBars()); + } + } + + private void refreshWindowFocus() { + setWindowFocusable(mHighestZOrder == null ? false : mHighestZOrder.shouldFocusWindow()); } private void refreshInsetTypesToFit() { 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 029bd3702afe..c955fab592f3 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/window/SystemUIOverlayWindowController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/window/SystemUIOverlayWindowController.java @@ -16,6 +16,7 @@ package com.android.systemui.car.window; +import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; import android.content.Context; @@ -104,6 +105,7 @@ public class SystemUIOverlayWindowController implements mLp.setTitle("SystemUIOverlayWindow"); mLp.packageName = mContext.getPackageName(); mLp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; + mLp.insetsFlags.behavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE; mWindowManager.addView(mBaseLayout, mLp); mLpChanged.copyFrom(mLp); @@ -160,6 +162,7 @@ public class SystemUIOverlayWindowController implements private void updateWindow() { if (mLp != null && mLp.copyFrom(mLpChanged) != 0) { if (isAttached()) { + mLp.insetsFlags.behavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE; mWindowManager.updateViewLayout(mBaseLayout, mLp); } } diff --git a/packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java b/packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java index a831464e7987..c9ec34fd5f08 100644 --- a/packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java +++ b/packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java @@ -32,6 +32,8 @@ import androidx.annotation.VisibleForTesting; import com.android.systemui.TransactionPool; import com.android.systemui.dagger.qualifiers.Main; +import java.util.Objects; + import javax.inject.Inject; import javax.inject.Singleton; @@ -90,7 +92,7 @@ public class DisplaySystemBarsController extends DisplayImeController { } @VisibleForTesting - class PerDisplay extends IDisplayWindowInsetsController.Stub { + class PerDisplay extends DisplayImeController.PerDisplay { int mDisplayId; InsetsController mInsetsController; @@ -98,6 +100,8 @@ public class DisplaySystemBarsController extends DisplayImeController { String mPackageName; PerDisplay(int displayId) { + super(displayId, + mSystemWindows.mDisplayController.getDisplayLayout(displayId).rotation()); mDisplayId = displayId; mInsetsController = new InsetsController( new DisplaySystemBarsInsetsControllerHost(mHandler, this)); @@ -105,6 +109,7 @@ public class DisplaySystemBarsController extends DisplayImeController { @Override public void insetsChanged(InsetsState insetsState) { + super.insetsChanged(insetsState); if (mInsetsState.equals(insetsState)) { return; } @@ -118,24 +123,33 @@ public class DisplaySystemBarsController extends DisplayImeController { @Override public void insetsControlChanged(InsetsState insetsState, InsetsSourceControl[] activeControls) { + super.insetsControlChanged(insetsState, activeControls); mInsetsController.onControlsChanged(activeControls); } @Override public void hideInsets(@WindowInsets.Type.InsetsType int types, boolean fromIme) { - mInsetsController.hide(types); + if ((types & WindowInsets.Type.ime()) == 0) { + mInsetsController.hide(types); + } else { + super.hideInsets(types, fromIme); + } + } @Override public void showInsets(@WindowInsets.Type.InsetsType int types, boolean fromIme) { - mInsetsController.show(types); + if ((types & WindowInsets.Type.ime()) == 0) { + mInsetsController.show(types); + } else { + super.showInsets(types, fromIme); + } + } @Override public void topFocusedWindowChanged(String packageName) { - // If both package names are null or both package names are equal, return. - if (mPackageName == packageName - || (mPackageName != null && mPackageName.equals(packageName))) { + if (Objects.equals(mPackageName, packageName)) { return; } mPackageName = packageName; diff --git a/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayPanelViewControllerTest.java b/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayPanelViewControllerTest.java index 7311cdb68a3c..23e21e4cbed6 100644 --- a/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayPanelViewControllerTest.java +++ b/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayPanelViewControllerTest.java @@ -223,18 +223,6 @@ public class OverlayPanelViewControllerTest extends SysuiTestCase { mOverlayPanelViewController.getLayout().getHeight()); } - @Test - public void animateCollapsePanel_removesWindowFocus() { - mOverlayPanelViewController.inflate(mBaseLayout); - mOverlayPanelViewController.setShouldAnimateCollapsePanel(true); - mOverlayPanelViewController.setPanelExpanded(true); - mOverlayPanelViewController.setPanelVisible(true); - - mOverlayPanelViewController.animateCollapsePanel(); - - verify(mOverlayViewGlobalStateController).setWindowFocusable(false); - } - @Test public void animateExpandPanel_shouldNotAnimateExpandPanel_doesNotExpand() { mOverlayPanelViewController.inflate(mBaseLayout); @@ -364,14 +352,6 @@ public class OverlayPanelViewControllerTest extends SysuiTestCase { assertThat(mOverlayPanelViewController.getLayout().getVisibility()).isEqualTo(View.VISIBLE); } - @Test - public void setPanelVisible_setTrue_setWindowFocusable() { - mOverlayPanelViewController.inflate(mBaseLayout); - mOverlayPanelViewController.setPanelVisible(true); - - verify(mOverlayViewGlobalStateController).setWindowFocusable(true); - } - @Test public void setPanelVisible_setFalse_windowVisible_setsWindowNotVisible() { mOverlayPanelViewController.inflate(mBaseLayout); @@ -403,15 +383,6 @@ public class OverlayPanelViewControllerTest extends SysuiTestCase { View.INVISIBLE); } - @Test - public void setPanelVisible_setFalse_setWindowNotFocusable() { - mOverlayPanelViewController.inflate(mBaseLayout); - - mOverlayPanelViewController.setPanelVisible(false); - - verify(mOverlayViewGlobalStateController).setWindowFocusable(false); - } - @Test public void dragOpenTouchListener_isNotInflated_inflatesView() { when(mCarDeviceProvisionedController.isCurrentUserFullySetup()).thenReturn(true); 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 ff286650ea50..294aa0d3cf9b 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 @@ -107,10 +107,55 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { verify(mOverlayViewMediator).setupOverlayContentViewControllers(); } + @Test + public void showView_nothingVisible_windowNotFocusable_shouldShowNavBar_navBarsVisible() { + setupOverlayViewController1(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(false); + when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(true); + + mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); + + verify(mWindowInsetsController).show(navigationBars()); + } + + @Test + public void showView_nothingVisible_windowNotFocusable_shouldHideNavBar_notHidden() { + setupOverlayViewController1(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(false); + when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(false); + + mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); + + verify(mWindowInsetsController, never()).hide(navigationBars()); + } + + @Test + public void showView_nothingVisible_windowNotFocusable_shouldShowStatusBar_statusBarsVisible() { + setupOverlayViewController1(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(false); + when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(true); + + mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); + + verify(mWindowInsetsController).show(statusBars()); + } + + @Test + public void showView_nothingVisible_windowNotFocusable_shouldHideStatusBar_notHidden() { + setupOverlayViewController1(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(false); + when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(false); + + mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); + + verify(mWindowInsetsController, never()).hide(statusBars()); + } + @Test public void showView_nothingAlreadyShown_shouldShowNavBarFalse_navigationBarsHidden() { setupOverlayViewController1(); - when(mOverlayViewController1.shouldShowNavigationBar()).thenReturn(false); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(false); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); @@ -120,7 +165,8 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_nothingAlreadyShown_shouldShowNavBarTrue_navigationBarsShown() { setupOverlayViewController1(); - when(mOverlayViewController1.shouldShowNavigationBar()).thenReturn(true); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(true); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); @@ -130,7 +176,8 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_nothingAlreadyShown_shouldShowStatusBarFalse_statusBarsHidden() { setupOverlayViewController1(); - when(mOverlayViewController1.shouldShowStatusBar()).thenReturn(false); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(false); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); @@ -140,7 +187,8 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_nothingAlreadyShown_shouldShowStatusBarTrue_statusBarsShown() { setupOverlayViewController1(); - when(mOverlayViewController1.shouldShowStatusBar()).thenReturn(true); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(true); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); @@ -201,9 +249,11 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_newHighestZOrder_shouldShowNavBarFalse_navigationBarsHidden() { setupOverlayViewController1(); - setOverlayViewControllerAsShowing(mOverlayViewController1); setupOverlayViewController2(); - when(mOverlayViewController2.shouldShowNavigationBar()).thenReturn(false); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); + setOverlayViewControllerAsShowing(mOverlayViewController1); + when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(false); reset(mWindowInsetsController); mOverlayViewGlobalStateController.showView(mOverlayViewController2, mRunnable); @@ -214,9 +264,11 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_newHighestZOrder_shouldShowNavBarTrue_navigationBarsShown() { setupOverlayViewController1(); - setOverlayViewControllerAsShowing(mOverlayViewController1); setupOverlayViewController2(); - when(mOverlayViewController2.shouldShowNavigationBar()).thenReturn(true); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); + setOverlayViewControllerAsShowing(mOverlayViewController1); + when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(true); mOverlayViewGlobalStateController.showView(mOverlayViewController2, mRunnable); @@ -226,9 +278,11 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_newHighestZOrder_shouldShowStatusBarFalse_statusBarsHidden() { setupOverlayViewController1(); - setOverlayViewControllerAsShowing(mOverlayViewController1); setupOverlayViewController2(); - when(mOverlayViewController2.shouldShowStatusBar()).thenReturn(false); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); + setOverlayViewControllerAsShowing(mOverlayViewController1); + when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(false); reset(mWindowInsetsController); mOverlayViewGlobalStateController.showView(mOverlayViewController2, mRunnable); @@ -239,9 +293,11 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_newHighestZOrder_shouldShowStatusBarTrue_statusBarsShown() { setupOverlayViewController1(); - setOverlayViewControllerAsShowing(mOverlayViewController1); setupOverlayViewController2(); - when(mOverlayViewController2.shouldShowStatusBar()).thenReturn(true); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); + setOverlayViewControllerAsShowing(mOverlayViewController1); + when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(true); mOverlayViewGlobalStateController.showView(mOverlayViewController2, mRunnable); @@ -289,9 +345,11 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_oldHighestZOrder_shouldShowNavBarFalse_navigationBarsHidden() { setupOverlayViewController2(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController2); - when(mOverlayViewController1.shouldShowNavigationBar()).thenReturn(true); - when(mOverlayViewController2.shouldShowNavigationBar()).thenReturn(false); + when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(true); + when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(false); reset(mWindowInsetsController); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); @@ -302,9 +360,11 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_oldHighestZOrder_shouldShowNavBarTrue_navigationBarsShown() { setupOverlayViewController2(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController2); - when(mOverlayViewController1.shouldShowNavigationBar()).thenReturn(false); - when(mOverlayViewController2.shouldShowNavigationBar()).thenReturn(true); + when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(false); + when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(true); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); @@ -314,9 +374,11 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_oldHighestZOrder_shouldShowStatusBarFalse_statusBarsHidden() { setupOverlayViewController2(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController2); - when(mOverlayViewController1.shouldShowStatusBar()).thenReturn(true); - when(mOverlayViewController2.shouldShowStatusBar()).thenReturn(false); + when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(true); + when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(false); reset(mWindowInsetsController); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); @@ -327,9 +389,11 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_oldHighestZOrder_shouldShowStatusBarTrue_statusBarsShown() { setupOverlayViewController2(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController2); - when(mOverlayViewController1.shouldShowStatusBar()).thenReturn(false); - when(mOverlayViewController2.shouldShowStatusBar()).thenReturn(true); + when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(false); + when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(true); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); @@ -512,10 +576,12 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void hideView_newHighestZOrder_shouldShowNavBarFalse_navigationBarHidden() { setupOverlayViewController1(); - setOverlayViewControllerAsShowing(mOverlayViewController1); setupOverlayViewController2(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); + setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); - when(mOverlayViewController1.shouldShowNavigationBar()).thenReturn(false); + when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(false); reset(mWindowInsetsController); mOverlayViewGlobalStateController.hideView(mOverlayViewController2, mRunnable); @@ -526,10 +592,13 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void hideView_newHighestZOrder_shouldShowNavBarTrue_navigationBarShown() { setupOverlayViewController1(); - setOverlayViewControllerAsShowing(mOverlayViewController1); setupOverlayViewController2(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); + setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); - when(mOverlayViewController1.shouldShowNavigationBar()).thenReturn(true); + when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(true); + reset(mWindowInsetsController); mOverlayViewGlobalStateController.hideView(mOverlayViewController2, mRunnable); @@ -539,10 +608,12 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void hideView_newHighestZOrder_shouldShowStatusBarFalse_statusBarHidden() { setupOverlayViewController1(); - setOverlayViewControllerAsShowing(mOverlayViewController1); setupOverlayViewController2(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); + setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); - when(mOverlayViewController1.shouldShowStatusBar()).thenReturn(false); + when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(false); reset(mWindowInsetsController); mOverlayViewGlobalStateController.hideView(mOverlayViewController2, mRunnable); @@ -553,10 +624,13 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void hideView_newHighestZOrder_shouldShowStatusBarTrue_statusBarShown() { setupOverlayViewController1(); - setOverlayViewControllerAsShowing(mOverlayViewController1); setupOverlayViewController2(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); + setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); - when(mOverlayViewController1.shouldShowStatusBar()).thenReturn(true); + when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(true); + reset(mWindowInsetsController); mOverlayViewGlobalStateController.hideView(mOverlayViewController2, mRunnable); @@ -593,10 +667,12 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void hideView_oldHighestZOrder_shouldShowNavBarFalse_navigationBarHidden() { setupOverlayViewController1(); - setOverlayViewControllerAsShowing(mOverlayViewController1); setupOverlayViewController2(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); + setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); - when(mOverlayViewController2.shouldShowNavigationBar()).thenReturn(false); + when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(false); reset(mWindowInsetsController); mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable); @@ -607,10 +683,12 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void hideView_oldHighestZOrder_shouldShowNavBarTrue_navigationBarShown() { setupOverlayViewController1(); - setOverlayViewControllerAsShowing(mOverlayViewController1); setupOverlayViewController2(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); + setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); - when(mOverlayViewController2.shouldShowNavigationBar()).thenReturn(true); + when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(true); mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable); @@ -620,10 +698,12 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void hideView_oldHighestZOrder_shouldShowStatusBarFalse_statusBarHidden() { setupOverlayViewController1(); - setOverlayViewControllerAsShowing(mOverlayViewController1); setupOverlayViewController2(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); + setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); - when(mOverlayViewController2.shouldShowStatusBar()).thenReturn(false); + when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(false); reset(mWindowInsetsController); mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable); @@ -634,10 +714,12 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void hideView_oldHighestZOrder_shouldShowStatusBarTrue_statusBarShown() { setupOverlayViewController1(); - setOverlayViewControllerAsShowing(mOverlayViewController1); setupOverlayViewController2(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); + setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); - when(mOverlayViewController2.shouldShowStatusBar()).thenReturn(true); + when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(true); mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable); @@ -673,6 +755,7 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void hideView_viewControllerOnlyShown_navigationBarShown() { setupOverlayViewController1(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable); @@ -683,6 +766,7 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void hideView_viewControllerOnlyShown_statusBarShown() { setupOverlayViewController1(); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable);