Merge "Update PiP movement bounds on TaskBar inset change" into tm-qpr-dev
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user