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

Commit a10139c9 authored by Winson Chung's avatar Winson Chung
Browse files

Fix issue with

- For R, resizing is from an input consumer which is receiving touches
  globally, for now, just ignore resizing when we know there is
  occluding sysui visible

Change-Id: I56a442a6335cd2367606356c67efbefdadc897fc
Bug: 158887398
Test: Open pip, open shade/bubbles/power menu and try to resize where
      the pip would be (ensure that we don't and that it doesn't
      steal touches from other sysui)
parent c5aa333a
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import android.window.WindowContainerTransaction;
import com.android.systemui.Dependency;
import com.android.systemui.UiOffloadThread;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.model.SysUiState;
import com.android.systemui.pip.BasePipManager;
import com.android.systemui.pip.PipBoundsHandler;
import com.android.systemui.pip.PipSnapAlgorithm;
@@ -229,7 +230,8 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
            DeviceConfigProxy deviceConfig,
            PipBoundsHandler pipBoundsHandler,
            PipSnapAlgorithm pipSnapAlgorithm,
            PipTaskOrganizer pipTaskOrganizer) {
            PipTaskOrganizer pipTaskOrganizer,
            SysUiState sysUiState) {
        mContext = context;
        mActivityManager = ActivityManager.getService();

@@ -250,7 +252,7 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
                mInputConsumerController);
        mTouchHandler = new PipTouchHandler(context, mActivityManager,
                mMenuController, mInputConsumerController, mPipBoundsHandler, mPipTaskOrganizer,
                floatingContentCoordinator, deviceConfig, pipSnapAlgorithm);
                floatingContentCoordinator, deviceConfig, pipSnapAlgorithm, sysUiState);
        mAppOpsListener = new PipAppOpsListener(context, mActivityManager,
                mTouchHandler.getMotionHelper());
        displayController.addDisplayChangingController(mRotationController);
+25 −2
Original line number Diff line number Diff line
@@ -21,6 +21,13 @@ import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_LEFT;
import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_NONE;
import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_RIGHT;
import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_TOP;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BOUNCER_SHOWING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BUBBLES_EXPANDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_GLOBAL_ACTIONS_SHOWING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED;

import android.content.Context;
import android.content.res.Resources;
@@ -43,6 +50,7 @@ import android.view.ViewConfiguration;

