From 532a0bbfa49929cc3b7a173aaf25e119765d0bd0 Mon Sep 17 00:00:00 2001 From: Daniel Sandler Date: Wed, 16 Nov 2011 11:10:22 -0800 Subject: [PATCH] Activate Dreams (screen saver) when desk-docked. SystemUI's DreamsDockLauncher now responds to low-level dock events (Intent.ACTION_DOCK_EVENT) by immediately invoking the user's selected screen saver. (The high-level DESK_DOCK behavior is no longer enabled; see change I7884f65.) Bug: 5591015 Change-Id: I01a9bc6b181d55493f891ccc220631ddc461808a --- packages/SystemUI/AndroidManifest.xml | 13 ++++++-- .../android/systemui/DreamsDockLauncher.java | 33 ++++++++++++++++--- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index aa36b07242c9d..dff41c977b5a4 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -46,17 +46,26 @@ - + - + + + + + + + + diff --git a/packages/SystemUI/src/com/android/systemui/DreamsDockLauncher.java b/packages/SystemUI/src/com/android/systemui/DreamsDockLauncher.java index def785b48f4dc..00352969d743b 100644 --- a/packages/SystemUI/src/com/android/systemui/DreamsDockLauncher.java +++ b/packages/SystemUI/src/com/android/systemui/DreamsDockLauncher.java @@ -12,14 +12,22 @@ import android.util.Slog; public class DreamsDockLauncher extends Activity { private static final String TAG = "DreamsDockLauncher"; + + // Launch the screen saver if started as an activity. @Override protected void onCreate (Bundle icicle) { super.onCreate(icicle); + launchDream(this); + finish(); + } + + private static void launchDream(Context context) { try { String component = Settings.Secure.getString( - getContentResolver(), Settings.Secure.DREAM_COMPONENT); + context.getContentResolver(), Settings.Secure.DREAM_COMPONENT); if (component == null) { - component = getResources().getString(com.android.internal.R.string.config_defaultDreamComponent); + component = context.getResources().getString( + com.android.internal.R.string.config_defaultDreamComponent); } if (component != null) { ComponentName cn = ComponentName.unflattenFromString(component); @@ -29,7 +37,8 @@ public class DreamsDockLauncher extends Activity { | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_USER_ACTION ); - startActivity(zzz); + Slog.v(TAG, "Starting screen saver on dock event: " + component); + context.startActivity(zzz); } else { Slog.e(TAG, "Couldn't start screen saver: none selected"); } @@ -37,6 +46,22 @@ public class DreamsDockLauncher extends Activity { // no screensaver? give up Slog.e(TAG, "Couldn't start screen saver: none installed"); } - finish(); + } + + // Trap low-level dock events and launch the screensaver. + public static class DockEventReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + if (Intent.ACTION_DOCK_EVENT.equals(intent.getAction())) { + Bundle extras = intent.getExtras(); + int state = extras + .getInt(Intent.EXTRA_DOCK_STATE, Intent.EXTRA_DOCK_STATE_UNDOCKED); + if (state == Intent.EXTRA_DOCK_STATE_DESK + || state == Intent.EXTRA_DOCK_STATE_LE_DESK + || state == Intent.EXTRA_DOCK_STATE_HE_DESK) { + launchDream(context); + } + } + } } }