OSDN Git Service

Show a dialog to require updating PlusOne.
authorOwen Lin <owenlin@google.com>
Thu, 24 Nov 2011 03:59:52 +0000 (11:59 +0800)
committerOwen Lin <owenlin@google.com>
Thu, 24 Nov 2011 13:07:04 +0000 (21:07 +0800)
Change-Id: I1ff4f5eca90ade49b0785324b9319ef0b7d751ca
fix: 5608342

src/com/android/gallery3d/app/AlbumDataAdapter.java
src/com/android/gallery3d/app/AlbumPage.java
src/com/android/gallery3d/app/AlbumSetPage.java
src/com/android/gallery3d/app/Gallery.java
src/com/android/gallery3d/data/ComboAlbum.java
src/com/android/gallery3d/data/ComboAlbumSet.java
src/com/android/gallery3d/data/MediaSet.java
src_pd/com/android/gallery3d/picasasource/PicasaSource.java

index 42388ea..6711786 100644 (file)
@@ -16,6 +16,9 @@
 
 package com.android.gallery3d.app;
 
+import android.os.Handler;
+import android.os.Message;
+
 import com.android.gallery3d.common.Utils;
 import com.android.gallery3d.data.ContentListener;
 import com.android.gallery3d.data.DataManager;
@@ -25,9 +28,6 @@ import com.android.gallery3d.data.MediaSet;
 import com.android.gallery3d.ui.AlbumView;
 import com.android.gallery3d.ui.SynchronizedHandler;
 
-import android.os.Handler;
-import android.os.Message;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.concurrent.Callable;
index 10c2b67..6fb4143 100644 (file)
@@ -325,12 +325,16 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
         super.onResume();
         mIsActive = true;
         setContentPane(mRootPane);
+
+        // Set the reload bit here to prevent it exit this page in clearLoadingBit().
+        setLoadingBit(BIT_LOADING_RELOAD);
         mAlbumDataAdapter.resume();
+
         mAlbumView.resume();
         mActionModeHandler.resume();
         if (!mInitialSynced) {
-            mSyncTask = mMediaSet.requestSync(this);
             setLoadingBit(BIT_LOADING_SYNC);
+            mSyncTask = mMediaSet.requestSync(this);
         }
     }
 
index fb26fc6..e1dcade 100644 (file)
@@ -337,7 +337,11 @@ public class AlbumSetPage extends ActivityState implements
         super.onResume();
         mIsActive = true;
         setContentPane(mRootPane);
+
+        // Set the reload bit here to prevent it exit this page in clearLoadingBit().
+        setLoadingBit(BIT_LOADING_RELOAD);
         mAlbumSetDataAdapter.resume();
+
         mAlbumSetView.resume();
         mEyePosition.resume();
         mActionModeHandler.resume();
@@ -346,8 +350,8 @@ public class AlbumSetPage extends ActivityState implements
             actionBar.showClusterMenu(mSelectedAction, this);
         }
         if (!mInitialSynced) {
-            mSyncTask = mMediaSet.requestSync(AlbumSetPage.this);
             setLoadingBit(BIT_LOADING_SYNC);
+            mSyncTask = mMediaSet.requestSync(AlbumSetPage.this);
         }
     }
 
index ebfa984..253af2b 100644 (file)
 
 package com.android.gallery3d.app;
 
+import android.app.Dialog;
 import android.content.ContentResolver;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnCancelListener;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
@@ -35,7 +38,7 @@ import com.android.gallery3d.picasasource.PicasaSource;
 import com.android.gallery3d.ui.GLRoot;
 import com.android.gallery3d.util.GalleryUtils;
 
