3737import android .os .PowerManager ;
3838import android .os .RemoteException ;
3939import android .os .ServiceManager ;
40- import android .os .SystemClock ;
4140import android .os .UserHandle ;
4241import android .provider .Settings ;
43- import android .service .dreams .DreamService ;
44- import android .service .dreams .IDreamManager ;
42+ import android .service .dreams .Sandman ;
4543import android .util .Slog ;
4644
4745import java .io .FileDescriptor ;
@@ -59,9 +57,6 @@ final class UiModeManagerService extends IUiModeManager.Stub {
5957 private static final boolean ENABLE_LAUNCH_CAR_DOCK_APP = true ;
6058 private static final boolean ENABLE_LAUNCH_DESK_DOCK_APP = true ;
6159
62- private static final int DEFAULT_SCREENSAVER_ENABLED = 1 ;
63- private static final int DEFAULT_SCREENSAVER_ACTIVATED_ON_DOCK = 1 ;
64-
6560 private final Context mContext ;
6661 private final TwilightService mTwilightService ;
6762 private final Handler mHandler = new Handler ();
@@ -496,60 +491,32 @@ private void sendConfigurationAndStartDreamOrDockAppLocked(String category) {
496491 // activity manager take care of both the start and config
497492 // change.
498493 Intent homeIntent = buildHomeIntent (category );
499- try {
500- int result = ActivityManagerNative .getDefault ().startActivityWithConfig (
501- null , homeIntent , null , null , null , 0 , 0 ,
502- mConfiguration , null , UserHandle .USER_CURRENT );
503- if (result >= ActivityManager .START_SUCCESS ) {
504- dockAppStarted = true ;
505- } else if (result != ActivityManager .START_INTENT_NOT_RESOLVED ) {
506- Slog .e (TAG , "Could not start dock app: " + homeIntent
507- + ", startActivityWithConfig result " + result );
494+ if (Sandman .shouldStartDockApp (mContext , homeIntent )) {
495+ try {
496+ int result = ActivityManagerNative .getDefault ().startActivityWithConfig (
497+ null , homeIntent , null , null , null , 0 , 0 ,
498+ mConfiguration , null , UserHandle .USER_CURRENT );
499+ if (result >= ActivityManager .START_SUCCESS ) {
500+ dockAppStarted = true ;
501+ } else if (result != ActivityManager .START_INTENT_NOT_RESOLVED ) {
502+ Slog .e (TAG , "Could not start dock app: " + homeIntent
503+ + ", startActivityWithConfig result " + result );
504+ }
505+ } catch (RemoteException ex ) {
506+ Slog .e (TAG , "Could not start dock app: " + homeIntent , ex );
508507 }
509- } catch (RemoteException ex ) {
510- Slog .e (TAG , "Could not start dock app: " + homeIntent , ex );
511508 }
512509 }
513510
514511 // Send the new configuration.
515512 sendConfigurationLocked ();
516513
517514 // If we did not start a dock app, then start dreaming if supported.
518- if (category != null && !dockAppStarted
519- && isScreenSaverEnabledLocked () && isScreenSaverActivatedOnDockLocked ()) {
520- Slog .i (TAG , "Activating dream while docked." );
521- try {
522- IDreamManager dreamManagerService = IDreamManager .Stub .asInterface (
523- ServiceManager .getService (DreamService .DREAM_SERVICE ));
524- if (dreamManagerService != null && !dreamManagerService .isDreaming ()) {
525- // Wake up.
526- // The power manager will wake up the system when it starts receiving power
527- // but there is a race between that happening and the UI mode manager
528- // starting a dream. We want the system to already be awake
529- // by the time this happens. Otherwise the dream may not start.
530- mPowerManager .wakeUp (SystemClock .uptimeMillis ());
531-
532- // Dream.
533- dreamManagerService .dream ();
534- }
535- } catch (RemoteException ex ) {
536- Slog .e (TAG , "Could not start dream when docked." , ex );
537- }
515+ if (category != null && !dockAppStarted ) {
516+ Sandman .startDreamWhenDockedIfAppropriate (mContext );
538517 }
539518 }
540519
541- private boolean isScreenSaverEnabledLocked () {
542- return Settings .Secure .getIntForUser (mContext .getContentResolver (),
543- Settings .Secure .SCREENSAVER_ENABLED , DEFAULT_SCREENSAVER_ENABLED ,
544- UserHandle .USER_CURRENT ) != 0 ;
545- }
546-
547- private boolean isScreenSaverActivatedOnDockLocked () {
548- return Settings .Secure .getIntForUser (mContext .getContentResolver (),
549- Settings .Secure .SCREENSAVER_ACTIVATE_ON_DOCK ,
550- DEFAULT_SCREENSAVER_ACTIVATED_ON_DOCK , UserHandle .USER_CURRENT ) != 0 ;
551- }
552-
553520 private void adjustStatusBarCarModeLocked () {
554521 if (mStatusBarManager == null ) {
555522 mStatusBarManager = (StatusBarManager )
0 commit comments