summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java10
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java55
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipUtils.java12
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java56
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTaskOrganizerTest.java30
-rw-r--r--packages/CarSystemUI/src/com/android/systemui/wmshell/CarWMShellModule.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java19
-rw-r--r--packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/wmshell/TvWMShellModule.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java39
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java33
13 files changed, 106 insertions, 182 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
index 3485c7ae8ecb..15fd4245a819 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
@@ -67,7 +67,6 @@ import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.pip.phone.PipMenuActivityController;
import com.android.wm.shell.pip.phone.PipMotionHelper;
import com.android.wm.shell.pip.phone.PipUpdateThread;
-import com.android.wm.shell.pip.phone.PipUtils;
import com.android.wm.shell.splitscreen.SplitScreen;
import java.io.PrintWriter;
@@ -281,13 +280,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
mSurfaceControlTransactionFactory = SurfaceControl.Transaction::new;
mSplitScreenOptional = splitScreenOptional;
mTaskOrganizer = shellTaskOrganizer;
-
- if (!PipUtils.hasSystemFeature(context)) {
- Log.w(TAG, "Device not support PIP feature");
- } else {
- mTaskOrganizer.addListener(this, TASK_LISTENER_TYPE_PIP);
- displayController.addDisplayWindowListener(this);
- }
+ mTaskOrganizer.addListener(this, TASK_LISTENER_TYPE_PIP);
+ displayController.addDisplayWindowListener(this);
}
public Handler getUpdateHandler() {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
index d191c980375c..13f5ac3edc60 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
@@ -17,11 +17,10 @@
package com.android.wm.shell.pip.phone;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
+import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE;
import static com.android.wm.shell.pip.PipAnimationController.isOutPipDirection;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.PictureInPictureParams;
import android.app.RemoteAction;
@@ -34,11 +33,14 @@ import android.os.Handler;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
-import android.util.Log;
+import android.util.Slog;
import android.view.DisplayInfo;
import android.view.IPinnedStackController;
import android.window.WindowContainerTransaction;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
import com.android.wm.shell.WindowManagerShellWrapper;
import com.android.wm.shell.common.DisplayChangeController;
import com.android.wm.shell.common.DisplayController;
@@ -196,7 +198,7 @@ public class PipController implements Pip, PipTaskOrganizer.PipTransitionCallbac
}
}
- public PipController(Context context,
+ protected PipController(Context context,
DisplayController displayController,
PipAppOpsListener pipAppOpsListener,
PipBoundsHandler pipBoundsHandler,
@@ -207,34 +209,13 @@ public class PipController implements Pip, PipTaskOrganizer.PipTransitionCallbac
PipTouchHandler pipTouchHandler,
WindowManagerShellWrapper windowManagerShellWrapper
) {
- mContext = context;
-
- if (PipUtils.hasSystemFeature(mContext)) {
- initController(context, displayController, pipAppOpsListener, pipBoundsHandler,
- pipBoundsState, pipMediaController, pipMenuActivityController, pipTaskOrganizer,
- pipTouchHandler, windowManagerShellWrapper);
- } else {
- Log.w(TAG, "Device not support PIP feature");
- }
- }
-
- private void initController(Context context,
- DisplayController displayController,
- PipAppOpsListener pipAppOpsListener,
- PipBoundsHandler pipBoundsHandler,
- @NonNull PipBoundsState pipBoundsState,
- PipMediaController pipMediaController,
- PipMenuActivityController pipMenuActivityController,
- PipTaskOrganizer pipTaskOrganizer,
- PipTouchHandler pipTouchHandler,
- WindowManagerShellWrapper windowManagerShellWrapper) {
-
// Ensure that we are the primary user's SystemUI.
final int processUser = UserManager.get(context).getUserHandle();
if (processUser != UserHandle.USER_SYSTEM) {
throw new IllegalStateException("Non-primary Pip component not currently supported.");
}
+ mContext = context;
mWindowManagerShellWrapper = windowManagerShellWrapper;
mDisplayController = displayController;
mPipBoundsHandler = pipBoundsHandler;
@@ -258,7 +239,7 @@ public class PipController implements Pip, PipTaskOrganizer.PipTransitionCallbac
mWindowManagerShellWrapper.addPinnedStackListener(
new PipControllerPinnedStackListener());
} catch (RemoteException e) {
- Log.e(TAG, "Failed to register pinned stack listener", e);
+ Slog.e(TAG, "Failed to register pinned stack listener", e);
}
}
@@ -465,4 +446,24 @@ public class PipController implements Pip, PipTaskOrganizer.PipTransitionCallbac
mPipTaskOrganizer.dump(pw, innerPrefix);
mPipBoundsState.dump(pw, innerPrefix);
}
+
+ /**
+ * Instantiates {@link PipController}, returns {@code null} if the feature not supported.
+ */
+ @Nullable
+ public static PipController create(Context context, DisplayController displayController,
+ PipAppOpsListener pipAppOpsListener, PipBoundsHandler pipBoundsHandler,
+ PipBoundsState pipBoundsState, PipMediaController pipMediaController,
+ PipMenuActivityController pipMenuActivityController,
+ PipTaskOrganizer pipTaskOrganizer, PipTouchHandler pipTouchHandler,
+ WindowManagerShellWrapper windowManagerShellWrapper) {
+ if (!context.getPackageManager().hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)) {
+ Slog.w(TAG, "Device doesn't support Pip feature");
+ return null;
+ }
+
+ return new PipController(context, displayController, pipAppOpsListener, pipBoundsHandler,
+ pipBoundsState, pipMediaController, pipMenuActivityController,
+ pipTaskOrganizer, pipTouchHandler, windowManagerShellWrapper);
+ }
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipUtils.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipUtils.java
index 6a58ce0d4646..bd2ba32912bc 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipUtils.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipUtils.java
@@ -18,7 +18,6 @@ package com.android.wm.shell.pip.phone;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
-import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE;
import android.app.ActivityTaskManager;
import android.app.ActivityTaskManager.RootTaskInfo;
@@ -30,7 +29,6 @@ import android.util.Log;
import android.util.Pair;
public class PipUtils {
-
private static final String TAG = "PipUtils";
/**
@@ -58,14 +56,4 @@ public class PipUtils {
}
return new Pair<>(null, 0);
}
-
- /**
- * The util to check if device has PIP feature
- *
- * @param context application context
- * @return true if device has PIP feature, false otherwise.
- */
- public static boolean hasSystemFeature(Context context) {
- return context.getPackageManager().hasSystemFeature(FEATURE_PICTURE_IN_PICTURE);
- }
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java
index 2b987e98bc7e..a282a48e8494 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java
@@ -18,17 +18,18 @@ package com.android.wm.shell.pip.phone;
import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE;
+import static org.junit.Assert.assertNull;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.content.Context;
import android.content.pm.PackageManager;
import android.os.RemoteException;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
-import android.testing.TestableContext;
import android.testing.TestableLooper;
import com.android.wm.shell.WindowManagerShellWrapper;
@@ -37,10 +38,6 @@ import com.android.wm.shell.pip.PipBoundsHandler;
import com.android.wm.shell.pip.PipBoundsState;
import com.android.wm.shell.pip.PipTaskOrganizer;
import com.android.wm.shell.pip.PipTestCase;
-import com.android.wm.shell.pip.phone.PipAppOpsListener;
-import com.android.wm.shell.pip.phone.PipController;
-import com.android.wm.shell.pip.phone.PipMediaController;
-import com.android.wm.shell.pip.phone.PipTouchHandler;
import org.junit.Before;
import org.junit.Test;
@@ -55,49 +52,52 @@ import org.mockito.MockitoAnnotations;
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
public class PipControllerTest extends PipTestCase {
- private com.android.wm.shell.pip.phone.PipController mPipController;
- private TestableContext mSpiedContext;
+ private PipController mPipController;
- @Mock private DisplayController mMockdDisplayController;
- @Mock private PackageManager mPackageManager;
- @Mock private com.android.wm.shell.pip.phone.PipMenuActivityController
- mMockPipMenuActivityController;
+ @Mock private DisplayController mMockDisplayController;
+ @Mock private PipMenuActivityController mMockPipMenuActivityController;
@Mock private PipAppOpsListener mMockPipAppOpsListener;
@Mock private PipBoundsHandler mMockPipBoundsHandler;
@Mock private PipMediaController mMockPipMediaController;
@Mock private PipTaskOrganizer mMockPipTaskOrganizer;
@Mock private PipTouchHandler mMockPipTouchHandler;
@Mock private WindowManagerShellWrapper mMockWindowManagerShellWrapper;
- private PipBoundsState mPipBoundsState;
+ @Mock private PipBoundsState mMockPipBoundsState;
@Before
public void setUp() throws RemoteException {
MockitoAnnotations.initMocks(this);
- mPipBoundsState = new PipBoundsState();
-
- mSpiedContext = spy(mContext);
-
- when(mPackageManager.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)).thenReturn(false);
- when(mSpiedContext.getPackageManager()).thenReturn(mPackageManager);
-
- mPipController = new PipController(mSpiedContext, mMockdDisplayController,
- mMockPipAppOpsListener, mMockPipBoundsHandler, mPipBoundsState,
+ mPipController = new PipController(mContext, mMockDisplayController,
+ mMockPipAppOpsListener, mMockPipBoundsHandler, mMockPipBoundsState,
mMockPipMediaController, mMockPipMenuActivityController, mMockPipTaskOrganizer,
mMockPipTouchHandler, mMockWindowManagerShellWrapper);
}
@Test
- public void testNonPipDevice_shouldNotRegisterPipTransitionCallback() {
- verify(mMockPipTaskOrganizer, never()).registerPipTransitionCallback(any());
+ public void instantiatePipController_registersPipTransitionCallback() {
+ verify(mMockPipTaskOrganizer).registerPipTransitionCallback(any());
+ }
+
+ @Test
+ public void instantiatePipController_addsDisplayChangingController() {
+ verify(mMockDisplayController).addDisplayChangingController(any());
}
@Test
- public void testNonPipDevice_shouldNotAddDisplayChangingController() {
- verify(mMockdDisplayController, never()).addDisplayChangingController(any());
+ public void instantiatePipController_addsDisplayWindowListener() {
+ verify(mMockDisplayController).addDisplayWindowListener(any());
}
@Test
- public void testNonPipDevice_shouldNotAddDisplayWindowListener() {
- verify(mMockdDisplayController, never()).addDisplayWindowListener(any());
+ public void createPip_notSupported_returnsNull() {
+ Context spyContext = spy(mContext);
+ PackageManager mockPackageManager = mock(PackageManager.class);
+ when(mockPackageManager.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)).thenReturn(false);
+ when(spyContext.getPackageManager()).thenReturn(mockPackageManager);
+
+ assertNull(PipController.create(spyContext, mMockDisplayController,
+ mMockPipAppOpsListener, mMockPipBoundsHandler, mMockPipBoundsState,
+ mMockPipMediaController, mMockPipMenuActivityController, mMockPipTaskOrganizer,
+ mMockPipTouchHandler, mMockWindowManagerShellWrapper));
}
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTaskOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTaskOrganizerTest.java
index 37b93bcdd051..46ebbf3846df 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTaskOrganizerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTaskOrganizerTest.java
@@ -16,20 +16,13 @@
package com.android.wm.shell.pip.phone;
-import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE;
-
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import android.content.pm.PackageManager;
import android.os.RemoteException;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
-import android.testing.TestableContext;
import android.testing.TestableLooper;
import com.android.wm.shell.ShellTaskOrganizer;
@@ -58,39 +51,30 @@ import java.util.Optional;
@TestableLooper.RunWithLooper
public class PipTaskOrganizerTest extends PipTestCase {
private PipTaskOrganizer mSpiedPipTaskOrganizer;
- private TestableContext mSpiedContext;
@Mock private DisplayController mMockdDisplayController;
- @Mock private PackageManager mPackageManager;
@Mock private PipBoundsHandler mMockPipBoundsHandler;
@Mock private PipSurfaceTransactionHelper mMockPipSurfaceTransactionHelper;
@Mock private PipUiEventLogger mMockPipUiEventLogger;
@Mock private Optional<SplitScreen> mMockOptionalSplitScreen;
@Mock private ShellTaskOrganizer mMockShellTaskOrganizer;
- private PipBoundsState mPipBoundsState;
+ @Mock private PipBoundsState mMockPipBoundsState;
@Before
public void setUp() throws RemoteException {
MockitoAnnotations.initMocks(this);
- mPipBoundsState = new PipBoundsState();
-
- mSpiedContext = spy(mContext);
-
- when(mPackageManager.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)).thenReturn(false);
- when(mSpiedContext.getPackageManager()).thenReturn(mPackageManager);
-
- mSpiedPipTaskOrganizer = spy(new PipTaskOrganizer(mSpiedContext, mPipBoundsState,
+ mSpiedPipTaskOrganizer = new PipTaskOrganizer(mContext, mMockPipBoundsState,
mMockPipBoundsHandler, mMockPipSurfaceTransactionHelper, mMockOptionalSplitScreen,
- mMockdDisplayController, mMockPipUiEventLogger, mMockShellTaskOrganizer));
+ mMockdDisplayController, mMockPipUiEventLogger, mMockShellTaskOrganizer);
}
@Test
- public void testNonPipDevice_shellTaskOrganizer_shouldNotAddListener() {
- verify(mMockShellTaskOrganizer, never()).addListener(any(), anyInt());
+ public void instantiatePipTaskOrganizer_addsTaskListener() {
+ verify(mMockShellTaskOrganizer).addListener(any(), anyInt());
}
@Test
- public void testNonPipDevice_displayController_shouldNotAddDisplayWindowListener() {
- verify(mMockdDisplayController, never()).addDisplayWindowListener(any());
+ public void instantiatePipTaskOrganizer_addsDisplayWindowListener() {
+ verify(mMockdDisplayController).addDisplayWindowListener(any());
}
}
diff --git a/packages/CarSystemUI/src/com/android/systemui/wmshell/CarWMShellModule.java b/packages/CarSystemUI/src/com/android/systemui/wmshell/CarWMShellModule.java
index 6d31a8d69ebe..3bfe41045b44 100644
--- a/packages/CarSystemUI/src/com/android/systemui/wmshell/CarWMShellModule.java
+++ b/packages/CarSystemUI/src/com/android/systemui/wmshell/CarWMShellModule.java
@@ -26,19 +26,24 @@ import com.android.systemui.wm.DisplaySystemBarsController;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayImeController;
import com.android.wm.shell.common.TransactionPool;
+import com.android.wm.shell.pip.Pip;
+import dagger.BindsOptionalOf;
import dagger.Module;
import dagger.Provides;
/** Provides dependencies from {@link com.android.wm.shell} for CarSystemUI. */
@Module(includes = WMShellBaseModule.class)
-public class CarWMShellModule {
+public abstract class CarWMShellModule {
@SysUISingleton
@Provides
- DisplayImeController provideDisplayImeController(Context context,
+ static DisplayImeController provideDisplayImeController(Context context,
IWindowManager wmService, DisplayController displayController,
@Main Handler mainHandler, TransactionPool transactionPool) {
return new DisplaySystemBarsController(context, wmService, displayController,
mainHandler, transactionPool);
}
+
+ @BindsOptionalOf
+ abstract Pip optionalPip();
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
index 5279a20a67a7..ddf30ad663dd 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
@@ -95,7 +95,6 @@ import com.android.wm.shell.onehanded.OneHanded;
import com.android.wm.shell.onehanded.OneHandedEvents;
import com.android.wm.shell.pip.Pip;
import com.android.wm.shell.pip.PipAnimationController;
-import com.android.wm.shell.pip.phone.PipUtils;
import com.android.wm.shell.splitscreen.SplitScreen;
import java.io.FileDescriptor;
@@ -151,7 +150,6 @@ public class OverviewProxyService extends CurrentUserTracker implements
private int mConnectionBackoffAttempts;
private boolean mBound;
private boolean mIsEnabled;
- private boolean mHasPipFeature;
private int mCurrentBoundedUserId = -1;
private float mNavBarButtonAlpha;
private boolean mInputFocusTransferStarted;
@@ -377,9 +375,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
@Override
public void setShelfHeight(boolean visible, int shelfHeight) {
- if (!verifyCaller("setShelfHeight") || !mHasPipFeature) {
- Log.w(TAG_OPS,
- "ByPass setShelfHeight, FEATURE_PICTURE_IN_PICTURE:" + mHasPipFeature);
+ if (!verifyCaller("setShelfHeight")) {
return;
}
final long token = Binder.clearCallingIdentity();
@@ -405,9 +401,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
@Override
public void notifySwipeToHomeFinished() {
- if (!verifyCaller("notifySwipeToHomeFinished") || !mHasPipFeature) {
- Log.w(TAG_OPS, "ByPass notifySwipeToHomeFinished, FEATURE_PICTURE_IN_PICTURE:"
- + mHasPipFeature);
+ if (!verifyCaller("notifySwipeToHomeFinished")) {
return;
}
final long token = Binder.clearCallingIdentity();
@@ -422,9 +416,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
@Override
public void setPinnedStackAnimationListener(IPinnedStackAnimationListener listener) {
- if (!verifyCaller("setPinnedStackAnimationListener") || !mHasPipFeature) {
- Log.w(TAG_OPS, "ByPass setPinnedStackAnimationListener, FEATURE_PICTURE_IN_PICTURE:"
- + mHasPipFeature);
+ if (!verifyCaller("setPinnedStackAnimationListener")) {
return;
}
mIPinnedStackAnimationListener = listener;
@@ -509,7 +501,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
public Rect startSwipePipToHome(ComponentName componentName, ActivityInfo activityInfo,
PictureInPictureParams pictureInPictureParams,
int launcherRotation, int shelfHeight) {
- if (!verifyCaller("startSwipePipToHome") || !mHasPipFeature) {
+ if (!verifyCaller("startSwipePipToHome")) {
return null;
}
final long binderToken = Binder.clearCallingIdentity();
@@ -525,7 +517,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
@Override
public void stopSwipePipToHome(ComponentName componentName, Rect destinationBounds) {
- if (!verifyCaller("stopSwipePipToHome") || !mHasPipFeature) {
+ if (!verifyCaller("stopSwipePipToHome")) {
return;
}
final long binderToken = Binder.clearCallingIdentity();
@@ -650,7 +642,6 @@ public class OverviewProxyService extends CurrentUserTracker implements
super(broadcastDispatcher);
mContext = context;
mPipOptional = pipOptional;
- mHasPipFeature = PipUtils.hasSystemFeature(mContext);
mStatusBarOptionalLazy = statusBarOptionalLazy;
mHandler = new Handler();
mNavBarControllerLazy = navBarControllerLazy;
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java b/packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java
index f55445ca1de3..28343ed5d1f6 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java
@@ -46,20 +46,24 @@ import dagger.Provides;
*/
@Module
public abstract class TvPipModule {
-
@SysUISingleton
@Provides
- static Pip providePipController(Context context,
+ static Optional<Pip> providePip(
+ Context context,
PipBoundsHandler pipBoundsHandler,
PipTaskOrganizer pipTaskOrganizer,
WindowManagerShellWrapper windowManagerShellWrapper) {
- return new PipController(context, pipBoundsHandler, pipTaskOrganizer,
- windowManagerShellWrapper);
+ return Optional.of(
+ new PipController(
+ context,
+ pipBoundsHandler,
+ pipTaskOrganizer,
+ windowManagerShellWrapper));
}
@SysUISingleton
@Provides
- static PipControlsViewController providePipControlsViewContrller(
+ static PipControlsViewController providePipControlsViewController(
PipControlsView pipControlsView, PipController pipController,
LayoutInflater layoutInflater, Handler handler) {
return new PipControlsViewController(pipControlsView, pipController, layoutInflater,
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/TvWMShellModule.java b/packages/SystemUI/src/com/android/systemui/wmshell/TvWMShellModule.java
index 56efffc29d85..7e1a2e830660 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/TvWMShellModule.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/TvWMShellModule.java
@@ -52,6 +52,8 @@ public class TvWMShellModule {
transactionPool);
}
+ @SysUISingleton
+ @Provides
static SplitScreen provideSplitScreen(Context context,
DisplayController displayController, SystemWindows systemWindows,
DisplayImeController displayImeController, @Main Handler handler,
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
index 9281a090fd97..3c4c3fcdf4f4 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
@@ -167,9 +167,6 @@ public final class WMShell extends SystemUI
@VisibleForTesting
void initPip(Pip pip) {
- if (!PipUtils.hasSystemFeature(mContext)) {
- return;
- }
mCommandQueue.addCallback(new CommandQueue.Callbacks() {
@Override
public void showPictureInPictureMenu() {
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java
index 09678b5d1772..ac6e5ded3de3 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java
@@ -41,7 +41,6 @@ import com.android.wm.shell.common.SystemWindows;
import com.android.wm.shell.common.TransactionPool;
import com.android.wm.shell.onehanded.OneHanded;
import com.android.wm.shell.onehanded.OneHandedController;
-import com.android.wm.shell.pip.Pip;
import com.android.wm.shell.pip.PipSurfaceTransactionHelper;
import com.android.wm.shell.pip.PipUiEventLogger;
import com.android.wm.shell.pip.phone.PipAppOpsListener;
@@ -117,7 +116,7 @@ public abstract class WMShellBaseModule {
@SysUISingleton
@Provides
- static PipSurfaceTransactionHelper providesPipSurfaceTransactionHelper(Context context) {
+ static PipSurfaceTransactionHelper providePipSurfaceTransactionHelper(Context context) {
return new PipSurfaceTransactionHelper(context);
}
@@ -159,9 +158,6 @@ public abstract class WMShellBaseModule {
}
@BindsOptionalOf
- abstract Pip optionalPip();
-
- @BindsOptionalOf
abstract SplitScreen optionalSplitScreen();
@BindsOptionalOf
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java
index 975757a4c259..81cb1f487ed8 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java
@@ -68,24 +68,6 @@ public class WMShellModule {
@SysUISingleton
@Provides
- static Pip providePipController(Context context,
- DisplayController displayController,
- PipAppOpsListener pipAppOpsListener,
- PipBoundsHandler pipBoundsHandler,
- PipBoundsState pipBoundsState,
- PipMediaController pipMediaController,
- PipMenuActivityController pipMenuActivityController,
- PipTaskOrganizer pipTaskOrganizer,
- PipTouchHandler pipTouchHandler,
- WindowManagerShellWrapper windowManagerShellWrapper) {
- return new PipController(context, displayController,
- pipAppOpsListener, pipBoundsHandler, pipBoundsState, pipMediaController,
- pipMenuActivityController, pipTaskOrganizer, pipTouchHandler,
- windowManagerShellWrapper);
- }
-
- @SysUISingleton
- @Provides
static SplitScreen provideSplitScreen(Context context,
DisplayController displayController, SystemWindows systemWindows,
DisplayImeController displayImeController, @Main Handler handler,
@@ -97,26 +79,39 @@ public class WMShellModule {
@SysUISingleton
@Provides
+ static Optional<Pip> providePip(Context context, DisplayController displayController,
+ PipAppOpsListener pipAppOpsListener, PipBoundsHandler pipBoundsHandler,
+ PipBoundsState pipBoundsState, PipMediaController pipMediaController,
+ PipMenuActivityController pipMenuActivityController, PipTaskOrganizer pipTaskOrganizer,
+ PipTouchHandler pipTouchHandler, WindowManagerShellWrapper windowManagerShellWrapper) {
+ return Optional.ofNullable(PipController.create(context, displayController,
+ pipAppOpsListener, pipBoundsHandler, pipBoundsState, pipMediaController,
+ pipMenuActivityController, pipTaskOrganizer, pipTouchHandler,
+ windowManagerShellWrapper));
+ }
+
+ @SysUISingleton
+ @Provides
static PipBoundsState providePipBoundsState() {
return new PipBoundsState();
}
@SysUISingleton
@Provides
- static PipBoundsHandler providesPipBoundsHandler(Context context) {
+ static PipBoundsHandler providePipBoundsHandler(Context context) {
return new PipBoundsHandler(context);
}
@SysUISingleton
@Provides
- static PipMenuActivityController providesPipMenuActivityController(Context context,
+ static PipMenuActivityController providePipMenuActivityController(Context context,
PipMediaController pipMediaController, PipTaskOrganizer pipTaskOrganizer) {
return new PipMenuActivityController(context, pipMediaController, pipTaskOrganizer);
}
@SysUISingleton
@Provides
- static PipTouchHandler providesPipTouchHandler(Context context,
+ static PipTouchHandler providePipTouchHandler(Context context,
PipMenuActivityController menuActivityController, PipBoundsHandler pipBoundsHandler,
PipBoundsState pipBoundsState,
PipTaskOrganizer pipTaskOrganizer,
@@ -128,7 +123,7 @@ public class WMShellModule {
@SysUISingleton
@Provides
- static PipTaskOrganizer providesPipTaskOrganizer(Context context,
+ static PipTaskOrganizer providePipTaskOrganizer(Context context,
PipBoundsState pipBoundsState,
PipBoundsHandler pipBoundsHandler,
PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java
index 2bc07ed43e29..a58f1fdeb3f3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java
@@ -16,17 +16,12 @@
package com.android.systemui.wmshell;
-import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE;
-
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.pm.PackageManager;
import android.test.suitebuilder.annotation.SmallTest;
-import android.testing.TestableContext;
import androidx.test.runner.AndroidJUnit4;
@@ -94,7 +89,6 @@ public class WMShellTest extends SysuiTestCase {
mTaskOrganizer, mProtoTracer);
when(mPip.getPipTouchHandler()).thenReturn(mPipTouchHandler);
-
}
@Test
@@ -112,26 +106,6 @@ public class WMShellTest extends SysuiTestCase {
}
@Test
- public void nonPipDevice_shouldNotInitPip() {
- final TestableContext nonPipContext = getNonPipFeatureContext();
- final WMShell nonPipWMShell = new WMShell(nonPipContext, mCommandQueue,
- mConfigurationController, mMockInputConsumerController, mKeyguardUpdateMonitor,
- mTaskStackChangeListeners, mDisplayImeController, mNavigationModeController,
- mScreenLifecycle, mSysUiState, Optional.of(mPip), Optional.of(mSplitScreen),
- Optional.of(mOneHanded), mTaskOrganizer, mProtoTracer);
- nonPipWMShell.initPip(mPip);
-
- verify(mCommandQueue, never()).addCallback(any());
- verify(mKeyguardUpdateMonitor, never()).registerCallback(any());
- verify(mConfigurationController, never()).addCallback(any());
- verify(mSysUiState, never()).addCallback(any());
- verify(mTaskStackChangeListeners, never()).registerTaskStackListener(any());
- verify(mMockInputConsumerController, never()).setInputListener(any());
- verify(mMockInputConsumerController, never()).setRegistrationListener(any());
- verify(mPip, never()).registerSessionListenerForCurrentUser();
- }
-
- @Test
public void initSplitScreen_registersCallbacks() {
mWMShell.initSplitScreen(mSplitScreen);
@@ -156,11 +130,4 @@ public class WMShellTest extends SysuiTestCase {
OneHandedGestureHandler.OneHandedGestureEventCallback.class));
verify(mOneHanded).registerTransitionCallback(any(OneHandedTransitionCallback.class));
}
-
- TestableContext getNonPipFeatureContext() {
- TestableContext spiedContext = spy(mContext);
- when(mMockPackageManager.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)).thenReturn(false);
- when(spiedContext.getPackageManager()).thenReturn(mMockPackageManager);
- return spiedContext;
- }
}