diff --git a/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java b/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java index 5ac5761e9a..9eabb55897 100644 --- a/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java +++ b/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java @@ -32,6 +32,7 @@ import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.statemanager.StatefulActivity; import com.android.launcher3.uioverrides.QuickstepLauncher; +import com.android.launcher3.util.DisplayController; import com.android.quickstep.GestureState; import com.android.quickstep.SystemUiProxy; import com.android.quickstep.views.DesktopAppSelectView; @@ -229,6 +230,7 @@ public class DesktopVisibilityController { for (DesktopVisibilityListener listener : mDesktopVisibilityListeners) { listener.onDesktopVisibilityChanged(areDesktopTasksVisible); } + DisplayController.handleInfoChangeForDesktopMode(mLauncher); } /** diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index ff76e21faf..9cdf331ff7 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -301,7 +301,8 @@ public class TaskbarActivityContext extends BaseTaskbarContext { createTaskbarRecentAppsController(), TaskbarEduTooltipController.newInstance(this), new KeyboardQuickSwitchController(), - new TaskbarPinningController(this), + new TaskbarPinningController(this, () -> + DisplayController.INSTANCE.get(this).getInfo().isInDesktopMode()), bubbleControllersOptional); mLauncherPrefs = LauncherPrefs.get(this); diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java index 30954edbfd..42e6edb68a 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java @@ -25,6 +25,7 @@ import static com.android.launcher3.Flags.enableUnfoldStateAnimation; import static com.android.launcher3.config.FeatureFlags.ENABLE_TASKBAR_NAVBAR_UNIFICATION; import static com.android.launcher3.config.FeatureFlags.enableTaskbarNoRecreate; import static com.android.launcher3.util.DisplayController.CHANGE_DENSITY; +import static com.android.launcher3.util.DisplayController.CHANGE_DESKTOP_MODE; import static com.android.launcher3.util.DisplayController.CHANGE_NAVIGATION_MODE; import static com.android.launcher3.util.DisplayController.CHANGE_TASKBAR_PINNING; import static com.android.launcher3.util.DisplayController.TASKBAR_NOT_DESTROYED_TAG; @@ -142,7 +143,7 @@ public class TaskbarManager { private class RecreationListener implements DisplayController.DisplayInfoChangeListener { @Override public void onDisplayInfoChanged(Context context, DisplayController.Info info, int flags) { - if ((flags & (CHANGE_DENSITY | CHANGE_NAVIGATION_MODE + if ((flags & (CHANGE_DENSITY | CHANGE_NAVIGATION_MODE | CHANGE_DESKTOP_MODE | CHANGE_TASKBAR_PINNING)) != 0) { recreateTaskbar(); } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarPinningController.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarPinningController.kt index 2f2d636f0d..6c9cc642be 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarPinningController.kt +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarPinningController.kt @@ -23,6 +23,7 @@ import androidx.core.animation.doOnEnd import com.android.app.animation.Interpolators import com.android.launcher3.LauncherPrefs import com.android.launcher3.LauncherPrefs.Companion.TASKBAR_PINNING +import com.android.launcher3.LauncherPrefs.Companion.TASKBAR_PINNING_IN_DESKTOP_MODE import com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_DIVIDER_MENU_CLOSE import com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_DIVIDER_MENU_OPEN import com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_PINNED @@ -31,8 +32,10 @@ import com.android.launcher3.taskbar.TaskbarDividerPopupView.Companion.createAnd import java.io.PrintWriter /** Controls taskbar pinning through a popup view. */ -class TaskbarPinningController(private val context: TaskbarActivityContext) : - TaskbarControllers.LoggableTaskbarController { +class TaskbarPinningController( + private val context: TaskbarActivityContext, + private val isInDesktopModeProvider: () -> Boolean, +) : TaskbarControllers.LoggableTaskbarController { private lateinit var controllers: TaskbarControllers private lateinit var taskbarSharedState: TaskbarSharedState @@ -54,14 +57,22 @@ class TaskbarPinningController(private val context: TaskbarActivityContext) : if (!didPreferenceChange) { return } + val shouldPinTaskbar = + if (isInDesktopModeProvider()) { + !launcherPrefs.get(TASKBAR_PINNING_IN_DESKTOP_MODE) + } else { + !launcherPrefs.get(TASKBAR_PINNING) + } + val animateToValue = - if (!launcherPrefs.get(TASKBAR_PINNING)) { + if (shouldPinTaskbar) { statsLogManager.logger().log(LAUNCHER_TASKBAR_PINNED) PINNING_PERSISTENT } else { statsLogManager.logger().log(LAUNCHER_TASKBAR_UNPINNED) PINNING_TRANSIENT } + taskbarSharedState.taskbarWasPinned = animateToValue == PINNING_TRANSIENT animateTaskbarPinning(animateToValue) } @@ -123,13 +134,24 @@ class TaskbarPinningController(private val context: TaskbarActivityContext) : @VisibleForTesting fun recreateTaskbarAndUpdatePinningValue() { updateIsAnimatingTaskbarPinningAndNotifyTaskbarDragLayer(false) - launcherPrefs.put(TASKBAR_PINNING, !launcherPrefs.get(TASKBAR_PINNING)) + if (isInDesktopModeProvider()) { + launcherPrefs.put( + TASKBAR_PINNING_IN_DESKTOP_MODE, + !launcherPrefs.get(TASKBAR_PINNING_IN_DESKTOP_MODE) + ) + } else { + launcherPrefs.put(TASKBAR_PINNING, !launcherPrefs.get(TASKBAR_PINNING)) + } } override fun dumpLogs(prefix: String, pw: PrintWriter) { pw.println(prefix + "TaskbarPinningController:") pw.println("$prefix\tisAnimatingTaskbarPinning=$isAnimatingTaskbarPinning") pw.println("$prefix\tTASKBAR_PINNING shared pref =" + launcherPrefs.get(TASKBAR_PINNING)) + pw.println( + "$prefix\tTASKBAR_PINNING_IN_DESKTOP_MODE shared pref in desktop mode =" + + launcherPrefs.get(TASKBAR_PINNING_IN_DESKTOP_MODE) + ) } companion object { diff --git a/quickstep/src/com/android/quickstep/util/SystemWindowManagerProxy.java b/quickstep/src/com/android/quickstep/util/SystemWindowManagerProxy.java index 92685115a9..304b8f47eb 100644 --- a/quickstep/src/com/android/quickstep/util/SystemWindowManagerProxy.java +++ b/quickstep/src/com/android/quickstep/util/SystemWindowManagerProxy.java @@ -26,9 +26,11 @@ import android.view.WindowManager; import android.view.WindowMetrics; import com.android.internal.policy.SystemBarUtils; +import com.android.launcher3.statehandlers.DesktopVisibilityController; import com.android.launcher3.util.WindowBounds; import com.android.launcher3.util.window.CachedDisplayInfo; import com.android.launcher3.util.window.WindowManagerProxy; +import com.android.quickstep.LauncherActivityInterface; import java.util.List; import java.util.Set; @@ -48,6 +50,13 @@ public class SystemWindowManagerProxy extends WindowManagerProxy { .getMaxBounds(); } + @Override + public boolean isInDesktopMode() { + DesktopVisibilityController desktopController = + LauncherActivityInterface.INSTANCE.getDesktopVisibilityController(); + return desktopController != null && desktopController.areDesktopTasksVisible(); + } + @Override public int getRotation(Context displayInfoContext) { return displayInfoContext.getResources().getConfiguration().windowConfiguration diff --git a/quickstep/tests/src/com/android/quickstep/taskbar/controllers/TaskbarPinningControllerTest.kt b/quickstep/tests/src/com/android/quickstep/taskbar/controllers/TaskbarPinningControllerTest.kt index dbe4624e45..4d10f0f51e 100644 --- a/quickstep/tests/src/com/android/quickstep/taskbar/controllers/TaskbarPinningControllerTest.kt +++ b/quickstep/tests/src/com/android/quickstep/taskbar/controllers/TaskbarPinningControllerTest.kt @@ -22,6 +22,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.launcher3.LauncherPrefs import com.android.launcher3.LauncherPrefs.Companion.TASKBAR_PINNING +import com.android.launcher3.LauncherPrefs.Companion.TASKBAR_PINNING_IN_DESKTOP_MODE import com.android.launcher3.logging.StatsLogManager import com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_DIVIDER_MENU_CLOSE import com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_DIVIDER_MENU_OPEN @@ -53,7 +54,13 @@ import org.mockito.kotlin.whenever class TaskbarPinningControllerTest : TaskbarBaseTestCase() { private val taskbarDragLayer = mock() private val taskbarSharedState = mock() - private val launcherPrefs = mock { on { get(TASKBAR_PINNING) } doReturn false } + private var isInDesktopMode = false + private val isInDesktopModeProvider = { isInDesktopMode } + private val launcherPrefs = + mock { + on { get(TASKBAR_PINNING) } doReturn false + on { get(TASKBAR_PINNING_IN_DESKTOP_MODE) } doReturn false + } private val statsLogger = mock() private val statsLogManager = mock { on { logger() } doReturn statsLogger } private lateinit var pinningController: TaskbarPinningController @@ -64,7 +71,8 @@ class TaskbarPinningControllerTest : TaskbarBaseTestCase() { whenever(taskbarActivityContext.launcherPrefs).thenReturn(launcherPrefs) whenever(taskbarActivityContext.dragLayer).thenReturn(taskbarDragLayer) whenever(taskbarActivityContext.statsLogManager).thenReturn(statsLogManager) - pinningController = spy(TaskbarPinningController(taskbarActivityContext)) + pinningController = + spy(TaskbarPinningController(taskbarActivityContext, isInDesktopModeProvider)) pinningController.init(taskbarControllers, taskbarSharedState) } @@ -95,7 +103,7 @@ class TaskbarPinningControllerTest : TaskbarBaseTestCase() { } @Test - fun testOnCloseCallback_whenPreferenceChanged_shouldAnimateToPinnedTaskbar() { + fun testOnCloseCallback_whenLauncherPreferenceChanged_shouldAnimateToPinnedTaskbar() { whenever(launcherPrefs.get(TASKBAR_PINNING)).thenReturn(false) doNothing().whenever(pinningController).animateTaskbarPinning(any()) @@ -106,7 +114,7 @@ class TaskbarPinningControllerTest : TaskbarBaseTestCase() { } @Test - fun testOnCloseCallback_whenPreferenceChanged_shouldAnimateToTransientTaskbar() { + fun testOnCloseCallback_whenLauncherPreferenceChanged_shouldAnimateToTransientTaskbar() { whenever(launcherPrefs.get(TASKBAR_PINNING)).thenReturn(true) doNothing().whenever(pinningController).animateTaskbarPinning(any()) @@ -199,4 +207,13 @@ class TaskbarPinningControllerTest : TaskbarBaseTestCase() { assertThat(pinningController.isAnimatingTaskbarPinning).isFalse() verify(launcherPrefs, times(1)).put(TASKBAR_PINNING, true) } + + @Test + fun testRecreateTaskbarAndUpdatePinningValue_whenAnimationEnds_shouldUpdateTaskbarPinningDesktopModePref() { + isInDesktopMode = true + pinningController.recreateTaskbarAndUpdatePinningValue() + verify(taskbarDragLayer, times(1)).setAnimatingTaskbarPinning(false) + assertThat(pinningController.isAnimatingTaskbarPinning).isFalse() + verify(launcherPrefs, times(1)).put(TASKBAR_PINNING_IN_DESKTOP_MODE, true) + } } diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index f405b93c68..54aea38ef3 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -20,6 +20,7 @@ import static com.android.launcher3.LauncherPrefs.GRID_NAME; import static com.android.launcher3.Utilities.dpiFromPx; import static com.android.launcher3.testing.shared.ResourceUtils.INVALID_RESOURCE_HANDLE; import static com.android.launcher3.util.DisplayController.CHANGE_DENSITY; +import static com.android.launcher3.util.DisplayController.CHANGE_DESKTOP_MODE; import static com.android.launcher3.util.DisplayController.CHANGE_NAVIGATION_MODE; import static com.android.launcher3.util.DisplayController.CHANGE_SUPPORTED_BOUNDS; import static com.android.launcher3.util.DisplayController.CHANGE_TASKBAR_PINNING; @@ -236,7 +237,8 @@ public class InvariantDeviceProfile implements SafeCloseable { DisplayController.INSTANCE.get(context).setPriorityListener( (displayContext, info, flags) -> { if ((flags & (CHANGE_DENSITY | CHANGE_SUPPORTED_BOUNDS - | CHANGE_NAVIGATION_MODE | CHANGE_TASKBAR_PINNING)) != 0) { + | CHANGE_NAVIGATION_MODE | CHANGE_TASKBAR_PINNING + | CHANGE_DESKTOP_MODE)) != 0) { onConfigChanged(displayContext); } }); diff --git a/src/com/android/launcher3/LauncherPrefs.kt b/src/com/android/launcher3/LauncherPrefs.kt index 6a5001b37e..13181e87f2 100644 --- a/src/com/android/launcher3/LauncherPrefs.kt +++ b/src/com/android/launcher3/LauncherPrefs.kt @@ -253,6 +253,7 @@ class LauncherPrefs(private val encryptedContext: Context) : SafeCloseable { @JvmStatic fun get(context: Context): LauncherPrefs = INSTANCE.get(context) const val TASKBAR_PINNING_KEY = "TASKBAR_PINNING_KEY" + const val TASKBAR_PINNING_DESKTOP_MODE_KEY = "TASKBAR_PINNING_DESKTOP_MODE_KEY" const val SHOULD_SHOW_SMARTSPACE_KEY = "SHOULD_SHOW_SMARTSPACE_KEY" @JvmField val ICON_STATE = nonRestorableItem("pref_icon_shape_path", "", EncryptionType.ENCRYPTED) @@ -272,6 +273,9 @@ class LauncherPrefs(private val encryptedContext: Context) : SafeCloseable { @JvmField val TASKBAR_PINNING = backedUpItem(TASKBAR_PINNING_KEY, false, EncryptionType.DEVICE_PROTECTED) + @JvmField + val TASKBAR_PINNING_IN_DESKTOP_MODE = + backedUpItem(TASKBAR_PINNING_DESKTOP_MODE_KEY, true, EncryptionType.DEVICE_PROTECTED) @JvmField val DEVICE_TYPE = diff --git a/src/com/android/launcher3/util/DisplayController.java b/src/com/android/launcher3/util/DisplayController.java index 8806e273ae..92fc38ff71 100644 --- a/src/com/android/launcher3/util/DisplayController.java +++ b/src/com/android/launcher3/util/DisplayController.java @@ -23,6 +23,8 @@ import static com.android.launcher3.InvariantDeviceProfile.TYPE_MULTI_DISPLAY; import static com.android.launcher3.InvariantDeviceProfile.TYPE_PHONE; import static com.android.launcher3.InvariantDeviceProfile.TYPE_TABLET; import static com.android.launcher3.LauncherPrefs.TASKBAR_PINNING; +import static com.android.launcher3.LauncherPrefs.TASKBAR_PINNING_DESKTOP_MODE_KEY; +import static com.android.launcher3.LauncherPrefs.TASKBAR_PINNING_IN_DESKTOP_MODE; import static com.android.launcher3.LauncherPrefs.TASKBAR_PINNING_KEY; import static com.android.launcher3.Utilities.dpiFromPx; import static com.android.launcher3.config.FeatureFlags.enableTaskbarPinning; @@ -88,10 +90,11 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { public static final int CHANGE_SUPPORTED_BOUNDS = 1 << 3; public static final int CHANGE_NAVIGATION_MODE = 1 << 4; public static final int CHANGE_TASKBAR_PINNING = 1 << 5; + public static final int CHANGE_DESKTOP_MODE = 1 << 6; public static final int CHANGE_ALL = CHANGE_ACTIVE_SCREEN | CHANGE_ROTATION | CHANGE_DENSITY | CHANGE_SUPPORTED_BOUNDS | CHANGE_NAVIGATION_MODE - | CHANGE_TASKBAR_PINNING; + | CHANGE_TASKBAR_PINNING | CHANGE_DESKTOP_MODE; private static final String ACTION_OVERLAY_CHANGED = "android.intent.action.OVERLAY_CHANGED"; private static final String TARGET_OVERLAY_PACKAGE = "android"; @@ -145,16 +148,22 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { private void attachTaskbarPinningSharedPreferenceChangeListener(Context context) { mTaskbarPinningPreferenceChangeListener = (sharedPreferences, key) -> { - if (TASKBAR_PINNING_KEY.equals(key) - && mInfo.mIsTaskbarPinned != LauncherPrefs.get(mContext).get( - TASKBAR_PINNING) - ) { + LauncherPrefs prefs = LauncherPrefs.get(mContext); + boolean isTaskbarPinningChanged = TASKBAR_PINNING_KEY.equals(key) + && mInfo.mIsTaskbarPinned != prefs.get(TASKBAR_PINNING); + boolean isTaskbarPinningDesktopModeChanged = + TASKBAR_PINNING_DESKTOP_MODE_KEY.equals(key) + && mInfo.mIsTaskbarPinnedInDesktopMode != prefs.get( + TASKBAR_PINNING_IN_DESKTOP_MODE); + if (isTaskbarPinningChanged || isTaskbarPinningDesktopModeChanged) { handleInfoChange(mWindowContext.getDisplay()); } }; LauncherPrefs.get(context).addListener( mTaskbarPinningPreferenceChangeListener, TASKBAR_PINNING); + LauncherPrefs.get(context).addListener( + mTaskbarPinningPreferenceChangeListener, TASKBAR_PINNING_IN_DESKTOP_MODE); } /** @@ -171,6 +180,13 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { return INSTANCE.get(context).getInfo().isTransientTaskbar(); } + /** + * Handles info change for desktop mode. + */ + public static void handleInfoChangeForDesktopMode(Context context) { + INSTANCE.get(context).handleInfoChange(context.getDisplay()); + } + /** * Enables transient taskbar status for tests. */ @@ -192,6 +208,8 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { if (enableTaskbarPinning()) { LauncherPrefs.get(mContext).removeListener( mTaskbarPinningPreferenceChangeListener, TASKBAR_PINNING); + LauncherPrefs.get(mContext).removeListener( + mTaskbarPinningPreferenceChangeListener, TASKBAR_PINNING_IN_DESKTOP_MODE); } if (mWindowContext != null) { mWindowContext.unregisterComponentCallbacks(this); @@ -309,9 +327,15 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { FileLog.w(TAG, "(CHANGE_SUPPORTED_BOUNDS) perDisplayBounds: " + newInfo.mPerDisplayBounds); } - if (newInfo.mIsTaskbarPinned != oldInfo.mIsTaskbarPinned) { + if ((newInfo.mIsTaskbarPinned != oldInfo.mIsTaskbarPinned) + || (newInfo.mIsTaskbarPinnedInDesktopMode + != oldInfo.mIsTaskbarPinnedInDesktopMode)) { change |= CHANGE_TASKBAR_PINNING; } + if (newInfo.mIsInDesktopMode != oldInfo.mIsInDesktopMode) { + change |= CHANGE_DESKTOP_MODE; + } + if (DEBUG) { Log.d(TAG, "handleInfoChange - change: " + getChangeFlagsString(change)); } @@ -355,6 +379,9 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { new ArrayMap<>(); private final boolean mIsTaskbarPinned; + private final boolean mIsTaskbarPinnedInDesktopMode; + + private final boolean mIsInDesktopMode; public Info(Context displayInfoContext) { /* don't need system overrides for external displays */ @@ -414,6 +441,9 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { } mIsTaskbarPinned = LauncherPrefs.get(displayInfoContext).get(TASKBAR_PINNING); + mIsTaskbarPinnedInDesktopMode = LauncherPrefs.get(displayInfoContext).get( + TASKBAR_PINNING_IN_DESKTOP_MODE); + mIsInDesktopMode = wmProxy.isInDesktopMode(); } /** @@ -430,10 +460,14 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { return sTransientTaskbarStatusForTests; } if (enableTaskbarPinning()) { + if (mIsInDesktopMode) { + return !mIsTaskbarPinnedInDesktopMode; + } return !mIsTaskbarPinned; } return true; } + /** * Returns whether the taskbar is pinned in gesture navigation mode. */ @@ -441,6 +475,10 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { return navigationMode == NavigationMode.NO_BUTTON && !isTransientTaskbar(); } + public boolean isInDesktopMode() { + return mIsInDesktopMode; + } + /** * Returns {@code true} if the bounds represent a tablet. */ @@ -501,6 +539,7 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { appendFlag(result, change, CHANGE_SUPPORTED_BOUNDS, "CHANGE_SUPPORTED_BOUNDS"); appendFlag(result, change, CHANGE_NAVIGATION_MODE, "CHANGE_NAVIGATION_MODE"); appendFlag(result, change, CHANGE_TASKBAR_PINNING, "CHANGE_TASKBAR_VARIANT"); + appendFlag(result, change, CHANGE_DESKTOP_MODE, "CHANGE_DESKTOP_MODE"); return result.toString(); } @@ -516,6 +555,8 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { pw.println(" densityDpi=" + info.densityDpi); pw.println(" navigationMode=" + info.navigationMode.name()); pw.println(" isTaskbarPinned=" + info.mIsTaskbarPinned); + pw.println(" isTaskbarPinnedInDesktopMode=" + info.mIsTaskbarPinnedInDesktopMode); + pw.println(" isInDesktopMode=" + info.mIsInDesktopMode); pw.println(" currentSize=" + info.currentSize); info.mPerDisplayBounds.forEach((key, value) -> pw.println( " perDisplayBounds - " + key + ": " + value)); diff --git a/src/com/android/launcher3/util/window/WindowManagerProxy.java b/src/com/android/launcher3/util/window/WindowManagerProxy.java index 4b004f34d1..0817c0ab78 100644 --- a/src/com/android/launcher3/util/window/WindowManagerProxy.java +++ b/src/com/android/launcher3/util/window/WindowManagerProxy.java @@ -114,6 +114,13 @@ public class WindowManagerProxy implements ResourceBasedOverride, SafeCloseable return result; } + /** + * Returns if we are in desktop mode or not. + */ + public boolean isInDesktopMode() { + return false; + } + /** * Returns the real bounds for the provided display after applying any insets normalization */ diff --git a/tests/src/com/android/launcher3/AbstractDeviceProfileTest.kt b/tests/src/com/android/launcher3/AbstractDeviceProfileTest.kt index aefc2db2ea..e3787339b1 100644 --- a/tests/src/com/android/launcher3/AbstractDeviceProfileTest.kt +++ b/tests/src/com/android/launcher3/AbstractDeviceProfileTest.kt @@ -306,6 +306,7 @@ abstract class AbstractDeviceProfileTest { context.putObject(LauncherPrefs.INSTANCE, launcherPrefs) whenever(launcherPrefs.get(LauncherPrefs.TASKBAR_PINNING)).thenReturn(false) + whenever(launcherPrefs.get(LauncherPrefs.TASKBAR_PINNING_IN_DESKTOP_MODE)).thenReturn(true) val info = spy(DisplayController.Info(context, windowManagerProxy, perDisplayBoundsCache)) whenever(displayController.info).thenReturn(info) whenever(info.isTransientTaskbar).thenReturn(isGestureMode) diff --git a/tests/src/com/android/launcher3/util/DisplayControllerTest.kt b/tests/src/com/android/launcher3/util/DisplayControllerTest.kt index 2e57ad5b1b..273f0c4491 100644 --- a/tests/src/com/android/launcher3/util/DisplayControllerTest.kt +++ b/tests/src/com/android/launcher3/util/DisplayControllerTest.kt @@ -31,6 +31,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.launcher3.LauncherPrefs import com.android.launcher3.LauncherPrefs.Companion.TASKBAR_PINNING +import com.android.launcher3.LauncherPrefs.Companion.TASKBAR_PINNING_IN_DESKTOP_MODE import com.android.launcher3.util.DisplayController.CHANGE_DENSITY import com.android.launcher3.util.DisplayController.CHANGE_ROTATION import com.android.launcher3.util.DisplayController.CHANGE_TASKBAR_PINNING @@ -94,6 +95,7 @@ class DisplayControllerTest { whenever(context.getObject(eq(WindowManagerProxy.INSTANCE))).thenReturn(windowManagerProxy) whenever(context.getObject(eq(LauncherPrefs.INSTANCE))).thenReturn(launcherPrefs) whenever(launcherPrefs.get(TASKBAR_PINNING)).thenReturn(false) + whenever(launcherPrefs.get(TASKBAR_PINNING_IN_DESKTOP_MODE)).thenReturn(true) // Mock WindowManagerProxy val displayInfo = CachedDisplayInfo(Point(width, height), Surface.ROTATION_0) @@ -170,4 +172,13 @@ class DisplayControllerTest { verify(displayInfoChangeListener) .onDisplayInfoChanged(any(), any(), eq(CHANGE_TASKBAR_PINNING)) } + + @Test + @UiThreadTest + fun testTaskbarPinningChangeInDesktopMode() { + whenever(launcherPrefs.get(TASKBAR_PINNING_IN_DESKTOP_MODE)).thenReturn(false) + displayController.handleInfoChange(display) + verify(displayInfoChangeListener) + .onDisplayInfoChanged(any(), any(), eq(CHANGE_TASKBAR_PINNING)) + } }