summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Winson Chung <winsonc@google.com> 2020-05-22 15:43:16 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-05-22 15:43:16 +0000
commitf31ae3b370681bac6919f0dc3ba1addf9d45159f (patch)
tree6b3642214394e6429dda35de3cca4bd058b36398
parent83dcd5f76f1ee6d957b98305fc068250f4f06f1e (diff)
parent4611bba75232c5a0e25e1dc47f6b40d3a1292674 (diff)
Merge "Cleanup some unused code and update resources on config change" into rvc-dev
-rw-r--r--packages/SystemUI/res/values/dimens.xml3
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/PipSnapAlgorithm.java20
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/PipSurfaceTransactionHelper.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/phone/PipResizeGestureHandler.java20
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java63
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/pip/PipAnimationControllerTest.java5
8 files changed, 67 insertions, 73 deletions
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 4c496097035d..07de70152b2a 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1006,6 +1006,9 @@
<!-- The corner radius for PiP window. -->
<dimen name="pip_corner_radius">8dp</dimen>
+ <!-- The buffer to use when calculating whether the pip is in an adjust zone. -->
+ <dimen name="pip_bottom_offset_buffer">1dp</dimen>
+
<dimen name="default_gear_space">18dp</dimen>
<dimen name="cell_overlay_padding">18dp</dimen>
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java b/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java
index febb6e9b32f5..b9b8a25c6d31 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java
@@ -500,6 +500,5 @@ public class PipBoundsHandler {
pw.println(innerPrefix + "mImeHeight=" + mImeHeight);
pw.println(innerPrefix + "mIsShelfShowing=" + mIsShelfShowing);
pw.println(innerPrefix + "mShelfHeight=" + mShelfHeight);
- mSnapAlgorithm.dump(pw, innerPrefix);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipSnapAlgorithm.java b/packages/SystemUI/src/com/android/systemui/pip/PipSnapAlgorithm.java
index 6df6b5ae76cc..a9b32d917d85 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipSnapAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipSnapAlgorithm.java
@@ -17,14 +17,11 @@
package com.android.systemui.pip;
import android.content.Context;
-import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.PointF;
import android.graphics.Rect;
import android.util.Size;
-import java.io.PrintWriter;
-
import javax.inject.Inject;
/**
@@ -39,8 +36,6 @@ public class PipSnapAlgorithm {
private final float mMinAspectRatioForMinSize;
private final float mMaxAspectRatioForMinSize;
- private int mOrientation = Configuration.ORIENTATION_UNDEFINED;
-
@Inject
public PipSnapAlgorithm(Context context) {
Resources res = context.getResources();
@@ -50,15 +45,6 @@ public class PipSnapAlgorithm {
mMaxAspectRatioForMinSize = res.getFloat(
com.android.internal.R.dimen.config_pictureInPictureAspectRatioLimitForMinSize);
mMinAspectRatioForMinSize = 1f / mMaxAspectRatioForMinSize;
- onConfigurationChanged();
- }
-
- /**
- * Updates the snap algorithm when the configuration changes.
- */
- public void onConfigurationChanged() {
- Resources res = mContext.getResources();
- mOrientation = res.getConfiguration().orientation;
}
/**
@@ -221,10 +207,4 @@ public class PipSnapAlgorithm {
boundsOut.offsetTo(boundedLeft, movementBounds.bottom);
}
}
-
- public void dump(PrintWriter pw, String prefix) {
- final String innerPrefix = prefix + " ";
- pw.println(prefix + PipSnapAlgorithm.class.getSimpleName());
- pw.println(innerPrefix + "mOrientation=" + mOrientation);
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipSurfaceTransactionHelper.java b/packages/SystemUI/src/com/android/systemui/pip/PipSurfaceTransactionHelper.java
index 8001e497794a..fc41d2ea8862 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipSurfaceTransactionHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipSurfaceTransactionHelper.java
@@ -24,6 +24,7 @@ import android.graphics.RectF;
import android.view.SurfaceControl;
import com.android.systemui.R;
+import com.android.systemui.statusbar.policy.ConfigurationController;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -32,10 +33,11 @@ import javax.inject.Singleton;
* Abstracts the common operations on {@link SurfaceControl.Transaction} for PiP transition.
*/
@Singleton
-public class PipSurfaceTransactionHelper {
+public class PipSurfaceTransactionHelper implements ConfigurationController.ConfigurationListener {
+ private final Context mContext;
private final boolean mEnableCornerRadius;
- private final int mCornerRadius;
+ private int mCornerRadius;
/** for {@link #scale(SurfaceControl.Transaction, SurfaceControl, Rect, Rect)} operation */
private final Matrix mTmpTransform = new Matrix();
@@ -44,9 +46,16 @@ public class PipSurfaceTransactionHelper {
private final RectF mTmpDestinationRectF = new RectF();
@Inject
- public PipSurfaceTransactionHelper(Context context) {
+ public PipSurfaceTransactionHelper(Context context, ConfigurationController configController) {
final Resources res = context.getResources();
+ mContext = context;
mEnableCornerRadius = res.getBoolean(R.bool.config_pipEnableRoundCorner);
+ configController.addCallback(this);
+ }
+
+ @Override
+ public void onDensityOrFontScaleChanged() {
+ final Resources res = mContext.getResources();
mCornerRadius = res.getDimensionPixelSize(R.dimen.pip_corner_radius);
}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java
index 74c72fd356a0..2e75bab7ae32 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java
@@ -28,7 +28,6 @@ import androidx.dynamicanimation.animation.SpringForce;
import com.android.systemui.pip.PipSnapAlgorithm;
import com.android.systemui.pip.PipTaskOrganizer;
-import com.android.systemui.shared.system.WindowManagerWrapper;
import com.android.systemui.util.FloatingContentCoordinator;
import com.android.systemui.util.animation.FloatProperties;
import com.android.systemui.util.animation.PhysicsAnimator;
@@ -60,8 +59,6 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
private PipMenuActivityController mMenuController;
private PipSnapAlgorithm mSnapAlgorithm;
- private final Rect mStableInsets = new Rect();
-
/** PIP's current bounds on the screen. */
private final Rect mBounds = new Rect();
@@ -148,7 +145,6 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
mMenuController = menuController;
mSnapAlgorithm = snapAlgorithm;
mFloatingContentCoordinator = floatingContentCoordinator;
- onConfigurationChanged();
mPipTaskOrganizer.registerPipTransitionCallback(mPipTransitionCallback);
}
@@ -170,14 +166,6 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
}
/**
- * Updates whenever the configuration changes.
- */
- void onConfigurationChanged() {
- mSnapAlgorithm.onConfigurationChanged();
- WindowManagerWrapper.getInstance().getStableInsets(mStableInsets);
- }
-
- /**
* Synchronizes the current bounds with the pinned stack, cancelling any ongoing animations.
*/
void synchronizePinnedStackBounds() {
@@ -530,6 +518,5 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
final String innerPrefix = prefix + " ";
pw.println(prefix + TAG);
pw.println(innerPrefix + "mBounds=" + mBounds);
- pw.println(innerPrefix + "mStableInsets=" + mStableInsets);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipResizeGestureHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipResizeGestureHandler.java
index 5f0bf562df4e..cc3ab29daed3 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipResizeGestureHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipResizeGestureHandler.java
@@ -32,7 +32,6 @@ import android.hardware.input.InputManager;
import android.os.Handler;
import android.os.Looper;
import android.provider.DeviceConfig;
-import android.util.DisplayMetrics;
import android.view.InputChannel;
import android.view.InputEvent;
import android.view.InputEventReceiver;
@@ -56,7 +55,7 @@ public class PipResizeGestureHandler {
private static final String TAG = "PipResizeGestureHandler";
- private final DisplayMetrics mDisplayMetrics = new DisplayMetrics();
+ private final Context mContext;
private final PipBoundsHandler mPipBoundsHandler;
private final PipMotionHelper mMotionHelper;
private final int mDisplayId;
@@ -74,10 +73,10 @@ public class PipResizeGestureHandler {
private final Rect mTmpBottomLeftCorner = new Rect();
private final Rect mTmpBottomRightCorner = new Rect();
private final Rect mDisplayBounds = new Rect();
- private final int mDelta;
private final Supplier<Rect> mMovementBoundsSupplier;
private final Runnable mUpdateMovementBoundsRunnable;
+ private int mDelta;
private boolean mAllowGesture;
private boolean mIsAttached;
private boolean mIsEnabled;
@@ -93,8 +92,7 @@ public class PipResizeGestureHandler {
PipMotionHelper motionHelper, DeviceConfigProxy deviceConfig,
PipTaskOrganizer pipTaskOrganizer, Supplier<Rect> movementBoundsSupplier,
Runnable updateMovementBoundsRunnable) {
- final Resources res = context.getResources();
- context.getDisplay().getMetrics(mDisplayMetrics);
+ mContext = context;
mDisplayId = context.getDisplayId();
mMainExecutor = context.getMainExecutor();
mPipBoundsHandler = pipBoundsHandler;
@@ -102,9 +100,8 @@ public class PipResizeGestureHandler {
mPipTaskOrganizer = pipTaskOrganizer;
mMovementBoundsSupplier = movementBoundsSupplier;
mUpdateMovementBoundsRunnable = updateMovementBoundsRunnable;
-
context.getDisplay().getRealSize(mMaxSize);
- mDelta = res.getDimensionPixelSize(R.dimen.pip_resize_edge_size);
+ reloadResources();
mEnableUserResize = DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_SYSTEMUI,
@@ -122,6 +119,15 @@ public class PipResizeGestureHandler {
});
}
+ public void onConfigurationChanged() {
+ reloadResources();
+ }
+
+ private void reloadResources() {
+ final Resources res = mContext.getResources();
+ mDelta = res.getDimensionPixelSize(R.dimen.pip_resize_edge_size);
+ }
+
private void resetDragCorners() {
mDragCornerSize.set(0, 0, mDelta, mDelta);
mTmpTopLeftCorner.set(mDragCornerSize);
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
index ecd80a301d52..c408caaccbfb 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
@@ -61,7 +61,6 @@ import com.android.systemui.pip.PipBoundsHandler;
import com.android.systemui.pip.PipSnapAlgorithm;
import com.android.systemui.pip.PipTaskOrganizer;
import com.android.systemui.shared.system.InputConsumerController;
-import com.android.systemui.statusbar.FlingAnimationUtils;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.DismissCircleView;
import com.android.systemui.util.FloatingContentCoordinator;
@@ -77,9 +76,6 @@ import java.io.PrintWriter;
public class PipTouchHandler {
private static final String TAG = "PipTouchHandler";
- private static final int SHOW_DISMISS_AFFORDANCE_DELAY = 225;
- private static final int BOTTOM_OFFSET_BUFFER_DP = 1;
-
// Allow dragging the PIP to a location to close it
private final boolean mEnableDismissDragToEdge;
// Allow PIP to resize to a slightly bigger state upon touch
@@ -161,6 +157,7 @@ public class PipTouchHandler {
private boolean mIsShelfShowing;
private int mShelfHeight;
private int mMovementBoundsExtraOffsets;
+ private int mBottomOffsetBufferPx;
private float mSavedSnapFraction = -1f;
private boolean mSendingHoverAccessibilityEvents;
private boolean mMovementWithinDismiss;
@@ -168,7 +165,6 @@ public class PipTouchHandler {
// Touch state
private final PipTouchState mTouchState;
- private final FlingAnimationUtils mFlingAnimationUtils;
private final FloatingContentCoordinator mFloatingContentCoordinator;
private PipMotionHelper mMotionHelper;
private PipTouchGesture mGesture;
@@ -225,8 +221,6 @@ public class PipTouchHandler {
mMenuController = menuController;
mMenuController.addListener(new PipMenuListener());
mSnapAlgorithm = pipSnapAlgorithm;
- mFlingAnimationUtils = new FlingAnimationUtils(context.getResources().getDisplayMetrics(),
- 2.5f);
mGesture = new DefaultPipTouchGesture();
mMotionHelper = new PipMotionHelper(mContext, pipTaskOrganizer, mMenuController,
mSnapAlgorithm, floatingContentCoordinator);
@@ -239,13 +233,9 @@ public class PipTouchHandler {
true /* allowMenuTimeout */, willResizeMenu(), shouldShowResizeHandle()));
Resources res = context.getResources();
- mExpandedShortestEdgeSize = res.getDimensionPixelSize(
- R.dimen.pip_expanded_shortest_edge_size);
- mImeOffset = res.getDimensionPixelSize(R.dimen.pip_ime_offset);
- mDismissAreaHeight = res.getDimensionPixelSize(R.dimen.floating_dismiss_gradient_height);
-
mEnableDismissDragToEdge = res.getBoolean(R.bool.config_pipEnableDismissDragToEdge);
mEnableResize = res.getBoolean(R.bool.config_pipEnableResizeForMenu);
+ reloadResources();
// Register the listener for input consumer touch events
inputConsumerController.setInputListener(this::handleTouchEvent);
@@ -256,22 +246,14 @@ public class PipTouchHandler {
mConnection = new PipAccessibilityInteractionConnection(mMotionHelper,
this::onAccessibilityShowMenu, mHandler);
- final int targetSize = res.getDimensionPixelSize(R.dimen.dismiss_circle_size);
mTargetView = new DismissCircleView(context);
- final FrameLayout.LayoutParams newParams =
- new FrameLayout.LayoutParams(targetSize, targetSize);
- newParams.gravity = Gravity.CENTER;
- mTargetView.setLayoutParams(newParams);
-
mTargetViewContainer = new FrameLayout(context);
mTargetViewContainer.setClipChildren(false);
mTargetViewContainer.addView(mTargetView);
mMagnetizedPip = mMotionHelper.getMagnetizedPip();
mMagneticTarget = mMagnetizedPip.addTarget(mTargetView, 0);
-
- // Set the magnetic field radius equal to twice the size of the target.
- mMagneticTarget.setMagneticFieldRadiusPx(targetSize * 2);
+ updateMagneticTargetSize();
mMagnetizedPip.setPhysicsAnimatorUpdateListener(mMotionHelper.mResizePipUpdateListener);
mMagnetizedPip.setMagnetListener(new MagnetizedObject.MagnetListener() {
@@ -311,8 +293,34 @@ public class PipTouchHandler {
mMagneticTargetAnimator = PhysicsAnimator.getInstance(mTargetView);
}
+ private void reloadResources() {
+ final Resources res = mContext.getResources();
+ mBottomOffsetBufferPx = res.getDimensionPixelSize(R.dimen.pip_bottom_offset_buffer);
+ mExpandedShortestEdgeSize = res.getDimensionPixelSize(
+ R.dimen.pip_expanded_shortest_edge_size);
+ mImeOffset = res.getDimensionPixelSize(R.dimen.pip_ime_offset);
+ mDismissAreaHeight = res.getDimensionPixelSize(R.dimen.floating_dismiss_gradient_height);
+ updateMagneticTargetSize();
+ }
+
+ private void updateMagneticTargetSize() {
+ if (mTargetView == null) {
+ return;
+ }
+
+ final Resources res = mContext.getResources();
+ final int targetSize = res.getDimensionPixelSize(R.dimen.dismiss_circle_size);
+ final FrameLayout.LayoutParams newParams =
+ new FrameLayout.LayoutParams(targetSize, targetSize);
+ newParams.gravity = Gravity.CENTER;
+ mTargetView.setLayoutParams(newParams);
+
+ // Set the magnetic field radius equal to twice the size of the target.
+ mMagneticTarget.setMagneticFieldRadiusPx(targetSize * 2);
+ }
+
private boolean shouldShowResizeHandle() {
- return !mPipBoundsHandler.hasSaveReentryBounds();
+ return !mPipBoundsHandler.hasSaveReentryBounds();
}
public void setTouchGesture(PipTouchGesture gesture) {
@@ -371,8 +379,9 @@ public class PipTouchHandler {
}
public void onConfigurationChanged() {
- mMotionHelper.onConfigurationChanged();
+ mPipResizeGestureHandler.onConfigurationChanged();
mMotionHelper.synchronizePinnedStackBounds();
+ reloadResources();
// Recreate the dismiss target for the new orientation.
createOrUpdateDismissTarget();
@@ -436,8 +445,6 @@ public class PipTouchHandler {
// Defer the update of the current movement bounds until after the user finishes
// touching the screen
} else {
- final float offsetBufferPx = BOTTOM_OFFSET_BUFFER_DP
- * mContext.getResources().getDisplayMetrics().density;
final boolean isExpanded = mMenuState == MENU_STATE_FULL && willResizeMenu();
final Rect toMovementBounds = isExpanded
? new Rect(expandedMovementBounds)
@@ -453,8 +460,9 @@ public class PipTouchHandler {
mSavedSnapFraction);
}
- if ((Math.min(prevBottom, toBottom) - offsetBufferPx) <= curBounds.top
- && curBounds.top <= (Math.max(prevBottom, toBottom) + offsetBufferPx)) {
+ if ((Math.min(prevBottom, toBottom) - mBottomOffsetBufferPx) <= curBounds.top
+ && curBounds.top <= (Math.max(prevBottom, toBottom)
+ + mBottomOffsetBufferPx)) {
mMotionHelper.animateToOffset(curBounds, toBottom - curBounds.top);
}
}
@@ -997,7 +1005,6 @@ public class PipTouchHandler {
pw.println(innerPrefix + "mShelfHeight=" + mShelfHeight);
pw.println(innerPrefix + "mSavedSnapFraction=" + mSavedSnapFraction);
pw.println(innerPrefix + "mEnableDragToEdgeDismiss=" + mEnableDismissDragToEdge);
- mSnapAlgorithm.dump(pw, innerPrefix);
mTouchState.dump(pw, innerPrefix);
mMotionHelper.dump(pw, innerPrefix);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/pip/PipAnimationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/pip/PipAnimationControllerTest.java
index 56a748497d4e..b7a2633d0d36 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/pip/PipAnimationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/pip/PipAnimationControllerTest.java
@@ -22,6 +22,7 @@ import static com.android.systemui.pip.PipAnimationController.TRANSITION_DIRECTI
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import android.graphics.Matrix;
@@ -33,6 +34,7 @@ import android.view.SurfaceControl;
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.policy.ConfigurationController;
import org.junit.Before;
import org.junit.Test;
@@ -59,7 +61,8 @@ public class PipAnimationControllerTest extends SysuiTestCase {
@Before
public void setUp() throws Exception {
mPipAnimationController = new PipAnimationController(
- mContext, new PipSurfaceTransactionHelper(mContext));
+ mContext, new PipSurfaceTransactionHelper(mContext,
+ mock(ConfigurationController.class)));
mLeash = new SurfaceControl.Builder()
.setContainerLayer()
.setName("FakeLeash")