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