summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jerry Chang <chenghsiuchang@google.com> 2020-09-01 11:52:39 +0800
committer Jerry Chang <chenghsiuchang@google.com> 2020-09-01 12:39:07 +0800
commitd92b11e78f18a718f56356e99e1258bba74a6e11 (patch)
tree4d2c7d048f572e963ba813e4c7b43bed739cc4f5
parentfa817ade0dfa9f117a1a0859276cdab87de819ed (diff)
Add test to make sure it inits WM Shell controllers properly
Removes redundant codes and tests init functions for each controller in WMShell class. Bug: 161116823 Bug: 161118569 Test: atest WMShellTest Change-Id: Ie03c060a5741baed74c0880677c5656a6b1d4c4a
-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));
}
}