Merge "Fix NPE / add downX,Y location for all swipes/ add extra debugging info Bug: 122700646 Bug: 127840207" into ub-launcher3-qt-dev

This commit is contained in:
Hyunyoung Song 2019-04-24 23:34:12 +00:00 committed by Android (Google) Code Review
commit a6f1969981
8 changed files with 39 additions and 18 deletions

View File

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

View File

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

View File

@ -253,6 +253,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
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<T extends BaseDraggingActivity>
/**
* @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<T extends BaseDraggingActivity>
} else {
mLogDirection = velocity.x < 0 ? Direction.LEFT : Direction.RIGHT;
}
mDownPos = downPos;
handleNormalGestureEnd(endVelocity, isFling, velocity);
}
@ -856,6 +859,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
: mRecentsView.getNextPage();
UserEventDispatcher.newInstance(mContext).logStateChangeAction(
mLogAction, mLogDirection,
(int) mDownPos.x, (int) mDownPos.y,
ContainerType.NAVBAR, ContainerType.APP,
endTarget.containerType,
pageIndex);

View File

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

View File

@ -41,7 +41,6 @@ import java.lang.reflect.Modifier;
/**
* Helper methods for logging.
*/
@Deprecated
public class LoggerUtils {
private static final ArrayMap<Class, SparseArray<String>> 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);
}

View File

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

View File

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

View File

@ -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.
*/