summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java16
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java46
2 files changed, 39 insertions, 23 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
index e1e18a22af51..27af5f91c9e4 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
@@ -21,6 +21,7 @@ import static com.android.systemui.shared.system.WindowManagerWrapper.WINDOWING_
import android.app.ActivityManager;
import android.content.Context;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.SystemUI;
@@ -48,11 +49,11 @@ import javax.inject.Inject;
* Proxy in SysUiScope to delegate events to controllers in WM Shell library.
*/
@SysUISingleton
-public final class WMShell extends SystemUI implements ProtoTraceable<SystemUiTraceProto>,
- CommandQueue.Callbacks {
+public final class WMShell extends SystemUI implements ProtoTraceable<SystemUiTraceProto> {
private final CommandQueue mCommandQueue;
private final DisplayImeController mDisplayImeController;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+ private final ActivityManagerWrapper mActivityManagerWrapper;
private final Optional<Pip> mPipOptional;
private final Optional<SplitScreen> mSplitScreenOptional;
private final ProtoTracer mProtoTracer;
@@ -60,6 +61,7 @@ public final class WMShell extends SystemUI implements ProtoTraceable<SystemUiTr
@Inject
public WMShell(Context context, CommandQueue commandQueue,
KeyguardUpdateMonitor keyguardUpdateMonitor,
+ ActivityManagerWrapper activityManagerWrapper,
DisplayImeController displayImeController,
Optional<Pip> pipOptional,
Optional<SplitScreen> splitScreenOptional,
@@ -67,6 +69,7 @@ public final class WMShell extends SystemUI implements ProtoTraceable<SystemUiTr
super(context);
mCommandQueue = commandQueue;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
+ mActivityManagerWrapper = activityManagerWrapper;
mDisplayImeController = displayImeController;
mPipOptional = pipOptional;
mSplitScreenOptional = splitScreenOptional;
@@ -79,14 +82,14 @@ public final class WMShell extends SystemUI implements ProtoTraceable<SystemUiTr
// This is to prevent circular init problem by separating registration step out of its
// constructor. And make sure the initialization of DisplayImeController won't depend on
// specific feature anymore.
- mCommandQueue.addCallback(this);
mDisplayImeController.startMonitorDisplays();
mPipOptional.ifPresent(this::initPip);
mSplitScreenOptional.ifPresent(this::initSplitScreen);
}
- private void initPip(Pip pip) {
+ @VisibleForTesting
+ void initPip(Pip pip) {
mCommandQueue.addCallback(new CommandQueue.Callbacks() {
@Override
public void showPictureInPictureMenu() {
@@ -95,7 +98,8 @@ public final class WMShell extends SystemUI implements ProtoTraceable<SystemUiTr
});
}
- private void initSplitScreen(SplitScreen splitScreen) {
+ @VisibleForTesting
+ void initSplitScreen(SplitScreen splitScreen) {
mKeyguardUpdateMonitor.registerCallback(new KeyguardUpdateMonitorCallback() {
@Override
public void onKeyguardVisibilityChanged(boolean showing) {
@@ -107,7 +111,7 @@ public final class WMShell extends SystemUI implements ProtoTraceable<SystemUiTr
}
});
- ActivityManagerWrapper.getInstance().registerTaskStackListener(
+ mActivityManagerWrapper.registerTaskStackListener(
new TaskStackChangeListener() {
@Override
public void onActivityRestartAttempt(ActivityManager.RunningTaskInfo task,
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 2f3c86dfc8ae..ac9346f675be 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java
@@ -16,21 +16,19 @@
package com.android.systemui.wmshell;
-import static org.mockito.Mockito.times;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import android.app.Instrumentation;
-import android.content.Context;
import android.test.suitebuilder.annotation.SmallTest;
-import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.pip.Pip;
-import com.android.systemui.pip.tv.PipController;
+import com.android.systemui.shared.system.ActivityManagerWrapper;
+import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.stackdivider.SplitScreen;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.tracing.ProtoTracer;
@@ -48,29 +46,43 @@ import java.util.Optional;
@RunWith(AndroidJUnit4.class)
public class WMShellTest extends SysuiTestCase {
- Instrumentation mInstrumentation;
WMShell mWMShell;
- @Mock Context mContext;
@Mock CommandQueue mCommandQueue;
@Mock KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+ @Mock ActivityManagerWrapper mActivityManagerWrapper;
@Mock DisplayImeController mDisplayImeController;
- @Mock Optional<Pip> mPipOptional;
- @Mock Optional<SplitScreen> mSplitScreenOptional;
- @Mock PipController mPipController;
+ @Mock Pip mPip;
+ @Mock SplitScreen mSplitScreen;
@Mock ProtoTracer mProtoTracer;
@Before
- public void setUp() throws Exception {
- mInstrumentation = InstrumentationRegistry.getInstrumentation();
+ public void setUp() {
MockitoAnnotations.initMocks(this);
mWMShell = new WMShell(mContext, mCommandQueue, mKeyguardUpdateMonitor,
- mDisplayImeController, mPipOptional, mSplitScreenOptional, mProtoTracer);
+ mActivityManagerWrapper, mDisplayImeController, Optional.of(mPip),
+ Optional.of(mSplitScreen), mProtoTracer);
+ }
+
+ @Test
+ public void start_startsMonitorDisplays() {
mWMShell.start();
- when(mPipOptional.get()).thenReturn(mPipController);
+
+ verify(mDisplayImeController).startMonitorDisplays();
}
@Test
- public void testWMShellRegisterCommandQueue() {
- verify(mCommandQueue, times(1)).addCallback(mWMShell);
+ public void initPip_registersCommandQueueCallback() {
+ mWMShell.initPip(mPip);
+
+ verify(mCommandQueue).addCallback(any(CommandQueue.Callbacks.class));
+ }
+
+ @Test
+ public void initSplitScreen_registersCallbacks() {
+ mWMShell.initSplitScreen(mSplitScreen);
+
+ verify(mKeyguardUpdateMonitor).registerCallback(any(KeyguardUpdateMonitorCallback.class));
+ verify(mActivityManagerWrapper).registerTaskStackListener(
+ any(TaskStackChangeListener.class));
}
}