Loading core/java/android/service/dreams/Sandman.java +26 −22 Original line number Diff line number Diff line Loading @@ -20,13 +20,13 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.PowerManager; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserHandle; import android.provider.Settings; import android.util.Slog; import com.android.server.LocalServices; /** * Internal helper for launching dreams to ensure consistency between the * <code>UiModeManagerService</code> system service and the <code>Somnambulator</code> activity. Loading Loading @@ -75,8 +75,9 @@ public final class Sandman { } private static void startDream(Context context, boolean docked) { DreamManagerInternal dreamManagerService = LocalServices.getService(DreamManagerInternal.class); try { IDreamManager dreamManagerService = IDreamManager.Stub.asInterface( ServiceManager.getService(DreamService.DREAM_SERVICE)); if (dreamManagerService != null && !dreamManagerService.isDreaming()) { if (docked) { Slog.i(TAG, "Activating dream while docked."); Loading @@ -96,7 +97,10 @@ public final class Sandman { } // Dream. dreamManagerService.requestDream(); dreamManagerService.dream(); } } catch (RemoteException ex) { Slog.e(TAG, "Could not start dream when docked.", ex); } } Loading services/core/java/com/android/server/UiModeManagerService.java +5 −1 Original line number Diff line number Diff line Loading @@ -1831,7 +1831,7 @@ final class UiModeManagerService extends SystemService { if (category != null && !dockAppStarted && (mStartDreamImmediatelyOnDock || mWindowManager.isKeyguardShowingAndNotOccluded() || !mPowerManager.isInteractive())) { Sandman.startDreamWhenDockedIfAppropriate(getContext()); mInjector.startDreamWhenDockedIfAppropriate(getContext()); } } Loading Loading @@ -2145,5 +2145,9 @@ final class UiModeManagerService extends SystemService { public int getCallingUid() { return Binder.getCallingUid(); } public void startDreamWhenDockedIfAppropriate(Context context) { Sandman.startDreamWhenDockedIfAppropriate(context); } } } services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java +19 −59 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; Loading Loading @@ -83,7 +84,6 @@ import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.provider.Settings; import android.service.dreams.DreamManagerInternal; import android.test.mock.MockContentResolver; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; Loading @@ -101,6 +101,7 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Spy; import java.time.LocalDateTime; import java.time.LocalTime; Loading Loading @@ -137,8 +138,8 @@ public class UiModeManagerServiceTest extends UiServiceTestCase { private PackageManager mPackageManager; @Mock private IBinder mBinder; @Mock private DreamManagerInternal mDreamManager; @Spy private TestInjector mInjector; @Captor private ArgumentCaptor<Intent> mOrderedBroadcastIntent; @Captor Loading Loading @@ -207,10 +208,10 @@ public class UiModeManagerServiceTest extends UiServiceTestCase { addLocalService(WindowManagerInternal.class, mWindowManager); addLocalService(PowerManagerInternal.class, mLocalPowerManager); addLocalService(TwilightManager.class, mTwilightManager); addLocalService(DreamManagerInternal.class, mDreamManager); mInjector = spy(new TestInjector()); mUiManagerService = new UiModeManagerService(mContext, /* setupWizardComplete= */ true, mTwilightManager, new TestInjector()); mTwilightManager, mInjector); try { mUiManagerService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY); } catch (SecurityException e) {/* ignore for permission denial */} Loading Loading @@ -1321,84 +1322,53 @@ public class UiModeManagerServiceTest extends UiServiceTestCase { @Test public void dreamWhenDocked() { setScreensaverActivateOnDock(true); setScreensaverEnabled(true); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager).requestDream(); } @Test public void noDreamWhenDocked_dreamsDisabled() { setScreensaverActivateOnDock(true); setScreensaverEnabled(false); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager, never()).requestDream(); } @Test public void noDreamWhenDocked_dreamsWhenDockedDisabled() { setScreensaverActivateOnDock(false); setScreensaverEnabled(true); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager, never()).requestDream(); verify(mInjector).startDreamWhenDockedIfAppropriate(mContext); } @Test public void noDreamWhenDocked_keyguardNotShowing_interactive() { setScreensaverActivateOnDock(true); setScreensaverEnabled(true); mUiManagerService.setStartDreamImmediatelyOnDock(false); when(mWindowManager.isKeyguardShowingAndNotOccluded()).thenReturn(false); when(mPowerManager.isInteractive()).thenReturn(true); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager, never()).requestDream(); verify(mInjector, never()).startDreamWhenDockedIfAppropriate(mContext); } @Test public void dreamWhenDocked_keyguardShowing_interactive() { setScreensaverActivateOnDock(true); setScreensaverEnabled(true); mUiManagerService.setStartDreamImmediatelyOnDock(false); when(mWindowManager.isKeyguardShowingAndNotOccluded()).thenReturn(true); when(mPowerManager.isInteractive()).thenReturn(false); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager).requestDream(); verify(mInjector).startDreamWhenDockedIfAppropriate(mContext); } @Test public void dreamWhenDocked_keyguardNotShowing_notInteractive() { setScreensaverActivateOnDock(true); setScreensaverEnabled(true); mUiManagerService.setStartDreamImmediatelyOnDock(false); when(mWindowManager.isKeyguardShowingAndNotOccluded()).thenReturn(false); when(mPowerManager.isInteractive()).thenReturn(false); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager).requestDream(); verify(mInjector).startDreamWhenDockedIfAppropriate(mContext); } @Test public void dreamWhenDocked_keyguardShowing_notInteractive() { setScreensaverActivateOnDock(true); setScreensaverEnabled(true); mUiManagerService.setStartDreamImmediatelyOnDock(false); when(mWindowManager.isKeyguardShowingAndNotOccluded()).thenReturn(true); when(mPowerManager.isInteractive()).thenReturn(false); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager).requestDream(); verify(mInjector).startDreamWhenDockedIfAppropriate(mContext); } private void triggerDockIntent() { Loading Loading @@ -1435,22 +1405,6 @@ public class UiModeManagerServiceTest extends UiServiceTestCase { mOrderedBroadcastIntent.getValue()); } private void setScreensaverEnabled(boolean enable) { Settings.Secure.putIntForUser( mContentResolver, Settings.Secure.SCREENSAVER_ENABLED, enable ? 1 : 0, UserHandle.USER_CURRENT); } private void setScreensaverActivateOnDock(boolean enable) { Settings.Secure.putIntForUser( mContentResolver, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, enable ? 1 : 0, UserHandle.USER_CURRENT); } private void requestAllPossibleProjectionTypes() throws RemoteException { for (int i = 0; i < Integer.SIZE; ++i) { mService.requestProjection(mBinder, 1 << i, PACKAGE_NAME); Loading @@ -1470,8 +1424,14 @@ public class UiModeManagerServiceTest extends UiServiceTestCase { this.callingUid = callingUid; } @Override public int getCallingUid() { return callingUid; } @Override public void startDreamWhenDockedIfAppropriate(Context context) { // do nothing } } } Loading
core/java/android/service/dreams/Sandman.java +26 −22 Original line number Diff line number Diff line Loading @@ -20,13 +20,13 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.PowerManager; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserHandle; import android.provider.Settings; import android.util.Slog; import com.android.server.LocalServices; /** * Internal helper for launching dreams to ensure consistency between the * <code>UiModeManagerService</code> system service and the <code>Somnambulator</code> activity. Loading Loading @@ -75,8 +75,9 @@ public final class Sandman { } private static void startDream(Context context, boolean docked) { DreamManagerInternal dreamManagerService = LocalServices.getService(DreamManagerInternal.class); try { IDreamManager dreamManagerService = IDreamManager.Stub.asInterface( ServiceManager.getService(DreamService.DREAM_SERVICE)); if (dreamManagerService != null && !dreamManagerService.isDreaming()) { if (docked) { Slog.i(TAG, "Activating dream while docked."); Loading @@ -96,7 +97,10 @@ public final class Sandman { } // Dream. dreamManagerService.requestDream(); dreamManagerService.dream(); } } catch (RemoteException ex) { Slog.e(TAG, "Could not start dream when docked.", ex); } } Loading
services/core/java/com/android/server/UiModeManagerService.java +5 −1 Original line number Diff line number Diff line Loading @@ -1831,7 +1831,7 @@ final class UiModeManagerService extends SystemService { if (category != null && !dockAppStarted && (mStartDreamImmediatelyOnDock || mWindowManager.isKeyguardShowingAndNotOccluded() || !mPowerManager.isInteractive())) { Sandman.startDreamWhenDockedIfAppropriate(getContext()); mInjector.startDreamWhenDockedIfAppropriate(getContext()); } } Loading Loading @@ -2145,5 +2145,9 @@ final class UiModeManagerService extends SystemService { public int getCallingUid() { return Binder.getCallingUid(); } public void startDreamWhenDockedIfAppropriate(Context context) { Sandman.startDreamWhenDockedIfAppropriate(context); } } }
services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java +19 −59 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; Loading Loading @@ -83,7 +84,6 @@ import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.provider.Settings; import android.service.dreams.DreamManagerInternal; import android.test.mock.MockContentResolver; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; Loading @@ -101,6 +101,7 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Spy; import java.time.LocalDateTime; import java.time.LocalTime; Loading Loading @@ -137,8 +138,8 @@ public class UiModeManagerServiceTest extends UiServiceTestCase { private PackageManager mPackageManager; @Mock private IBinder mBinder; @Mock private DreamManagerInternal mDreamManager; @Spy private TestInjector mInjector; @Captor private ArgumentCaptor<Intent> mOrderedBroadcastIntent; @Captor Loading Loading @@ -207,10 +208,10 @@ public class UiModeManagerServiceTest extends UiServiceTestCase { addLocalService(WindowManagerInternal.class, mWindowManager); addLocalService(PowerManagerInternal.class, mLocalPowerManager); addLocalService(TwilightManager.class, mTwilightManager); addLocalService(DreamManagerInternal.class, mDreamManager); mInjector = spy(new TestInjector()); mUiManagerService = new UiModeManagerService(mContext, /* setupWizardComplete= */ true, mTwilightManager, new TestInjector()); mTwilightManager, mInjector); try { mUiManagerService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY); } catch (SecurityException e) {/* ignore for permission denial */} Loading Loading @@ -1321,84 +1322,53 @@ public class UiModeManagerServiceTest extends UiServiceTestCase { @Test public void dreamWhenDocked() { setScreensaverActivateOnDock(true); setScreensaverEnabled(true); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager).requestDream(); } @Test public void noDreamWhenDocked_dreamsDisabled() { setScreensaverActivateOnDock(true); setScreensaverEnabled(false); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager, never()).requestDream(); } @Test public void noDreamWhenDocked_dreamsWhenDockedDisabled() { setScreensaverActivateOnDock(false); setScreensaverEnabled(true); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager, never()).requestDream(); verify(mInjector).startDreamWhenDockedIfAppropriate(mContext); } @Test public void noDreamWhenDocked_keyguardNotShowing_interactive() { setScreensaverActivateOnDock(true); setScreensaverEnabled(true); mUiManagerService.setStartDreamImmediatelyOnDock(false); when(mWindowManager.isKeyguardShowingAndNotOccluded()).thenReturn(false); when(mPowerManager.isInteractive()).thenReturn(true); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager, never()).requestDream(); verify(mInjector, never()).startDreamWhenDockedIfAppropriate(mContext); } @Test public void dreamWhenDocked_keyguardShowing_interactive() { setScreensaverActivateOnDock(true); setScreensaverEnabled(true); mUiManagerService.setStartDreamImmediatelyOnDock(false); when(mWindowManager.isKeyguardShowingAndNotOccluded()).thenReturn(true); when(mPowerManager.isInteractive()).thenReturn(false); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager).requestDream(); verify(mInjector).startDreamWhenDockedIfAppropriate(mContext); } @Test public void dreamWhenDocked_keyguardNotShowing_notInteractive() { setScreensaverActivateOnDock(true); setScreensaverEnabled(true); mUiManagerService.setStartDreamImmediatelyOnDock(false); when(mWindowManager.isKeyguardShowingAndNotOccluded()).thenReturn(false); when(mPowerManager.isInteractive()).thenReturn(false); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager).requestDream(); verify(mInjector).startDreamWhenDockedIfAppropriate(mContext); } @Test public void dreamWhenDocked_keyguardShowing_notInteractive() { setScreensaverActivateOnDock(true); setScreensaverEnabled(true); mUiManagerService.setStartDreamImmediatelyOnDock(false); when(mWindowManager.isKeyguardShowingAndNotOccluded()).thenReturn(true); when(mPowerManager.isInteractive()).thenReturn(false); triggerDockIntent(); verifyAndSendResultBroadcast(); verify(mDreamManager).requestDream(); verify(mInjector).startDreamWhenDockedIfAppropriate(mContext); } private void triggerDockIntent() { Loading Loading @@ -1435,22 +1405,6 @@ public class UiModeManagerServiceTest extends UiServiceTestCase { mOrderedBroadcastIntent.getValue()); } private void setScreensaverEnabled(boolean enable) { Settings.Secure.putIntForUser( mContentResolver, Settings.Secure.SCREENSAVER_ENABLED, enable ? 1 : 0, UserHandle.USER_CURRENT); } private void setScreensaverActivateOnDock(boolean enable) { Settings.Secure.putIntForUser( mContentResolver, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, enable ? 1 : 0, UserHandle.USER_CURRENT); } private void requestAllPossibleProjectionTypes() throws RemoteException { for (int i = 0; i < Integer.SIZE; ++i) { mService.requestProjection(mBinder, 1 << i, PACKAGE_NAME); Loading @@ -1470,8 +1424,14 @@ public class UiModeManagerServiceTest extends UiServiceTestCase { this.callingUid = callingUid; } @Override public int getCallingUid() { return callingUid; } @Override public void startDreamWhenDockedIfAppropriate(Context context) { // do nothing } } }