resolved conflicts for merge of 64d592c0 to master

Change-Id: Iae4a66e37fcb852c4b105fe732c6597b638b2059
diff --git a/gallerycommon/src/com/android/gallery3d/common/FileCache.java b/gallerycommon/src/com/android/gallery3d/common/FileCache.java
index a69d6e1..86a1955 100644
--- a/gallerycommon/src/com/android/gallery3d/common/FileCache.java
+++ b/gallerycommon/src/com/android/gallery3d/common/FileCache.java
@@ -16,8 +16,6 @@
 
 package com.android.gallery3d.common;
 
-import com.android.gallery3d.common.Entry.Table;
-
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
@@ -25,6 +23,8 @@
 import android.database.sqlite.SQLiteOpenHelper;
 import android.util.Log;
 
+import com.android.gallery3d.common.Entry.Table;
+
 import java.io.File;
 import java.io.IOException;
 
diff --git a/src/com/android/gallery3d/app/AlbumPage.java b/src/com/android/gallery3d/app/AlbumPage.java
index dabfb26..10c2b67 100644
--- a/src/com/android/gallery3d/app/AlbumPage.java
+++ b/src/com/android/gallery3d/app/AlbumPage.java
@@ -17,7 +17,6 @@
 package com.android.gallery3d.app;
 
 import android.app.Activity;
-import android.app.ProgressDialog;
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
@@ -73,6 +72,9 @@
     private static final int REQUEST_PHOTO = 2;
     private static final int REQUEST_DO_ANIMATION = 3;
 
+    private static final int BIT_LOADING_RELOAD = 1;
+    private static final int BIT_LOADING_SYNC = 2;
+
     private static final float USER_DISTANCE_METER = 0.3f;
 
     private boolean mIsActive = false;
@@ -99,11 +101,11 @@
     private boolean mShowDetails;
     private float mUserDistance; // in pixel
 
-    private ProgressDialog mProgressDialog;
-    private Future<?> mPendingTask;
-
     private Future<Integer> mSyncTask = null;
 
+    private int mLoadingBits = 0;
+    private boolean mInitialSynced = false;
+
     private final GLView mRootPane = new GLView() {
         private final float mMatrix[] = new float[16];
 
@@ -326,6 +328,10 @@
         mAlbumDataAdapter.resume();
         mAlbumView.resume();
         mActionModeHandler.resume();
+        if (!mInitialSynced) {
+            mSyncTask = mMediaSet.requestSync(this);
+            setLoadingBit(BIT_LOADING_SYNC);
+        }
     }
 
     @Override
@@ -335,16 +341,7 @@
         mAlbumDataAdapter.pause();
         mAlbumView.pause();
         DetailsHelper.pause();
