diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java index 3717d9c9aa..b7576c31b6 100644 --- a/quickstep/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java @@ -982,12 +982,11 @@ public class TouchInteractionService extends Service { base = new TaskbarUnstashInputConsumer(this, base, mInputMonitorCompat, tac, mOverviewCommandHelper); } - } else if (canStartSystemGesture && FeatureFlags.ENABLE_LONG_PRESS_NAV_HANDLE.get() - && !previousGestureState.isRecentsAnimationRunning()) { + } else if (canStartSystemGesture && !previousGestureState.isRecentsAnimationRunning()) { reasonString.append(NEWLINE_PREFIX) .append(reasonPrefix) .append(SUBSTRING_PREFIX) - .append("Long press nav handle enabled, ") + .append("Not running recents animation, ") .append("using NavHandleLongPressInputConsumer"); base = new NavHandleLongPressInputConsumer(this, base, mInputMonitorCompat, mDeviceState); diff --git a/quickstep/src/com/android/quickstep/inputconsumers/NavHandleLongPressHandler.java b/quickstep/src/com/android/quickstep/inputconsumers/NavHandleLongPressHandler.java index 14305cfde6..57c05e93cf 100644 --- a/quickstep/src/com/android/quickstep/inputconsumers/NavHandleLongPressHandler.java +++ b/quickstep/src/com/android/quickstep/inputconsumers/NavHandleLongPressHandler.java @@ -48,17 +48,13 @@ public class NavHandleLongPressHandler implements ResourceBasedOverride { } /** - * Called when nav handle gesture starts. Returns true if long press nav handle is enabled and - * supported. + * Called when nav handle gesture starts. */ - public boolean canStartTouch() { - return false; - } + public void onTouchStarted() {} /** * Called when nav handle gesture is finished by the user lifting their finger or the system * cancelling the touch for some other reason. */ - public void onTouchFinished() { - } + public void onTouchFinished() {} } diff --git a/quickstep/src/com/android/quickstep/inputconsumers/NavHandleLongPressInputConsumer.java b/quickstep/src/com/android/quickstep/inputconsumers/NavHandleLongPressInputConsumer.java index 8051e68f2f..0127cc989f 100644 --- a/quickstep/src/com/android/quickstep/inputconsumers/NavHandleLongPressInputConsumer.java +++ b/quickstep/src/com/android/quickstep/inputconsumers/NavHandleLongPressInputConsumer.java @@ -16,6 +16,8 @@ package com.android.quickstep.inputconsumers; import static com.android.launcher3.LauncherPrefs.LONG_PRESS_NAV_HANDLE_TIMEOUT_MS; +import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_DEEP_PRESS_NAVBAR; +import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_LONG_PRESS_NAVBAR; import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; import android.content.Context; @@ -25,9 +27,11 @@ import android.view.ViewConfiguration; import com.android.launcher3.LauncherPrefs; import com.android.launcher3.R; import com.android.launcher3.config.FeatureFlags; +import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.util.DisplayController; import com.android.quickstep.InputConsumer; import com.android.quickstep.RecentsAnimationDeviceState; +import com.android.quickstep.TopTaskTracker; import com.android.systemui.shared.system.InputMonitorCompat; /** @@ -43,8 +47,11 @@ public class NavHandleLongPressInputConsumer extends DelegateInputConsumer { private final float mTouchSlopSquared; private final int mLongPressTimeout; private final boolean mDeepPressEnabled; + private final StatsLogManager mStatsLogManager; + private final TopTaskTracker mTopTaskTracker; private MotionEvent mCurrentDownEvent; + private boolean mDeepPressLogged; // Whether deep press has been logged for the current touch. public NavHandleLongPressInputConsumer(Context context, InputConsumer delegate, InputMonitorCompat inputMonitor, RecentsAnimationDeviceState deviceState) { @@ -60,6 +67,8 @@ public class NavHandleLongPressInputConsumer extends DelegateInputConsumer { } mTouchSlopSquared = deviceState.getSquaredTouchSlop(); mNavHandleLongPressHandler = NavHandleLongPressHandler.newInstance(context); + mStatsLogManager = StatsLogManager.newInstance(context); + mTopTaskTracker = TopTaskTracker.INSTANCE.get(context); } @Override @@ -87,8 +96,9 @@ public class NavHandleLongPressInputConsumer extends DelegateInputConsumer { mCurrentDownEvent.recycle(); } mCurrentDownEvent = MotionEvent.obtain(ev); - if (isInNavBarHorizontalArea(ev.getRawX()) - && mNavHandleLongPressHandler.canStartTouch()) { + mDeepPressLogged = false; + if (isInNavBarHorizontalArea(ev.getRawX())) { + mNavHandleLongPressHandler.onTouchStarted(); MAIN_EXECUTOR.getHandler().postDelayed(mTriggerLongPress, mLongPressTimeout); } @@ -110,25 +120,41 @@ public class NavHandleLongPressInputConsumer extends DelegateInputConsumer { } // If the gesture is deep press then trigger long press asap - if (mDeepPressEnabled && MAIN_EXECUTOR.getHandler().hasCallbacks(mTriggerLongPress) - && ev.getClassification() == MotionEvent.CLASSIFICATION_DEEP_PRESS) { - MAIN_EXECUTOR.getHandler().removeCallbacks(mTriggerLongPress); - MAIN_EXECUTOR.getHandler().post(mTriggerLongPress); + if (MAIN_EXECUTOR.getHandler().hasCallbacks(mTriggerLongPress) + && ev.getClassification() == MotionEvent.CLASSIFICATION_DEEP_PRESS + && !mDeepPressLogged) { + // Log deep press even if feature is disabled. + String runningPackage = mTopTaskTracker.getCachedTopTask( + /* filterOnlyVisibleRecents */ true).getPackageName(); + mStatsLogManager.logger().withPackageName(runningPackage) + .log(LAUNCHER_DEEP_PRESS_NAVBAR); + mDeepPressLogged = true; + + // But only trigger if the feature is enabled. + if (mDeepPressEnabled) { + MAIN_EXECUTOR.getHandler().removeCallbacks(mTriggerLongPress); + MAIN_EXECUTOR.getHandler().post(mTriggerLongPress); + } } } private void triggerLongPress() { + String runningPackage = mTopTaskTracker.getCachedTopTask( + /* filterOnlyVisibleRecents */ true).getPackageName(); + mStatsLogManager.logger().withPackageName(runningPackage).log(LAUNCHER_LONG_PRESS_NAVBAR); + Runnable longPressRunnable = mNavHandleLongPressHandler.getLongPressRunnable(); - if (longPressRunnable != null) { - OtherActivityInputConsumer oaic = getInputConsumerOfClass( - OtherActivityInputConsumer.class); - if (oaic != null && oaic.hasStartedTouchTracking()) { - oaic.setForceFinishRecentsTransitionCallback(longPressRunnable); - setActive(mCurrentDownEvent); - } else { - setActive(mCurrentDownEvent); - MAIN_EXECUTOR.post(longPressRunnable); - } + if (longPressRunnable == null) { + return; + } + + OtherActivityInputConsumer oaic = getInputConsumerOfClass(OtherActivityInputConsumer.class); + if (oaic != null && oaic.hasStartedTouchTracking()) { + oaic.setForceFinishRecentsTransitionCallback(longPressRunnable); + setActive(mCurrentDownEvent); + } else { + setActive(mCurrentDownEvent); + MAIN_EXECUTOR.post(longPressRunnable); } } diff --git a/src/com/android/launcher3/logging/StatsLogManager.java b/src/com/android/launcher3/logging/StatsLogManager.java index 9980218276..f90779c725 100644 --- a/src/com/android/launcher3/logging/StatsLogManager.java +++ b/src/com/android/launcher3/logging/StatsLogManager.java @@ -275,6 +275,12 @@ public class StatsLogManager implements ResourceBasedOverride { @UiEvent(doc = "User swipes or fling in DOWN direction on the bottom bazel area.") LAUNCHER_SWIPEDOWN_NAVBAR(573), + @UiEvent(doc = "User deep presses on the bottom bezel area.") + LAUNCHER_DEEP_PRESS_NAVBAR(1543), + + @UiEvent(doc = "User long presses on the bottom bezel area.") + LAUNCHER_LONG_PRESS_NAVBAR(1544), + @UiEvent(doc = "User swipes or fling in UP direction from bottom bazel area.") LAUNCHER_HOME_GESTURE(574),