MTK Android 11.0添加三指截屏功能

diff --git a/base/services/core/java/com/android/server/wm/DisplayPolicy.java b/base/services/core/java/com/android/server/wm/DisplayPolicy.java
old mode 100644
new mode 100755
index 0d467c5..72d4a78
--- a/base/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/base/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -51,6 +51,8 @@ import static android.view.WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE;
 import static android.view.WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_TOUCH;
 import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
 import static android.view.WindowManager.INPUT_CONSUMER_NAVIGATION;
+import static android.view.WindowManager.TAKE_SCREENSHOT_FULLSCREEN;
+import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_KEY_CHORD;
 import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
 import static android.view.WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW;
 import static android.view.WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON;
@@ -495,6 +497,17 @@ public class DisplayPolicy {
         mSystemGestures = new SystemGesturesPointerEventListener(mContext, mHandler,
                 new SystemGesturesPointerEventListener.Callbacks() {
                     @Override
+                    public void onSwipeVertically() {
+                        synchronized (mLock) {
+                            final Thread mThread = new Thread(new Runnable() {
+                                @Override
+                                public void run() {
+                                    takeScreenshot(TAKE_SCREENSHOT_FULLSCREEN,SCREENSHOT_KEY_CHORD);
+                                }
+                            });
+                            mThread.start();
+                        }
+                    }
                     public void onSwipeFromTop() {
                         synchronized (mLock) {
                             if (mStatusBar != null) {
diff --git a/base/services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.java b/base/services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.java
old mode 100644
new mode 100755
index f3859b4..9b6bc97
--- a/base/services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.java
+++ b/base/services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.java
@@ -31,6 +31,7 @@ import android.view.InputDevice;
 import android.view.MotionEvent;
 import android.view.WindowManagerPolicyConstants.PointerEventListener;
 import android.widget.OverScroller;
+import android.util.Log;

 /**
  * Listens for system-wide input gestures, firing callbacks when detected.
@@ -49,6 +50,7 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
     private static final int SWIPE_FROM_BOTTOM = 2;
     private static final int SWIPE_FROM_RIGHT = 3;
     private static final int SWIPE_FROM_LEFT = 4;
+    private static final int SWIPE_VERTICALLY = 5;

     private final Context mContext;
     private final Handler mHandler;
@@ -175,6 +177,11 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
                         if (DEBUG) Slog.d(TAG, "Firing onSwipeFromLeft");
                         mCallbacks.onSwipeFromLeft();
                     }
+                    final int swipeThreePointer = detectSwipeThreePointer(event);
+                    mSwipeFireable = swipeThreePointer == SWIPE_NONE;
+                    if (swipeThreePointer == SWIPE_VERTICALLY) {
+                                @Override
+                                public void run() {
+                                    takeScreenshot(TAKE_SCREENSHOT_FULLSCREEN,SCREENSHOT_KEY_CHORD);
+                                }
+                            });
+                            mThread.start();
+                        }
+                    }
                     public void onSwipeFromTop() {
                         synchronized (mLock) {
                             if (mStatusBar != null) {
diff --git a/base/services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.java b/base/services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.java
old mode 100644
new mode 100755
index f3859b4..9b6bc97
--- a/base/services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.java
+++ b/base/services/core/java/com/android/server/wm/SystemGesturesPointerEventListener.java
@@ -31,6 +31,7 @@ import android.view.InputDevice;
 import android.view.MotionEvent;
 import android.view.WindowManagerPolicyConstants.PointerEventListener;
 import android.widget.OverScroller;
+import android.util.Log;

 /**
  * Listens for system-wide input gestures, firing callbacks when detected.
@@ -49,6 +50,7 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
     private static final int SWIPE_FROM_BOTTOM = 2;
     private static final int SWIPE_FROM_RIGHT = 3;
     private static final int SWIPE_FROM_LEFT = 4;
+    private static final int SWIPE_VERTICALLY = 5;

     private final Context mContext;
     private final Handler mHandler;
@@ -175,6 +177,11 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
                         if (DEBUG) Slog.d(TAG, "Firing onSwipeFromLeft");
                         mCallbacks.onSwipeFromLeft();
                     }
+                    final int swipeThreePointer = detectSwipeThreePointer(event);
+                    mSwipeFireable = swipeThreePointer == SWIPE_NONE;
+                    if (swipeThreePointer == SWIPE_VERTICALLY) {
+                        mCallbacks.onSwipeVertically();
+                    }
                 }
                 break;
             case MotionEvent.ACTION_HOVER_MOVE:
@@ -234,6 +241,49 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
         return mDownPointers - 1;
     }

+    private int detectSwipeThreePointer(MotionEvent move) {
+        final int historySize = move.getHistorySize();
+        final int pointerCount = move.getPointerCount();
+        if(3 != pointerCount) {
+            return SWIPE_NONE;
+        }
+        int swipe = SWIPE_NONE;
+        for (int p = 0; p < pointerCount; p++) {
+            final int pointerId = move.getPointerId(p);
+            final int i = findIndex(pointerId);
+            if (i != UNTRACKED_POINTER) {
+                for (int h = 0; h < historySize; h++) {
+                    final long time = move.getHistoricalEventTime(h);
+                    final float x = move.getHistoricalX(p, h);
+                    final float y = move.getHistoricalY(p,  h);
+                    swipe = detectSwipeThreePointer(i, time, x, y);
+                    if (swipe != SWIPE_VERTICALLY) {
+                        return swipe;
+                    }
+                }
+                swipe = detectSwipeThreePointer(i, move.getEventTime(), move.getX(p), move.getY(p));
+                if (swipe != SWIPE_VERTICALLY) {
+                    return swipe;
+                }
+            }
+        }
+        return swipe;
+    }
+
+    private int detectSwipeThreePointer(int i, long time, float x, float y) {
+        final float fromX = mDownX[i];
+        final float fromY = mDownY[i];
+        final long elapsed = time - mDownTime[i];
+        if (DEBUG) Slog.d(TAG, "pointer " + mDownPointerId[i]
+                + " moved (" + fromX + "->" + x + "," + fromY + "->" + y + ") in " + elapsed);
+        if (fromY > mSwipeStartThreshold
+                && y > fromY + mSwipeDistanceThreshold * 9
+                && elapsed < SWIPE_TIMEOUT_MS) {
+            return SWIPE_VERTICALLY;
+        }
+        return SWIPE_NONE;
+    }
+
     private int detectSwipe(MotionEvent move) {
         final int historySize = move.getHistorySize();
         final int pointerCount = move.getPointerCount();
@@ -336,5 +386,6 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
         void onMouseHoverAtBottom();
         void onMouseLeaveFromEdge();
         void onDebug();
+        void onSwipeVertically();
     }
 }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值