OSDN Git Service

Add logging callback for back action
authorWinson Chung <winsonc@google.com>
Tue, 2 Apr 2019 22:08:59 +0000 (15:08 -0700)
committerWinson Chung <winsonc@google.com>
Wed, 3 Apr 2019 19:51:09 +0000 (12:51 -0700)
Bug: 127848641
Test: adb shell setprop log.tag.UserEvent VERBOSE, hit back
Change-Id: Ic2289278acfd804cf40b93d0531a138d6e5c0445

packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl
packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java
packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java

index 0075327..04701bc 100644 (file)
@@ -123,4 +123,10 @@ oneway interface IOverviewProxy {
      * Sent when the assistant changes how visible it is to the user.
      */
     void onAssistantVisibilityChanged(float visibility) = 14;
+
+    /*
+     * Sent when back is triggered.
+     */
+    void onBackAction(boolean completed, int downX, int downY, boolean isButton,
+            boolean gestureSwipeLeft) = 15;
 }
index 2b361f8..4d6693f 100644 (file)
@@ -444,6 +444,17 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis
         }
     }
 
+    public void notifyBackAction(boolean completed, int downX, int downY, boolean isButton,
+            boolean gestureSwipeLeft) {
+        try {
+            if (mOverviewProxy != null) {
+                mOverviewProxy.onBackAction(completed, downX, downY, isButton, gestureSwipeLeft);
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG_OPS, "Failed to notify back action", e);
+        }
+    }
+
     /**
      * Sets the navbar region which can receive touch inputs
      */
index 95abb66..212666f 100644 (file)
@@ -46,6 +46,7 @@ import android.view.WindowManager;
 import android.view.WindowManagerGlobal;
 
 import com.android.systemui.R;
+import com.android.systemui.recents.OverviewProxyService;
 import com.android.systemui.shared.system.InputChannelCompat.InputEventReceiver;
 import com.android.systemui.shared.system.QuickStepContract;
 import com.android.systemui.shared.system.WindowManagerWrapper;
@@ -102,6 +103,7 @@ public class EdgeBackGestureHandler implements DisplayListener {
             };
 
     private final Context mContext;
+    private final OverviewProxyService mOverviewProxyService;
 
     private final Point mDisplaySize = new Point();
     private final int mDisplayId;
@@ -137,11 +139,12 @@ public class EdgeBackGestureHandler implements DisplayListener {
     private NavigationBarEdgePanel mEdgePanel;
     private WindowManager.LayoutParams mEdgePanelLp;
 
-    public EdgeBackGestureHandler(Context context) {
+    public EdgeBackGestureHandler(Context context, OverviewProxyService overviewProxyService) {
         mContext = context;
         mDisplayId = context.getDisplayId();
         mMainExecutor = context.getMainExecutor();
         mWm = context.getSystemService(WindowManager.class);
+        mOverviewProxyService = overviewProxyService;
 
         mEdgeWidth = QuickStepContract.getEdgeSensitivityWidth(context);
         mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
@@ -313,11 +316,15 @@ public class EdgeBackGestureHandler implements DisplayListener {
                 float xDiff = ev.getX() - mDownPoint.x;
                 boolean exceedsThreshold = mIsOnLeftEdge
                         ? (xDiff > mSwipeThreshold) : (-xDiff > mSwipeThreshold);
-                if (exceedsThreshold && Math.abs(xDiff) > Math.abs(ev.getY() - mDownPoint.y)) {
+                boolean performAction = exceedsThreshold
+                        && Math.abs(xDiff) > Math.abs(ev.getY() - mDownPoint.y);
+                if (performAction) {
                     // Perform back
                     sendEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
                     sendEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK);
                 }
+                mOverviewProxyService.notifyBackAction(performAction, (int) mDownPoint.x,
+                        (int) mDownPoint.y, false /* isButton */, !mIsOnLeftEdge);
             }
         }
     }
index 4fd6a71..7abdbd0 100644 (file)
@@ -285,7 +285,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
         mButtonDispatchers.put(R.id.menu_container, mContextualButtonGroup);
         mDeadZone = new DeadZone(this);
 
-        mEdgeBackGestureHandler = new EdgeBackGestureHandler(context);
+        mEdgeBackGestureHandler = new EdgeBackGestureHandler(context, mOverviewProxyService);
         mTintController = new NavBarTintController(this, getLightTransitionsController());
 
     }
index 1e05983..06fc745 100644 (file)
@@ -308,6 +308,10 @@ public class KeyButtonView extends ImageView implements ButtonInterface {
         // TODO(b/122195391): Added logs to make sure sysui is sending back button events
         if (mCode == KeyEvent.KEYCODE_BACK && flags != KeyEvent.FLAG_LONG_PRESS) {
             Log.i(TAG, "Back button event: " + KeyEvent.actionToString(action));
+            if (action == MotionEvent.ACTION_UP) {
+                mOverviewProxyService.notifyBackAction((flags & KeyEvent.FLAG_CANCELED) == 0,
+                        -1, -1, true /* isButton */, false /* gestureSwipeLeft */);
+            }
         }
         final int repeatCount = (flags & KeyEvent.FLAG_LONG_PRESS) != 0 ? 1 : 0;
         final KeyEvent ev = new KeyEvent(mDownTime, when, action, mCode, repeatCount,