Fixing some missing swipecancelled events

Updating NavBarPosition to expose more constructor and getters

Flag: com.android.launcher3.use_activity_overlay
Test: atest SwipeTransitionTest
Bug: 340432854
Change-Id: I86193fa26c0337d50e366cecb2d7debf37940fe1
This commit is contained in:
Sunny Goyal
2024-05-23 16:09:45 -07:00
parent 59fd8cbfaf
commit 97ceed42e6
10 changed files with 57 additions and 64 deletions

View File

@@ -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());
}
}
}

View File

@@ -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());

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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
}

View File

@@ -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;

View File

@@ -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();
}
};

View File

@@ -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)

View File

@@ -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<>();

View File

@@ -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);