import com.android.internal.policy.TaskResizingAlgorithm;
import com.android.systemui.R;
import com.android.systemui.model.SysUiState;
import com.android.systemui.pip.PipBoundsHandler;
import com.android.systemui.pip.PipTaskOrganizer;
import com.android.systemui.util.DeviceConfigProxy;
@@ -58,11 +66,21 @@ public class PipResizeGestureHandler {

    private static final String TAG = "PipResizeGestureHandler";

    private static final int INVALID_SYSUI_STATE_MASK =
            SYSUI_STATE_GLOBAL_ACTIONS_SHOWING
            | SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING
            | SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED
            | SYSUI_STATE_BOUNCER_SHOWING
            | SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED
            | SYSUI_STATE_BUBBLES_EXPANDED
            | SYSUI_STATE_QUICK_SETTINGS_EXPANDED;

    private final Context mContext;
    private final PipBoundsHandler mPipBoundsHandler;
    private final PipMotionHelper mMotionHelper;
    private final int mDisplayId;
    private final Executor mMainExecutor;
    private final SysUiState mSysUiState;
    private final Region mTmpRegion = new Region();

    private final PointF mDownPoint = new PointF();
@@ -96,7 +114,7 @@ public class PipResizeGestureHandler {
    public PipResizeGestureHandler(Context context, PipBoundsHandler pipBoundsHandler,
            PipMotionHelper motionHelper, DeviceConfigProxy deviceConfig,
            PipTaskOrganizer pipTaskOrganizer, Supplier<Rect> movementBoundsSupplier,
            Runnable updateMovementBoundsRunnable) {
            Runnable updateMovementBoundsRunnable, SysUiState sysUiState) {
        mContext = context;
        mDisplayId = context.getDisplayId();
        mMainExecutor = context.getMainExecutor();
@@ -105,6 +123,7 @@ public class PipResizeGestureHandler {
        mPipTaskOrganizer = pipTaskOrganizer;
        mMovementBoundsSupplier = movementBoundsSupplier;
        mUpdateMovementBoundsRunnable = updateMovementBoundsRunnable;
        mSysUiState = sysUiState;

        context.getDisplay().getRealSize(mMaxSize);
        reloadResources();
@@ -258,13 +277,17 @@ public class PipResizeGestureHandler {
        }
    }

    private boolean isInValidSysUiState() {
        return (mSysUiState.getFlags() & INVALID_SYSUI_STATE_MASK) == 0;
    }

    private void onMotionEvent(MotionEvent ev) {
        int action = ev.getActionMasked();
        float x = ev.getX();
        float y = ev.getY();
        if (action == MotionEvent.ACTION_DOWN) {
            mLastResizeBounds.setEmpty();
            mAllowGesture = isWithinTouchRegion((int) x, (int) y);
            mAllowGesture = isInValidSysUiState() && isWithinTouchRegion((int) x, (int) y);
            if (mAllowGesture) {
                setCtrlType((int) x, (int) y);
                mDownPoint.set(x, y);
+4 −2
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ import androidx.dynamicanimation.animation.SpringForce;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.os.logging.MetricsLoggerWrapper;
import com.android.systemui.R;
import com.android.systemui.model.SysUiState;
import com.android.systemui.pip.PipAnimationController;
import com.android.systemui.pip.PipBoundsHandler;
import com.android.systemui.pip.PipSnapAlgorithm;
@@ -222,7 +223,8 @@ public class PipTouchHandler {
            PipTaskOrganizer pipTaskOrganizer,
            FloatingContentCoordinator floatingContentCoordinator,
            DeviceConfigProxy deviceConfig,
            PipSnapAlgorithm pipSnapAlgorithm) {
            PipSnapAlgorithm pipSnapAlgorithm,
            SysUiState sysUiState) {
        // Initialize the Pip input consumer
        mContext = context;
        mActivityManager = activityManager;
@@ -237,7 +239,7 @@ public class PipTouchHandler {
        mPipResizeGestureHandler =
                new PipResizeGestureHandler(context, pipBoundsHandler, mMotionHelper,
                        deviceConfig, pipTaskOrganizer, this::getMovementBounds,
                        this::updateMovementBounds);
                        this::updateMovementBounds, sysUiState);
        mTouchState = new PipTouchState(ViewConfiguration.get(context), mHandler,
                () -> mMenuController.showMenuWithDelay(MENU_STATE_FULL, mMotionHelper.getBounds(),
                        true /* allowMenuTimeout */, willResizeMenu(), shouldShowResizeHandle()));
+5 −2
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

import android.app.IActivityManager;
import android.app.IActivityTaskManager;
import android.graphics.Point;
import android.graphics.Rect;
import android.testing.AndroidTestingRunner;
@@ -34,6 +33,7 @@ import androidx.test.filters.SmallTest;

import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.model.SysUiState;
import com.android.systemui.pip.PipBoundsHandler;
import com.android.systemui.pip.PipSnapAlgorithm;
import com.android.systemui.pip.PipTaskOrganizer;
@@ -82,6 +82,9 @@ public class PipTouchHandlerTest extends SysuiTestCase {
    @Mock
    private DeviceConfigProxy mDeviceConfigProxy;

    @Mock
    private SysUiState mSysUiState;

    private PipSnapAlgorithm mPipSnapAlgorithm;
    private PipMotionHelper mMotionHelper;
    private PipResizeGestureHandler mPipResizeGestureHandler;
@@ -101,7 +104,7 @@ public class PipTouchHandlerTest extends SysuiTestCase {
        mPipTouchHandler = new PipTouchHandler(mContext, mActivityManager,
                mPipMenuActivityController, mInputConsumerController, mPipBoundsHandler,
                mPipTaskOrganizer, mFloatingContentCoordinator, mDeviceConfigProxy,
                mPipSnapAlgorithm);
                mPipSnapAlgorithm, mSysUiState);
        mMotionHelper = Mockito.spy(mPipTouchHandler.getMotionHelper());
        mPipResizeGestureHandler = Mockito.spy(mPipTouchHandler.getPipResizeGestureHandler());
        mPipTouchHandler.setPipMotionHelper(mMotionHelper);