Keep screen on for user-initiated slideshow.

Change-Id: I3085398c663e2c38a31cfde5a07b23446bb7bd7f
b:6450305
diff --git a/src/com/android/gallery3d/app/ActivityState.java b/src/com/android/gallery3d/app/ActivityState.java
index 66b4a22..867cda3 100644
--- a/src/com/android/gallery3d/app/ActivityState.java
+++ b/src/com/android/gallery3d/app/ActivityState.java
@@ -36,7 +36,8 @@
 abstract public class ActivityState {
     protected static final int FLAG_HIDE_ACTION_BAR = 1;
     protected static final int FLAG_HIDE_STATUS_BAR = 2;
-    protected static final int FLAG_SCREEN_ON = 4;
+    protected static final int FLAG_SCREEN_ON_WHEN_PLUGGED = 4;
+    protected static final int FLAG_SCREEN_ON_ALWAYS = 8;
 
     private static final int SCREEN_ON_FLAGS = (
               WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
@@ -117,7 +118,8 @@
     void setScreenOnFlags() {
         final Window win = ((Activity) mActivity).getWindow();
         final WindowManager.LayoutParams params = win.getAttributes();
-        if (mPlugged && 0 != (mFlags & FLAG_SCREEN_ON)) {
+        if ((0 != (mFlags & FLAG_SCREEN_ON_ALWAYS)) ||
+                (mPlugged && 0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED))) {
             params.flags |= SCREEN_ON_FLAGS;
         } else {
             params.flags &= ~SCREEN_ON_FLAGS;
@@ -126,7 +128,7 @@
     }
 
     protected void onPause() {
-        if (0 != (mFlags & FLAG_SCREEN_ON)) {
+        if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) {
             ((Activity) mActivity).unregisterReceiver(mPowerIntentReceiver);
         }
     }
@@ -160,7 +162,7 @@
             onStateResult(entry.requestCode, entry.resultCode, entry.resultData);
         }
 
-        if (0 != (mFlags & FLAG_SCREEN_ON)) {
+        if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) {
             // we need to know whether the device is plugged in to do this correctly
             final IntentFilter filter = new IntentFilter();
             filter.addAction(Intent.ACTION_BATTERY_CHANGED);
diff --git a/src/com/android/gallery3d/app/Gallery.java b/src/com/android/gallery3d/app/Gallery.java
index bdd4a0b..468d202 100644
--- a/src/com/android/gallery3d/app/Gallery.java
+++ b/src/com/android/gallery3d/app/Gallery.java
@@ -42,6 +42,7 @@
 
 public final class Gallery extends AbstractGalleryActivity implements OnCancelListener {
     public static final String EXTRA_SLIDESHOW = "slideshow";
+    public static final String EXTRA_DREAM = "dream";
     public static final String EXTRA_CROP = "crop";
 
     public static final String ACTION_REVIEW = "com.android.camera.action.REVIEW";
@@ -145,6 +146,9 @@
             data.putString(SlideshowPage.KEY_SET_PATH, path.toString());
             data.putBoolean(SlideshowPage.KEY_RANDOM_ORDER, true);
             data.putBoolean(SlideshowPage.KEY_REPEAT, true);
+            if (intent.getBooleanExtra(EXTRA_DREAM, false)) {
+                data.putBoolean(SlideshowPage.KEY_DREAM, true);
+            }
             getStateManager().startState(SlideshowPage.class, data);
         } else {
             Bundle data = new Bundle();
diff --git a/src/com/android/gallery3d/app/SlideshowDream.java b/src/com/android/gallery3d/app/SlideshowDream.java
index c249467..9963da6 100644
--- a/src/com/android/gallery3d/app/SlideshowDream.java
+++ b/src/com/android/gallery3d/app/SlideshowDream.java
@@ -14,6 +14,7 @@
 //            Uri.fromFile(Environment.getExternalStoragePublicDirectory(
 //                        Environment.DIRECTORY_PICTURES)))
                 .putExtra(Gallery.EXTRA_SLIDESHOW, true)
+                .putExtra(Gallery.EXTRA_DREAM, true)
                 .setFlags(getIntent().getFlags());
         startActivity(i);
         finish();
diff --git a/src/com/android/gallery3d/app/SlideshowPage.java b/src/com/android/gallery3d/app/SlideshowPage.java
index 5aa3985..a6ae527 100644
--- a/src/com/android/gallery3d/app/SlideshowPage.java
+++ b/src/com/android/gallery3d/app/SlideshowPage.java
@@ -48,6 +48,7 @@
     public static final String KEY_PHOTO_INDEX = "photo-index";
     public static final String KEY_RANDOM_ORDER = "random-order";
     public static final String KEY_REPEAT = "repeat";
+    public static final String KEY_DREAM = "dream";
 
     private static final long SLIDESHOW_DELAY = 3000; // 3 seconds
 
@@ -104,7 +105,14 @@
 
     @Override
     public void onCreate(Bundle data, Bundle restoreState) {
-        mFlags |= (FLAG_HIDE_ACTION_BAR | FLAG_HIDE_STATUS_BAR | FLAG_SCREEN_ON);
+        mFlags |= (FLAG_HIDE_ACTION_BAR | FLAG_HIDE_STATUS_BAR);
+        if (data.getBoolean(KEY_DREAM)) {
+            // Dream screensaver only keeps screen on for plugged devices.
+            mFlags |= FLAG_SCREEN_ON_WHEN_PLUGGED;
+        } else {
+            // User-initiated slideshow would always keep screen on.
+            mFlags |= FLAG_SCREEN_ON_ALWAYS;
+        }
 
         mHandler = new SynchronizedHandler(mActivity.getGLRoot()) {
             @Override