summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2019-04-24 10:35:15 -0400
committerAdam Cohen <adamcohen@google.com>2019-04-24 16:46:03 -0400
commit9bc1431f378f0cf3be1e99f55ced78b46b834940 (patch)
treefb8b828533b1bfcae38d41a11c24c2ed0ee136c9
parent5caa017236ffab583fbe47c57d0256ee68a3faba (diff)
downloadpackages_apps_Trebuchet-9bc1431f378f0cf3be1e99f55ced78b46b834940.tar.gz
packages_apps_Trebuchet-9bc1431f378f0cf3be1e99f55ced78b46b834940.tar.bz2
packages_apps_Trebuchet-9bc1431f378f0cf3be1e99f55ced78b46b834940.zip
Additional Assistant gesture tuning
=> Using the drag slop (currently 10dp), which is the appropriate slop when comparing to the other gestures. Touch slop (which was being used for the Assistant) is only being used for gestures starting from the back button. This means that the delegate was getting triggered much too often (unfair slop competition). This prevents that. => Fixed additional bugs with the consumer delegate / sharedState; the shared state notion really only applies to the OtherActivityInputConumer, and it wasn't being propagated from the AssistantConsumer.In addition, the isActive() method is only being used as a proxy for whether or not to use the shared state, so clarified the naming. This fixes another case where touch could become completely stuck and you could no longer swipe up. => Modified the effective angle to be 90 degrees down to 20 above the horizontal. => Reduced the drag threshold to 55 dps. => Known issue: the time threshold requires motion events to be triggered. In practice, this works because the finger doesn't stay completely still, but we should add a timer to update the progress smoothly. => Removed pause detector. Change-Id: Ie23e836c6d778914594774b830c3cd2e7b94eca4
-rw-r--r--quickstep/recents_ui_overrides/src/com/android/quickstep/AssistantTouchConsumer.java33
-rw-r--r--quickstep/recents_ui_overrides/src/com/android/quickstep/InputConsumer.java2
-rw-r--r--quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java2
-rw-r--r--quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java10
-rw-r--r--quickstep/res/values/config.xml2
-rw-r--r--quickstep/res/values/dimens.xml2
6 files changed, 27 insertions, 24 deletions
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/AssistantTouchConsumer.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/AssistantTouchConsumer.java
index be87a962f..86f0fcaeb 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/AssistantTouchConsumer.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/AssistantTouchConsumer.java
@@ -38,7 +38,6 @@ import android.util.Log;
import android.view.MotionEvent;
import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.logging.UserEventDispatcher;
-import com.android.quickstep.util.MotionPauseDetector;
import com.android.systemui.shared.recents.ISystemUiProxy;
import com.android.launcher3.R;
import com.android.systemui.shared.system.InputMonitorCompat;
@@ -82,7 +81,6 @@ public class AssistantTouchConsumer implements InputConsumer {
private final long mTimeThreshold;
private final int mAngleThreshold;
private final float mSlop;
- private final MotionPauseDetector mMotionPauseDetector;
private final ISystemUiProxy mSysUiProxy;
private final InputConsumer mConsumerDelegate;
private final Context mContext;
@@ -96,11 +94,10 @@ public class AssistantTouchConsumer implements InputConsumer {
mContext = context;
mSysUiProxy = systemUiProxy;
mConsumerDelegate = delegate;
- mMotionPauseDetector = new MotionPauseDetector(context);
mDistThreshold = res.getDimension(R.dimen.gestures_assistant_drag_threshold);
mTimeThreshold = res.getInteger(R.integer.assistant_gesture_min_time_threshold);
mAngleThreshold = res.getInteger(R.integer.assistant_gesture_corner_deg_threshold);
- mSlop = NavigationBarCompat.getQuickScrubTouchSlopPx();
+ mSlop = NavigationBarCompat.getQuickStepDragSlopPx();
mInputMonitorCompat = inputMonitorCompat;
mState = STATE_INACTIVE;
}
@@ -111,8 +108,18 @@ public class AssistantTouchConsumer implements InputConsumer {
}
@Override
- public boolean isActive() {
- return mState != STATE_INACTIVE;
+ public boolean useSharedSwipeState() {
+ if (mConsumerDelegate != null) {
+ return mConsumerDelegate.useSharedSwipeState();
+ }
+ return false;
+ }
+
+ @Override
+ public void onConsumerAboutToBeSwitched() {
+ if (mConsumerDelegate != null) {
+ mConsumerDelegate.onConsumerAboutToBeSwitched();
+ }
}
@Override
@@ -125,14 +132,6 @@ public class AssistantTouchConsumer implements InputConsumer {
mDownPos.set(ev.getX(), ev.getY());
mLastPos.set(mDownPos);
mTimeFraction = 0;
-
- // Detect when the gesture decelerates to start the assistant
- mMotionPauseDetector.setOnMotionPauseListener(isPaused -> {
- if (isPaused && mState == STATE_ASSISTANT_ACTIVE) {
- mTimeFraction = 1;
- updateAssistantProgress();
- }
- });
break;
}
case ACTION_POINTER_UP: {
@@ -175,7 +174,7 @@ public class AssistantTouchConsumer implements InputConsumer {
mDirection = angle > 90 ? UPLEFT : UPRIGHT;
angle = angle > 90 ? 180 - angle : angle;
- if (angle > mAngleThreshold && angle < 90 - mAngleThreshold) {
+ if (angle > mAngleThreshold && angle < 90) {
mState = STATE_ASSISTANT_ACTIVE;
if (mConsumerDelegate != null) {
@@ -193,7 +192,6 @@ public class AssistantTouchConsumer implements InputConsumer {
// Movement
mDistance = (float) Math.hypot(mLastPos.x - mStartDragPos.x,
mLastPos.y - mStartDragPos.y);
- mMotionPauseDetector.addPosition(mDistance, 0, ev.getEventTime());
if (mDistance >= 0) {
final long diff = SystemClock.uptimeMillis() - mDragTime;
mTimeFraction = Math.min(diff * 1f / mTimeThreshold, 1);
@@ -222,8 +220,8 @@ public class AssistantTouchConsumer implements InputConsumer {
animator.setInterpolator(Interpolators.DEACCEL_2);
animator.start();
}
+ mPassedSlop = false;
mState = STATE_INACTIVE;
- mMotionPauseDetector.clear();
break;
}
@@ -243,6 +241,7 @@ public class AssistantTouchConsumer implements InputConsumer {
SWIPE, mDirection, NAVBAR);
Bundle args = new Bundle();
args.putInt(INVOCATION_TYPE_KEY, INVOCATION_TYPE_GESTURE);
+
mSysUiProxy.startAssistant(args);
mLaunchedAssistant = true;
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/InputConsumer.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/InputConsumer.java
index ad9fe78f8..e3f9e02a0 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/InputConsumer.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/InputConsumer.java
@@ -34,7 +34,7 @@ public interface InputConsumer {
int getType();
- default boolean isActive() {
+ default boolean useSharedSwipeState() {
return false;
}
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 9c8e80e5c..03af92dc3 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java
@@ -413,7 +413,7 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
}
@Override
- public boolean isActive() {
+ public boolean useSharedSwipeState() {
return mInteractionHandler != null;
}
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
index 95dea5044..ff5232332 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
@@ -422,7 +422,7 @@ public class TouchInteractionService extends Service implements
if (event.getAction() == ACTION_DOWN) {
if (isInValidSystemUiState()
&& mSwipeTouchRegion.contains(event.getX(), event.getY())) {
- boolean useSharedState = mConsumer.isActive();
+ boolean useSharedState = mConsumer.useSharedSwipeState();
mConsumer.onConsumerAboutToBeSwitched();
mConsumer = newConsumer(useSharedState, event);
TOUCH_INTERACTION_LOG.addLog("setInputConsumer", mConsumer.getType());
@@ -460,8 +460,12 @@ public class TouchInteractionService extends Service implements
} else if (mAssistantAvailable
&& SysUINavigationMode.INSTANCE.get(this).getMode() == Mode.NO_BUTTON
&& AssistantTouchConsumer.withinTouchRegion(this, event)) {
- return new AssistantTouchConsumer(this, mISystemUiProxy, !activityControl.isResumed()
- ? createOtherActivityInputConsumer(event, runningTaskInfo) : null, mInputMonitorCompat);
+
+ boolean addDelegate = !activityControl.isResumed();
+ return new AssistantTouchConsumer(this, mISystemUiProxy, addDelegate ?
+ createOtherActivityInputConsumer(event, runningTaskInfo) : null,
+ mInputMonitorCompat);
+
} else if (mSwipeSharedState.goingToLauncher || activityControl.isResumed()) {
return OverviewInputConsumer.newInstance(activityControl, false);
} else if (ENABLE_QUICKSTEP_LIVE_TILE.get() &&
diff --git a/quickstep/res/values/config.xml b/quickstep/res/values/config.xml
index e29d3df27..95aea43ae 100644
--- a/quickstep/res/values/config.xml
+++ b/quickstep/res/values/config.xml
@@ -29,5 +29,5 @@
<!-- Assistant Gesture -->
<integer name="assistant_gesture_min_time_threshold">200</integer>
- <integer name="assistant_gesture_corner_deg_threshold">10</integer>
+ <integer name="assistant_gesture_corner_deg_threshold">20</integer>
</resources>
diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml
index 75959d106..13a0435c1 100644
--- a/quickstep/res/values/dimens.xml
+++ b/quickstep/res/values/dimens.xml
@@ -66,7 +66,7 @@
<!-- Assistant Gestures -->
<dimen name="gestures_assistant_size">48dp</dimen>
- <dimen name="gestures_assistant_drag_threshold">70dp</dimen>
+ <dimen name="gestures_assistant_drag_threshold">55dp</dimen>
<!-- Distance to move elements when swiping up to go home from launcher -->
<dimen name="home_pullback_distance">28dp</dimen>