Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76f07409 authored by Arthur Hung's avatar Arthur Hung Committed by Automerger Merge Worker
Browse files

Merge "Fix pointer location apply wrong insets in foldable device" into sc-v2-dev am: c923e35a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15334686

Change-Id: Iae47db3ceb8cb0a09ef4bed77bd2a7a7c5d485af
parents 9b32702f c923e35a
Loading
Loading
Loading
Loading
+83 −70
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.internal.widget;
import android.compat.annotation.UnsupportedAppUsage;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Canvas;
import android.graphics.Insets;
import android.graphics.Paint;
import android.graphics.Paint;
import android.graphics.Paint.FontMetricsInt;
import android.graphics.Paint.FontMetricsInt;
import android.graphics.Path;
import android.graphics.Path;
@@ -136,6 +137,7 @@ public class PointerLocationView extends View implements InputDeviceListener,
    private final FontMetricsInt mTextMetrics = new FontMetricsInt();
    private final FontMetricsInt mTextMetrics = new FontMetricsInt();
    private int mHeaderBottom;
    private int mHeaderBottom;
    private int mHeaderPaddingTop = 0;
    private int mHeaderPaddingTop = 0;
    private Insets mWaterfallInsets = Insets.NONE;
    @UnsupportedAppUsage
    @UnsupportedAppUsage
    private boolean mCurDown;
    private boolean mCurDown;
    @UnsupportedAppUsage
    @UnsupportedAppUsage
@@ -229,8 +231,10 @@ public class PointerLocationView extends View implements InputDeviceListener,
    public WindowInsets onApplyWindowInsets(WindowInsets insets) {
    public WindowInsets onApplyWindowInsets(WindowInsets insets) {
        if (insets.getDisplayCutout() != null) {
        if (insets.getDisplayCutout() != null) {
            mHeaderPaddingTop = insets.getDisplayCutout().getSafeInsetTop();
            mHeaderPaddingTop = insets.getDisplayCutout().getSafeInsetTop();
            mWaterfallInsets = insets.getDisplayCutout().getWaterfallInsets();
        } else {
        } else {
            mHeaderPaddingTop = 0;
            mHeaderPaddingTop = 0;
            mWaterfallInsets = Insets.NONE;
        }
        }
        return super.onApplyWindowInsets(insets);
        return super.onApplyWindowInsets(insets);
    }
    }
