OSDN Git Service

Prevent slide show request with only on slide
authorJohn Hoford <hoford@google.com>
Fri, 23 Aug 2013 21:29:46 +0000 (14:29 -0700)
committerJohn Hoford <hoford@google.com>
Fri, 23 Aug 2013 23:26:50 +0000 (16:26 -0700)
bug:8794694
Change-Id: Id3354733c7f35d9303b01f07ddf30f5555b07ddd

src/com/android/gallery3d/app/AlbumPage.java
src/com/android/gallery3d/app/PhotoPage.java

index 658abbb..ad757da 100644 (file)
@@ -538,6 +538,27 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
         mSlotView.invalidate();
     }
 
+    private boolean canDoSlideShow() {
+        if (mMediaSet == null) {
+            return false;
+        }
+
+        final int[] count = new int[]{0};
+        mMediaSet.enumerateMediaItems(new MediaSet.ItemConsumer() {
+            @Override
+            public void consume(int index, MediaItem item) {
+                if (item.getMediaType() == MediaObject.MEDIA_TYPE_IMAGE) {
+                    count[0]++;
+                }
+            }
+        });
+
+        if (count[0] < 2) { // you must have 2 pictures to go into slide show
+            return false;
+        }
+        return true;
+    }
+
     @Override
     protected boolean onCreateActionBar(Menu menu) {
         GalleryActionBar actionBar = mActivity.getGalleryActionBar();
@@ -553,6 +574,7 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
 
             FilterUtils.setupMenuItems(actionBar, mMediaSetPath, true);
 
+            menu.findItem(R.id.action_slideshow).setVisible(canDoSlideShow());
             menu.findItem(R.id.action_group_by).setVisible(mShowClusterMenu);
             menu.findItem(R.id.action_camera).setVisible(
                     MediaSetUtils.isCameraSource(mMediaSetPath)
index 325723c..1dacb87 100644 (file)
@@ -760,16 +760,32 @@ public abstract class PhotoPage extends ActivityState implements
                 supportedOperations &= ~MediaObject.SUPPORT_EDIT;
             }
         }
+
         MenuExecutor.updateMenuOperation(menu, supportedOperations);
     }
 
     private boolean canDoSlideShow() {
+
         if (mMediaSet == null || mCurrentPhoto == null) {
             return false;
         }
         if (mCurrentPhoto.getMediaType() != MediaObject.MEDIA_TYPE_IMAGE) {
             return false;
         }
+        final int[] count = new int[]{0};
+
+        mMediaSet.enumerateMediaItems(new MediaSet.ItemConsumer() {
+            @Override
+            public void consume(int index, MediaItem item) {
+                if (item.getMediaType() == MediaObject.MEDIA_TYPE_IMAGE) {
+                    count[0]++;
+                }
+            }
+        });
+
+        if (count[0] < 2) { // you must have 3 pictures to go into slide show
+            return false;
+        }
         return true;
     }