From 5bdec5f55d00d9e19ec6c280fad12691785035c1 Mon Sep 17 00:00:00 2001 From: "jorgegil@google.com" Date: Fri, 28 Feb 2020 13:14:39 -0800 Subject: [PATCH] Inject PipBoundsHandler and PipSnapAlgorithm using Dagger2 Allows vendors to override either with custom implementations. Bug: 143703251 Test: atest PipBoundsHandlerTest Change-Id: Ib083cf2c4cff95098bdfbbfee670c6e5df27be1a --- .../src/com/android/systemui/pip/PipBoundsHandler.java | 7 +++++-- .../src/com/android/systemui/pip/PipSnapAlgorithm.java | 3 +++ .../src/com/android/systemui/pip/phone/PipManager.java | 9 ++++++--- .../com/android/systemui/pip/phone/PipTouchHandler.java | 5 +++-- .../src/com/android/systemui/pip/tv/PipManager.java | 5 +++-- .../com/android/systemui/pip/PipBoundsHandlerTest.java | 2 +- 6 files changed, 21 insertions(+), 10 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java b/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java index 1ae3d4f482f40..fb348f483c46f 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java @@ -42,6 +42,8 @@ import android.view.WindowManagerGlobal; import java.io.PrintWriter; +import javax.inject.Inject; + /** * Handles bounds calculation for PIP on Phone and other form factors, it keeps tracking variant * state changes originated from Window Manager and is the source of truth for PiP window bounds. @@ -81,9 +83,10 @@ public class PipBoundsHandler { private boolean mIsShelfShowing; private int mShelfHeight; - public PipBoundsHandler(Context context) { + @Inject + public PipBoundsHandler(Context context, PipSnapAlgorithm pipSnapAlgorithm) { mContext = context; - mSnapAlgorithm = new PipSnapAlgorithm(context); + mSnapAlgorithm = pipSnapAlgorithm; mWindowManager = WindowManagerGlobal.getWindowManagerService(); reloadResources(); // Initialize the aspect ratio to the default aspect ratio. Don't do this in reload diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipSnapAlgorithm.java b/packages/SystemUI/src/com/android/systemui/pip/PipSnapAlgorithm.java index 6b89718acee82..b5d23a5214ef8 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipSnapAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipSnapAlgorithm.java @@ -28,6 +28,8 @@ import android.view.Gravity; import java.io.PrintWriter; import java.util.ArrayList; +import javax.inject.Inject; + /** * Calculates the snap targets and the snap position for the PIP given a position and a velocity. * All bounds are relative to the display top/left. @@ -63,6 +65,7 @@ public class PipSnapAlgorithm { private int mOrientation = Configuration.ORIENTATION_UNDEFINED; + @Inject public PipSnapAlgorithm(Context context) { Resources res = context.getResources(); mContext = context; diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java index 8ada3c393222b..4b97d134761e6 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java @@ -41,6 +41,7 @@ import com.android.systemui.UiOffloadThread; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.pip.BasePipManager; import com.android.systemui.pip.PipBoundsHandler; +import com.android.systemui.pip.PipSnapAlgorithm; import com.android.systemui.pip.PipTaskOrganizer; import com.android.systemui.shared.recents.IPinnedStackAnimationListener; import com.android.systemui.shared.system.ActivityManagerWrapper; @@ -205,7 +206,9 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio public PipManager(Context context, BroadcastDispatcher broadcastDispatcher, DisplayController displayController, FloatingContentCoordinator floatingContentCoordinator, - DeviceConfigProxy deviceConfig) { + DeviceConfigProxy deviceConfig, + PipBoundsHandler pipBoundsHandler, + PipSnapAlgorithm pipSnapAlgorithm) { mContext = context; mActivityManager = ActivityManager.getService(); @@ -218,7 +221,7 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio ActivityManagerWrapper.getInstance().registerTaskStackListener(mTaskStackListener); final IActivityTaskManager activityTaskManager = ActivityTaskManager.getService(); - mPipBoundsHandler = new PipBoundsHandler(context); + mPipBoundsHandler = pipBoundsHandler; mPipTaskOrganizer = new PipTaskOrganizer(mContext, mPipBoundsHandler); mPipTaskOrganizer.registerPipTransitionCallback(this); mInputConsumerController = InputConsumerController.getPipInputConsumer(); @@ -227,7 +230,7 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio mInputConsumerController); mTouchHandler = new PipTouchHandler(context, mActivityManager, activityTaskManager, mMenuController, mInputConsumerController, mPipBoundsHandler, mPipTaskOrganizer, - floatingContentCoordinator, deviceConfig); + floatingContentCoordinator, deviceConfig, pipSnapAlgorithm); mAppOpsListener = new PipAppOpsListener(context, mActivityManager, mTouchHandler.getMotionHelper()); displayController.addDisplayChangingController(mRotationController); 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 3f73d0194cd6b..322f5cb7d5f3d 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java @@ -166,7 +166,8 @@ public class PipTouchHandler { PipBoundsHandler pipBoundsHandler, PipTaskOrganizer pipTaskOrganizer, FloatingContentCoordinator floatingContentCoordinator, - DeviceConfigProxy deviceConfig) { + DeviceConfigProxy deviceConfig, + PipSnapAlgorithm pipSnapAlgorithm) { // Initialize the Pip input consumer mContext = context; mActivityManager = activityManager; @@ -174,7 +175,7 @@ public class PipTouchHandler { mMenuController = menuController; mMenuController.addListener(new PipMenuListener()); mDismissViewController = new PipDismissViewController(context); - mSnapAlgorithm = new PipSnapAlgorithm(mContext); + mSnapAlgorithm = pipSnapAlgorithm; mFlingAnimationUtils = new FlingAnimationUtils(context.getResources().getDisplayMetrics(), 2.5f); mGesture = new DefaultPipTouchGesture(); diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java index cb1a218af954f..003e2721b93e9 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java @@ -228,13 +228,14 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio } @Inject - public PipManager(Context context, BroadcastDispatcher broadcastDispatcher) { + public PipManager(Context context, BroadcastDispatcher broadcastDispatcher, + PipBoundsHandler pipBoundsHandler) { if (mInitialized) { return; } mInitialized = true; mContext = context; - mPipBoundsHandler = new PipBoundsHandler(context); + mPipBoundsHandler = pipBoundsHandler; mPipTaskOrganizer = new PipTaskOrganizer(mContext, mPipBoundsHandler); mPipTaskOrganizer.registerPipTransitionCallback(this); mActivityTaskManager = ActivityTaskManager.getService(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/pip/PipBoundsHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/pip/PipBoundsHandlerTest.java index 3b00684786b82..b12db2b44e3db 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/pip/PipBoundsHandlerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/pip/PipBoundsHandlerTest.java @@ -58,7 +58,7 @@ public class PipBoundsHandlerTest extends SysuiTestCase { @Before public void setUp() throws Exception { initializeMockResources(); - mPipBoundsHandler = new PipBoundsHandler(mContext); + mPipBoundsHandler = new PipBoundsHandler(mContext, new PipSnapAlgorithm(mContext)); mPipBoundsHandler.onDisplayInfoChanged(mDefaultDisplayInfo); }