diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 7176f324aa429..13800a6d40e5c 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -193,5 +193,18 @@
+
+
+
+
+
+
+
diff --git a/packages/SystemUI/res/mipmap-hdpi/ic_dreams.png b/packages/SystemUI/res/mipmap-hdpi/ic_dreams.png
new file mode 100644
index 0000000000000..56cbac146bbd2
Binary files /dev/null and b/packages/SystemUI/res/mipmap-hdpi/ic_dreams.png differ
diff --git a/packages/SystemUI/res/mipmap-mdpi/ic_dreams.png b/packages/SystemUI/res/mipmap-mdpi/ic_dreams.png
new file mode 100644
index 0000000000000..ea3d9914c7f48
Binary files /dev/null and b/packages/SystemUI/res/mipmap-mdpi/ic_dreams.png differ
diff --git a/packages/SystemUI/res/mipmap-xhdpi/ic_dreams.png b/packages/SystemUI/res/mipmap-xhdpi/ic_dreams.png
new file mode 100644
index 0000000000000..ddc7f664528b2
Binary files /dev/null and b/packages/SystemUI/res/mipmap-xhdpi/ic_dreams.png differ
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 609d63bea24a1..43070c61ad3b5 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -372,9 +372,6 @@
Clear all notifications.
-
- Activate screen saver
-
App info
@@ -400,4 +397,8 @@
BeanFlinger
+
+
+ Start dreams
+
diff --git a/packages/SystemUI/src/com/android/systemui/Somnambulator.java b/packages/SystemUI/src/com/android/systemui/Somnambulator.java
new file mode 100644
index 0000000000000..89d4ef7444e33
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/Somnambulator.java
@@ -0,0 +1,61 @@
+/*);
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.service.dreams.IDreamManager;
+import android.util.Slog;
+
+public class Somnambulator extends Activity {
+
+ public Somnambulator() {
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ final Intent launchIntent = getIntent();
+ final String action = launchIntent.getAction();
+ if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {
+ Intent shortcutIntent = new Intent(this, Somnambulator.class);
+ shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
+ | Intent.FLAG_ACTIVITY_NEW_TASK);
+ Intent resultIntent = new Intent();
+ resultIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
+ Intent.ShortcutIconResource.fromContext(this, R.mipmap.ic_dreams));
+ resultIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
+ resultIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.start_dreams));
+ setResult(RESULT_OK, resultIntent);
+ } else {
+ IDreamManager somnambulist = IDreamManager.Stub.asInterface(
+ ServiceManager.checkService("dreams"));
+ if (somnambulist != null) {
+ try {
+ Slog.v("Somnambulator", "Dreaming by user request.");
+ somnambulist.dream();
+ } catch (RemoteException e) {
+ // fine, stay asleep then
+ }
+ }
+ }
+ finish();
+ }
+
+}