Inject PipBoundsHandler and PipSnapAlgorithm using Dagger2

Allows vendors to override either with custom implementations.

Bug: 143703251
Test: atest PipBoundsHandlerTest
Change-Id: Ib083cf2c4cff95098bdfbbfee670c6e5df27be1a
This commit is contained in:
jorgegil@google.com
2020-02-28 13:14:39 -08:00
parent 4cbd3b7a8e
commit 5bdec5f55d
6 changed files with 21 additions and 10 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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);

View File

@@ -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();

View File

@@ -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();

View File

@@ -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);
}