2020import android .content .Intent ;
2121import android .os .RemoteException ;
2222import android .os .ServiceManager ;
23+ import android .os .UserHandle ;
24+ import android .provider .Settings ;
2325import android .service .dreams .Dream ;
2426import android .service .dreams .IDreamManager ;
2527import android .util .Slog ;
2628
2729public class Somnambulator extends Activity {
30+ public static final String TAG = "Somnambulator" ;
31+
32+ public static final int DEFAULT_SCREENSAVER_ENABLED = 1 ;
33+ public static final int DEFAULT_SCREENSAVER_ACTIVATED_ON_DOCK = 1 ;
2834
2935 public Somnambulator () {
3036 }
31-
37+
38+ private boolean isScreenSaverEnabled () {
39+ return Settings .Secure .getIntForUser (getContentResolver (),
40+ Settings .Secure .SCREENSAVER_ENABLED , DEFAULT_SCREENSAVER_ENABLED ,
41+ UserHandle .USER_CURRENT ) != 0 ;
42+ }
43+
44+ private boolean isScreenSaverActivatedOnDock () {
45+ return Settings .Secure .getIntForUser (getContentResolver (),
46+ Settings .Secure .SCREENSAVER_ACTIVATE_ON_DOCK ,
47+ DEFAULT_SCREENSAVER_ACTIVATED_ON_DOCK , UserHandle .USER_CURRENT ) != 0 ;
48+ }
49+
3250 @ Override
3351 public void onStart () {
3452 super .onStart ();
@@ -45,14 +63,20 @@ public void onStart() {
4563 resultIntent .putExtra (Intent .EXTRA_SHORTCUT_NAME , getString (R .string .start_dreams ));
4664 setResult (RESULT_OK , resultIntent );
4765 } else {
48- IDreamManager somnambulist = IDreamManager .Stub .asInterface (
49- ServiceManager .checkService (Dream .DREAM_SERVICE ));
50- if (somnambulist != null ) {
51- try {
52- Slog .v ("Somnambulator" , "Dreaming by user request." );
53- somnambulist .dream ();
54- } catch (RemoteException e ) {
55- // fine, stay asleep then
66+ boolean docked = launchIntent .hasCategory (Intent .CATEGORY_DESK_DOCK );
67+
68+ if (docked && !(isScreenSaverEnabled () && isScreenSaverActivatedOnDock ())) {
69+ Slog .i (TAG , "Dreams currently disabled for docks." );
70+ } else {
71+ IDreamManager somnambulist = IDreamManager .Stub .asInterface (
72+ ServiceManager .checkService (Dream .DREAM_SERVICE ));
73+ if (somnambulist != null ) {
74+ try {
75+ Slog .v (TAG , "Dreaming on " + (docked ? "dock insertion" : "user request" ));
76+ somnambulist .dream ();
77+ } catch (RemoteException e ) {
78+ // fine, stay asleep then
79+ }
5680 }
5781 }
5882 }
0 commit comments