Merge "Merge "Add API setMultiFrameLinearBlock for BLOCK_MODEL" into main am: c70419afd1 am: 01533d3f0b" into main
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java
index 092f1ed..152f193 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java
@@ -44,6 +44,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.statusbar.RegisterStatusBarResult;
import com.android.settingslib.applications.InterestingConfigChanges;
@@ -89,7 +90,16 @@
private final TaskbarDelegate mTaskbarDelegate;
private final NavBarHelper mNavBarHelper;
private int mNavMode;
+ /**
+ * Indicates whether the active display is a large screen, e.g. tablets, foldable devices in
+ * the unfolded state.
+ */
@VisibleForTesting boolean mIsLargeScreen;
+ /**
+ * Indicates whether the device is a phone, rather than everything else (e.g. foldables,
+ * tablets) is considered not a handheld device.
+ */
+ @VisibleForTesting boolean mIsPhone;
/** A displayId - nav bar maps. */
@VisibleForTesting
@@ -139,6 +149,8 @@
dumpManager, autoHideController, lightBarController, pipOptional,
backAnimation.orElse(null), taskStackChangeListeners);
mIsLargeScreen = isLargeScreen(mContext);
+ mIsPhone =
+ mContext.getResources().getIntArray(R.array.config_foldedDeviceStates).length == 0;
dumpManager.registerDumpable(this);
}
@@ -253,9 +265,8 @@
/** @return {@code true} if taskbar is enabled, false otherwise */
private boolean initializeTaskbarIfNecessary() {
- // Enable for large screens or (phone AND flag is set); assuming phone = !mIsLargeScreen
- boolean taskbarEnabled = (mIsLargeScreen || enableTaskbarNavbarUnification())
- && shouldCreateNavBarAndTaskBar(mContext.getDisplayId());
+ boolean taskbarEnabled = supportsTaskbar() && shouldCreateNavBarAndTaskBar(
+ mContext.getDisplayId());
if (taskbarEnabled) {
Trace.beginSection("NavigationBarController#initializeTaskbarIfNecessary");
@@ -274,6 +285,12 @@
return taskbarEnabled;
}
+ @VisibleForTesting
+ boolean supportsTaskbar() {
+ // Enable for tablets, unfolded state on a foldable device or (non handheld AND flag is set)
+ return mIsLargeScreen || (!mIsPhone && enableTaskbarNavbarUnification());
+ }
+
private final CommandQueue.Callbacks mCommandQueueCallbacks = new CommandQueue.Callbacks() {
@Override
public void onDisplayRemoved(int displayId) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerImplTest.java
index bfb18c8..52859cd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerImplTest.java
@@ -22,6 +22,8 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.android.wm.shell.Flags.enableTaskbarNavbarUnification;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeTrue;
import static org.mockito.ArgumentMatchers.any;
@@ -289,32 +291,43 @@
verify(mCommandQueue, never()).addCallback(any(TaskbarDelegate.class));
}
-
@Test
public void testConfigurationChange_taskbarNotInitialized() {
Configuration configuration = mContext.getResources().getConfiguration();
- when(Utilities.isLargeScreen(any())).thenReturn(true);
+ mNavigationBarController.mIsLargeScreen = true;
mNavigationBarController.onConfigChanged(configuration);
verify(mTaskbarDelegate, never()).onConfigurationChanged(configuration);
}
@Test
- public void testConfigurationChangeUnfolding_taskbarInitialized() {
+ public void testConfigurationChange_taskbarInitialized() {
Configuration configuration = mContext.getResources().getConfiguration();
- when(Utilities.isLargeScreen(any())).thenReturn(true);
+ mNavigationBarController.mIsLargeScreen = true;
when(mTaskbarDelegate.isInitialized()).thenReturn(true);
mNavigationBarController.onConfigChanged(configuration);
verify(mTaskbarDelegate, times(1)).onConfigurationChanged(configuration);
}
@Test
- public void testConfigurationChangeFolding_taskbarInitialized() {
+ public void testShouldRenderTaskbar_taskbarNotRenderedOnPhone() {
+ mNavigationBarController.mIsLargeScreen = false;
+ mNavigationBarController.mIsPhone = true;
+ assertFalse(mNavigationBarController.supportsTaskbar());
+ }
+
+ @Test
+ public void testShouldRenderTaskbar_taskbarRenderedOnTabletOrUnfolded() {
+ mNavigationBarController.mIsLargeScreen = true;
+ mNavigationBarController.mIsPhone = false;
+ assertTrue(mNavigationBarController.supportsTaskbar());
+ }
+
+ @Test
+ public void testShouldRenderTaskbar_taskbarRenderedInFoldedState() {
assumeTrue(enableTaskbarNavbarUnification());
- Configuration configuration = mContext.getResources().getConfiguration();
- when(Utilities.isLargeScreen(any())).thenReturn(false);
- when(mTaskbarDelegate.isInitialized()).thenReturn(true);
- mNavigationBarController.onConfigChanged(configuration);
- verify(mTaskbarDelegate, times(1)).onConfigurationChanged(configuration);
+ mNavigationBarController.mIsLargeScreen = false;
+ mNavigationBarController.mIsPhone = false;
+ assertTrue(mNavigationBarController.supportsTaskbar());
}
}