Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 64d592c0 authored by Owen Lin's avatar Owen Lin Committed by Android (Google) Code Review
Browse files

Merge "Request sync when opening Gallery/Album." into ics-mr1

parents d80bb597 fbdd338d
Loading
Loading
Loading
Loading
+38 −30
Original line number Diff line number Diff line
@@ -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 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
    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 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
    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 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
        mAlbumDataAdapter.resume();
        mAlbumView.resume();
        mActionModeHandler.resume();
        if (!mInitialSynced) {
            mSyncTask = mMediaSet.requestSync(this);
            setLoadingBit(BIT_LOADING_SYNC);
        }
    }

    @Override
@@ -335,16 +341,7 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
        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 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
        ((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 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
        });
    }

    private class MyLoadingListener implements LoadingListener {
        @Override
        public void onLoadingStarted() {
    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);

        @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);
    }

    private class MyLoadingListener implements LoadingListener {
        @Override
        public void onLoadingStarted() {
            setLoadingBit(BIT_LOADING_RELOAD);
        }

        @Override
        public void onLoadingFinished() {
            if (!mIsActive) return;
            clearLoadingBit(BIT_LOADING_RELOAD);
        }
    }

    private class MyDetailsSource implements DetailsHelper.DetailsSource {
        private int mIndex;

        public int size() {
            return mAlbumDataAdapter.size();
        }
+42 −22
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ import com.android.gallery3d.ui.ActionModeHandler.ActionModeListener;
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.SelectionManager;
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 @@ public class AlbumSetPage extends ActivityState implements
    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 @@ public class AlbumSetPage extends ActivityState implements

    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 @@ public class AlbumSetPage extends ActivityState implements
        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 @@ public class AlbumSetPage extends ActivityState implements
        if (mSyncTask != null) {
            mSyncTask.cancel();
            mSyncTask = null;
            clearLoadingBit(BIT_LOADING_SYNC);
        }
    }

@@ -314,6 +345,10 @@ public class AlbumSetPage extends ActivityState implements
        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 @@ public class AlbumSetPage extends ActivityState implements
        ((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,29 +621,12 @@ public class AlbumSetPage extends ActivityState implements

    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);

                // 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)
                        && (mActivity.getStateManager().getStateCount() > 1)) {
                    Toast.makeText((Context) mActivity,
                            R.string.empty_album, Toast.LENGTH_LONG).show();
                    mActivity.getStateManager().finishState(AlbumSetPage.this);
                }
            }
            clearLoadingBit(BIT_LOADING_RELOAD);
        }
    }