Merge "Add test to make sure it inits WM Shell controllers properly"

This commit is contained in:
Jerry Chang
2020-09-01 12:13:22 +00:00
committed by Android (Google) Code Review
2 changed files with 40 additions and 24 deletions

View File

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

View File

@@ -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);
mWMShell.start();
when(mPipOptional.get()).thenReturn(mPipController);
mActivityManagerWrapper, mDisplayImeController, Optional.of(mPip),
Optional.of(mSplitScreen), mProtoTracer);
}
@Test
public void testWMShellRegisterCommandQueue() {
verify(mCommandQueue, times(1)).addCallback(mWMShell);
public void start_startsMonitorDisplays() {
mWMShell.start();
verify(mDisplayImeController).startMonitorDisplays();
}
@Test
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));
}
}