-public final class Gallery extends AbstractGalleryActivity {
+public final class Gallery extends AbstractGalleryActivity implements OnCancelListener {
     public static final String EXTRA_SLIDESHOW = "slideshow";
     public static final String EXTRA_CROP = "crop";
 
@@ -47,6 +50,7 @@ public final class Gallery extends AbstractGalleryActivity {
 
     private static final String TAG = "Gallery";
     private GalleryActionBar mActionBar;
+    private Dialog mVersionCheckDialog;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -96,6 +100,10 @@ public final class Gallery extends AbstractGalleryActivity {
         data.putString(AlbumSetPage.KEY_MEDIA_PATH,
                 getDataManager().getTopSetPath(DataManager.INCLUDE_ALL));
         getStateManager().startState(AlbumSetPage.class, data);
+        mVersionCheckDialog = PicasaSource.getVersionCheckDialog(this);
+        if (mVersionCheckDialog != null) {
+            mVersionCheckDialog.setOnCancelListener(this);
+        }
     }
 
     private void startGetContent(Intent intent) {
@@ -243,10 +251,28 @@ public final class Gallery extends AbstractGalleryActivity {
     protected void onResume() {
         Utils.assertTrue(getStateManager().getStateCount() > 0);
         super.onResume();
+        if (mVersionCheckDialog != null) {
+            mVersionCheckDialog.show();
+        }
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        if (mVersionCheckDialog != null) {
+            mVersionCheckDialog.dismiss();
+        }
     }
 
     @Override
     public GalleryActionBar getGalleryActionBar() {
         return mActionBar;
     }
+
+    @Override
+    public void onCancel(DialogInterface dialog) {
+        if (dialog == mVersionCheckDialog) {
+            mVersionCheckDialog = null;
+        }
+    }
 }
index 1918453..6d22311 100644 (file)
@@ -93,6 +93,6 @@ public class ComboAlbum extends MediaSet implements ContentListener {
 
     @Override
     public Future<Integer> requestSync(SyncListener listener) {
-        return requestSyncOnEmptySets(mSets, listener);
+        return requestSyncOnMultipleSets(mSets, listener);
     }
 }
index 16adc12..916b163 100644 (file)
@@ -81,6 +81,6 @@ public class ComboAlbumSet extends MediaSet implements ContentListener {
 
     @Override
     public Future<Integer> requestSync(SyncListener listener) {
-        return requestSyncOnEmptySets(mSets, listener);
+        return requestSyncOnMultipleSets(mSets, listener);
     }
 }
index 5094195..ff9b8c3 100644 (file)
@@ -20,7 +20,6 @@ import com.android.gallery3d.common.Utils;
 import com.android.gallery3d.util.Future;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.WeakHashMap;
 
 // MediaSet is a directory-like data structure.
@@ -33,6 +32,8 @@ import java.util.WeakHashMap;
 // getTotalMediaItemCount() returns the number of all MediaItems, including
 // those in sub-MediaSets.
 public abstract class MediaSet extends MediaObject {
+    private static final String TAG = "MediaSet";
+
     public static final int MEDIAITEM_BATCH_FETCH_COUNT = 500;
     public static final int INDEX_NOT_FOUND = -1;
 
@@ -229,6 +230,7 @@ public abstract class MediaSet extends MediaObject {
      * SYNC_RESULT_SUCCESS by get().
      */
     public Future<Integer> requestSync(SyncListener listener) {
+        listener.onSyncDone(this, SYNC_RESULT_SUCCESS);
         return FUTURE_STUB;
     }
 
@@ -255,46 +257,39 @@ public abstract class MediaSet extends MediaObject {
         public void waitDone() {}
     };
 
-    protected Future<Integer> requestSyncOnEmptySets(MediaSet[] sets, SyncListener listener) {
-        MultiSetSyncFuture future = new MultiSetSyncFuture(listener);
-        future.requestSyncOnEmptySets(sets);
-        return future;
+    protected Future<Integer> requestSyncOnMultipleSets(MediaSet[] sets, SyncListener listener) {
+        return new MultiSetSyncFuture(sets, listener);
     }
 
     private class MultiSetSyncFuture implements Future<Integer>, SyncListener {
         private static final String TAG = "Gallery.MultiSetSync";
 
-        private final HashMap<MediaSet, Future<Integer>> mMediaSetMap =
-                new HashMap<MediaSet, Future<Integer>>();
         private final SyncListener mListener;
+        private final Future<Integer> mFutures[];
 
         private boolean mIsCancelled = false;
         private int mResult = -1;
+        private int mPendingCount;
 
-        MultiSetSyncFuture(SyncListener listener) {
+        @SuppressWarnings("unchecked")
+        MultiSetSyncFuture(MediaSet[] sets, SyncListener listener) {
             mListener = listener;
-        }
+            mPendingCount = sets.length;
+            mFutures = new Future[sets.length];
 
-        synchronized void requestSyncOnEmptySets(MediaSet[] sets) {
-            for (MediaSet set : sets) {
-                if ((set.getMediaItemCount() == 0) && !mMediaSetMap.containsKey(set)) {
-                    // Sync results are handled in this.onSyncDone().
-                    Future<Integer> future = set.requestSync(this);
-                    if (!future.isDone()) {
-                        mMediaSetMap.put(set, future);
-                        Log.d(TAG, "  request sync: " + Utils.maskDebugInfo(set.getName()));
-                    }
+            synchronized (this) {
+                for (int i = 0, n = sets.length; i < n; ++i) {
+                    mFutures[i] = sets[i].requestSync(this);
+                    Log.d(TAG, "  request sync: " + Utils.maskDebugInfo(sets[i].getName()));
                 }
             }
-            Log.d(TAG, "requestSyncOnEmptySets actual=" + mMediaSetMap.size());
         }
 
         @Override
         public synchronized void cancel() {
             if (mIsCancelled) return;
             mIsCancelled = true;
-            for (Future<Integer> future : mMediaSetMap.values()) future.cancel();
-            mMediaSetMap.clear();
+            for (Future<Integer> future : mFutures) future.cancel();
             if (mResult < 0) mResult = SYNC_RESULT_CANCELLED;
         }
 
@@ -305,7 +300,7 @@ public abstract class MediaSet extends MediaObject {
 
         @Override
         public synchronized boolean isDone() {
-            return mMediaSetMap.isEmpty();
+            return mPendingCount == 0;
         }
 
         @Override
@@ -328,18 +323,14 @@ public abstract class MediaSet extends MediaObject {
         public void onSyncDone(MediaSet mediaSet, int resultCode) {
             SyncListener listener = null;
             synchronized (this) {
-                if (mMediaSetMap.remove(mediaSet) != null) {
-                    Log.d(TAG, "onSyncDone: " + Utils.maskDebugInfo(mediaSet.getName())
-                            + " #pending=" + mMediaSetMap.size());
-                    if (resultCode == SYNC_RESULT_ERROR) {
-                        mResult = SYNC_RESULT_ERROR;
-                    }
-                    if (mMediaSetMap.isEmpty()) {
-                        if (mResult < 0) mResult = SYNC_RESULT_SUCCESS;
-                        notifyAll();
-                        listener = mListener;
-                    }
+                if (resultCode == SYNC_RESULT_ERROR) mResult = SYNC_RESULT_ERROR;
+                --mPendingCount;
+                if (mPendingCount == 0) {
+                    listener = mListener;
+                    notifyAll();
                 }
+                Log.d(TAG, "onSyncDone: " + Utils.maskDebugInfo(mediaSet.getName())
+                        + " #pending=" + mPendingCount);
             }
             if (listener != null) listener.onSyncDone(MediaSet.this, mResult);
         }
index a4f9621..ce0c0b8 100644 (file)
 
 package com.android.gallery3d.picasasource;
 
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.Context;
+import android.media.ExifInterface;
+import android.os.ParcelFileDescriptor;
+
 import com.android.gallery3d.app.GalleryApp;
 import com.android.gallery3d.data.MediaItem;
 import com.android.gallery3d.data.MediaObject;
@@ -24,11 +30,6 @@ import com.android.gallery3d.data.MediaSource;
 import com.android.gallery3d.data.Path;
 import com.android.gallery3d.data.PathMatcher;
 
-import android.app.Activity;
-import android.content.Context;
-import android.media.ExifInterface;
-import android.os.ParcelFileDescriptor;
-
 import java.io.FileNotFoundException;
 
 public class PicasaSource extends MediaSource {
@@ -133,4 +134,8 @@ public class PicasaSource extends MediaSource {
     public static void onPackageRemoved(Context context, String packageName) {/*do nothing*/}
 
     public static void extractExifValues(MediaObject item, ExifInterface exif) {/*do nothing*/}
+
+    public static Dialog getVersionCheckDialog(Activity activity){
+        return null;
+    }
 }