diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java index c33e4cceed..dc22390526 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java @@ -1275,7 +1275,7 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer if ((flags & CHANGE_NAVIGATION_MODE) != 0) { getDragLayer().recreateControllers(); if (mActionsView != null) { - mActionsView.updateVerticalMargin(info.navigationMode); + mActionsView.updateVerticalMargin(info.getNavigationMode()); } } } diff --git a/quickstep/src/com/android/quickstep/RotationTouchHelper.java b/quickstep/src/com/android/quickstep/RotationTouchHelper.java index 3380291ab9..6f1ab7d800 100644 --- a/quickstep/src/com/android/quickstep/RotationTouchHelper.java +++ b/quickstep/src/com/android/quickstep/RotationTouchHelper.java @@ -157,7 +157,7 @@ public class RotationTouchHelper implements DisplayInfoChangeListener, SafeClose // Register for navigation mode changes mDisplayController.addChangeListener(this); DisplayController.Info info = mDisplayController.getInfo(); - onDisplayInfoChangedInternal(info, CHANGE_ALL, info.navigationMode.hasGestures); + onDisplayInfoChangedInternal(info, CHANGE_ALL, info.getNavigationMode().hasGestures); runOnDestroy(() -> mDisplayController.removeChangeListener(this)); mOrientationListener = new OrientationEventListener(mContext) { @@ -291,7 +291,7 @@ public class RotationTouchHelper implements DisplayInfoChangeListener, SafeClose } if ((flags & CHANGE_NAVIGATION_MODE) != 0) { - NavigationMode newMode = info.navigationMode; + NavigationMode newMode = info.getNavigationMode(); mOrientationTouchTransformer.setNavigationMode(newMode, mDisplayController.getInfo(), mContext.getResources()); diff --git a/quickstep/src/com/android/quickstep/logging/SettingsChangeLogger.java b/quickstep/src/com/android/quickstep/logging/SettingsChangeLogger.java index f8d695ccde..5ac04da0ac 100644 --- a/quickstep/src/com/android/quickstep/logging/SettingsChangeLogger.java +++ b/quickstep/src/com/android/quickstep/logging/SettingsChangeLogger.java @@ -148,7 +148,7 @@ public class SettingsChangeLogger implements @Override public void onDisplayInfoChanged(Context context, Info info, int flags) { if ((flags & CHANGE_NAVIGATION_MODE) != 0) { - mNavMode = info.navigationMode; + mNavMode = info.getNavigationMode(); mStatsLogManager.logger().log(mNavMode.launcherEvent); } } diff --git a/quickstep/src/com/android/quickstep/util/NavBarPosition.java b/quickstep/src/com/android/quickstep/util/NavBarPosition.java deleted file mode 100644 index 94185120b4..0000000000 --- a/quickstep/src/com/android/quickstep/util/NavBarPosition.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.quickstep.util; - -import static com.android.launcher3.util.NavigationMode.NO_BUTTON; - -import android.view.Surface; - -import com.android.launcher3.util.DisplayController.Info; -import com.android.launcher3.util.NavigationMode; - -/** - * Utility class to check nav bar position. - */ -public class NavBarPosition { - - private final boolean mIsTablet; - private final NavigationMode mMode; - private final int mDisplayRotation; - - public NavBarPosition(NavigationMode mode, Info info) { - mIsTablet = info.isTablet(info.realBounds); - mMode = mode; - mDisplayRotation = info.rotation; - } - - public boolean isRightEdge() { - return mMode != NO_BUTTON && mDisplayRotation == Surface.ROTATION_90 && !mIsTablet; - } - - public boolean isLeftEdge() { - return mMode != NO_BUTTON && mDisplayRotation == Surface.ROTATION_270 && !mIsTablet; - } - - public float getRotation() { - return isLeftEdge() ? 90 : (isRightEdge() ? -90 : 0); - } -} diff --git a/quickstep/src/com/android/quickstep/util/NavBarPosition.kt b/quickstep/src/com/android/quickstep/util/NavBarPosition.kt new file mode 100644 index 0000000000..43cf5407f3 --- /dev/null +++ b/quickstep/src/com/android/quickstep/util/NavBarPosition.kt @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.quickstep.util + +import android.view.Surface +import com.android.launcher3.util.DisplayController.Info +import com.android.launcher3.util.NavigationMode +import com.android.launcher3.util.NavigationMode.NO_BUTTON + +/** Utility class to check nav bar position. */ +data class NavBarPosition( + val isTablet: Boolean, + val displayRotation: Int, + val mode: NavigationMode +) { + constructor( + mode: NavigationMode, + info: Info + ) : this(info.isTablet(info.realBounds), info.rotation, mode) + + val isRightEdge: Boolean + get() = mode != NO_BUTTON && displayRotation == Surface.ROTATION_90 && !isTablet + val isLeftEdge: Boolean + get() = mode != NO_BUTTON && displayRotation == Surface.ROTATION_270 && !isTablet + + val rotation: Float + get() = if (isLeftEdge) 90f else if (isRightEdge) -90f else 0f +} diff --git a/quickstep/src/com/android/quickstep/util/TriggerSwipeUpTouchTracker.java b/quickstep/src/com/android/quickstep/util/TriggerSwipeUpTouchTracker.java index c63a58ee75..671b2eabae 100644 --- a/quickstep/src/com/android/quickstep/util/TriggerSwipeUpTouchTracker.java +++ b/quickstep/src/com/android/quickstep/util/TriggerSwipeUpTouchTracker.java @@ -99,6 +99,7 @@ public class TriggerSwipeUpTouchTracker { if (mDisableHorizontalSwipe && Math.abs(displacementX) > Math.abs(displacementY)) { // Horizontal gesture is not allowed in this region + mOnSwipeUp.onSwipeUpCancelled(); endTouchTracking(); break; } @@ -111,6 +112,7 @@ public class TriggerSwipeUpTouchTracker { } case ACTION_CANCEL: + mOnSwipeUp.onSwipeUpCancelled(); endTouchTracking(); break; diff --git a/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java b/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java index 094fd4c823..4459ed6944 100644 --- a/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java +++ b/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java @@ -162,8 +162,8 @@ public class NavigationModeSwitchRule implements TestRule { final Context targetContext = getInstrumentation().getTargetContext(); final DisplayController.DisplayInfoChangeListener listener = (context, info, flags) -> { - if (LauncherInstrumentation.getNavigationModel(info.navigationMode.resValue) - == expectedMode) { + if (LauncherInstrumentation.getNavigationModel( + info.getNavigationMode().resValue) == expectedMode) { latch.countDown(); } }; diff --git a/quickstep/tests/src/com/android/quickstep/RecentsAnimationDeviceStateTest.kt b/quickstep/tests/src/com/android/quickstep/RecentsAnimationDeviceStateTest.kt index 2916952c41..5157c71471 100644 --- a/quickstep/tests/src/com/android/quickstep/RecentsAnimationDeviceStateTest.kt +++ b/quickstep/tests/src/com/android/quickstep/RecentsAnimationDeviceStateTest.kt @@ -18,6 +18,7 @@ import org.mockito.Mock import org.mockito.Mockito.reset import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations +import org.mockito.kotlin.doReturn import org.mockito.kotlin.verifyZeroInteractions import org.mockito.kotlin.whenever @@ -79,7 +80,7 @@ class RecentsAnimationDeviceStateTest { @Test fun onDisplayInfoChanged_noButton_registerExclusionListener() { - whenever(windowManagerProxy.getNavigationMode(context)).thenReturn(NavigationMode.NO_BUTTON) + doReturn(NavigationMode.NO_BUTTON).whenever(info).getNavigationMode() underTest.onDisplayInfoChanged(context, info, CHANGE_ROTATION or CHANGE_NAVIGATION_MODE) diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index a667c9674b..d6469dda59 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -2402,7 +2402,7 @@ public class DeviceProfile { mTransposeLayoutWithOrientation = !mInfo.isTablet(mWindowBounds); } if (mIsGestureMode == null) { - mIsGestureMode = mInfo.navigationMode.hasGestures; + mIsGestureMode = mInfo.getNavigationMode().hasGestures; } if (mDotRendererCache == null) { mDotRendererCache = new SparseArray<>(); diff --git a/src/com/android/launcher3/util/DisplayController.java b/src/com/android/launcher3/util/DisplayController.java index 92fc38ff71..21eee5546b 100644 --- a/src/com/android/launcher3/util/DisplayController.java +++ b/src/com/android/launcher3/util/DisplayController.java @@ -170,7 +170,7 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { * Returns the current navigation mode */ public static NavigationMode getNavigationMode(Context context) { - return INSTANCE.get(context).getInfo().navigationMode; + return INSTANCE.get(context).getInfo().getNavigationMode(); } /** @@ -302,7 +302,7 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { Info newInfo = new Info(displayInfoContext, wmProxy, oldInfo.mPerDisplayBounds); if (newInfo.densityDpi != oldInfo.densityDpi || newInfo.fontScale != oldInfo.fontScale - || newInfo.navigationMode != oldInfo.navigationMode) { + || newInfo.getNavigationMode() != oldInfo.getNavigationMode()) { // Cache may not be valid anymore, recreate without cache newInfo = new Info(displayInfoContext, wmProxy, wmProxy.estimateInternalDisplayBounds(displayInfoContext)); @@ -318,7 +318,7 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { if (newInfo.densityDpi != oldInfo.densityDpi || newInfo.fontScale != oldInfo.fontScale) { change |= CHANGE_DENSITY; } - if (newInfo.navigationMode != oldInfo.navigationMode) { + if (newInfo.getNavigationMode() != oldInfo.getNavigationMode()) { change |= CHANGE_NAVIGATION_MODE; } if (!newInfo.supportedBounds.equals(oldInfo.supportedBounds) @@ -369,7 +369,7 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { // Configuration property public final float fontScale; private final int densityDpi; - public final NavigationMode navigationMode; + private final NavigationMode navigationMode; private final PortraitSize mScreenSizeDp; // WindowBounds @@ -553,7 +553,7 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { pw.println(" rotation=" + info.rotation); pw.println(" fontScale=" + info.fontScale); pw.println(" densityDpi=" + info.densityDpi); - pw.println(" navigationMode=" + info.navigationMode.name()); + pw.println(" navigationMode=" + info.getNavigationMode().name()); pw.println(" isTaskbarPinned=" + info.mIsTaskbarPinned); pw.println(" isTaskbarPinnedInDesktopMode=" + info.mIsTaskbarPinnedInDesktopMode); pw.println(" isInDesktopMode=" + info.mIsInDesktopMode);