@@ -266,11 +270,6 @@ public class PointerLocationView extends View implements InputDeviceListener,


    @Override
    @Override
    protected void onDraw(Canvas canvas) {
    protected void onDraw(Canvas canvas) {
        final int w = getWidth();
        final int itemW = w/7;
        final int base = mHeaderPaddingTop-mTextMetrics.ascent+1;
        final int bottom = mHeaderBottom;

        final int NP = mPointers.size();
        final int NP = mPointers.size();


        if (!mSystemGestureExclusion.isEmpty()) {
        if (!mSystemGestureExclusion.isEmpty()) {
@@ -286,71 +285,7 @@ public class PointerLocationView extends View implements InputDeviceListener,
        }
        }


        // Labels
        // Labels
        if (mActivePointerId >= 0) {
        drawLabels(canvas);
            final PointerState ps = mPointers.get(mActivePointerId);
            
            canvas.drawRect(0, mHeaderPaddingTop, itemW-1, bottom,mTextBackgroundPaint);
            canvas.drawText(mText.clear()
                    .append("P: ").append(mCurNumPointers)
                    .append(" / ").append(mMaxNumPointers)
                    .toString(), 1, base, mTextPaint);

            final int N = ps.mTraceCount;
            if ((mCurDown && ps.mCurDown) || N == 0) {
                canvas.drawRect(itemW, mHeaderPaddingTop, (itemW * 2) - 1, bottom,
                        mTextBackgroundPaint);
                canvas.drawText(mText.clear()
                        .append("X: ").append(ps.mCoords.x, 1)
                        .toString(), 1 + itemW, base, mTextPaint);
                canvas.drawRect(itemW * 2, mHeaderPaddingTop, (itemW * 3) - 1, bottom,
                        mTextBackgroundPaint);
                canvas.drawText(mText.clear()
                        .append("Y: ").append(ps.mCoords.y, 1)
                        .toString(), 1 + itemW * 2, base, mTextPaint);
            } else {
                float dx = ps.mTraceX[N - 1] - ps.mTraceX[0];
                float dy = ps.mTraceY[N - 1] - ps.mTraceY[0];
                canvas.drawRect(itemW, mHeaderPaddingTop, (itemW * 2) - 1, bottom,
                        Math.abs(dx) < mVC.getScaledTouchSlop()
                        ? mTextBackgroundPaint : mTextLevelPaint);
                canvas.drawText(mText.clear()
                        .append("dX: ").append(dx, 1)
                        .toString(), 1 + itemW, base, mTextPaint);
                canvas.drawRect(itemW * 2, mHeaderPaddingTop, (itemW * 3) - 1, bottom,
                        Math.abs(dy) < mVC.getScaledTouchSlop()
                        ? mTextBackgroundPaint : mTextLevelPaint);
                canvas.drawText(mText.clear()
                        .append("dY: ").append(dy, 1)
                        .toString(), 1 + itemW * 2, base, mTextPaint);
            }

            canvas.drawRect(itemW * 3, mHeaderPaddingTop, (itemW * 4) - 1, bottom,
                    mTextBackgroundPaint);
            canvas.drawText(mText.clear()
                    .append("Xv: ").append(ps.mXVelocity, 3)
                    .toString(), 1 + itemW * 3, base, mTextPaint);

            canvas.drawRect(itemW * 4, mHeaderPaddingTop, (itemW * 5) - 1, bottom,
                    mTextBackgroundPaint);
            canvas.drawText(mText.clear()
                    .append("Yv: ").append(ps.mYVelocity, 3)
                    .toString(), 1 + itemW * 4, base, mTextPaint);

            canvas.drawRect(itemW * 5, mHeaderPaddingTop, (itemW * 6) - 1, bottom,
                    mTextBackgroundPaint);
            canvas.drawRect(itemW * 5, mHeaderPaddingTop,
                    (itemW * 5) + (ps.mCoords.pressure * itemW) - 1, bottom, mTextLevelPaint);
            canvas.drawText(mText.clear()
                    .append("Prs: ").append(ps.mCoords.pressure, 2)
                    .toString(), 1 + itemW * 5, base, mTextPaint);

            canvas.drawRect(itemW * 6, mHeaderPaddingTop, w, bottom, mTextBackgroundPaint);
            canvas.drawRect(itemW * 6, mHeaderPaddingTop,
                    (itemW * 6) + (ps.mCoords.size * itemW) - 1, bottom, mTextLevelPaint);
            canvas.drawText(mText.clear()
                    .append("Size: ").append(ps.mCoords.size, 2)
                    .toString(), 1 + itemW * 6, base, mTextPaint);
        }


        // Pointer trace.
        // Pointer trace.
        for (int p = 0; p < NP; p++) {
        for (int p = 0; p < NP; p++) {
@@ -463,6 +398,84 @@ public class PointerLocationView extends View implements InputDeviceListener,
        }
        }
    }
    }


    private void drawLabels(Canvas canvas) {
        if (mActivePointerId < 0) {
            return;
        }

        final int w = getWidth() - mWaterfallInsets.left - mWaterfallInsets.right;
        final int itemW = w / 7;
        final int base = mHeaderPaddingTop - mTextMetrics.ascent + 1;
        final int bottom = mHeaderBottom;

        canvas.save();
        canvas.translate(mWaterfallInsets.left, 0);
        final PointerState ps = mPointers.get(mActivePointerId);

        canvas.drawRect(0, mHeaderPaddingTop, itemW - 1, bottom, mTextBackgroundPaint);
        canvas.drawText(mText.clear()
                .append("P: ").append(mCurNumPointers)
                .append(" / ").append(mMaxNumPointers)
                .toString(), 1, base, mTextPaint);

        final int count = ps.mTraceCount;
        if ((mCurDown && ps.mCurDown) || count == 0) {
            canvas.drawRect(itemW, mHeaderPaddingTop, (itemW * 2) - 1, bottom,
                    mTextBackgroundPaint);
            canvas.drawText(mText.clear()
                    .append("X: ").append(ps.mCoords.x, 1)
                    .toString(), 1 + itemW, base, mTextPaint);
            canvas.drawRect(itemW * 2, mHeaderPaddingTop, (itemW * 3) - 1, bottom,
                    mTextBackgroundPaint);
            canvas.drawText(mText.clear()
                    .append("Y: ").append(ps.mCoords.y, 1)
                    .toString(), 1 + itemW * 2, base, mTextPaint);
        } else {
            float dx = ps.mTraceX[count - 1] - ps.mTraceX[0];
            float dy = ps.mTraceY[count - 1] - ps.mTraceY[0];
            canvas.drawRect(itemW, mHeaderPaddingTop, (itemW * 2) - 1, bottom,
                    Math.abs(dx) < mVC.getScaledTouchSlop()
                            ? mTextBackgroundPaint : mTextLevelPaint);
            canvas.drawText(mText.clear()
                    .append("dX: ").append(dx, 1)
                    .toString(), 1 + itemW, base, mTextPaint);
            canvas.drawRect(itemW * 2, mHeaderPaddingTop, (itemW * 3) - 1, bottom,
                    Math.abs(dy) < mVC.getScaledTouchSlop()
                            ? mTextBackgroundPaint : mTextLevelPaint);
            canvas.drawText(mText.clear()
                    .append("dY: ").append(dy, 1)
                    .toString(), 1 + itemW * 2, base, mTextPaint);
        }

        canvas.drawRect(itemW * 3, mHeaderPaddingTop, (itemW * 4) - 1, bottom,
                mTextBackgroundPaint);
        canvas.drawText(mText.clear()
                .append("Xv: ").append(ps.mXVelocity, 3)
                .toString(), 1 + itemW * 3, base, mTextPaint);

        canvas.drawRect(itemW * 4, mHeaderPaddingTop, (itemW * 5) - 1, bottom,
                mTextBackgroundPaint);
        canvas.drawText(mText.clear()
                .append("Yv: ").append(ps.mYVelocity, 3)
                .toString(), 1 + itemW * 4, base, mTextPaint);

        canvas.drawRect(itemW * 5, mHeaderPaddingTop, (itemW * 6) - 1, bottom,
                mTextBackgroundPaint);
        canvas.drawRect(itemW * 5, mHeaderPaddingTop,
                (itemW * 5) + (ps.mCoords.pressure * itemW) - 1, bottom, mTextLevelPaint);
        canvas.drawText(mText.clear()
                .append("Prs: ").append(ps.mCoords.pressure, 2)
                .toString(), 1 + itemW * 5, base, mTextPaint);

        canvas.drawRect(itemW * 6, mHeaderPaddingTop, w, bottom, mTextBackgroundPaint);
        canvas.drawRect(itemW * 6, mHeaderPaddingTop,
                (itemW * 6) + (ps.mCoords.size * itemW) - 1, bottom, mTextLevelPaint);
        canvas.drawText(mText.clear()
                .append("Size: ").append(ps.mCoords.size, 2)
                .toString(), 1 + itemW * 6, base, mTextPaint);
        canvas.restore();
    }

    private void logMotionEvent(String type, MotionEvent event) {
    private void logMotionEvent(String type, MotionEvent event) {
        final int action = event.getAction();
        final int action = event.getAction();
        final int N = event.getHistorySize();
        final int N = event.getHistorySize();
+1 −1
Original line number Original line Diff line number Diff line
@@ -3149,7 +3149,7 @@ public class DisplayPolicy {
                | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
                | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
        lp.setFitInsetsTypes(0);
        lp.setFitInsetsTypes(0);
        lp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
        lp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
        if (ActivityManager.isHighEndGfx()) {
        if (ActivityManager.isHighEndGfx()) {
            lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
            lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
            lp.privateFlags |=
            lp.privateFlags |=