Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8f36c6e5 authored by Jerry Chang's avatar Jerry Chang Committed by Android (Google) Code Review
Browse files

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

parents d4229a2a d92b11e7
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -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,
+29 −17
Original line number Diff line number Diff line
@@ -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));
    }
}