Loading packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java +10 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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, Loading @@ -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; Loading @@ -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() { Loading @@ -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) { Loading @@ -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, Loading packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java +29 −17 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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)); } } Loading
packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java +10 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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, Loading @@ -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; Loading @@ -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() { Loading @@ -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) { Loading @@ -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, Loading
packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java +29 −17 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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)); } }