Merge "Respect feature flag when providing Pip controller"

This commit is contained in:
TreeHugger Robot
2020-10-15 13:06:41 +00:00
committed by Android (Google) Code Review
13 changed files with 106 additions and 182 deletions

View File

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

View File

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

View File

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

View File

@@ -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 testNonPipDevice_shouldNotAddDisplayChangingController() {
verify(mMockdDisplayController, never()).addDisplayChangingController(any());
public void instantiatePipController_addsDisplayChangingController() {
verify(mMockDisplayController).addDisplayChangingController(any());
}
@Test
public void testNonPipDevice_shouldNotAddDisplayWindowListener() {
verify(mMockdDisplayController, never()).addDisplayWindowListener(any());
public void instantiatePipController_addsDisplayWindowListener() {
verify(mMockDisplayController).addDisplayWindowListener(any());
}
@Test
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));
}
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -52,6 +52,8 @@ public class TvWMShellModule {
transactionPool);
}
@SysUISingleton
@Provides
static SplitScreen provideSplitScreen(Context context,
DisplayController displayController, SystemWindows systemWindows,
DisplayImeController displayImeController, @Main Handler handler,

View File

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

View File

@@ -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);
}
@@ -158,9 +157,6 @@ public abstract class WMShellBaseModule {
return new FlingAnimationUtils.Builder(displayMetrics);
}
@BindsOptionalOf
abstract Pip optionalPip();
@BindsOptionalOf
abstract SplitScreen optionalSplitScreen();

View File

@@ -66,24 +66,6 @@ public class WMShellModule {
transactionPool);
}
@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,
@@ -95,6 +77,19 @@ public class WMShellModule {
displayImeController, handler, transactionPool, shellTaskOrganizer, syncQueue);
}
@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() {
@@ -103,20 +98,20 @@ public class WMShellModule {
@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,

View File

@@ -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
@@ -111,26 +105,6 @@ public class WMShellTest extends SysuiTestCase {
verify(mCommandQueue).addCallback(any(CommandQueue.Callbacks.class));
}
@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;
}
}