diff options
| author | 2018-02-14 04:42:49 +0000 | |
|---|---|---|
| committer | 2018-02-14 04:42:49 +0000 | |
| commit | f5f22f23c3828c90bec4880073234e16d0633d3c (patch) | |
| tree | ce39d600b7d5d0642b9ee2ea1f76722cc4969f57 | |
| parent | 24c2b4e956dda798888b6a60a1dd911c09374082 (diff) | |
| parent | cc5bddd3794fdf2224c292de76713bfc5cbe7e23 (diff) | |
Merge changes from topic "quickstep-dogfood"
* changes:
Turn on quickscrub by default from system property
Adding hit target hint from SysUI to launcher to defer recents animation
5 files changed, 90 insertions, 17 deletions
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl index 7f382acb0aab..e200a7fee4e6 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl @@ -23,6 +23,14 @@ oneway interface IOverviewProxy { void onBind(in ISystemUiProxy sysUiProxy); /** + * Called once immediately prior to the first onMotionEvent() call, providing a hint to the + * target the initial source of the subsequent motion events. + * + * @param downHitTarget is one of the {@link NavigationBarCompat.HitTarget}s + */ + void onPreMotionEvent(int downHitTarget); + + /** * Proxies motion events from the nav bar in SystemUI to the OverviewProxyService. The sender * guarantees the following order of events: * diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/NavigationBarCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/NavigationBarCompat.java new file mode 100644 index 000000000000..f622d4a3338c --- /dev/null +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/NavigationBarCompat.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2018 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.systemui.shared.system; + +import android.annotation.IntDef; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +public class NavigationBarCompat { + @Retention(RetentionPolicy.SOURCE) + @IntDef({HIT_TARGET_NONE, HIT_TARGET_BACK, HIT_TARGET_HOME}) + public @interface HitTarget{} + + public static final int HIT_TARGET_NONE = 0; + public static final int HIT_TARGET_BACK = 1; + public static final int HIT_TARGET_HOME = 2; +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java index d15c771ec098..63f2cebb61cc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java @@ -131,6 +131,9 @@ public class NavigationBarGestureHelper implements TunerService.Tunable, Gesture mNavigationBarView.requestUnbufferedDispatch(event); event.transform(mTransformGlobalMatrix); try { + if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { + overviewProxy.onPreMotionEvent(mNavigationBarView.getDownHitTarget()); + } overviewProxy.onMotionEvent(event); if (DEBUG_OVERVIEW_PROXY) { Log.d(TAG_OPS, "Send MotionEvent: " + event.toString()); @@ -146,8 +149,8 @@ public class NavigationBarGestureHelper implements TunerService.Tunable, Gesture } public boolean onInterceptTouchEvent(MotionEvent event) { - int action = event.getAction(); - switch (action & MotionEvent.ACTION_MASK) { + int action = event.getActionMasked(); + switch (action) { case MotionEvent.ACTION_DOWN: { mTouchDownX = (int) event.getX(); mTouchDownY = (int) event.getY(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index 7994253276ab..53dc814726a2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -16,6 +16,11 @@ package com.android.systemui.statusbar.phone; +import static android.view.MotionEvent.ACTION_DOWN; +import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_BACK; +import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_HOME; +import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_NONE; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.LayoutTransition; @@ -61,6 +66,7 @@ import com.android.systemui.plugins.PluginManager; import com.android.systemui.plugins.statusbar.phone.NavGesture; import com.android.systemui.plugins.statusbar.phone.NavGesture.GestureHelper; import com.android.systemui.recents.RecentsOnboarding; +import com.android.systemui.shared.system.NavigationBarCompat; import com.android.systemui.stackdivider.Divider; import com.android.systemui.statusbar.policy.DeadZone; import com.android.systemui.statusbar.policy.KeyButtonDrawable; @@ -95,6 +101,11 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav int mDisabledFlags = 0; int mNavigationIconHints = 0; + private @NavigationBarCompat.HitTarget int mDownHitTarget = HIT_TARGET_NONE; + private Rect mHomeButtonBounds = new Rect(); + private Rect mBackButtonBounds = new Rect(); + private int[] mTmpPosition = new int[2]; + private KeyButtonDrawable mBackIcon, mBackLandIcon, mBackAltIcon, mBackAltLandIcon; private KeyButtonDrawable mBackCarModeIcon, mBackLandCarModeIcon; private KeyButtonDrawable mBackAltCarModeIcon, mBackAltLandCarModeIcon; @@ -284,6 +295,18 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav @Override public boolean onInterceptTouchEvent(MotionEvent event) { + switch (event.getActionMasked()) { + case ACTION_DOWN: + int x = (int) event.getX(); + int y = (int) event.getY(); + mDownHitTarget = HIT_TARGET_NONE; + if (mBackButtonBounds.contains(x, y)) { + mDownHitTarget = HIT_TARGET_BACK; + } else if (mHomeButtonBounds.contains(x, y)) { + mDownHitTarget = HIT_TARGET_HOME; + } + break; + } return mGestureHelper.onInterceptTouchEvent(event); } @@ -295,6 +318,10 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav return super.onTouchEvent(event); } + public @NavigationBarCompat.HitTarget int getDownHitTarget() { + return mDownHitTarget; + } + public void abortCurrentGesture() { getHomeButton().abortCurrentGesture(); } @@ -783,9 +810,23 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); + updateButtonLocationOnScreen(getBackButton(), mBackButtonBounds); + updateButtonLocationOnScreen(getHomeButton(), mHomeButtonBounds); mGestureHelper.onLayout(changed, left, top, right, bottom); } + private void updateButtonLocationOnScreen(ButtonDispatcher button, Rect buttonBounds) { + View view = button.getCurrentView(); + if (view == null) { + buttonBounds.setEmpty(); + return; + } + view.getLocationInWindow(mTmpPosition); + buttonBounds.set(mTmpPosition[0], mTmpPosition[1], + mTmpPosition[0] + view.getMeasuredWidth(), + mTmpPosition[1] + view.getMeasuredHeight()); + } + private void updateRotatedViews() { mRotatedViews[Surface.ROTATION_0] = mRotatedViews[Surface.ROTATION_180] = findViewById(R.id.rot0); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickScrubController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickScrubController.java index dc0835e4371a..bb2f59718ffb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickScrubController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickScrubController.java @@ -53,6 +53,7 @@ import static android.view.WindowManagerPolicyConstants.NAV_BAR_LEFT; import static android.view.WindowManagerPolicyConstants.NAV_BAR_BOTTOM; import static com.android.systemui.OverviewProxyService.DEBUG_OVERVIEW_PROXY; import static com.android.systemui.OverviewProxyService.TAG_OPS; +import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_HOME; /** * Class to detect gestures on the navigation bar and implement quick scrub and switch. @@ -92,7 +93,6 @@ public class QuickScrubController extends GestureDetector.SimpleOnGestureListene private final Handler mHandler = new Handler(); private final Interpolator mQuickScrubEndInterpolator = new DecelerateInterpolator(); private final Rect mTrackRect = new Rect(); - private final Rect mHomeButtonRect = new Rect(); private final Paint mTrackPaint = new Paint(); private final int mScrollTouchSlop; private final OverviewProxyService mOverviewEventSender; @@ -138,7 +138,7 @@ public class QuickScrubController extends GestureDetector.SimpleOnGestureListene @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velX, float velY) { if (!isQuickScrubEnabled() || mQuickScrubActive || !mAllowQuickSwitch || - !mHomeButtonRect.contains(mTouchDownX, mTouchDownY)) { + mNavigationBarView.getDownHitTarget() != HIT_TARGET_HOME) { return false; } float velocityX = mIsRTL ? -velX : velX; @@ -226,7 +226,8 @@ public class QuickScrubController extends GestureDetector.SimpleOnGestureListene case MotionEvent.ACTION_DOWN: { int x = (int) event.getX(); int y = (int) event.getY(); - if (isQuickScrubEnabled() && mHomeButtonRect.contains(x, y)) { + if (isQuickScrubEnabled() + && mNavigationBarView.getDownHitTarget() == HIT_TARGET_HOME) { mTouchDownX = x; mTouchDownY = y; homeButton.setDelayTouchFeedback(true); @@ -346,17 +347,6 @@ public class QuickScrubController extends GestureDetector.SimpleOnGestureListene x2 = x1 + width / 2 - mTrackPadding; } mTrackRect.set(x1, y1, x2, y2); - - // Get the touch rect of the home button location - View homeView = mNavigationBarView.getHomeButton().getCurrentView(); - if (homeView != null) { - int[] globalHomePos = homeView.getLocationOnScreen(); - int[] globalNavBarPos = mNavigationBarView.getLocationOnScreen(); - int homeX = globalHomePos[0] - globalNavBarPos[0]; - int homeY = globalHomePos[1] - globalNavBarPos[1]; - mHomeButtonRect.set(homeX, homeY, homeX + homeView.getMeasuredWidth(), - homeY + homeView.getMeasuredHeight()); - } } @Override @@ -381,7 +371,7 @@ public class QuickScrubController extends GestureDetector.SimpleOnGestureListene } boolean isQuickScrubEnabled() { - return SystemProperties.getBoolean("persist.quickstep.scrub.enabled", false); + return SystemProperties.getBoolean("persist.quickstep.scrub.enabled", true); } private void startQuickScrub() { |