-        Future<?> task = mPendingTask;
-        if (task != null) {
-            // cancel on going task
-            task.cancel();
-            task.waitDone();
-            if (mProgressDialog != null) {
-                mProgressDialog.dismiss();
-                mProgressDialog = null;
-            }
-        }
+
         if (mSyncTask != null) {
             mSyncTask.cancel();
             mSyncTask = null;
@@ -568,9 +565,11 @@
         ((Activity) mActivity).runOnUiThread(new Runnable() {
             @Override
             public void run() {
+                if (resultCode == MediaSet.SYNC_RESULT_SUCCESS) {
+                    mInitialSynced = true;
+                }
                 if (!mIsActive) return;
-                mediaSet.notifyContentChanged(); // force reload to handle spinner
-
+                clearLoadingBit(BIT_LOADING_SYNC);
                 if (resultCode == MediaSet.SYNC_RESULT_ERROR) {
                     Toast.makeText((Context) mActivity, R.string.sync_album_error,
                             Toast.LENGTH_LONG).show();
@@ -579,33 +578,42 @@
         });
     }
 
+    private void setLoadingBit(int loadTaskBit) {
+        if (mLoadingBits == 0) {
+            GalleryUtils.setSpinnerVisibility((Activity) mActivity, true);
+        }
+        mLoadingBits |= loadTaskBit;
+    }
+
+    private void clearLoadingBit(int loadTaskBit) {
+        mLoadingBits &= ~loadTaskBit;
+        if (mLoadingBits == 0) {
+            GalleryUtils.setSpinnerVisibility((Activity) mActivity, false);
+
+            if (mAlbumDataAdapter.size() == 0) {
+                Toast.makeText((Context) mActivity,
+                        R.string.empty_album, Toast.LENGTH_LONG).show();
+                mActivity.getStateManager().finishState(AlbumPage.this);
+            }
+        }
+    }
+
     private class MyLoadingListener implements LoadingListener {
         @Override
         public void onLoadingStarted() {
-            GalleryUtils.setSpinnerVisibility((Activity) mActivity, true);
+            setLoadingBit(BIT_LOADING_RELOAD);
         }
 
         @Override
         public void onLoadingFinished() {
             if (!mIsActive) return;
-            if (mAlbumDataAdapter.size() == 0) {
-                if (mSyncTask == null) {
-                    mSyncTask = mMediaSet.requestSync(AlbumPage.this);
-                }
-                if (mSyncTask.isDone()){
-                    Toast.makeText((Context) mActivity,
-                            R.string.empty_album, Toast.LENGTH_LONG).show();
-                    mActivity.getStateManager().finishState(AlbumPage.this);
-                }
-            }
-            if (mSyncTask == null || mSyncTask.isDone()) {
-                GalleryUtils.setSpinnerVisibility((Activity) mActivity, false);
-            }
+            clearLoadingBit(BIT_LOADING_RELOAD);
         }
     }
 
     private class MyDetailsSource implements DetailsHelper.DetailsSource {
         private int mIndex;
+
         public int size() {
             return mAlbumDataAdapter.size();
         }
diff --git a/src/com/android/gallery3d/app/AlbumSetPage.java b/src/com/android/gallery3d/app/AlbumSetPage.java
index 8b2ce52..c31e920 100644
--- a/src/com/android/gallery3d/app/AlbumSetPage.java
+++ b/src/com/android/gallery3d/app/AlbumSetPage.java
@@ -43,7 +43,6 @@
 import com.android.gallery3d.ui.AlbumSetView;
 import com.android.gallery3d.ui.DetailsHelper;
 import com.android.gallery3d.ui.DetailsHelper.CloseListener;
-import com.android.gallery3d.util.GalleryUtils;
 import com.android.gallery3d.ui.GLCanvas;
 import com.android.gallery3d.ui.GLView;
 import com.android.gallery3d.ui.GridDrawer;
@@ -55,6 +54,7 @@
 import com.android.gallery3d.ui.SlotView;
 import com.android.gallery3d.ui.StaticBackground;
 import com.android.gallery3d.util.Future;
+import com.android.gallery3d.util.GalleryUtils;
 
 public class AlbumSetPage extends ActivityState implements
         SelectionManager.SelectionListener, GalleryActionBar.ClusterRunner,
@@ -70,6 +70,9 @@
     private static final int DATA_CACHE_SIZE = 256;
     private static final int REQUEST_DO_ANIMATION = 1;
 
+    private static final int BIT_LOADING_RELOAD = 1;
+    private static final int BIT_LOADING_SYNC = 2;
+
     private boolean mIsActive = false;
     private StaticBackground mStaticBackground;
     private AlbumSetView mAlbumSetView;
@@ -103,6 +106,9 @@
 
     private Future<Integer> mSyncTask = null;
 
+    private int mLoadingBits = 0;
+    private boolean mInitialSynced = false;
+
     private final GLView mRootPane = new GLView() {
         private final float mMatrix[] = new float[16];
 
@@ -284,6 +290,30 @@
         startTransition();
     }
 
+    private void clearLoadingBit(int loadingBit) {
+        mLoadingBits &= ~loadingBit;
+        if (mLoadingBits == 0) {
+            GalleryUtils.setSpinnerVisibility((Activity) mActivity, false);
+
+            // Only show toast when there's no album and we are going to finish
+            // the page. Toast is redundant if we are going to stay on this page.
+            if ((mAlbumSetDataAdapter.size() == 0)) {
+                Toast.makeText((Context) mActivity,
+                        R.string.empty_album, Toast.LENGTH_LONG).show();
+                if (mActivity.getStateManager().getStateCount() > 1) {
+                    mActivity.getStateManager().finishState(this);
+                }
+            }
+        }
+    }
+
+    private void setLoadingBit(int loadingBit) {
+        if (mLoadingBits == 0) {
+            GalleryUtils.setSpinnerVisibility((Activity) mActivity, true);
+        }
+        mLoadingBits |= loadingBit;
+    }
+
     @Override
     public void onPause() {
         super.onPause();
@@ -298,6 +328,7 @@
         if (mSyncTask != null) {
             mSyncTask.cancel();
             mSyncTask = null;
+            clearLoadingBit(BIT_LOADING_SYNC);
         }
     }
 
@@ -314,6 +345,10 @@
         if (mShowClusterMenu && actionBar != null) {
             actionBar.showClusterMenu(mSelectedAction, this);
         }
+        if (!mInitialSynced) {
+            mSyncTask = mMediaSet.requestSync(AlbumSetPage.this);
+            setLoadingBit(BIT_LOADING_SYNC);
+        }
     }
 
     private void initializeData(Bundle data) {
@@ -571,9 +606,11 @@
         ((Activity) mActivity).runOnUiThread(new Runnable() {
             @Override
             public void run() {
+                if (resultCode == MediaSet.SYNC_RESULT_SUCCESS) {
+                    mInitialSynced = true;
+                }
                 if (!mIsActive) return;
-                mediaSet.notifyContentChanged(); // force reload to handle spinner
-
+                clearLoadingBit(BIT_LOADING_SYNC);
                 if (resultCode == MediaSet.SYNC_RESULT_ERROR) {
                     Toast.makeText((Context) mActivity, R.string.sync_album_set_error,
                             Toast.LENGTH_LONG).show();
@@ -584,27 +621,12 @@
 
     private class MyLoadingListener implements LoadingListener {
         public void onLoadingStarted() {
-            GalleryUtils.setSpinnerVisibility((Activity) mActivity, true);
+            setLoadingBit(BIT_LOADING_RELOAD);
         }
 
         public void onLoadingFinished() {
             if (!mIsActive) return;
-
-            if (mSyncTask == null) {
-                // Request sync in case the mediaSet hasn't been sync'ed before.
-                mSyncTask = mMediaSet.requestSync(AlbumSetPage.this);
-            }
-            if (mSyncTask.isDone()){
-                // The mediaSet is in sync. Turn off the loading indicator.
-                GalleryUtils.setSpinnerVisibility((Activity) mActivity, false);
-                if (mAlbumSetDataAdapter.size() == 0) {
-                    Toast.makeText((Context) mActivity,
-                            R.string.empty_album, Toast.LENGTH_LONG).show();
-                    if (mActivity.getStateManager().getStateCount() > 1) {
-                        mActivity.getStateManager().finishState(AlbumSetPage.this);
-                    }
-                }
-            }
+            clearLoadingBit(BIT_LOADING_RELOAD);
         }
     }