AlbumSetPage.java revision fbdd338d83596ba545a8a7c8105d2ad7b5df56e6
1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/* 2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2010 The Android Open Source Project 3f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 4f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Licensed under the Apache License, Version 2.0 (the "License"); 5f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * you may not use this file except in compliance with the License. 6f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * You may obtain a copy of the License at 7f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 8f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * http://www.apache.org/licenses/LICENSE-2.0 9f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 10f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Unless required by applicable law or agreed to in writing, software 11f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * distributed under the License is distributed on an "AS IS" BASIS, 12f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * See the License for the specific language governing permissions and 14f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * limitations under the License. 15f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin */ 16f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 17f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpackage com.android.gallery3d.app; 18f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 191f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chenimport android.app.Activity; 201f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chenimport android.content.Context; 211f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chenimport android.content.Intent; 221f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chenimport android.graphics.Rect; 231f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chenimport android.os.Bundle; 241f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chenimport android.os.Vibrator; 251f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chenimport android.provider.MediaStore; 261f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chenimport android.view.ActionMode; 271f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chenimport android.view.Menu; 281f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chenimport android.view.MenuInflater; 291f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chenimport android.view.MenuItem; 301f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chenimport android.widget.Toast; 311f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chen 32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.R; 33f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.common.Utils; 34f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.DataManager; 35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.MediaDetails; 36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.MediaObject; 37f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.MediaSet; 38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.Path; 39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.picasasource.PicasaSource; 40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.settings.GallerySettings; 41f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.ActionModeHandler; 42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.ActionModeHandler.ActionModeListener; 43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.AlbumSetView; 444105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport com.android.gallery3d.ui.DetailsHelper; 454105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport com.android.gallery3d.ui.DetailsHelper.CloseListener; 46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.GLCanvas; 47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.GLView; 48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.GridDrawer; 49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.HighlightDrawer; 50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.PositionProvider; 51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.PositionRepository; 52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.PositionRepository.Position; 53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.SelectionManager; 54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.SlotView; 55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.StaticBackground; 5657cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyanimport com.android.gallery3d.util.Future; 57fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Linimport com.android.gallery3d.util.GalleryUtils; 58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic class AlbumSetPage extends ActivityState implements 60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin SelectionManager.SelectionListener, GalleryActionBar.ClusterRunner, 6157cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan EyePosition.EyePositionListener, MediaSet.SyncListener { 62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @SuppressWarnings("unused") 63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static final String TAG = "AlbumSetPage"; 64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final String KEY_MEDIA_PATH = "media-path"; 66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final String KEY_SET_TITLE = "set-title"; 67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final String KEY_SET_SUBTITLE = "set-subtitle"; 68b5f8d908c5dd287052cd49eddaf1f82d858cca03Ray Chen public static final String KEY_SELECTED_CLUSTER_TYPE = "selected-cluster"; 696cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin 70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static final int DATA_CACHE_SIZE = 256; 71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static final int REQUEST_DO_ANIMATION = 1; 72f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 73fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin private static final int BIT_LOADING_RELOAD = 1; 74fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin private static final int BIT_LOADING_SYNC = 2; 75fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin 76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private boolean mIsActive = false; 77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private StaticBackground mStaticBackground; 78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private AlbumSetView mAlbumSetView; 79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private MediaSet mMediaSet; 819c21268fa8d394cca6cab78dd023a52e0b147a6eRay Chen private String mTitle; 82f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private String mSubtitle; 83b5f8d908c5dd287052cd49eddaf1f82d858cca03Ray Chen private boolean mShowClusterMenu; 84b5f8d908c5dd287052cd49eddaf1f82d858cca03Ray Chen private int mSelectedAction; 851f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chen private Vibrator mVibrator; 86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected SelectionManager mSelectionManager; 88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private AlbumSetDataAdapter mAlbumSetDataAdapter; 89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private GridDrawer mGridDrawer; 90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private HighlightDrawer mHighlightDrawer; 91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private boolean mGetContent; 93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private boolean mGetAlbum; 94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private ActionMode mActionMode; 95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private ActionModeHandler mActionModeHandler; 964105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen private DetailsHelper mDetailsHelper; 974105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen private MyDetailsSource mDetailsSource; 98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private boolean mShowDetails; 99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private EyePosition mEyePosition; 100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // The eyes' position of the user, the origin is at the center of the 102f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // device and the unit is in pixels. 103f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private float mX; 104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private float mY; 105f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private float mZ; 106f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 10757cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan private Future<Integer> mSyncTask = null; 10857cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan 109fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin private int mLoadingBits = 0; 110fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin private boolean mInitialSynced = false; 111fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin 112dbf4ba12afba115888493caa34937643257e2bb1Ray Chen private final GLView mRootPane = new GLView() { 113dbf4ba12afba115888493caa34937643257e2bb1Ray Chen private final float mMatrix[] = new float[16]; 114f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 115f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 116f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void onLayout( 117f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin boolean changed, int left, int top, int right, int bottom) { 118f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mStaticBackground.layout(0, 0, right - left, bottom - top); 119f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mEyePosition.resetPosition(); 120f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 121f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int slotViewTop = GalleryActionBar.getHeight((Activity) mActivity); 122f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int slotViewBottom = bottom - top; 123f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int slotViewRight = right - left; 124f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 125f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mShowDetails) { 1264105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsHelper.layout(left, slotViewTop, right, bottom); 127f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 128f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.setSelectionDrawer(mGridDrawer); 129f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 130f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 131f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.layout(0, slotViewTop, slotViewRight, slotViewBottom); 132f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin PositionRepository.getInstance(mActivity).setOffset( 133f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 0, slotViewTop); 134f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 135f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 136f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 137f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void render(GLCanvas canvas) { 138f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin canvas.save(GLCanvas.SAVE_FLAG_MATRIX); 139f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin GalleryUtils.setViewPointMatrix(mMatrix, 140f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getWidth() / 2 + mX, getHeight() / 2 + mY, mZ); 141f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin canvas.multiplyMatrix(mMatrix, 0); 142f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.render(canvas); 143f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin canvas.restore(); 144f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 145f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin }; 146f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 147f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 148f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onEyePositionChanged(float x, float y, float z) { 149f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mRootPane.lockRendering(); 150f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mX = x; 151f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mY = y; 152f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mZ = z; 153f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mRootPane.unlockRendering(); 154f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mRootPane.invalidate(); 155f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 156f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 157f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 158f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onBackPressed() { 159f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mShowDetails) { 160f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin hideDetails(); 161f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else if (mSelectionManager.inSelectionMode()) { 162f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.leaveSelectionMode(); 163f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 164f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.savePositions( 165f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin PositionRepository.getInstance(mActivity)); 166f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onBackPressed(); 167f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 168f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 169f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 170f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private void savePositions(int slotIndex, int center[]) { 171f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Rect offset = new Rect(); 172f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mRootPane.getBoundsOf(mAlbumSetView, offset); 173f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.savePositions(PositionRepository.getInstance(mActivity)); 174f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Rect r = mAlbumSetView.getSlotRect(slotIndex); 175f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int scrollX = mAlbumSetView.getScrollX(); 176f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int scrollY = mAlbumSetView.getScrollY(); 177f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin center[0] = offset.left + (r.left + r.right) / 2 - scrollX; 178f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin center[1] = offset.top + (r.top + r.bottom) / 2 - scrollY; 179f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 180f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 181f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onSingleTapUp(int slotIndex) { 182f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MediaSet targetSet = mAlbumSetDataAdapter.getMediaSet(slotIndex); 183f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (targetSet == null) return; // Content is dirty, we shall reload soon 184f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 185f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mShowDetails) { 186f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Path path = targetSet.getPath(); 187f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mHighlightDrawer.setHighlightItem(path); 1884105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsHelper.reloadDetails(slotIndex); 189f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else if (!mSelectionManager.inSelectionMode()) { 190f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Bundle data = new Bundle(getData()); 191f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String mediaPath = targetSet.getPath().toString(); 192f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int[] center = new int[2]; 193f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin savePositions(slotIndex, center); 194f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putIntArray(AlbumPage.KEY_SET_CENTER, center); 195f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mGetAlbum && targetSet.isLeafAlbum()) { 196f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Activity activity = (Activity) mActivity; 197f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Intent result = new Intent() 198f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin .putExtra(AlbumPicker.KEY_ALBUM_PATH, targetSet.getPath().toString()); 199f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin activity.setResult(Activity.RESULT_OK, result); 200f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin activity.finish(); 201f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else if (targetSet.getSubMediaSetCount() > 0) { 202f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putString(AlbumSetPage.KEY_MEDIA_PATH, mediaPath); 203f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActivity.getStateManager().startStateForResult( 204f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin AlbumSetPage.class, REQUEST_DO_ANIMATION, data); 205f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 206f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (!mGetContent && (targetSet.getSupportedOperations() 207f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin & MediaObject.SUPPORT_IMPORT) != 0) { 208f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putBoolean(AlbumPage.KEY_AUTO_SELECT_ALL, true); 209f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 210f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putString(AlbumPage.KEY_MEDIA_PATH, mediaPath); 211f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin boolean inAlbum = mActivity.getStateManager().hasStateClass(AlbumPage.class); 212f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // We only show cluster menu in the first AlbumPage in stack 213f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putBoolean(AlbumPage.KEY_SHOW_CLUSTER_MENU, !inAlbum); 214f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActivity.getStateManager().startStateForResult( 215f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin AlbumPage.class, REQUEST_DO_ANIMATION, data); 216f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 217f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 218f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.toggle(targetSet.getPath()); 219f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.invalidate(); 220f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 221f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 222f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 223bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang private void onDown(int index) { 224bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang MediaSet set = mAlbumSetDataAdapter.getMediaSet(index); 225bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang Path path = (set == null) ? null : set.getPath(); 226bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang mSelectionManager.setPressedPath(path); 227bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang mAlbumSetView.invalidate(); 228bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang } 229bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang 230bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang private void onUp() { 231bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang mSelectionManager.setPressedPath(null); 232bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang mAlbumSetView.invalidate(); 233bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang } 234bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang 235f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onLongTap(int slotIndex) { 236f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mGetContent || mGetAlbum) return; 237f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mShowDetails) { 238f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin onSingleTapUp(slotIndex); 239f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 240f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MediaSet set = mAlbumSetDataAdapter.getMediaSet(slotIndex); 241f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (set == null) return; 242f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.setAutoLeaveSelectionMode(true); 243f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.toggle(set.getPath()); 2444105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsSource.findIndex(slotIndex); 245f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.invalidate(); 246f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 247f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 248f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 249f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void doCluster(int clusterType) { 250f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String basePath = mMediaSet.getPath().toString(); 251f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String newPath = FilterUtils.switchClusterPath(basePath, clusterType); 252f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Bundle data = new Bundle(getData()); 253f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putString(AlbumSetPage.KEY_MEDIA_PATH, newPath); 254b5f8d908c5dd287052cd49eddaf1f82d858cca03Ray Chen data.putInt(KEY_SELECTED_CLUSTER_TYPE, clusterType); 255f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.savePositions(PositionRepository.getInstance(mActivity)); 256f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActivity.getStateManager().switchState(this, AlbumSetPage.class, data); 257f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 258f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 259f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void doFilter(int filterType) { 260f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String basePath = mMediaSet.getPath().toString(); 261f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String newPath = FilterUtils.switchFilterPath(basePath, filterType); 262f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Bundle data = new Bundle(getData()); 263f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putString(AlbumSetPage.KEY_MEDIA_PATH, newPath); 264f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.savePositions(PositionRepository.getInstance(mActivity)); 265f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActivity.getStateManager().switchState(this, AlbumSetPage.class, data); 266f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 267f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 268f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onOperationComplete() { 269f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.invalidate(); 270f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // TODO: enable animation 271f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 272f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 273f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 274f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onCreate(Bundle data, Bundle restoreState) { 275f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin initializeViews(); 276f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin initializeData(data); 2771f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chen Context context = mActivity.getAndroidContext(); 278f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGetContent = data.getBoolean(Gallery.KEY_GET_CONTENT, false); 279f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGetAlbum = data.getBoolean(Gallery.KEY_GET_ALBUM, false); 2809c21268fa8d394cca6cab78dd023a52e0b147a6eRay Chen mTitle = data.getString(AlbumSetPage.KEY_SET_TITLE); 281f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSubtitle = data.getString(AlbumSetPage.KEY_SET_SUBTITLE); 2821f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chen mEyePosition = new EyePosition(context, this); 2834105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsSource = new MyDetailsSource(); 2841f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chen mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 285a79bbef0ffe0b99cb8d0e5dcedd3082abc61559cWei Huang GalleryActionBar actionBar = mActivity.getGalleryActionBar(); 286a79bbef0ffe0b99cb8d0e5dcedd3082abc61559cWei Huang if (actionBar != null) { 287b5f8d908c5dd287052cd49eddaf1f82d858cca03Ray Chen mSelectedAction = data.getInt( 288b5f8d908c5dd287052cd49eddaf1f82d858cca03Ray Chen AlbumSetPage.KEY_SELECTED_CLUSTER_TYPE, FilterUtils.CLUSTER_BY_ALBUM); 289a79bbef0ffe0b99cb8d0e5dcedd3082abc61559cWei Huang } 290f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin startTransition(); 291f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 292f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 293fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin private void clearLoadingBit(int loadingBit) { 294fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin mLoadingBits &= ~loadingBit; 295fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin if (mLoadingBits == 0) { 296fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin GalleryUtils.setSpinnerVisibility((Activity) mActivity, false); 297fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin 298fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin // Only show toast when there's no album and we are going to finish 299fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin // the page. Toast is redundant if we are going to stay on this page. 300fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin if ((mAlbumSetDataAdapter.size() == 0)) { 301fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin Toast.makeText((Context) mActivity, 302fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin R.string.empty_album, Toast.LENGTH_LONG).show(); 303fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin if (mActivity.getStateManager().getStateCount() > 1) { 304fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin mActivity.getStateManager().finishState(this); 305fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 306fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 307fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 308fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 309fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin 310fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin private void setLoadingBit(int loadingBit) { 311fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin if (mLoadingBits == 0) { 312fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin GalleryUtils.setSpinnerVisibility((Activity) mActivity, true); 313fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 314fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin mLoadingBits |= loadingBit; 315fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 316fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin 317f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 318f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onPause() { 319f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onPause(); 320f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mIsActive = false; 321f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionModeHandler.pause(); 322f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetDataAdapter.pause(); 323f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.pause(); 324f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mEyePosition.pause(); 3254105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen DetailsHelper.pause(); 326f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin GalleryActionBar actionBar = mActivity.getGalleryActionBar(); 327b5f8d908c5dd287052cd49eddaf1f82d858cca03Ray Chen if (actionBar != null) actionBar.hideClusterMenu(); 32857cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan if (mSyncTask != null) { 32957cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan mSyncTask.cancel(); 33057cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan mSyncTask = null; 331fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin clearLoadingBit(BIT_LOADING_SYNC); 33257cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan } 333f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 334f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 335f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 336f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onResume() { 337f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onResume(); 338f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mIsActive = true; 339f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin setContentPane(mRootPane); 340f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetDataAdapter.resume(); 341f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.resume(); 342f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mEyePosition.resume(); 343f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionModeHandler.resume(); 344f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin GalleryActionBar actionBar = mActivity.getGalleryActionBar(); 345dbf4ba12afba115888493caa34937643257e2bb1Ray Chen if (mShowClusterMenu && actionBar != null) { 346dbf4ba12afba115888493caa34937643257e2bb1Ray Chen actionBar.showClusterMenu(mSelectedAction, this); 347dbf4ba12afba115888493caa34937643257e2bb1Ray Chen } 348fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin if (!mInitialSynced) { 349fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin mSyncTask = mMediaSet.requestSync(AlbumSetPage.this); 350fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin setLoadingBit(BIT_LOADING_SYNC); 351fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 352f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 353f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 354f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private void initializeData(Bundle data) { 355f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String mediaPath = data.getString(AlbumSetPage.KEY_MEDIA_PATH); 356f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mMediaSet = mActivity.getDataManager().getMediaSet(mediaPath); 357f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.setSourceMediaSet(mMediaSet); 358f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetDataAdapter = new AlbumSetDataAdapter( 359f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActivity, mMediaSet, DATA_CACHE_SIZE); 360f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetDataAdapter.setLoadingListener(new MyLoadingListener()); 361f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.setModel(mAlbumSetDataAdapter); 362f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 363f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 364f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private void initializeViews() { 365f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager = new SelectionManager(mActivity, true); 366f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.setSelectionListener(this); 367f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mStaticBackground = new StaticBackground(mActivity.getAndroidContext()); 368f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mRootPane.addComponent(mStaticBackground); 369f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 370f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGridDrawer = new GridDrawer((Context) mActivity, mSelectionManager); 371f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Config.AlbumSetPage config = Config.AlbumSetPage.get((Context) mActivity); 372f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView = new AlbumSetView(mActivity, mGridDrawer, 3739201679ed1c485767f2e334aa618bd733024af03Chih-Chung Chang config.slotViewSpec, config.labelSpec); 374f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.setListener(new SlotView.SimpleListener() { 375f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 376bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang public void onDown(int index) { 377bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang AlbumSetPage.this.onDown(index); 378bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang } 379bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang 380bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang @Override 381bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang public void onUp() { 382bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang AlbumSetPage.this.onUp(); 383bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang } 384bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang 385bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang @Override 386f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onSingleTapUp(int slotIndex) { 387f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin AlbumSetPage.this.onSingleTapUp(slotIndex); 388f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 389bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang 390f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 391f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onLongTap(int slotIndex) { 392f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin AlbumSetPage.this.onLongTap(slotIndex); 393f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 394f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin }); 395f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 396f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionModeHandler = new ActionModeHandler(mActivity, mSelectionManager); 397f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionModeHandler.setActionModeListener(new ActionModeListener() { 398f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public boolean onActionItemClicked(MenuItem item) { 399f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return onItemSelected(item); 400f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 401f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin }); 402f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mRootPane.addComponent(mAlbumSetView); 403f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 404f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mStaticBackground.setImage(R.drawable.background, 405f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin R.drawable.background_portrait); 406f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 407f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 408f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 409f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected boolean onCreateActionBar(Menu menu) { 410f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Activity activity = (Activity) mActivity; 411f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin GalleryActionBar actionBar = mActivity.getGalleryActionBar(); 412f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MenuInflater inflater = activity.getMenuInflater(); 413f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 414f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin final boolean inAlbum = mActivity.getStateManager().hasStateClass( 415f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin AlbumPage.class); 416f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 417f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mGetContent) { 418f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin inflater.inflate(R.menu.pickup, menu); 419f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int typeBits = mData.getInt( 420f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Gallery.KEY_TYPE_BITS, DataManager.INCLUDE_IMAGE); 421f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int id = R.string.select_image; 422f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if ((typeBits & DataManager.INCLUDE_VIDEO) != 0) { 423f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin id = (typeBits & DataManager.INCLUDE_IMAGE) == 0 424f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ? R.string.select_video 425f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin : R.string.select_item; 426f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 427f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin actionBar.setTitle(id); 428f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else if (mGetAlbum) { 429f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin inflater.inflate(R.menu.pickup, menu); 430f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin actionBar.setTitle(R.string.select_album); 431f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 432b5f8d908c5dd287052cd49eddaf1f82d858cca03Ray Chen mShowClusterMenu = !inAlbum; 433f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin inflater.inflate(R.menu.albumset, menu); 434f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MenuItem selectItem = menu.findItem(R.id.action_select); 435f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 436f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (selectItem != null) { 437f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin boolean selectAlbums = !inAlbum && 438f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin actionBar.getClusterTypeAction() == FilterUtils.CLUSTER_BY_ALBUM; 439f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (selectAlbums) { 440f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin selectItem.setTitle(R.string.select_album); 441f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 442f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin selectItem.setTitle(R.string.select_group); 443f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 444f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 445f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 446f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MenuItem switchCamera = menu.findItem(R.id.action_camera); 447f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (switchCamera != null) { 448f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin switchCamera.setVisible(GalleryUtils.isCameraAvailable(activity)); 449f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 450f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 4519c21268fa8d394cca6cab78dd023a52e0b147a6eRay Chen actionBar.setTitle(mTitle); 452f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin actionBar.setSubtitle(mSubtitle); 453f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 454f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 455f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 456f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 457f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 458f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected boolean onItemSelected(MenuItem item) { 459f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Activity activity = (Activity) mActivity; 460f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin switch (item.getItemId()) { 461bd8e025f1bb39b2be236b183ea8e78f93b308ad1Ray Chen case R.id.action_cancel: 462bd8e025f1bb39b2be236b183ea8e78f93b308ad1Ray Chen activity.setResult(Activity.RESULT_CANCELED); 463bd8e025f1bb39b2be236b183ea8e78f93b308ad1Ray Chen activity.finish(); 464bd8e025f1bb39b2be236b183ea8e78f93b308ad1Ray Chen return true; 465f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case R.id.action_select: 466f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.setAutoLeaveSelectionMode(false); 467f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.enterSelectionMode(); 468f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 469f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case R.id.action_details: 470f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mAlbumSetDataAdapter.size() != 0) { 471f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mShowDetails) { 472f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin hideDetails(); 473f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 474f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin showDetails(); 475f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 476f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 477f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Toast.makeText(activity, 478f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin activity.getText(R.string.no_albums_alert), 479f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Toast.LENGTH_SHORT).show(); 480f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 481f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 482f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case R.id.action_camera: { 483f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA) 484f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 485f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin | Intent.FLAG_ACTIVITY_NEW_TASK); 486f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin activity.startActivity(intent); 487f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 488f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 489f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case R.id.action_manage_offline: { 4906cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin Bundle data = new Bundle(); 4916cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin String mediaPath = mActivity.getDataManager().getTopSetPath( 4926cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin DataManager.INCLUDE_ALL); 4936cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin data.putString(AlbumSetPage.KEY_MEDIA_PATH, mediaPath); 4946cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin mActivity.getStateManager().startState(ManageCachePage.class, data); 495f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 496f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 497f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case R.id.action_sync_picasa_albums: { 498f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin PicasaSource.requestSync(activity); 499f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 500f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 501f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case R.id.action_settings: { 502f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin activity.startActivity(new Intent(activity, GallerySettings.class)); 503f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 504f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 505f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin default: 506f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return false; 507f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 508f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 509f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 510f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 511f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void onStateResult(int requestCode, int resultCode, Intent data) { 512f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin switch (requestCode) { 513f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case REQUEST_DO_ANIMATION: { 514f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin startTransition(); 515f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 516f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 517f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 518f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 519f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private void startTransition() { 520f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin final PositionRepository repository = 521f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin PositionRepository.getInstance(mActivity); 522f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.startTransition(new PositionProvider() { 523dbf4ba12afba115888493caa34937643257e2bb1Ray Chen private final Position mTempPosition = new Position(); 524f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public Position getPosition(long identity, Position target) { 525f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Position p = repository.get(identity); 526f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (p == null) { 527f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin p = mTempPosition; 528f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin p.set(target.x, target.y, 128, target.theta, 1); 529f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 530f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return p; 531f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 532f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin }); 533f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 534f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 535f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private String getSelectedString() { 536f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin GalleryActionBar actionBar = mActivity.getGalleryActionBar(); 537f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int count = mSelectionManager.getSelectedCount(); 538f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int action = actionBar.getClusterTypeAction(); 539f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int string = action == FilterUtils.CLUSTER_BY_ALBUM 540f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ? R.plurals.number_of_albums_selected 541f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin : R.plurals.number_of_groups_selected; 542f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String format = mActivity.getResources().getQuantityString(string, count); 543f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return String.format(format, count); 544f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 545f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 546f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onSelectionModeChange(int mode) { 547f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 548f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin switch (mode) { 549f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case SelectionManager.ENTER_SELECTION_MODE: { 550b5f8d908c5dd287052cd49eddaf1f82d858cca03Ray Chen mActivity.getGalleryActionBar().hideClusterMenu(); 551f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionMode = mActionModeHandler.startActionMode(); 5521f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chen mVibrator.vibrate(100); 553f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin break; 554f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 555f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case SelectionManager.LEAVE_SELECTION_MODE: { 556f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionMode.finish(); 5579c21268fa8d394cca6cab78dd023a52e0b147a6eRay Chen if (mShowClusterMenu) { 5589c21268fa8d394cca6cab78dd023a52e0b147a6eRay Chen mActivity.getGalleryActionBar().showClusterMenu(mSelectedAction, this); 5599c21268fa8d394cca6cab78dd023a52e0b147a6eRay Chen } 560f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mRootPane.invalidate(); 561f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin break; 562f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 563f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case SelectionManager.SELECT_ALL_MODE: { 564f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionModeHandler.setTitle(getSelectedString()); 565f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mRootPane.invalidate(); 566f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin break; 567f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 568f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 569f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 570f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 571f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onSelectionChange(Path path, boolean selected) { 572f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Utils.assertTrue(mActionMode != null); 573f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionModeHandler.setTitle(getSelectedString()); 574f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionModeHandler.updateSupportedOperation(path, selected); 575f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 576f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 577f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private void hideDetails() { 578f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mShowDetails = false; 5794105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsHelper.hide(); 580a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen mAlbumSetView.setSelectionDrawer(mGridDrawer); 581a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen mAlbumSetView.invalidate(); 582f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 583f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 584f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private void showDetails() { 585f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mShowDetails = true; 5864105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen if (mDetailsHelper == null) { 587bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang mHighlightDrawer = new HighlightDrawer(mActivity.getAndroidContext(), 588bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang mSelectionManager); 5894105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsHelper = new DetailsHelper(mActivity, mRootPane, mDetailsSource); 5904105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsHelper.setCloseListener(new CloseListener() { 591f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onClose() { 592f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin hideDetails(); 593f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 594f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin }); 595f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 596f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.setSelectionDrawer(mHighlightDrawer); 5974105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsHelper.show(); 598f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 599f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 60057cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan @Override 60157cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan public void onSyncDone(final MediaSet mediaSet, final int resultCode) { 60257cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan if (resultCode == MediaSet.SYNC_RESULT_ERROR) { 60357cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan Log.d(TAG, "onSyncDone: " + Utils.maskDebugInfo(mediaSet.getName()) + " result=" 60457cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan + resultCode); 60557cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan } 60657cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan ((Activity) mActivity).runOnUiThread(new Runnable() { 60757cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan @Override 60857cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan public void run() { 609fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin if (resultCode == MediaSet.SYNC_RESULT_SUCCESS) { 610fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin mInitialSynced = true; 611fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 61257cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan if (!mIsActive) return; 613fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin clearLoadingBit(BIT_LOADING_SYNC); 61457cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan if (resultCode == MediaSet.SYNC_RESULT_ERROR) { 61557cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan Toast.makeText((Context) mActivity, R.string.sync_album_set_error, 61657cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan Toast.LENGTH_LONG).show(); 61757cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan } 61857cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan } 61957cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan }); 62057cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan } 62157cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan 622f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private class MyLoadingListener implements LoadingListener { 623f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onLoadingStarted() { 624fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin setLoadingBit(BIT_LOADING_RELOAD); 625f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 626f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 627f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onLoadingFinished() { 628f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (!mIsActive) return; 629fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin clearLoadingBit(BIT_LOADING_RELOAD); 630f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 631f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 632f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 6334105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen private class MyDetailsSource implements DetailsHelper.DetailsSource { 634f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private int mIndex; 635f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public int size() { 636f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mAlbumSetDataAdapter.size(); 637f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 638f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 6394105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public int getIndex() { 6404105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen return mIndex; 6414105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 6424105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 643f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // If requested index is out of active window, suggest a valid index. 644f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // If there is no valid index available, return -1. 645f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public int findIndex(int indexHint) { 646f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mAlbumSetDataAdapter.isActive(indexHint)) { 647f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mIndex = indexHint; 648f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 649f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mIndex = mAlbumSetDataAdapter.getActiveStart(); 650f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (!mAlbumSetDataAdapter.isActive(mIndex)) { 651f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return -1; 652f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 653f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 654f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mIndex; 655f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 656f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 657f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public MediaDetails getDetails() { 658f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MediaObject item = mAlbumSetDataAdapter.getMediaSet(mIndex); 659f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (item != null) { 660f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mHighlightDrawer.setHighlightItem(item.getPath()); 661f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return item.getDetails(); 662f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 663f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return null; 664f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 665f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 666f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 667f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin} 668