blob: ec658961ffaa53603918d827b95b7aac67841277 [file] [log] [blame]
Owen Linf9a0a432011-08-17 22:07:43 +08001/*
kaiyiz99cfa4d2014-09-03 16:02:55 +08002 * Copyright (c) 2014, The Linux Foundation. All rights reserved.
3 * Not a Contribution.
4 *
Owen Linf9a0a432011-08-17 22:07:43 +08005 * Copyright (C) 2010 The Android Open Source Project
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19
20package com.android.gallery3d.app;
21
Ray Chen1f4e6d12011-09-27 15:48:08 +080022import android.app.Activity;
23import android.content.Context;
Owen Lin28cb4162012-08-29 11:53:10 +080024import android.content.Intent;
Ravi Banuri49f14dd2015-10-21 15:54:59 +053025import android.graphics.Color;
Ray Chen1f4e6d12011-09-27 15:48:08 +080026import android.graphics.Rect;
kaiyiz99cfa4d2014-09-03 16:02:55 +080027import android.net.Uri;
Ray Chen1f4e6d12011-09-27 15:48:08 +080028import android.os.Bundle;
Yuli Huang90fe70f2012-04-24 15:20:28 +080029import android.os.Handler;
30import android.os.Message;
Ravi Banuri49f14dd2015-10-21 15:54:59 +053031import android.util.TypedValue;
32import android.view.Gravity;
Bobby Georgescubcb42782012-10-31 16:33:56 -070033import android.view.HapticFeedbackConstants;
John Reck2abaaf72012-12-12 13:43:43 -080034import android.view.Menu;
35import android.view.MenuInflater;
36import android.view.MenuItem;
Bobby Georgescud208e122012-09-14 13:54:54 -070037import android.view.View;
38import android.view.View.OnClickListener;
39import android.widget.Button;
40import android.widget.RelativeLayout;
Ravi Banuri49f14dd2015-10-21 15:54:59 +053041import android.widget.TextView;
Ray Chen1f4e6d12011-09-27 15:48:08 +080042import android.widget.Toast;
43
Likai Dingc83b5b72016-05-25 14:48:41 +080044import org.codeaurora.gallery.R;
Owen Linf9a0a432011-08-17 22:07:43 +080045import com.android.gallery3d.common.Utils;
46import com.android.gallery3d.data.DataManager;
47import com.android.gallery3d.data.MediaDetails;
Hung-ying Tyan27565de2012-10-04 18:49:01 +080048import com.android.gallery3d.data.MediaItem;
Owen Linf9a0a432011-08-17 22:07:43 +080049import com.android.gallery3d.data.MediaObject;
50import com.android.gallery3d.data.MediaSet;
51import com.android.gallery3d.data.Path;
John Recka4eae1a2012-12-11 14:42:27 -080052import com.android.gallery3d.glrenderer.FadeTexture;
53import com.android.gallery3d.glrenderer.GLCanvas;
Owen Linf9a0a432011-08-17 22:07:43 +080054import com.android.gallery3d.picasasource.PicasaSource;
55import com.android.gallery3d.settings.GallerySettings;
56import com.android.gallery3d.ui.ActionModeHandler;
57import com.android.gallery3d.ui.ActionModeHandler.ActionModeListener;
Owen Linc3d8ac32012-04-06 16:46:32 +080058import com.android.gallery3d.ui.AlbumSetSlotRenderer;
Ray Chen4105e222011-08-24 11:40:04 +080059import com.android.gallery3d.ui.DetailsHelper;
60import com.android.gallery3d.ui.DetailsHelper.CloseListener;
Owen Lin71632ac2012-04-05 12:02:01 +080061import com.android.gallery3d.ui.GLRoot;
Owen Linf9a0a432011-08-17 22:07:43 +080062import com.android.gallery3d.ui.GLView;
Owen Linf9a0a432011-08-17 22:07:43 +080063import com.android.gallery3d.ui.SelectionManager;
64import com.android.gallery3d.ui.SlotView;
Yuli Huang90fe70f2012-04-24 15:20:28 +080065import com.android.gallery3d.ui.SynchronizedHandler;
Hung-ying Tyan57cbaa12011-09-30 14:42:50 +080066import com.android.gallery3d.util.Future;
Owen Linfbdd3382011-11-08 19:05:56 +080067import com.android.gallery3d.util.GalleryUtils;
Ray Chendaf88fe2012-05-17 16:37:13 +080068import com.android.gallery3d.util.HelpUtils;
Owen Linf9a0a432011-08-17 22:07:43 +080069
Bobby Georgescu09995292012-09-09 15:15:45 -070070import java.lang.ref.WeakReference;
Hung-ying Tyan27565de2012-10-04 18:49:01 +080071import java.util.ArrayList;
Bobby Georgescu09995292012-09-09 15:15:45 -070072
Owen Linf9a0a432011-08-17 22:07:43 +080073public class AlbumSetPage extends ActivityState implements
74 SelectionManager.SelectionListener, GalleryActionBar.ClusterRunner,
Hung-ying Tyan57cbaa12011-09-30 14:42:50 +080075 EyePosition.EyePositionListener, MediaSet.SyncListener {
Owen Linf9a0a432011-08-17 22:07:43 +080076 @SuppressWarnings("unused")
77 private static final String TAG = "AlbumSetPage";
78
Yuli Huang90fe70f2012-04-24 15:20:28 +080079 private static final int MSG_PICK_ALBUM = 1;
80
Owen Linf9a0a432011-08-17 22:07:43 +080081 public static final String KEY_MEDIA_PATH = "media-path";
82 public static final String KEY_SET_TITLE = "set-title";
83 public static final String KEY_SET_SUBTITLE = "set-subtitle";
Ray Chenb5f8d902011-09-13 18:35:28 +080084 public static final String KEY_SELECTED_CLUSTER_TYPE = "selected-cluster";
Owen Lin6cf80742011-08-28 10:50:21 +080085
Owen Linf9a0a432011-08-17 22:07:43 +080086 private static final int DATA_CACHE_SIZE = 256;
87 private static final int REQUEST_DO_ANIMATION = 1;
Owen Linf9a0a432011-08-17 22:07:43 +080088
Owen Linfbdd3382011-11-08 19:05:56 +080089 private static final int BIT_LOADING_RELOAD = 1;
90 private static final int BIT_LOADING_SYNC = 2;
91
Owen Linf9a0a432011-08-17 22:07:43 +080092 private boolean mIsActive = false;
Owen Lin7260f6f2012-03-22 14:14:40 +080093 private SlotView mSlotView;
Owen Linc3d8ac32012-04-06 16:46:32 +080094 private AlbumSetSlotRenderer mAlbumSetView;
Bobby Georgescuf0c89372012-08-13 14:27:08 -070095 private Config.AlbumSetPage mConfig;
Owen Linf9a0a432011-08-17 22:07:43 +080096
97 private MediaSet mMediaSet;
Ray Chen9c212682011-10-26 11:36:55 +080098 private String mTitle;
Owen Linf9a0a432011-08-17 22:07:43 +080099 private String mSubtitle;
Ray Chenb5f8d902011-09-13 18:35:28 +0800100 private boolean mShowClusterMenu;
Ray Chen8cab3e82012-03-20 16:32:57 +0800101 private GalleryActionBar mActionBar;
Ray Chenb5f8d902011-09-13 18:35:28 +0800102 private int mSelectedAction;
Owen Linf9a0a432011-08-17 22:07:43 +0800103
104 protected SelectionManager mSelectionManager;
Owen Linc3d8ac32012-04-06 16:46:32 +0800105 private AlbumSetDataLoader mAlbumSetDataAdapter;
Owen Linf9a0a432011-08-17 22:07:43 +0800106
107 private boolean mGetContent;
108 private boolean mGetAlbum;
Owen Linf9a0a432011-08-17 22:07:43 +0800109 private ActionModeHandler mActionModeHandler;
Ray Chen4105e222011-08-24 11:40:04 +0800110 private DetailsHelper mDetailsHelper;
111 private MyDetailsSource mDetailsSource;
Owen Linf9a0a432011-08-17 22:07:43 +0800112 private boolean mShowDetails;
113 private EyePosition mEyePosition;
Yuli Huang90fe70f2012-04-24 15:20:28 +0800114 private Handler mHandler;
Owen Linf9a0a432011-08-17 22:07:43 +0800115
116 // The eyes' position of the user, the origin is at the center of the
117 // device and the unit is in pixels.
118 private float mX;
119 private float mY;
120 private float mZ;
121
Hung-ying Tyan57cbaa12011-09-30 14:42:50 +0800122 private Future<Integer> mSyncTask = null;
123
Owen Linfbdd3382011-11-08 19:05:56 +0800124 private int mLoadingBits = 0;
125 private boolean mInitialSynced = false;
126
Bobby Georgescud208e122012-09-14 13:54:54 -0700127 private Button mCameraButton;
128 private boolean mShowedEmptyToastForSelf = false;
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530129 private TextView tvEmptyAlbum;
Bobby Georgescud208e122012-09-14 13:54:54 -0700130
Bobby Georgescu915c2c52012-08-23 13:05:53 -0700131 @Override
132 protected int getBackgroundColorId() {
133 return R.color.albumset_background;
134 }
135
Ray Chendbf4ba12011-10-04 15:19:44 +0800136 private final GLView mRootPane = new GLView() {
137 private final float mMatrix[] = new float[16];
Owen Linf9a0a432011-08-17 22:07:43 +0800138
139 @Override
140 protected void onLayout(
141 boolean changed, int left, int top, int right, int bottom) {
Owen Linf9a0a432011-08-17 22:07:43 +0800142 mEyePosition.resetPosition();
143
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530144 int paddingLeft;
145 int paddingBottom;
146 int paddingRight;
147 int paddingTop;
148
149 if (right - left > bottom - top) {
150 paddingTop = mConfig.paddingTopLand;
151 paddingBottom = mConfig.paddingBottomLand;
152 paddingRight = mConfig.paddingRightLand;
153 paddingLeft = mConfig.paddingLeftLand;
154 }
155 else
156 {
157 paddingTop = mConfig.paddingTop;
158 paddingBottom = mConfig.paddingBottom;
159 paddingRight = mConfig.paddingRight;
160 paddingLeft = mConfig.paddingLeft;
161 }
162
Chao Zhangfea8b882016-03-30 10:51:46 +0800163 int slotViewTop;
164 android.widget.Toolbar toolbar = mActivity.getToolbar();
165 if (toolbar != null) {
166 slotViewTop = toolbar.getLayoutParams().height + paddingTop;
167 } else {
168 slotViewTop = mActivity.getGalleryActionBar().getHeight() + paddingTop;
169 }
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530170 int slotViewBottom = bottom - top - paddingBottom;
171 int slotViewRight = right - left - paddingRight;
172 int slotViewLeft = paddingLeft ;
173
Owen Linf9a0a432011-08-17 22:07:43 +0800174
175 if (mShowDetails) {
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530176 mDetailsHelper.layout(slotViewLeft, slotViewTop, slotViewRight, slotViewBottom);
Owen Linf9a0a432011-08-17 22:07:43 +0800177 } else {
Owen Lin31cac302012-04-04 10:24:08 +0800178 mAlbumSetView.setHighlightItemPath(null);
Owen Linf9a0a432011-08-17 22:07:43 +0800179 }
180
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530181 mSlotView.layout(slotViewLeft, slotViewTop, slotViewRight, slotViewBottom);
Owen Linf9a0a432011-08-17 22:07:43 +0800182 }
183
184 @Override
185 protected void render(GLCanvas canvas) {
186 canvas.save(GLCanvas.SAVE_FLAG_MATRIX);
187 GalleryUtils.setViewPointMatrix(mMatrix,
188 getWidth() / 2 + mX, getHeight() / 2 + mY, mZ);
189 canvas.multiplyMatrix(mMatrix, 0);
190 super.render(canvas);
191 canvas.restore();
192 }
193 };
194
195 @Override
196 public void onEyePositionChanged(float x, float y, float z) {
197 mRootPane.lockRendering();
198 mX = x;
199 mY = y;
200 mZ = z;
201 mRootPane.unlockRendering();
202 mRootPane.invalidate();
203 }
204
205 @Override
206 public void onBackPressed() {
207 if (mShowDetails) {
208 hideDetails();
209 } else if (mSelectionManager.inSelectionMode()) {
210 mSelectionManager.leaveSelectionMode();
211 } else {
Owen Linf9a0a432011-08-17 22:07:43 +0800212 super.onBackPressed();
213 }
214 }
215
Owen Lin2341c192012-03-23 14:59:14 +0800216 private void getSlotCenter(int slotIndex, int center[]) {
Owen Linf9a0a432011-08-17 22:07:43 +0800217 Rect offset = new Rect();
Owen Lin7260f6f2012-03-22 14:14:40 +0800218 mRootPane.getBoundsOf(mSlotView, offset);
Owen Lin7260f6f2012-03-22 14:14:40 +0800219 Rect r = mSlotView.getSlotRect(slotIndex);
220 int scrollX = mSlotView.getScrollX();
221 int scrollY = mSlotView.getScrollY();
Owen Linf9a0a432011-08-17 22:07:43 +0800222 center[0] = offset.left + (r.left + r.right) / 2 - scrollX;
223 center[1] = offset.top + (r.top + r.bottom) / 2 - scrollY;
224 }
225
226 public void onSingleTapUp(int slotIndex) {
Owen Lincf063972012-04-13 12:33:29 +0800227 if (!mIsActive) return;
Owen Linf9a0a432011-08-17 22:07:43 +0800228
Yuli Huang90fe70f2012-04-24 15:20:28 +0800229 if (mSelectionManager.inSelectionMode()) {
230 MediaSet targetSet = mAlbumSetDataAdapter.getMediaSet(slotIndex);
231 if (targetSet == null) return; // Content is dirty, we shall reload soon
Owen Linf9a0a432011-08-17 22:07:43 +0800232 mSelectionManager.toggle(targetSet.getPath());
Owen Lin7260f6f2012-03-22 14:14:40 +0800233 mSlotView.invalidate();
Yuli Huang90fe70f2012-04-24 15:20:28 +0800234 } else {
235 // Show pressed-up animation for the single-tap.
236 mAlbumSetView.setPressedIndex(slotIndex);
237 mAlbumSetView.setPressedUp();
238 mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_PICK_ALBUM, slotIndex, 0),
239 FadeTexture.DURATION);
240 }
241 }
242
Bobby Georgescu7eea4d32012-09-06 17:14:02 -0700243 private static boolean albumShouldOpenInFilmstrip(MediaSet album) {
Bobby Georgescub265ebb2012-09-12 16:37:53 -0700244 int itemCount = album.getMediaItemCount();
Hung-ying Tyan27565de2012-10-04 18:49:01 +0800245 ArrayList<MediaItem> list = (itemCount == 1) ? album.getMediaItem(0, 1) : null;
Bobby Georgescu7a84c572012-10-08 19:26:54 -0700246 // open in film strip only if there's one item in the album and the item exists
247 return (list != null && !list.isEmpty());
Bobby Georgescu7eea4d32012-09-06 17:14:02 -0700248 }
249
Bobby Georgescu09995292012-09-09 15:15:45 -0700250 WeakReference<Toast> mEmptyAlbumToast = null;
251
252 private void showEmptyAlbumToast(int toastLength) {
c_yongga5a7bd5d2016-01-05 17:26:44 +0800253 //CRs-Fixed:951767 java.lang.NullPointerException: Attempt to invoke virtual method
254 // 'void android.widget.RelativeLayout.addView(android.view.View
255 RelativeLayout galleryRoot = (RelativeLayout) ((Activity) mActivity)
256 .findViewById(R.id.gallery_root);
257 if (galleryRoot == null) return ;
yonggab7e00552016-01-11 18:39:11 +0800258 if (tvEmptyAlbum == null) {
259 tvEmptyAlbum = new TextView(mActivity);
260 tvEmptyAlbum.setText(R.string.tvEmptyAlbum);
261 tvEmptyAlbum.setTextColor(Color.parseColor("#8A000000"));
262 tvEmptyAlbum.setGravity(Gravity.CENTER);
263 tvEmptyAlbum.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
264 RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
265 RelativeLayout.LayoutParams.WRAP_CONTENT,
266 RelativeLayout.LayoutParams.WRAP_CONTENT);
267 lp.addRule(RelativeLayout.CENTER_IN_PARENT);
268 galleryRoot.addView(tvEmptyAlbum, lp);
269 }
270 tvEmptyAlbum.setVisibility(View.VISIBLE);
Bobby Georgescu09995292012-09-09 15:15:45 -0700271 }
272
273 private void hideEmptyAlbumToast() {
yonggab7e00552016-01-11 18:39:11 +0800274 if (tvEmptyAlbum != null) {
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530275 tvEmptyAlbum.setVisibility(View.GONE);
Bobby Georgescu09995292012-09-09 15:15:45 -0700276 }
277 }
278
Yuli Huang90fe70f2012-04-24 15:20:28 +0800279 private void pickAlbum(int slotIndex) {
280 if (!mIsActive) return;
281
282 MediaSet targetSet = mAlbumSetDataAdapter.getMediaSet(slotIndex);
283 if (targetSet == null) return; // Content is dirty, we shall reload soon
Bobby Georgescu09995292012-09-09 15:15:45 -0700284 if (targetSet.getTotalMediaItemCount() == 0) {
285 showEmptyAlbumToast(Toast.LENGTH_SHORT);
286 return;
287 }
288 hideEmptyAlbumToast();
289
Yuli Huang90fe70f2012-04-24 15:20:28 +0800290 String mediaPath = targetSet.getPath().toString();
291
292 Bundle data = new Bundle(getData());
293 int[] center = new int[2];
294 getSlotCenter(slotIndex, center);
295 data.putIntArray(AlbumPage.KEY_SET_CENTER, center);
296 if (mGetAlbum && targetSet.isLeafAlbum()) {
Owen Linb21b8e52012-08-24 12:25:57 +0800297 Activity activity = mActivity;
Yuli Huang90fe70f2012-04-24 15:20:28 +0800298 Intent result = new Intent()
299 .putExtra(AlbumPicker.KEY_ALBUM_PATH, targetSet.getPath().toString());
300 activity.setResult(Activity.RESULT_OK, result);
301 activity.finish();
302 } else if (targetSet.getSubMediaSetCount() > 0) {
303 data.putString(AlbumSetPage.KEY_MEDIA_PATH, mediaPath);
304 mActivity.getStateManager().startStateForResult(
305 AlbumSetPage.class, REQUEST_DO_ANIMATION, data);
306 } else {
Bobby Georgescud3aac522012-12-26 00:52:28 -0800307 if (!mGetContent && albumShouldOpenInFilmstrip(targetSet)) {
Bobby Georgescu6b64c062012-09-13 22:24:29 -0700308 data.putParcelable(PhotoPage.KEY_OPEN_ANIMATION_RECT,
309 mSlotView.getSlotRect(slotIndex, mRootPane));
Bobby Georgescu7eea4d32012-09-06 17:14:02 -0700310 data.putInt(PhotoPage.KEY_INDEX_HINT, 0);
311 data.putString(PhotoPage.KEY_MEDIA_SET_PATH,
312 mediaPath);
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530313 data.putBoolean(PhotoPage.KEY_START_IN_FILMSTRIP, false);
Bobby Georgescu45f089d2012-10-02 13:30:09 -0700314 data.putBoolean(PhotoPage.KEY_IN_CAMERA_ROLL, targetSet.isCameraRoll());
Bobby Georgescu7eea4d32012-09-06 17:14:02 -0700315 mActivity.getStateManager().startStateForResult(
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530316 SinglePhotoPage.class, AlbumPage.REQUEST_PHOTO, data);
Bobby Georgescu7eea4d32012-09-06 17:14:02 -0700317 return;
Yuli Huang90fe70f2012-04-24 15:20:28 +0800318 }
319 data.putString(AlbumPage.KEY_MEDIA_PATH, mediaPath);
Bobby Georgescu7eea4d32012-09-06 17:14:02 -0700320
Yuli Huang90fe70f2012-04-24 15:20:28 +0800321 // We only show cluster menu in the first AlbumPage in stack
Bobby Georgescu7eea4d32012-09-06 17:14:02 -0700322 boolean inAlbum = mActivity.getStateManager().hasStateClass(AlbumPage.class);
Yuli Huang90fe70f2012-04-24 15:20:28 +0800323 data.putBoolean(AlbumPage.KEY_SHOW_CLUSTER_MENU, !inAlbum);
324 mActivity.getStateManager().startStateForResult(
325 AlbumPage.class, REQUEST_DO_ANIMATION, data);
Owen Linf9a0a432011-08-17 22:07:43 +0800326 }
327 }
328
Chih-Chung Changbc215412011-09-19 11:09:39 +0800329 private void onDown(int index) {
Owen Lin31cac302012-04-04 10:24:08 +0800330 mAlbumSetView.setPressedIndex(index);
Chih-Chung Changbc215412011-09-19 11:09:39 +0800331 }
332
Yuli Huang90fe70f2012-04-24 15:20:28 +0800333 private void onUp(boolean followedByLongPress) {
334 if (followedByLongPress) {
335 // Avoid showing press-up animations for long-press.
336 mAlbumSetView.setPressedIndex(-1);
337 } else {
338 mAlbumSetView.setPressedUp();
339 }
Chih-Chung Changbc215412011-09-19 11:09:39 +0800340 }
341
Owen Linf9a0a432011-08-17 22:07:43 +0800342 public void onLongTap(int slotIndex) {
343 if (mGetContent || mGetAlbum) return;
Yuli Huang90fe70f2012-04-24 15:20:28 +0800344 MediaSet set = mAlbumSetDataAdapter.getMediaSet(slotIndex);
345 if (set == null) return;
346 mSelectionManager.setAutoLeaveSelectionMode(true);
347 mSelectionManager.toggle(set.getPath());
348 mSlotView.invalidate();
Owen Linf9a0a432011-08-17 22:07:43 +0800349 }
350
Owen Lin2341c192012-03-23 14:59:14 +0800351 @Override
Owen Linf9a0a432011-08-17 22:07:43 +0800352 public void doCluster(int clusterType) {
353 String basePath = mMediaSet.getPath().toString();
354 String newPath = FilterUtils.switchClusterPath(basePath, clusterType);
355 Bundle data = new Bundle(getData());
356 data.putString(AlbumSetPage.KEY_MEDIA_PATH, newPath);
Ray Chenb5f8d902011-09-13 18:35:28 +0800357 data.putInt(KEY_SELECTED_CLUSTER_TYPE, clusterType);
Owen Linf9a0a432011-08-17 22:07:43 +0800358 mActivity.getStateManager().switchState(this, AlbumSetPage.class, data);
359 }
360
Owen Linf9a0a432011-08-17 22:07:43 +0800361 @Override
362 public void onCreate(Bundle data, Bundle restoreState) {
Bobby Georgescu45c56f22012-08-26 23:47:19 -0700363 super.onCreate(data, restoreState);
Owen Linf9a0a432011-08-17 22:07:43 +0800364 initializeViews();
365 initializeData(data);
Ray Chen1f4e6d12011-09-27 15:48:08 +0800366 Context context = mActivity.getAndroidContext();
Mangesh Ghiware06c02762013-09-11 15:59:59 -0700367 mGetContent = data.getBoolean(GalleryActivity.KEY_GET_CONTENT, false);
368 mGetAlbum = data.getBoolean(GalleryActivity.KEY_GET_ALBUM, false);
Ray Chen9c212682011-10-26 11:36:55 +0800369 mTitle = data.getString(AlbumSetPage.KEY_SET_TITLE);
Owen Linf9a0a432011-08-17 22:07:43 +0800370 mSubtitle = data.getString(AlbumSetPage.KEY_SET_SUBTITLE);
Ray Chen1f4e6d12011-09-27 15:48:08 +0800371 mEyePosition = new EyePosition(context, this);
Ray Chen4105e222011-08-24 11:40:04 +0800372 mDetailsSource = new MyDetailsSource();
Ray Chen8cab3e82012-03-20 16:32:57 +0800373 mActionBar = mActivity.getGalleryActionBar();
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530374 //mSelectedAction = data.getInt(AlbumSetPage.KEY_SELECTED_CLUSTER_TYPE,
375 // FilterUtils.CLUSTER_BY_ALBUM);
Yuli Huang90fe70f2012-04-24 15:20:28 +0800376 mHandler = new SynchronizedHandler(mActivity.getGLRoot()) {
377 @Override
378 public void handleMessage(Message message) {
379 switch (message.what) {
380 case MSG_PICK_ALBUM: {
381 pickAlbum(message.arg1);
382 break;
383 }
384 default: throw new AssertionError(message.what);
385 }
386 }
387 };
Owen Linf9a0a432011-08-17 22:07:43 +0800388 }
389
Bobby Georgescud208e122012-09-14 13:54:54 -0700390 @Override
391 public void onDestroy() {
Bobby Georgescud208e122012-09-14 13:54:54 -0700392 super.onDestroy();
Bobby Georgescua2d0d342012-12-03 13:56:00 -0800393 cleanupCameraButton();
394 mActionModeHandler.destroy();
Bobby Georgescud208e122012-09-14 13:54:54 -0700395 }
396
397 private boolean setupCameraButton() {
Bobby Georgescu4f69a052012-10-12 18:00:51 -0700398 if (!GalleryUtils.isCameraAvailable(mActivity)) return false;
Bobby Georgescud208e122012-09-14 13:54:54 -0700399 RelativeLayout galleryRoot = (RelativeLayout) ((Activity) mActivity)
400 .findViewById(R.id.gallery_root);
401 if (galleryRoot == null) return false;
402
403 mCameraButton = new Button(mActivity);
404 mCameraButton.setText(R.string.camera_label);
Bobby Georgescu8cfc7f02012-09-17 11:07:51 -0700405 mCameraButton.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.frame_overlay_gallery_camera, 0, 0);
Bobby Georgescud208e122012-09-14 13:54:54 -0700406 mCameraButton.setOnClickListener(new OnClickListener() {
407 @Override
408 public void onClick(View arg0) {
409 GalleryUtils.startCameraActivity(mActivity);
410 }
411 });
412 RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
413 RelativeLayout.LayoutParams.WRAP_CONTENT,
414 RelativeLayout.LayoutParams.WRAP_CONTENT);
415 lp.addRule(RelativeLayout.CENTER_IN_PARENT);
416 galleryRoot.addView(mCameraButton, lp);
417 return true;
418 }
419
420 private void cleanupCameraButton() {
421 if (mCameraButton == null) return;
422 RelativeLayout galleryRoot = (RelativeLayout) ((Activity) mActivity)
423 .findViewById(R.id.gallery_root);
424 if (galleryRoot == null) return;
425 galleryRoot.removeView(mCameraButton);
426 mCameraButton = null;
427 }
428
Bobby Georgescud208e122012-09-14 13:54:54 -0700429 private void hideCameraButton() {
430 if (mCameraButton == null) return;
431 mCameraButton.setVisibility(View.GONE);
432 }
433
Owen Linfbdd3382011-11-08 19:05:56 +0800434 private void clearLoadingBit(int loadingBit) {
435 mLoadingBits &= ~loadingBit;
Chih-Chung Changd05b0be2012-01-09 12:41:57 +0800436 if (mLoadingBits == 0 && mIsActive) {
Bobby Georgescud208e122012-09-14 13:54:54 -0700437 if (mAlbumSetDataAdapter.size() == 0) {
Bobby Georgescu09995292012-09-09 15:15:45 -0700438 // If this is not the top of the gallery folder hierarchy,
439 // tell the parent AlbumSetPage instance to handle displaying
440 // the empty album toast, otherwise show it within this
441 // instance
Owen Linfbdd3382011-11-08 19:05:56 +0800442 if (mActivity.getStateManager().getStateCount() > 1) {
Bobby Georgescu09995292012-09-09 15:15:45 -0700443 Intent result = new Intent();
444 result.putExtra(AlbumPage.KEY_EMPTY_ALBUM, true);
445 setStateResult(Activity.RESULT_OK, result);
Owen Linfbdd3382011-11-08 19:05:56 +0800446 mActivity.getStateManager().finishState(this);
Bobby Georgescu5992daf2012-08-22 18:26:03 -0700447 } else {
Bobby Georgescu09995292012-09-09 15:15:45 -0700448 mShowedEmptyToastForSelf = true;
449 showEmptyAlbumToast(Toast.LENGTH_LONG);
Bobby Georgescu77fa1d22012-10-09 16:23:36 -0700450 mSlotView.invalidate();
Owen Linfbdd3382011-11-08 19:05:56 +0800451 }
Bobby Georgescu09995292012-09-09 15:15:45 -0700452 return;
yonggab7e00552016-01-11 18:39:11 +0800453 } else {
454 hideEmptyAlbumToast();
455 hideCameraButton();
Owen Linfbdd3382011-11-08 19:05:56 +0800456 }
457 }
Bobby Georgescu09995292012-09-09 15:15:45 -0700458 // Hide the empty album toast if we are in the root instance of
459 // AlbumSetPage and the album is no longer empty (for instance,
460 // after a sync is completed and web albums have been synced)
461 if (mShowedEmptyToastForSelf) {
462 mShowedEmptyToastForSelf = false;
463 hideEmptyAlbumToast();
Bobby Georgescud208e122012-09-14 13:54:54 -0700464 hideCameraButton();
Bobby Georgescu5992daf2012-08-22 18:26:03 -0700465 }
Bobby Georgescu5992daf2012-08-22 18:26:03 -0700466 }
467
Owen Linfbdd3382011-11-08 19:05:56 +0800468 private void setLoadingBit(int loadingBit) {
Owen Linfbdd3382011-11-08 19:05:56 +0800469 mLoadingBits |= loadingBit;
470 }
471
Owen Linf9a0a432011-08-17 22:07:43 +0800472 @Override
473 public void onPause() {
474 super.onPause();
475 mIsActive = false;
Owen Linf9a0a432011-08-17 22:07:43 +0800476 mAlbumSetDataAdapter.pause();
477 mAlbumSetView.pause();
Bobby Georgescua2d0d342012-12-03 13:56:00 -0800478 mActionModeHandler.pause();
Owen Linf9a0a432011-08-17 22:07:43 +0800479 mEyePosition.pause();
Ray Chen4105e222011-08-24 11:40:04 +0800480 DetailsHelper.pause();
Ray Chenfe1625c2012-02-17 13:12:32 +0800481 // Call disableClusterMenu to avoid receiving callback after paused.
482 // Don't hide menu here otherwise the list menu will disappear earlier than
483 // the action bar, which is janky and unwanted behavior.
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530484 //mActionBar.disableClusterMenu(false);
Hung-ying Tyan57cbaa12011-09-30 14:42:50 +0800485 if (mSyncTask != null) {
486 mSyncTask.cancel();
487 mSyncTask = null;
Owen Linfbdd3382011-11-08 19:05:56 +0800488 clearLoadingBit(BIT_LOADING_SYNC);
Hung-ying Tyan57cbaa12011-09-30 14:42:50 +0800489 }
Owen Linf9a0a432011-08-17 22:07:43 +0800490 }
491
492 @Override
493 public void onResume() {
494 super.onResume();
495 mIsActive = true;
496 setContentPane(mRootPane);
Owen Linfe49be42011-11-24 11:59:52 +0800497
498 // Set the reload bit here to prevent it exit this page in clearLoadingBit().
499 setLoadingBit(BIT_LOADING_RELOAD);
Owen Linf9a0a432011-08-17 22:07:43 +0800500 mAlbumSetDataAdapter.resume();
Owen Linfe49be42011-11-24 11:59:52 +0800501
Owen Linf9a0a432011-08-17 22:07:43 +0800502 mAlbumSetView.resume();
503 mEyePosition.resume();
504 mActionModeHandler.resume();
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530505 /*if (mShowClusterMenu) {
Ray Chen8cab3e82012-03-20 16:32:57 +0800506 mActionBar.enableClusterMenu(mSelectedAction, this);
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530507 }*/
Owen Linfbdd3382011-11-08 19:05:56 +0800508 if (!mInitialSynced) {
Owen Linfbdd3382011-11-08 19:05:56 +0800509 setLoadingBit(BIT_LOADING_SYNC);
Owen Linfe49be42011-11-24 11:59:52 +0800510 mSyncTask = mMediaSet.requestSync(AlbumSetPage.this);
Owen Linfbdd3382011-11-08 19:05:56 +0800511 }
Owen Linf9a0a432011-08-17 22:07:43 +0800512 }
513
514 private void initializeData(Bundle data) {
515 String mediaPath = data.getString(AlbumSetPage.KEY_MEDIA_PATH);
516 mMediaSet = mActivity.getDataManager().getMediaSet(mediaPath);
517 mSelectionManager.setSourceMediaSet(mMediaSet);
Owen Linc3d8ac32012-04-06 16:46:32 +0800518 mAlbumSetDataAdapter = new AlbumSetDataLoader(
Owen Linf9a0a432011-08-17 22:07:43 +0800519 mActivity, mMediaSet, DATA_CACHE_SIZE);
Kedi Xude4bbef2016-08-04 18:21:04 +0800520 mSelectionManager.setAlbumSetDataLoader(mAlbumSetDataAdapter);
Owen Linf9a0a432011-08-17 22:07:43 +0800521 mAlbumSetDataAdapter.setLoadingListener(new MyLoadingListener());
522 mAlbumSetView.setModel(mAlbumSetDataAdapter);
523 }
524
525 private void initializeViews() {
526 mSelectionManager = new SelectionManager(mActivity, true);
527 mSelectionManager.setSelectionListener(this);
Owen Linf9a0a432011-08-17 22:07:43 +0800528
Owen Linb21b8e52012-08-24 12:25:57 +0800529 mConfig = Config.AlbumSetPage.get(mActivity);
Bobby Georgescuf0c89372012-08-13 14:27:08 -0700530 mSlotView = new SlotView(mActivity, mConfig.slotViewSpec);
Owen Linc3d8ac32012-04-06 16:46:32 +0800531 mAlbumSetView = new AlbumSetSlotRenderer(
Bobby Georgescu915c2c52012-08-23 13:05:53 -0700532 mActivity, mSelectionManager, mSlotView, mConfig.labelSpec,
533 mConfig.placeholderColor);
Owen Lin7260f6f2012-03-22 14:14:40 +0800534 mSlotView.setSlotRenderer(mAlbumSetView);
535 mSlotView.setListener(new SlotView.SimpleListener() {
Owen Linf9a0a432011-08-17 22:07:43 +0800536 @Override
Chih-Chung Changbc215412011-09-19 11:09:39 +0800537 public void onDown(int index) {
538 AlbumSetPage.this.onDown(index);
539 }
540
541 @Override
Yuli Huang90fe70f2012-04-24 15:20:28 +0800542 public void onUp(boolean followedByLongPress) {
543 AlbumSetPage.this.onUp(followedByLongPress);
Chih-Chung Changbc215412011-09-19 11:09:39 +0800544 }
545
546 @Override
Owen Linf9a0a432011-08-17 22:07:43 +0800547 public void onSingleTapUp(int slotIndex) {
548 AlbumSetPage.this.onSingleTapUp(slotIndex);
549 }
Chih-Chung Changbc215412011-09-19 11:09:39 +0800550
Owen Linf9a0a432011-08-17 22:07:43 +0800551 @Override
552 public void onLongTap(int slotIndex) {
553 AlbumSetPage.this.onLongTap(slotIndex);
554 }
555 });
556
557 mActionModeHandler = new ActionModeHandler(mActivity, mSelectionManager);
558 mActionModeHandler.setActionModeListener(new ActionModeListener() {
Owen Lin2341c192012-03-23 14:59:14 +0800559 @Override
Owen Linf9a0a432011-08-17 22:07:43 +0800560 public boolean onActionItemClicked(MenuItem item) {
561 return onItemSelected(item);
562 }
563 });
Owen Lin7260f6f2012-03-22 14:14:40 +0800564 mRootPane.addComponent(mSlotView);
Owen Linf9a0a432011-08-17 22:07:43 +0800565 }
566
567 @Override
568 protected boolean onCreateActionBar(Menu menu) {
Owen Linb21b8e52012-08-24 12:25:57 +0800569 Activity activity = mActivity;
Owen Lin2bb717f2012-07-13 17:23:05 +0800570 final boolean inAlbum = mActivity.getStateManager().hasStateClass(AlbumPage.class);
Owen Linb21b8e52012-08-24 12:25:57 +0800571 MenuInflater inflater = getSupportMenuInflater();
572
Owen Linf9a0a432011-08-17 22:07:43 +0800573 if (mGetContent) {
Owen Linb21b8e52012-08-24 12:25:57 +0800574 inflater.inflate(R.menu.pickup, menu);
Owen Linf9a0a432011-08-17 22:07:43 +0800575 int typeBits = mData.getInt(
Mangesh Ghiware06c02762013-09-11 15:59:59 -0700576 GalleryActivity.KEY_TYPE_BITS, DataManager.INCLUDE_IMAGE);
Ahbong Chang9a939492012-08-22 14:38:18 +0800577 mActionBar.setTitle(GalleryUtils.getSelectionModePrompt(typeBits));
Owen Linf9a0a432011-08-17 22:07:43 +0800578 } else if (mGetAlbum) {
Owen Linb21b8e52012-08-24 12:25:57 +0800579 inflater.inflate(R.menu.pickup, menu);
Ray Chen8cab3e82012-03-20 16:32:57 +0800580 mActionBar.setTitle(R.string.select_album);
Owen Linf9a0a432011-08-17 22:07:43 +0800581 } else {
Owen Linb21b8e52012-08-24 12:25:57 +0800582 inflater.inflate(R.menu.albumset, menu);
Bobby Georgescu3fd76402012-09-25 17:23:22 -0700583 boolean wasShowingClusterMenu = mShowClusterMenu;
Ray Chenb5f8d902011-09-13 18:35:28 +0800584 mShowClusterMenu = !inAlbum;
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530585 /*if (mShowClusterMenu != wasShowingClusterMenu) {
kaiyiz807e83e2014-04-26 10:27:13 +0800586 if (mShowClusterMenu) {
587 mActionBar.enableClusterMenu(mSelectedAction, this);
588 } else {
589 mActionBar.disableClusterMenu(true);
590 }
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530591 }*/
592 boolean selectAlbums = !inAlbum ;// &&
593 // mActionBar.getClusterTypeAction() == FilterUtils.CLUSTER_BY_ALBUM;
Owen Linb21b8e52012-08-24 12:25:57 +0800594 MenuItem selectItem = menu.findItem(R.id.action_select);
595 selectItem.setTitle(activity.getString(
Owen Lin2bb717f2012-07-13 17:23:05 +0800596 selectAlbums ? R.string.select_album : R.string.select_group));
Owen Linf9a0a432011-08-17 22:07:43 +0800597
Owen Linb21b8e52012-08-24 12:25:57 +0800598 MenuItem cameraItem = menu.findItem(R.id.action_camera);
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530599 cameraItem.setVisible(GalleryUtils.isAnyCameraAvailable(activity));
Owen Linb21b8e52012-08-24 12:25:57 +0800600
Ray Chen8cab3e82012-03-20 16:32:57 +0800601 FilterUtils.setupMenuItems(mActionBar, mMediaSet.getPath(), false);
Owen Linf9a0a432011-08-17 22:07:43 +0800602
John Reck06e34ad2013-07-17 09:50:01 -0700603 Intent helpIntent = HelpUtils.getHelpIntent(activity);
Owen Linb21b8e52012-08-24 12:25:57 +0800604
605 MenuItem helpItem = menu.findItem(R.id.action_general_help);
606 helpItem.setVisible(helpIntent != null);
607 if (helpIntent != null) helpItem.setIntent(helpIntent);
608
kaiyiz99cfa4d2014-09-03 16:02:55 +0800609 MenuItem moreItem = menu.findItem(R.id.action_more_image);
610 moreItem.setVisible(mActivity.getResources().getBoolean(
611 R.bool.config_show_more_images));
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530612 mActionBar.setTitle(R.string.albums_title);
Owen Linf9a0a432011-08-17 22:07:43 +0800613 }
Owen Linb21b8e52012-08-24 12:25:57 +0800614 return true;
Owen Linf9a0a432011-08-17 22:07:43 +0800615 }
616
617 @Override
618 protected boolean onItemSelected(MenuItem item) {
Owen Linb21b8e52012-08-24 12:25:57 +0800619 Activity activity = mActivity;
Owen Linf9a0a432011-08-17 22:07:43 +0800620 switch (item.getItemId()) {
kaiyiz99cfa4d2014-09-03 16:02:55 +0800621 case R.id.action_more_image:
622 Uri moreUri = Uri.parse(mActivity.getString(R.string.website_for_more_image));
623 Intent moreIntent = new Intent(Intent.ACTION_VIEW, moreUri);
624 mActivity.startActivity(moreIntent);
625 return true;
Ray Chenbd8e0252011-08-25 11:43:40 +0800626 case R.id.action_cancel:
627 activity.setResult(Activity.RESULT_CANCELED);
628 activity.finish();
629 return true;
Owen Linf9a0a432011-08-17 22:07:43 +0800630 case R.id.action_select:
631 mSelectionManager.setAutoLeaveSelectionMode(false);
632 mSelectionManager.enterSelectionMode();
633 return true;
634 case R.id.action_details:
635 if (mAlbumSetDataAdapter.size() != 0) {
636 if (mShowDetails) {
637 hideDetails();
638 } else {
639 showDetails();
640 }
641 } else {
642 Toast.makeText(activity,
643 activity.getText(R.string.no_albums_alert),
644 Toast.LENGTH_SHORT).show();
645 }
646 return true;
647 case R.id.action_camera: {
Chih-Chung Chang402237b2012-05-03 17:53:05 +0800648 GalleryUtils.startCameraActivity(activity);
Owen Linf9a0a432011-08-17 22:07:43 +0800649 return true;
650 }
651 case R.id.action_manage_offline: {
Owen Lin6cf80742011-08-28 10:50:21 +0800652 Bundle data = new Bundle();
653 String mediaPath = mActivity.getDataManager().getTopSetPath(
654 DataManager.INCLUDE_ALL);
655 data.putString(AlbumSetPage.KEY_MEDIA_PATH, mediaPath);
656 mActivity.getStateManager().startState(ManageCachePage.class, data);
Owen Linf9a0a432011-08-17 22:07:43 +0800657 return true;
658 }
kaiyiz953f7e12014-10-30 10:09:20 +0800659 /*case R.id.action_settings: {
Owen Linf9a0a432011-08-17 22:07:43 +0800660 activity.startActivity(new Intent(activity, GallerySettings.class));
661 return true;
kaiyiz953f7e12014-10-30 10:09:20 +0800662 }*/
Owen Linf9a0a432011-08-17 22:07:43 +0800663 default:
664 return false;
665 }
666 }
667
668 @Override
669 protected void onStateResult(int requestCode, int resultCode, Intent data) {
Bobby Georgescu09995292012-09-09 15:15:45 -0700670 if (data != null && data.getBooleanExtra(AlbumPage.KEY_EMPTY_ALBUM, false)) {
671 showEmptyAlbumToast(Toast.LENGTH_SHORT);
672 }
Owen Linf9a0a432011-08-17 22:07:43 +0800673 switch (requestCode) {
674 case REQUEST_DO_ANIMATION: {
Owen Lin2341c192012-03-23 14:59:14 +0800675 mSlotView.startRisingAnimation();
Owen Linf9a0a432011-08-17 22:07:43 +0800676 }
677 }
678 }
679
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530680 /*private String getSelectedString() {
Owen Linf9a0a432011-08-17 22:07:43 +0800681 int count = mSelectionManager.getSelectedCount();
Ray Chen8cab3e82012-03-20 16:32:57 +0800682 int action = mActionBar.getClusterTypeAction();
Owen Linf9a0a432011-08-17 22:07:43 +0800683 int string = action == FilterUtils.CLUSTER_BY_ALBUM
684 ? R.plurals.number_of_albums_selected
685 : R.plurals.number_of_groups_selected;
686 String format = mActivity.getResources().getQuantityString(string, count);
687 return String.format(format, count);
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530688 }*/
Owen Linf9a0a432011-08-17 22:07:43 +0800689
Owen Lin2341c192012-03-23 14:59:14 +0800690 @Override
Owen Linf9a0a432011-08-17 22:07:43 +0800691 public void onSelectionModeChange(int mode) {
Owen Linf9a0a432011-08-17 22:07:43 +0800692 switch (mode) {
693 case SelectionManager.ENTER_SELECTION_MODE: {
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530694 //mActionBar.disableClusterMenu(true);
Owen Lin2bb717f2012-07-13 17:23:05 +0800695 mActionModeHandler.startActionMode();
Bobby Georgescubcb42782012-10-31 16:33:56 -0700696 performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
Joey Rizzoli0a421722016-06-01 14:04:38 +0200697 ((GalleryActivity)mActivity).toggleNavBar(false);
Owen Linf9a0a432011-08-17 22:07:43 +0800698 break;
699 }
700 case SelectionManager.LEAVE_SELECTION_MODE: {
Owen Lin2bb717f2012-07-13 17:23:05 +0800701 mActionModeHandler.finishActionMode();
Joey Rizzoli0a421722016-06-01 14:04:38 +0200702 ((GalleryActivity)mActivity).toggleNavBar(true);
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530703 /*if (mShowClusterMenu) {
Ray Chen8cab3e82012-03-20 16:32:57 +0800704 mActionBar.enableClusterMenu(mSelectedAction, this);
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530705 }*/
Owen Linf9a0a432011-08-17 22:07:43 +0800706 mRootPane.invalidate();
707 break;
708 }
709 case SelectionManager.SELECT_ALL_MODE: {
Ray Chen21c2e662012-05-03 13:10:51 +0800710 mActionModeHandler.updateSupportedOperation();
Owen Linf9a0a432011-08-17 22:07:43 +0800711 mRootPane.invalidate();
712 break;
713 }
714 }
715 }
716
Owen Lin2341c192012-03-23 14:59:14 +0800717 @Override
Owen Linf9a0a432011-08-17 22:07:43 +0800718 public void onSelectionChange(Path path, boolean selected) {
Ravi Banuri49f14dd2015-10-21 15:54:59 +0530719// mActionModeHandler.setTitle(getSelectedString());
Owen Linf9a0a432011-08-17 22:07:43 +0800720 mActionModeHandler.updateSupportedOperation(path, selected);
721 }
722
723 private void hideDetails() {
724 mShowDetails = false;
Ray Chen4105e222011-08-24 11:40:04 +0800725 mDetailsHelper.hide();
Owen Lin31cac302012-04-04 10:24:08 +0800726 mAlbumSetView.setHighlightItemPath(null);
Owen Lin7260f6f2012-03-22 14:14:40 +0800727 mSlotView.invalidate();
Joey Rizzoli0a421722016-06-01 14:04:38 +0200728 ((GalleryActivity)mActivity).toggleNavBar(true);
Owen Linf9a0a432011-08-17 22:07:43 +0800729 }
730
731 private void showDetails() {
732 mShowDetails = true;
Ray Chen4105e222011-08-24 11:40:04 +0800733 if (mDetailsHelper == null) {
Joey Rizzoli0a421722016-06-01 14:04:38 +0200734 ((GalleryActivity)mActivity).toggleNavBar(false);
Ray Chen4105e222011-08-24 11:40:04 +0800735 mDetailsHelper = new DetailsHelper(mActivity, mRootPane, mDetailsSource);
736 mDetailsHelper.setCloseListener(new CloseListener() {
Owen Lin2341c192012-03-23 14:59:14 +0800737 @Override
Owen Linf9a0a432011-08-17 22:07:43 +0800738 public void onClose() {
739 hideDetails();
740 }
741 });
Owen Linf9a0a432011-08-17 22:07:43 +0800742 }
Ray Chen4105e222011-08-24 11:40:04 +0800743 mDetailsHelper.show();
Owen Linf9a0a432011-08-17 22:07:43 +0800744 }
745
Hung-ying Tyan57cbaa12011-09-30 14:42:50 +0800746 @Override
747 public void onSyncDone(final MediaSet mediaSet, final int resultCode) {
748 if (resultCode == MediaSet.SYNC_RESULT_ERROR) {
749 Log.d(TAG, "onSyncDone: " + Utils.maskDebugInfo(mediaSet.getName()) + " result="
750 + resultCode);
751 }
752 ((Activity) mActivity).runOnUiThread(new Runnable() {
753 @Override
754 public void run() {
Owen Lin71632ac2012-04-05 12:02:01 +0800755 GLRoot root = mActivity.getGLRoot();
756 root.lockRenderThread();
757 try {
758 if (resultCode == MediaSet.SYNC_RESULT_SUCCESS) {
759 mInitialSynced = true;
760 }
761 clearLoadingBit(BIT_LOADING_SYNC);
762 if (resultCode == MediaSet.SYNC_RESULT_ERROR && mIsActive) {
Ray Chene8c1e692012-05-17 12:29:12 +0800763 Log.w(TAG, "failed to load album set");
Owen Lin71632ac2012-04-05 12:02:01 +0800764 }
765 } finally {
766 root.unlockRenderThread();
Hung-ying Tyan57cbaa12011-09-30 14:42:50 +0800767 }
768 }
769 });
770 }
771
Owen Linf9a0a432011-08-17 22:07:43 +0800772 private class MyLoadingListener implements LoadingListener {
Owen Lin2341c192012-03-23 14:59:14 +0800773 @Override
Owen Linf9a0a432011-08-17 22:07:43 +0800774 public void onLoadingStarted() {
Owen Linfbdd3382011-11-08 19:05:56 +0800775 setLoadingBit(BIT_LOADING_RELOAD);
Owen Linf9a0a432011-08-17 22:07:43 +0800776 }
777
Owen Lin2341c192012-03-23 14:59:14 +0800778 @Override
Hung-ying Tyan05da3f52012-10-30 17:47:35 +0800779 public void onLoadingFinished(boolean loadingFailed) {
Owen Linfbdd3382011-11-08 19:05:56 +0800780 clearLoadingBit(BIT_LOADING_RELOAD);
Owen Linf9a0a432011-08-17 22:07:43 +0800781 }
782 }
783
Ray Chen4105e222011-08-24 11:40:04 +0800784 private class MyDetailsSource implements DetailsHelper.DetailsSource {
Owen Linf9a0a432011-08-17 22:07:43 +0800785 private int mIndex;
Owen Lin2341c192012-03-23 14:59:14 +0800786
787 @Override
Owen Linf9a0a432011-08-17 22:07:43 +0800788 public int size() {
789 return mAlbumSetDataAdapter.size();
790 }
791
Owen Lin2341c192012-03-23 14:59:14 +0800792 @Override
Michael Kolb995c4562012-07-20 12:23:09 -0700793 public int setIndex() {
794 Path id = mSelectionManager.getSelected(false).get(0);
795 mIndex = mAlbumSetDataAdapter.findSet(id);
Owen Linf9a0a432011-08-17 22:07:43 +0800796 return mIndex;
797 }
798
Owen Lin2341c192012-03-23 14:59:14 +0800799 @Override
Owen Linf9a0a432011-08-17 22:07:43 +0800800 public MediaDetails getDetails() {
801 MediaObject item = mAlbumSetDataAdapter.getMediaSet(mIndex);
802 if (item != null) {
Owen Lin31cac302012-04-04 10:24:08 +0800803 mAlbumSetView.setHighlightItemPath(item.getPath());
Owen Linf9a0a432011-08-17 22:07:43 +0800804 return item.getDetails();
805 } else {
806 return null;
807 }
808 }
809 }
810}