Merge "Update PiP movement bounds on TaskBar inset change" into tm-qpr-dev

This commit is contained in:
Hongwei Wang
2022-09-12 18:02:43 +00:00
committed by Android (Google) Code Review
4 changed files with 30 additions and 9 deletions

View File

@@ -96,7 +96,8 @@ public class DisplayLayout {
/** /**
* Different from {@link #equals(Object)}, this method compares the basic geometry properties * Different from {@link #equals(Object)}, this method compares the basic geometry properties
* of two {@link DisplayLayout} objects including width, height, rotation, density and cutout. * of two {@link DisplayLayout} objects including width, height, rotation, density, cutout and
* insets.
* @return {@code true} if the given {@link DisplayLayout} is identical geometry wise. * @return {@code true} if the given {@link DisplayLayout} is identical geometry wise.
*/ */
public boolean isSameGeometry(@NonNull DisplayLayout other) { public boolean isSameGeometry(@NonNull DisplayLayout other) {
@@ -104,7 +105,8 @@ public class DisplayLayout {
&& mHeight == other.mHeight && mHeight == other.mHeight
&& mRotation == other.mRotation && mRotation == other.mRotation
&& mDensityDpi == other.mDensityDpi && mDensityDpi == other.mDensityDpi
&& Objects.equals(mCutout, other.mCutout); && Objects.equals(mCutout, other.mCutout)
&& Objects.equals(mStableInsets, other.mStableInsets);
} }
@Override @Override

View File

@@ -333,6 +333,7 @@ public abstract class WMShellModule {
WindowManagerShellWrapper windowManagerShellWrapper, WindowManagerShellWrapper windowManagerShellWrapper,
TaskStackListenerImpl taskStackListener, TaskStackListenerImpl taskStackListener,
PipParamsChangedForwarder pipParamsChangedForwarder, PipParamsChangedForwarder pipParamsChangedForwarder,
DisplayInsetsController displayInsetsController,
Optional<OneHandedController> oneHandedController, Optional<OneHandedController> oneHandedController,
@ShellMainThread ShellExecutor mainExecutor) { @ShellMainThread ShellExecutor mainExecutor) {
return Optional.ofNullable(PipController.create( return Optional.ofNullable(PipController.create(
@@ -341,7 +342,7 @@ public abstract class WMShellModule {
pipBoundsState, pipMotionHelper, pipMediaController, phonePipMenuController, pipBoundsState, pipMotionHelper, pipMediaController, phonePipMenuController,
pipTaskOrganizer, pipTransitionState, pipTouchHandler, pipTransitionController, pipTaskOrganizer, pipTransitionState, pipTouchHandler, pipTransitionController,
windowManagerShellWrapper, taskStackListener, pipParamsChangedForwarder, windowManagerShellWrapper, taskStackListener, pipParamsChangedForwarder,
oneHandedController, mainExecutor)); displayInsetsController, oneHandedController, mainExecutor));
} }
@WMSingleton @WMSingleton

View File

@@ -49,6 +49,7 @@ import android.os.UserManager;
import android.util.Pair; import android.util.Pair;
import android.util.Size; import android.util.Size;
import android.view.DisplayInfo; import android.view.DisplayInfo;
import android.view.InsetsState;
import android.view.SurfaceControl; import android.view.SurfaceControl;
import android.view.WindowManagerGlobal; import android.view.WindowManagerGlobal;
import android.window.WindowContainerTransaction; import android.window.WindowContainerTransaction;
@@ -64,6 +65,7 @@ import com.android.wm.shell.R;
import com.android.wm.shell.WindowManagerShellWrapper; import com.android.wm.shell.WindowManagerShellWrapper;
import com.android.wm.shell.common.DisplayChangeController; import com.android.wm.shell.common.DisplayChangeController;
import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayInsetsController;
import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.DisplayLayout;
import com.android.wm.shell.common.RemoteCallable; import com.android.wm.shell.common.RemoteCallable;
import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.ShellExecutor;
@@ -135,6 +137,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
private PipTransitionController mPipTransitionController; private PipTransitionController mPipTransitionController;
private TaskStackListenerImpl mTaskStackListener; private TaskStackListenerImpl mTaskStackListener;
private PipParamsChangedForwarder mPipParamsChangedForwarder; private PipParamsChangedForwarder mPipParamsChangedForwarder;
private DisplayInsetsController mDisplayInsetsController;
private Optional<OneHandedController> mOneHandedController; private Optional<OneHandedController> mOneHandedController;
private final ShellCommandHandler mShellCommandHandler; private final ShellCommandHandler mShellCommandHandler;
private final ShellController mShellController; private final ShellController mShellController;
@@ -338,6 +341,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
WindowManagerShellWrapper windowManagerShellWrapper, WindowManagerShellWrapper windowManagerShellWrapper,
TaskStackListenerImpl taskStackListener, TaskStackListenerImpl taskStackListener,
PipParamsChangedForwarder pipParamsChangedForwarder, PipParamsChangedForwarder pipParamsChangedForwarder,
DisplayInsetsController displayInsetsController,
Optional<OneHandedController> oneHandedController, Optional<OneHandedController> oneHandedController,
ShellExecutor mainExecutor) { ShellExecutor mainExecutor) {
if (!context.getPackageManager().hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)) { if (!context.getPackageManager().hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)) {
@@ -351,7 +355,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
pipBoundsState, pipMotionHelper, pipMediaController, phonePipMenuController, pipBoundsState, pipMotionHelper, pipMediaController, phonePipMenuController,
pipTaskOrganizer, pipTransitionState, pipTouchHandler, pipTransitionController, pipTaskOrganizer, pipTransitionState, pipTouchHandler, pipTransitionController,
windowManagerShellWrapper, taskStackListener, pipParamsChangedForwarder, windowManagerShellWrapper, taskStackListener, pipParamsChangedForwarder,
oneHandedController, mainExecutor) displayInsetsController, oneHandedController, mainExecutor)
.mImpl; .mImpl;
} }
@@ -374,6 +378,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
WindowManagerShellWrapper windowManagerShellWrapper, WindowManagerShellWrapper windowManagerShellWrapper,
TaskStackListenerImpl taskStackListener, TaskStackListenerImpl taskStackListener,
PipParamsChangedForwarder pipParamsChangedForwarder, PipParamsChangedForwarder pipParamsChangedForwarder,
DisplayInsetsController displayInsetsController,
Optional<OneHandedController> oneHandedController, Optional<OneHandedController> oneHandedController,
ShellExecutor mainExecutor ShellExecutor mainExecutor
) { ) {
@@ -407,6 +412,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
mEnterAnimationDuration = mContext.getResources() mEnterAnimationDuration = mContext.getResources()
.getInteger(R.integer.config_pipEnterAnimationDuration); .getInteger(R.integer.config_pipEnterAnimationDuration);
mPipParamsChangedForwarder = pipParamsChangedForwarder; mPipParamsChangedForwarder = pipParamsChangedForwarder;
mDisplayInsetsController = displayInsetsController;
shellInit.addInitCallback(this::onInit, this); shellInit.addInitCallback(this::onInit, this);
} }
@@ -549,6 +555,16 @@ public class PipController implements PipTransitionController.PipTransitionCallb
} }
}); });
mDisplayInsetsController.addInsetsChangedListener(mPipBoundsState.getDisplayId(),
new DisplayInsetsController.OnInsetsChangedListener() {
@Override
public void insetsChanged(InsetsState insetsState) {
onDisplayChanged(
mDisplayController.getDisplayLayout(mPipBoundsState.getDisplayId()),
false /* saveRestoreSnapFraction */);
}
});
mOneHandedController.ifPresent(controller -> { mOneHandedController.ifPresent(controller -> {
controller.registerTransitionCallback( controller.registerTransitionCallback(
new OneHandedTransitionCallback() { new OneHandedTransitionCallback() {

View File

@@ -43,6 +43,7 @@ import android.util.Size;
import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.WindowManagerShellWrapper; import com.android.wm.shell.WindowManagerShellWrapper;
import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayInsetsController;
import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.DisplayLayout;
import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.TaskStackListenerImpl; import com.android.wm.shell.common.TaskStackListenerImpl;
@@ -99,7 +100,8 @@ public class PipControllerTest extends ShellTestCase {
@Mock private TaskStackListenerImpl mMockTaskStackListener; @Mock private TaskStackListenerImpl mMockTaskStackListener;
@Mock private ShellExecutor mMockExecutor; @Mock private ShellExecutor mMockExecutor;
@Mock private Optional<OneHandedController> mMockOneHandedController; @Mock private Optional<OneHandedController> mMockOneHandedController;
@Mock private PipParamsChangedForwarder mPipParamsChangedForwarder; @Mock private PipParamsChangedForwarder mMockPipParamsChangedForwarder;
@Mock private DisplayInsetsController mMockDisplayInsetsController;
@Mock private DisplayLayout mMockDisplayLayout1; @Mock private DisplayLayout mMockDisplayLayout1;
@Mock private DisplayLayout mMockDisplayLayout2; @Mock private DisplayLayout mMockDisplayLayout2;
@@ -120,8 +122,8 @@ public class PipControllerTest extends ShellTestCase {
mMockPipBoundsState, mMockPipMotionHelper, mMockPipMediaController, mMockPipBoundsState, mMockPipMotionHelper, mMockPipMediaController,
mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipTransitionState, mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipTransitionState,
mMockPipTouchHandler, mMockPipTransitionController, mMockWindowManagerShellWrapper, mMockPipTouchHandler, mMockPipTransitionController, mMockWindowManagerShellWrapper,
mMockTaskStackListener, mPipParamsChangedForwarder, mMockTaskStackListener, mMockPipParamsChangedForwarder,
mMockOneHandedController, mMockExecutor); mMockDisplayInsetsController, mMockOneHandedController, mMockExecutor);
mShellInit.init(); mShellInit.init();
when(mMockPipBoundsAlgorithm.getSnapAlgorithm()).thenReturn(mMockPipSnapAlgorithm); when(mMockPipBoundsAlgorithm.getSnapAlgorithm()).thenReturn(mMockPipSnapAlgorithm);
when(mMockPipTouchHandler.getMotionHelper()).thenReturn(mMockPipMotionHelper); when(mMockPipTouchHandler.getMotionHelper()).thenReturn(mMockPipMotionHelper);
@@ -186,8 +188,8 @@ public class PipControllerTest extends ShellTestCase {
mMockPipBoundsState, mMockPipMotionHelper, mMockPipMediaController, mMockPipBoundsState, mMockPipMotionHelper, mMockPipMediaController,
mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipTransitionState, mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipTransitionState,
mMockPipTouchHandler, mMockPipTransitionController, mMockWindowManagerShellWrapper, mMockPipTouchHandler, mMockPipTransitionController, mMockWindowManagerShellWrapper,
mMockTaskStackListener, mPipParamsChangedForwarder, mMockTaskStackListener, mMockPipParamsChangedForwarder,
mMockOneHandedController, mMockExecutor)); mMockDisplayInsetsController, mMockOneHandedController, mMockExecutor));
} }
@Test @Test