AlbumSetPage.java revision 7260f6f74d465520e4497b23fe56f98abb0c15a2
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; 5557cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyanimport com.android.gallery3d.util.Future; 56fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Linimport com.android.gallery3d.util.GalleryUtils; 57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic class AlbumSetPage extends ActivityState implements 59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin SelectionManager.SelectionListener, GalleryActionBar.ClusterRunner, 6057cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan EyePosition.EyePositionListener, MediaSet.SyncListener { 61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @SuppressWarnings("unused") 62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static final String TAG = "AlbumSetPage"; 63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final String KEY_MEDIA_PATH = "media-path"; 65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final String KEY_SET_TITLE = "set-title"; 66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final String KEY_SET_SUBTITLE = "set-subtitle"; 67b5f8d908c5dd287052cd49eddaf1f82d858cca03Ray Chen public static final String KEY_SELECTED_CLUSTER_TYPE = "selected-cluster"; 686cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin 69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static final int DATA_CACHE_SIZE = 256; 70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static final int REQUEST_DO_ANIMATION = 1; 71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 72fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin private static final int BIT_LOADING_RELOAD = 1; 73fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin private static final int BIT_LOADING_SYNC = 2; 74fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin 75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private boolean mIsActive = false; 767260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin private SlotView mSlotView; 77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private AlbumSetView mAlbumSetView; 78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private MediaSet mMediaSet; 809c21268fa8d394cca6cab78dd023a52e0b147a6eRay Chen private String mTitle; 81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private String mSubtitle; 82b5f8d908c5dd287052cd49eddaf1f82d858cca03Ray Chen private boolean mShowClusterMenu; 838cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen private GalleryActionBar mActionBar; 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 116ff951a85c3c9015ef7ccd8902e69ce88360a0cb8Chih-Chung Chang protected void renderBackground(GLCanvas view) { 117ff951a85c3c9015ef7ccd8902e69ce88360a0cb8Chih-Chung Chang view.clearBuffer(); 118ff951a85c3c9015ef7ccd8902e69ce88360a0cb8Chih-Chung Chang } 119ff951a85c3c9015ef7ccd8902e69ce88360a0cb8Chih-Chung Chang 120ff951a85c3c9015ef7ccd8902e69ce88360a0cb8Chih-Chung Chang @Override 121f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void onLayout( 122f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin boolean changed, int left, int top, int right, int bottom) { 123f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mEyePosition.resetPosition(); 124f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 1258cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen int slotViewTop = mActionBar.getHeight(); 126f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int slotViewBottom = bottom - top; 127f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int slotViewRight = right - left; 128f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 129f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mShowDetails) { 1304105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsHelper.layout(left, slotViewTop, right, bottom); 131f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 132f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.setSelectionDrawer(mGridDrawer); 133f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 134f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 1357260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.layout(0, slotViewTop, slotViewRight, slotViewBottom); 1367260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin 13704ac045bf8da5082bbb0bdc9ea5f9c9b5b796ad0Yuli Huang // Reset position offset after the layout is changed. 138f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin PositionRepository.getInstance(mActivity).setOffset( 139f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 0, slotViewTop); 140f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 141f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 142f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 143f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void render(GLCanvas canvas) { 144f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin canvas.save(GLCanvas.SAVE_FLAG_MATRIX); 145f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin GalleryUtils.setViewPointMatrix(mMatrix, 146f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getWidth() / 2 + mX, getHeight() / 2 + mY, mZ); 147f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin canvas.multiplyMatrix(mMatrix, 0); 148f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.render(canvas); 149f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin canvas.restore(); 150f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 151f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin }; 152f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 153f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 154f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onEyePositionChanged(float x, float y, float z) { 155f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mRootPane.lockRendering(); 156f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mX = x; 157f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mY = y; 158f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mZ = z; 159f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mRootPane.unlockRendering(); 160f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mRootPane.invalidate(); 161f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 162f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 163f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 164f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onBackPressed() { 165f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mShowDetails) { 166f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin hideDetails(); 167f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else if (mSelectionManager.inSelectionMode()) { 168f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.leaveSelectionMode(); 169f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 1707260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin // TODO: fix this regression during refactoring 1717260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin // mSlotView.savePositions( 1727260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin // PositionRepository.getInstance(mActivity)); 173f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onBackPressed(); 174f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 175f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 176f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 177f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private void savePositions(int slotIndex, int center[]) { 178f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Rect offset = new Rect(); 1797260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mRootPane.getBoundsOf(mSlotView, offset); 1807260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin // TODO: fix this regression during refactoring 1817260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin // mSlotView.savePositions(PositionRepository.getInstance(mActivity)); 1827260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin Rect r = mSlotView.getSlotRect(slotIndex); 1837260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin int scrollX = mSlotView.getScrollX(); 1847260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin int scrollY = mSlotView.getScrollY(); 185f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin center[0] = offset.left + (r.left + r.right) / 2 - scrollX; 186f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin center[1] = offset.top + (r.top + r.bottom) / 2 - scrollY; 187f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 188f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 189f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onSingleTapUp(int slotIndex) { 190f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MediaSet targetSet = mAlbumSetDataAdapter.getMediaSet(slotIndex); 191f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (targetSet == null) return; // Content is dirty, we shall reload soon 192f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 193f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mShowDetails) { 194f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Path path = targetSet.getPath(); 195f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mHighlightDrawer.setHighlightItem(path); 1964105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsHelper.reloadDetails(slotIndex); 197f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else if (!mSelectionManager.inSelectionMode()) { 198f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Bundle data = new Bundle(getData()); 199f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String mediaPath = targetSet.getPath().toString(); 200f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int[] center = new int[2]; 201f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin savePositions(slotIndex, center); 202f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putIntArray(AlbumPage.KEY_SET_CENTER, center); 203f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mGetAlbum && targetSet.isLeafAlbum()) { 204f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Activity activity = (Activity) mActivity; 205f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Intent result = new Intent() 206f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin .putExtra(AlbumPicker.KEY_ALBUM_PATH, targetSet.getPath().toString()); 207f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin activity.setResult(Activity.RESULT_OK, result); 208f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin activity.finish(); 209f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else if (targetSet.getSubMediaSetCount() > 0) { 210f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putString(AlbumSetPage.KEY_MEDIA_PATH, mediaPath); 211f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActivity.getStateManager().startStateForResult( 212f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin AlbumSetPage.class, REQUEST_DO_ANIMATION, data); 213f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 214f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (!mGetContent && (targetSet.getSupportedOperations() 215f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin & MediaObject.SUPPORT_IMPORT) != 0) { 216f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putBoolean(AlbumPage.KEY_AUTO_SELECT_ALL, true); 217f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 218f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putString(AlbumPage.KEY_MEDIA_PATH, mediaPath); 219f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin boolean inAlbum = mActivity.getStateManager().hasStateClass(AlbumPage.class); 220f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // We only show cluster menu in the first AlbumPage in stack 221f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putBoolean(AlbumPage.KEY_SHOW_CLUSTER_MENU, !inAlbum); 222f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActivity.getStateManager().startStateForResult( 223f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin AlbumPage.class, REQUEST_DO_ANIMATION, data); 224f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 225f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 226f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.toggle(targetSet.getPath()); 2277260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.invalidate(); 228f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 229f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 230f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 231bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang private void onDown(int index) { 232bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang MediaSet set = mAlbumSetDataAdapter.getMediaSet(index); 233bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang Path path = (set == null) ? null : set.getPath(); 234bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang mSelectionManager.setPressedPath(path); 2357260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.invalidate(); 236bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang } 237bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang 238bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang private void onUp() { 239bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang mSelectionManager.setPressedPath(null); 2407260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.invalidate(); 241bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang } 242bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang 243f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onLongTap(int slotIndex) { 244f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mGetContent || mGetAlbum) return; 245f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mShowDetails) { 246f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin onSingleTapUp(slotIndex); 247f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 248f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MediaSet set = mAlbumSetDataAdapter.getMediaSet(slotIndex); 249f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (set == null) return; 250f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.setAutoLeaveSelectionMode(true); 251f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.toggle(set.getPath()); 2524105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsSource.findIndex(slotIndex); 2537260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.invalidate(); 254f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 255f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 256f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 257f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void doCluster(int clusterType) { 258f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String basePath = mMediaSet.getPath().toString(); 259f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String newPath = FilterUtils.switchClusterPath(basePath, clusterType); 260f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Bundle data = new Bundle(getData()); 261f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putString(AlbumSetPage.KEY_MEDIA_PATH, newPath); 262b5f8d908c5dd287052cd49eddaf1f82d858cca03Ray Chen data.putInt(KEY_SELECTED_CLUSTER_TYPE, clusterType); 263f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActivity.getStateManager().switchState(this, AlbumSetPage.class, data); 264f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 265f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 266f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 267f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onCreate(Bundle data, Bundle restoreState) { 268f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin initializeViews(); 269f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin initializeData(data); 2701f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chen Context context = mActivity.getAndroidContext(); 271f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGetContent = data.getBoolean(Gallery.KEY_GET_CONTENT, false); 272f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGetAlbum = data.getBoolean(Gallery.KEY_GET_ALBUM, false); 2739c21268fa8d394cca6cab78dd023a52e0b147a6eRay Chen mTitle = data.getString(AlbumSetPage.KEY_SET_TITLE); 274f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSubtitle = data.getString(AlbumSetPage.KEY_SET_SUBTITLE); 2751f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chen mEyePosition = new EyePosition(context, this); 2764105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsSource = new MyDetailsSource(); 2771f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chen mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 2788cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen mActionBar = mActivity.getGalleryActionBar(); 2798cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen mSelectedAction = data.getInt(AlbumSetPage.KEY_SELECTED_CLUSTER_TYPE, 2808cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen FilterUtils.CLUSTER_BY_ALBUM); 281f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin startTransition(); 282f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 283f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 284fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin private void clearLoadingBit(int loadingBit) { 285fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin mLoadingBits &= ~loadingBit; 286d05b0be120bb217b4f56add24a4b31bee92455b2Chih-Chung Chang if (mLoadingBits == 0 && mIsActive) { 287fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin GalleryUtils.setSpinnerVisibility((Activity) mActivity, false); 288fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin 289fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin // Only show toast when there's no album and we are going to finish 290fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin // the page. Toast is redundant if we are going to stay on this page. 291fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin if ((mAlbumSetDataAdapter.size() == 0)) { 292fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin Toast.makeText((Context) mActivity, 293fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin R.string.empty_album, Toast.LENGTH_LONG).show(); 294fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin if (mActivity.getStateManager().getStateCount() > 1) { 295fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin mActivity.getStateManager().finishState(this); 296fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 297fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 298fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 299fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 300fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin 301fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin private void setLoadingBit(int loadingBit) { 302d05b0be120bb217b4f56add24a4b31bee92455b2Chih-Chung Chang if (mLoadingBits == 0 && mIsActive) { 303fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin GalleryUtils.setSpinnerVisibility((Activity) mActivity, true); 304fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 305fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin mLoadingBits |= loadingBit; 306fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 307fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin 308f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 309f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onPause() { 310f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onPause(); 311f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mIsActive = false; 312f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionModeHandler.pause(); 313f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetDataAdapter.pause(); 314f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.pause(); 315f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mEyePosition.pause(); 3164105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen DetailsHelper.pause(); 317fe1625c46f8258be4cd5e5e1ba69b584c1fe1a49Ray Chen // Call disableClusterMenu to avoid receiving callback after paused. 318fe1625c46f8258be4cd5e5e1ba69b584c1fe1a49Ray Chen // Don't hide menu here otherwise the list menu will disappear earlier than 319fe1625c46f8258be4cd5e5e1ba69b584c1fe1a49Ray Chen // the action bar, which is janky and unwanted behavior. 3208cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen mActionBar.disableClusterMenu(false); 32157cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan if (mSyncTask != null) { 32257cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan mSyncTask.cancel(); 32357cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan mSyncTask = null; 324fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin clearLoadingBit(BIT_LOADING_SYNC); 32557cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan } 326d05b0be120bb217b4f56add24a4b31bee92455b2Chih-Chung Chang GalleryUtils.setSpinnerVisibility((Activity) mActivity, false); 327f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 328f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 329f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 330f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onResume() { 331f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onResume(); 332f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mIsActive = true; 333f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin setContentPane(mRootPane); 33404ac045bf8da5082bbb0bdc9ea5f9c9b5b796ad0Yuli Huang // Reset position offset for resuming. 33504ac045bf8da5082bbb0bdc9ea5f9c9b5b796ad0Yuli Huang PositionRepository.getInstance(mActivity).setOffset( 3367260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.bounds().left, mSlotView.bounds().top); 337fe49be45412f8d0f68343662318e73822da486c8Owen Lin 338fe49be45412f8d0f68343662318e73822da486c8Owen Lin // Set the reload bit here to prevent it exit this page in clearLoadingBit(). 339fe49be45412f8d0f68343662318e73822da486c8Owen Lin setLoadingBit(BIT_LOADING_RELOAD); 340f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetDataAdapter.resume(); 341fe49be45412f8d0f68343662318e73822da486c8Owen Lin 342f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.resume(); 343f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mEyePosition.resume(); 344f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionModeHandler.resume(); 3458cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen if (mShowClusterMenu) { 3468cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen mActionBar.enableClusterMenu(mSelectedAction, this); 347dbf4ba12afba115888493caa34937643257e2bb1Ray Chen } 348fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin if (!mInitialSynced) { 349fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin setLoadingBit(BIT_LOADING_SYNC); 350fe49be45412f8d0f68343662318e73822da486c8Owen Lin mSyncTask = mMediaSet.requestSync(AlbumSetPage.this); 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 368f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGridDrawer = new GridDrawer((Context) mActivity, mSelectionManager); 369f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Config.AlbumSetPage config = Config.AlbumSetPage.get((Context) mActivity); 3707260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView = new SlotView((Context) mActivity, config.slotViewSpec); 3717260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mAlbumSetView = new AlbumSetView( 3727260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mActivity, mGridDrawer, mSlotView, config.labelSpec); 3737260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.setSlotRenderer(mAlbumSetView); 3747260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.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 }); 4027260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mRootPane.addComponent(mSlotView); 403f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 404f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 405f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 406f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected boolean onCreateActionBar(Menu menu) { 407f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Activity activity = (Activity) mActivity; 408f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MenuInflater inflater = activity.getMenuInflater(); 409f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 410f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin final boolean inAlbum = mActivity.getStateManager().hasStateClass( 411f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin AlbumPage.class); 412f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 413f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mGetContent) { 414f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin inflater.inflate(R.menu.pickup, menu); 415f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int typeBits = mData.getInt( 416f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Gallery.KEY_TYPE_BITS, DataManager.INCLUDE_IMAGE); 417f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int id = R.string.select_image; 418f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if ((typeBits & DataManager.INCLUDE_VIDEO) != 0) { 419f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin id = (typeBits & DataManager.INCLUDE_IMAGE) == 0 420f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ? R.string.select_video 421f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin : R.string.select_item; 422f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 4238cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen mActionBar.setTitle(id); 424f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else if (mGetAlbum) { 425f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin inflater.inflate(R.menu.pickup, menu); 4268cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen mActionBar.setTitle(R.string.select_album); 427f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 428b5f8d908c5dd287052cd49eddaf1f82d858cca03Ray Chen mShowClusterMenu = !inAlbum; 429f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin inflater.inflate(R.menu.albumset, menu); 430f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MenuItem selectItem = menu.findItem(R.id.action_select); 431f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 432f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (selectItem != null) { 433f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin boolean selectAlbums = !inAlbum && 4348cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen mActionBar.getClusterTypeAction() == FilterUtils.CLUSTER_BY_ALBUM; 435f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (selectAlbums) { 436f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin selectItem.setTitle(R.string.select_album); 437f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 438f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin selectItem.setTitle(R.string.select_group); 439f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 440f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 441f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 4428cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen FilterUtils.setupMenuItems(mActionBar, mMediaSet.getPath(), false); 443f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MenuItem switchCamera = menu.findItem(R.id.action_camera); 444f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (switchCamera != null) { 445f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin switchCamera.setVisible(GalleryUtils.isCameraAvailable(activity)); 446f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 447f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 4488cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen mActionBar.setTitle(mTitle); 4498cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen mActionBar.setSubtitle(mSubtitle); 450f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 451f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 452f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 453f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 454f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 455f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected boolean onItemSelected(MenuItem item) { 456f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Activity activity = (Activity) mActivity; 457f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin switch (item.getItemId()) { 458bd8e025f1bb39b2be236b183ea8e78f93b308ad1Ray Chen case R.id.action_cancel: 459bd8e025f1bb39b2be236b183ea8e78f93b308ad1Ray Chen activity.setResult(Activity.RESULT_CANCELED); 460bd8e025f1bb39b2be236b183ea8e78f93b308ad1Ray Chen activity.finish(); 461bd8e025f1bb39b2be236b183ea8e78f93b308ad1Ray Chen return true; 462f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case R.id.action_select: 463f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.setAutoLeaveSelectionMode(false); 464f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mSelectionManager.enterSelectionMode(); 465f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 466f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case R.id.action_details: 467f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mAlbumSetDataAdapter.size() != 0) { 468f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mShowDetails) { 469f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin hideDetails(); 470f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 471f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin showDetails(); 472f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 473f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 474f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Toast.makeText(activity, 475f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin activity.getText(R.string.no_albums_alert), 476f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Toast.LENGTH_SHORT).show(); 477f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 478f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 479f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case R.id.action_camera: { 480f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA) 481f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 482f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin | Intent.FLAG_ACTIVITY_NEW_TASK); 483f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin activity.startActivity(intent); 484f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 485f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 486f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case R.id.action_manage_offline: { 4876cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin Bundle data = new Bundle(); 4886cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin String mediaPath = mActivity.getDataManager().getTopSetPath( 4896cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin DataManager.INCLUDE_ALL); 4906cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin data.putString(AlbumSetPage.KEY_MEDIA_PATH, mediaPath); 4916cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin mActivity.getStateManager().startState(ManageCachePage.class, data); 492f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 493f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 494f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case R.id.action_sync_picasa_albums: { 495f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin PicasaSource.requestSync(activity); 496f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 497f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 498f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case R.id.action_settings: { 499f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin activity.startActivity(new Intent(activity, GallerySettings.class)); 500f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return true; 501f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 502f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin default: 503f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return false; 504f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 505f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 506f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 507f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 508f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void onStateResult(int requestCode, int resultCode, Intent data) { 509f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin switch (requestCode) { 510f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case REQUEST_DO_ANIMATION: { 511f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin startTransition(); 512f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 513f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 514f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 515f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 516f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private void startTransition() { 517f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin final PositionRepository repository = 518f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin PositionRepository.getInstance(mActivity); 5197260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.startTransition(new PositionProvider() { 520dbf4ba12afba115888493caa34937643257e2bb1Ray Chen private final Position mTempPosition = new Position(); 52195018d10aa68ecbea7ebce434733341a642510deChih-Chung Chang public Position getPosition(int identity, Position target) { 522f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Position p = repository.get(identity); 523f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (p == null) { 524f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin p = mTempPosition; 525f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin p.set(target.x, target.y, 128, target.theta, 1); 526f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 527f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return p; 528f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 529f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin }); 530f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 531f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 532f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private String getSelectedString() { 533f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int count = mSelectionManager.getSelectedCount(); 5348cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen int action = mActionBar.getClusterTypeAction(); 535f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int string = action == FilterUtils.CLUSTER_BY_ALBUM 536f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ? R.plurals.number_of_albums_selected 537f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin : R.plurals.number_of_groups_selected; 538f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String format = mActivity.getResources().getQuantityString(string, count); 539f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return String.format(format, count); 540f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 541f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 542f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onSelectionModeChange(int mode) { 543f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 544f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin switch (mode) { 545f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case SelectionManager.ENTER_SELECTION_MODE: { 5468cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen mActionBar.disableClusterMenu(true); 547f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionMode = mActionModeHandler.startActionMode(); 5481f4e6d14bba7290ea0268fbde28ffc664d4f7004Ray Chen mVibrator.vibrate(100); 549f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin break; 550f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 551f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case SelectionManager.LEAVE_SELECTION_MODE: { 552f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionMode.finish(); 5539c21268fa8d394cca6cab78dd023a52e0b147a6eRay Chen if (mShowClusterMenu) { 5548cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen mActionBar.enableClusterMenu(mSelectedAction, this); 5559c21268fa8d394cca6cab78dd023a52e0b147a6eRay Chen } 556f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mRootPane.invalidate(); 557f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin break; 558f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 559f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin case SelectionManager.SELECT_ALL_MODE: { 560f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionModeHandler.setTitle(getSelectedString()); 561f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mRootPane.invalidate(); 562f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin break; 563f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 564f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 565f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 566f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 567f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onSelectionChange(Path path, boolean selected) { 568f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Utils.assertTrue(mActionMode != null); 569f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionModeHandler.setTitle(getSelectedString()); 570f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mActionModeHandler.updateSupportedOperation(path, selected); 571f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 572f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 573f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private void hideDetails() { 574f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mShowDetails = false; 5754105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsHelper.hide(); 576a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen mAlbumSetView.setSelectionDrawer(mGridDrawer); 5777260f6f74d465520e4497b23fe56f98abb0c15a2Owen Lin mSlotView.invalidate(); 578f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 579f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 580f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private void showDetails() { 581f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mShowDetails = true; 5824105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen if (mDetailsHelper == null) { 583bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang mHighlightDrawer = new HighlightDrawer(mActivity.getAndroidContext(), 584bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang mSelectionManager); 5854105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsHelper = new DetailsHelper(mActivity, mRootPane, mDetailsSource); 5864105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsHelper.setCloseListener(new CloseListener() { 587f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onClose() { 588f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin hideDetails(); 589f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 590f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin }); 591f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 592f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlbumSetView.setSelectionDrawer(mHighlightDrawer); 5934105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetailsHelper.show(); 594f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 595f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 59657cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan @Override 59757cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan public void onSyncDone(final MediaSet mediaSet, final int resultCode) { 59857cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan if (resultCode == MediaSet.SYNC_RESULT_ERROR) { 59957cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan Log.d(TAG, "onSyncDone: " + Utils.maskDebugInfo(mediaSet.getName()) + " result=" 60057cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan + resultCode); 60157cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan } 60257cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan ((Activity) mActivity).runOnUiThread(new Runnable() { 60357cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan @Override 60457cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan public void run() { 605fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin if (resultCode == MediaSet.SYNC_RESULT_SUCCESS) { 606fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin mInitialSynced = true; 607fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin } 608fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin clearLoadingBit(BIT_LOADING_SYNC); 609d05b0be120bb217b4f56add24a4b31bee92455b2Chih-Chung Chang if (resultCode == MediaSet.SYNC_RESULT_ERROR && mIsActive) { 61057cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan Toast.makeText((Context) mActivity, R.string.sync_album_set_error, 61157cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan Toast.LENGTH_LONG).show(); 61257cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan } 61357cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan } 61457cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan }); 61557cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan } 61657cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan 617f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private class MyLoadingListener implements LoadingListener { 618f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onLoadingStarted() { 619fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin setLoadingBit(BIT_LOADING_RELOAD); 620f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 621f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 622f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onLoadingFinished() { 623fbdd338d83596ba545a8a7c8105d2ad7b5df56e6Owen Lin clearLoadingBit(BIT_LOADING_RELOAD); 624f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 625f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 626f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 6274105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen private class MyDetailsSource implements DetailsHelper.DetailsSource { 628f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private int mIndex; 629f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public int size() { 630f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mAlbumSetDataAdapter.size(); 631f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 632f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 6334105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public int getIndex() { 6344105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen return mIndex; 6354105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 6364105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 637f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // If requested index is out of active window, suggest a valid index. 638f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // If there is no valid index available, return -1. 639f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public int findIndex(int indexHint) { 640f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mAlbumSetDataAdapter.isActive(indexHint)) { 641f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mIndex = indexHint; 642f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 643f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mIndex = mAlbumSetDataAdapter.getActiveStart(); 644f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (!mAlbumSetDataAdapter.isActive(mIndex)) { 645f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return -1; 646f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 647f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 648f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mIndex; 649f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 650f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 651f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public MediaDetails getDetails() { 652f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MediaObject item = mAlbumSetDataAdapter.getMediaSet(mIndex); 653f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (item != null) { 654f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mHighlightDrawer.setHighlightItem(item.getPath()); 655f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return item.getDetails(); 656f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 657f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return null; 658f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 659f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 660f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 661f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin} 662