diff options
| author | 2020-06-30 13:42:26 -0700 | |
|---|---|---|
| committer | 2020-07-09 16:53:57 +0000 | |
| commit | 778f404a54d92d0a3743455a80c2256181d3b936 (patch) | |
| tree | 7ca3281badfa433484bd0a5d046243648540eea5 | |
| parent | 349fb412b35b3a4f492e744527f4ad9e40ddd667 (diff) | |
Listen for overlay package changes to update the movement bounds
Change-Id: I90ba92b6b50d3e98e6745f8f90d5a02067133aed
Bug: 159908949
Test: Enter pip, change navigation mode, ensure bounds are right
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java | 7 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java | 20 |
2 files changed, 25 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java b/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java index 8bbd15babf19..79909b2a8ae9 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java @@ -34,6 +34,7 @@ import android.util.DisplayMetrics; import android.util.Log; import android.util.Size; import android.util.TypedValue; +import android.view.Display; import android.view.DisplayInfo; import android.view.Gravity; import android.window.WindowContainerTransaction; @@ -60,7 +61,7 @@ public class PipBoundsHandler { private final PipSnapAlgorithm mSnapAlgorithm; private final DisplayInfo mDisplayInfo = new DisplayInfo(); private final DisplayController mDisplayController; - private final DisplayLayout mDisplayLayout; + private DisplayLayout mDisplayLayout; private ComponentName mLastPipComponentName; private float mReentrySnapFraction = INVALID_SNAP_FRACTION; @@ -288,6 +289,10 @@ public class PipBoundsHandler { return mDefaultAspectRatio; } + public void onOverlayChanged(Context context, Display display) { + mDisplayLayout = new DisplayLayout(context, display); + } + /** * Updatest the display info and display layout on rotation change. This is needed even when we * aren't in PIP because the rotation layout is used to calculate the proper insets for the 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 87df54403f50..bdf9e08afc47 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java @@ -53,10 +53,12 @@ import com.android.systemui.shared.system.InputConsumerController; import com.android.systemui.shared.system.PinnedStackListenerForwarder.PinnedStackListener; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.WindowManagerWrapper; +import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.FloatingContentCoordinator; import com.android.systemui.wm.DisplayChangeController; import com.android.systemui.wm.DisplayController; +import com.android.systemui.wm.DisplayLayout; import java.io.PrintWriter; @@ -234,6 +236,19 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio } } + public ConfigurationController.ConfigurationListener mOverlayChangedListener = + new ConfigurationController.ConfigurationListener() { + @Override + public void onOverlayChanged() { + mHandler.post(() -> { + mPipBoundsHandler.onOverlayChanged(mContext, mContext.getDisplay()); + updateMovementBounds(null /* toBounds */, + false /* fromRotation */, false /* fromImeAdjustment */, + false /* fromShelfAdjustment */, null /* windowContainerTransaction */); + }); + } + }; + @Inject public PipManager(Context context, BroadcastDispatcher broadcastDispatcher, DisplayController displayController, @@ -242,7 +257,8 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio PipBoundsHandler pipBoundsHandler, PipSnapAlgorithm pipSnapAlgorithm, PipTaskOrganizer pipTaskOrganizer, - SysUiState sysUiState) { + SysUiState sysUiState, + ConfigurationController configController) { mContext = context; mActivityManager = ActivityManager.getService(); @@ -275,6 +291,8 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio context.getDisplay().getDisplayInfo(displayInfo); mPipBoundsHandler.onDisplayInfoChanged(displayInfo); + configController.addCallback(mOverlayChangedListener); + try { mPipTaskOrganizer.registerOrganizer(WINDOWING_MODE_PINNED); ActivityManager.StackInfo stackInfo = ActivityTaskManager.getService().getStackInfo( |