From bf44bc342faab151be351a8f6b52dc9a97cbb0f3 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Wed, 24 Apr 2019 11:32:20 -0700 Subject: [PATCH] Fix NPE / add downX,Y location for all swipes/ add extra debugging info Bug: 122700646 Bug: 127840207 Change-Id: I5862c8950565df172a933114e1fb2f9c4575593e --- .../NavBarToHomeTouchController.java | 4 +--- .../quickstep/OtherActivityInputConsumer.java | 3 ++- .../quickstep/WindowTransformSwipeHandler.java | 6 +++++- .../logging/UserEventDispatcherExtension.java | 10 +++++----- .../android/launcher3/logging/LoggerUtils.java | 18 ++++++++++++++---- .../launcher3/logging/UserEventDispatcher.java | 7 ++++--- .../AbstractStateChangeTouchController.java | 2 +- .../android/launcher3/touch/SwipeDetector.java | 7 +++++++ 8 files changed, 39 insertions(+), 18 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java index 8b1b51d43f..a6c4445619 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java @@ -17,8 +17,6 @@ package com.android.launcher3.uioverrides.touchcontrollers; import static android.view.View.TRANSLATION_X; -import static com.android.launcher3.AbstractFloatingView.TYPE_ALL; -import static com.android.launcher3.AbstractFloatingView.TYPE_HIDE_BACK_BUTTON; import static com.android.launcher3.LauncherState.ALL_APPS; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.OVERVIEW; @@ -47,7 +45,6 @@ import com.android.launcher3.anim.Interpolators; import com.android.launcher3.compat.AccessibilityManagerCompat; import com.android.launcher3.touch.SwipeDetector; import com.android.launcher3.userevent.nano.LauncherLogProto; -import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Command; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch; import com.android.launcher3.util.TouchController; import com.android.quickstep.views.RecentsView; @@ -219,6 +216,7 @@ public class NavBarToHomeTouchController implements TouchController, SwipeDetect private void logStateChange(int startContainerType, int logAction) { mLauncher.getUserEventDispatcher().logStateChangeAction(logAction, LauncherLogProto.Action.Direction.UP, + mSwipeDetector.getDownX(), mSwipeDetector.getDownY(), LauncherLogProto.ContainerType.NAVBAR, startContainerType, mEndState.containerType, diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java index 9c8e80e5c3..5a15f3d300 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java @@ -347,7 +347,8 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC : velocityY; mInteractionHandler.updateDisplacement(getDisplacement(ev) - mStartDisplacement); - mInteractionHandler.onGestureEnded(velocity, new PointF(velocityX, velocityY)); + mInteractionHandler.onGestureEnded(velocity, new PointF(velocityX, velocityY), + mDownPos); } else { // Since we start touch tracking on DOWN, we may reach this state without actually // starting the gesture. In that case, just cleanup immediately. diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java index 365e171693..d06046380c 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java @@ -253,6 +253,7 @@ public class WindowTransformSwipeHandler private boolean mGestureStarted; private int mLogAction = Touch.SWIPE; private int mLogDirection = Direction.UP; + private PointF mDownPos; private final RecentsAnimationWrapper mRecentsAnimationWrapper; @@ -703,9 +704,10 @@ public class WindowTransformSwipeHandler /** * @param endVelocity The velocity in the direction of the nav bar to the middle of the screen. * @param velocity The x and y components of the velocity when the gesture ends. + * @param downPos The x and y value of where the gesture started. */ @UiThread - public void onGestureEnded(float endVelocity, PointF velocity) { + public void onGestureEnded(float endVelocity, PointF velocity, PointF downPos) { float flingThreshold = mContext.getResources() .getDimension(R.dimen.quickstep_fling_threshold_velocity); boolean isFling = mGestureStarted && Math.abs(endVelocity) > flingThreshold; @@ -718,6 +720,7 @@ public class WindowTransformSwipeHandler } else { mLogDirection = velocity.x < 0 ? Direction.LEFT : Direction.RIGHT; } + mDownPos = downPos; handleNormalGestureEnd(endVelocity, isFling, velocity); } @@ -856,6 +859,7 @@ public class WindowTransformSwipeHandler : mRecentsView.getNextPage(); UserEventDispatcher.newInstance(mContext).logStateChangeAction( mLogAction, mLogDirection, + (int) mDownPos.x, (int) mDownPos.y, ContainerType.NAVBAR, ContainerType.APP, endTarget.containerType, pageIndex); diff --git a/quickstep/src/com/android/quickstep/logging/UserEventDispatcherExtension.java b/quickstep/src/com/android/quickstep/logging/UserEventDispatcherExtension.java index ca7711f6bf..4a11601bbb 100644 --- a/quickstep/src/com/android/quickstep/logging/UserEventDispatcherExtension.java +++ b/quickstep/src/com/android/quickstep/logging/UserEventDispatcherExtension.java @@ -42,13 +42,13 @@ public class UserEventDispatcherExtension extends UserEventDispatcher { public UserEventDispatcherExtension(Context context) { } - public void logStateChangeAction(int action, int dir, int srcChildTargetType, - int srcParentContainerType, int dstContainerType, - int pageIndex) { + public void logStateChangeAction(int action, int dir, int downX, int downY, + int srcChildTargetType, int srcParentContainerType, + int dstContainerType, int pageIndex) { new MetricsLoggerCompat().visibility(MetricsLoggerCompat.OVERVIEW_ACTIVITY, dstContainerType == LauncherLogProto.ContainerType.TASKSWITCHER); - super.logStateChangeAction(action, dir, srcChildTargetType, srcParentContainerType, - dstContainerType, pageIndex); + super.logStateChangeAction(action, dir, downX, downY, srcChildTargetType, + srcParentContainerType, dstContainerType, pageIndex); } public void logActionTip(int actionType, int viewType) { diff --git a/src/com/android/launcher3/logging/LoggerUtils.java b/src/com/android/launcher3/logging/LoggerUtils.java index d208077d5b..1ffa698572 100644 --- a/src/com/android/launcher3/logging/LoggerUtils.java +++ b/src/com/android/launcher3/logging/LoggerUtils.java @@ -41,7 +41,6 @@ import java.lang.reflect.Modifier; /** * Helper methods for logging. */ -@Deprecated public class LoggerUtils { private static final ArrayMap> sNameCache = new ArrayMap<>(); private static final String UNKNOWN = "UNKNOWN"; @@ -77,10 +76,17 @@ public class LoggerUtils { if (action.touch == Action.Touch.SWIPE || action.touch == Action.Touch.FLING) { str += " direction=" + getFieldName(action.dir, Action.Direction.class); } - return str; - case Action.Type.COMMAND: return getFieldName(action.command, Action.Command.class); + break; + case Action.Type.COMMAND: + str += getFieldName(action.command, Action.Command.class); + break; default: return getFieldName(action.type, Action.Type.class); } + if (action.touch == Action.Touch.SWIPE || action.touch == Action.Touch.FLING || + (action.command == Action.Command.BACK && action.dir != Action.Direction.NONE)) { + str += " direction=" + getFieldName(action.dir, Action.Direction.class); + } + return str; } public static String getTargetStr(Target t) { @@ -102,13 +108,17 @@ public class LoggerUtils { t.containerType == NAVBAR) { str += " id=" + t.pageIndex; } else if (t.containerType == ContainerType.FOLDER) { - str += " grid(" + t.gridX + "," + t.gridY+ ")"; + str += " grid(" + t.gridX + "," + t.gridY + ")"; } break; default: str += "UNKNOWN TARGET TYPE"; } + if (t.spanX != 1 || t.spanY != 1) { + str += " span(" + t.spanX + "," + t.spanY + ")"; + } + if (t.tipType != TipType.DEFAULT_NONE) { str += " " + getFieldName(t.tipType, TipType.class); } diff --git a/src/com/android/launcher3/logging/UserEventDispatcher.java b/src/com/android/launcher3/logging/UserEventDispatcher.java index c8a4e2a7ac..bd785a107b 100644 --- a/src/com/android/launcher3/logging/UserEventDispatcher.java +++ b/src/com/android/launcher3/logging/UserEventDispatcher.java @@ -96,7 +96,6 @@ public class UserEventDispatcher implements ResourceBasedOverride { * Fills in the container data on the given event if the given view is not null. * @return whether container data was added. */ - @Deprecated public static boolean fillInLogContainerData(LauncherLogProto.LauncherEvent event, @Nullable View v) { // Fill in grid(x,y), pageIndex of the child and container type of the parent LogContainerProvider provider = StatsLogUtils.getLaunchProviderRecursive(v); @@ -293,7 +292,7 @@ public class UserEventDispatcher implements ResourceBasedOverride { * (1) WORKSPACE: if the launcher is the foreground activity * (2) APP: if another app was the foreground activity */ - public void logStateChangeAction(int action, int dir, int srcChildTargetType, + public void logStateChangeAction(int action, int dir, int downX, int downY, int srcChildTargetType, int srcParentContainerType, int dstContainerType, int pageIndex) { LauncherEvent event; @@ -311,6 +310,8 @@ public class UserEventDispatcher implements ResourceBasedOverride { event.action.dir = dir; event.action.isStateChange = true; event.srcTarget[0].pageIndex = pageIndex; + event.srcTarget[0].spanX = downX; + event.srcTarget[0].spanY = downY; dispatchUserEvent(event, null); resetElapsedContainerMillis("state changed"); } @@ -325,7 +326,7 @@ public class UserEventDispatcher implements ResourceBasedOverride { public void logDeepShortcutsOpen(View icon) { LogContainerProvider provider = StatsLogUtils.getLaunchProviderRecursive(icon); - if (icon == null || !(icon.getTag() instanceof ItemInfo)) { + if (icon == null || !(icon.getTag() instanceof ItemInfo || provider == null)) { return; } ItemInfo info = (ItemInfo) icon.getTag(); diff --git a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java index 0274de35cb..a1871ff376 100644 --- a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java +++ b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java @@ -540,7 +540,7 @@ public abstract class AbstractStateChangeTouchController private void logReachedState(int logAction, LauncherState targetState) { // Transition complete. log the action mLauncher.getUserEventDispatcher().logStateChangeAction(logAction, - getDirectionForLog(), + getDirectionForLog(), mDetector.getDownX(), mDetector.getDownY(), mStartContainerType, mStartState.containerType, targetState.containerType, diff --git a/src/com/android/launcher3/touch/SwipeDetector.java b/src/com/android/launcher3/touch/SwipeDetector.java index d758a293d8..4e3dcf8b8d 100644 --- a/src/com/android/launcher3/touch/SwipeDetector.java +++ b/src/com/android/launcher3/touch/SwipeDetector.java @@ -180,6 +180,13 @@ public class SwipeDetector { return mState == ScrollState.DRAGGING || mState == ScrollState.SETTLING; } + public int getDownX() { + return (int) mDownPos.x; + } + + public int getDownY() { + return (int) mDownPos.y; + } /** * There's no touch and there's no animation. */