1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/* 2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2009 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 19fe49be45412f8d0f68343662318e73822da486c8Owen Linimport android.app.Dialog; 201d33c69510326298c524593a8fb5d65b571013dcPin Tingimport android.content.AsyncQueryHandler; 21f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.ContentResolver; 22fe49be45412f8d0f68343662318e73822da486c8Owen Linimport android.content.DialogInterface; 23fe49be45412f8d0f68343662318e73822da486c8Owen Linimport android.content.DialogInterface.OnCancelListener; 24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.Intent; 251d33c69510326298c524593a8fb5d65b571013dcPin Tingimport android.database.Cursor; 26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.net.Uri; 27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.os.Bundle; 281d33c69510326298c524593a8fb5d65b571013dcPin Tingimport android.provider.OpenableColumns; 29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.Menu; 30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.Window; 31f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.widget.Toast; 32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 33dbf4ba12afba115888493caa34937643257e2bb1Ray Chenimport com.android.gallery3d.R; 34dbf4ba12afba115888493caa34937643257e2bb1Ray Chenimport com.android.gallery3d.common.Utils; 35dbf4ba12afba115888493caa34937643257e2bb1Ray Chenimport com.android.gallery3d.data.DataManager; 36dbf4ba12afba115888493caa34937643257e2bb1Ray Chenimport com.android.gallery3d.data.MediaItem; 37dbf4ba12afba115888493caa34937643257e2bb1Ray Chenimport com.android.gallery3d.data.MediaSet; 38dbf4ba12afba115888493caa34937643257e2bb1Ray Chenimport com.android.gallery3d.data.Path; 39dbf4ba12afba115888493caa34937643257e2bb1Ray Chenimport com.android.gallery3d.picasasource.PicasaSource; 40dbf4ba12afba115888493caa34937643257e2bb1Ray Chenimport com.android.gallery3d.ui.GLRoot; 41dbf4ba12afba115888493caa34937643257e2bb1Ray Chenimport com.android.gallery3d.util.GalleryUtils; 42dbf4ba12afba115888493caa34937643257e2bb1Ray Chen 43fe49be45412f8d0f68343662318e73822da486c8Owen Linpublic final class Gallery extends AbstractGalleryActivity implements OnCancelListener { 44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final String EXTRA_SLIDESHOW = "slideshow"; 45afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang public static final String EXTRA_DREAM = "dream"; 46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final String EXTRA_CROP = "crop"; 47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final String ACTION_REVIEW = "com.android.camera.action.REVIEW"; 49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final String KEY_GET_CONTENT = "get-content"; 50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final String KEY_GET_ALBUM = "get-album"; 51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final String KEY_TYPE_BITS = "type-bits"; 52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final String KEY_MEDIA_TYPES = "mediaTypes"; 53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static final String TAG = "Gallery"; 55fe49be45412f8d0f68343662318e73822da486c8Owen Lin private Dialog mVersionCheckDialog; 56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void onCreate(Bundle savedInstanceState) { 59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onCreate(savedInstanceState); 60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin requestWindowFeature(Window.FEATURE_ACTION_BAR); 61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin setContentView(R.layout.main); 64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (savedInstanceState != null) { 66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getStateManager().restoreFromState(savedInstanceState); 67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin initializeByIntent(); 69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 72f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private void initializeByIntent() { 73f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Intent intent = getIntent(); 74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String action = intent.getAction(); 75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (Intent.ACTION_GET_CONTENT.equalsIgnoreCase(action)) { 77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin startGetContent(intent); 78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else if (Intent.ACTION_PICK.equalsIgnoreCase(action)) { 79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // We do NOT really support the PICK intent. Handle it as 80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // the GET_CONTENT. However, we need to translate the type 81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // in the intent here. 82f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Log.w(TAG, "action PICK is not supported"); 83f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String type = Utils.ensureNotNull(intent.getType()); 84f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (type.startsWith("vnd.android.cursor.dir/")) { 85f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (type.endsWith("/image")) intent.setType("image/*"); 86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (type.endsWith("/video")) intent.setType("video/*"); 87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin startGetContent(intent); 89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else if (Intent.ACTION_VIEW.equalsIgnoreCase(action) 90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin || ACTION_REVIEW.equalsIgnoreCase(action)){ 91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin startViewAction(intent); 92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin startDefaultPage(); 94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 97f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void startDefaultPage() { 98dbf4ba12afba115888493caa34937643257e2bb1Ray Chen PicasaSource.showSignInReminder(this); 99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Bundle data = new Bundle(); 100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putString(AlbumSetPage.KEY_MEDIA_PATH, 101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getDataManager().getTopSetPath(DataManager.INCLUDE_ALL)); 102f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getStateManager().startState(AlbumSetPage.class, data); 103fe49be45412f8d0f68343662318e73822da486c8Owen Lin mVersionCheckDialog = PicasaSource.getVersionCheckDialog(this); 104fe49be45412f8d0f68343662318e73822da486c8Owen Lin if (mVersionCheckDialog != null) { 105fe49be45412f8d0f68343662318e73822da486c8Owen Lin mVersionCheckDialog.setOnCancelListener(this); 106fe49be45412f8d0f68343662318e73822da486c8Owen Lin } 107f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 108f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 109f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private void startGetContent(Intent intent) { 110f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Bundle data = intent.getExtras() != null 111f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ? new Bundle(intent.getExtras()) 112f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin : new Bundle(); 113f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putBoolean(KEY_GET_CONTENT, true); 114f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int typeBits = GalleryUtils.determineTypeBits(this, intent); 115f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putInt(KEY_TYPE_BITS, typeBits); 116f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putString(AlbumSetPage.KEY_MEDIA_PATH, 117f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getDataManager().getTopSetPath(typeBits)); 118f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getStateManager().startState(AlbumSetPage.class, data); 119f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 120f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 121f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private String getContentType(Intent intent) { 122f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String type = intent.getType(); 123f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (type != null) return type; 124f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 125f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Uri uri = intent.getData(); 126f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin try { 127f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return getContentResolver().getType(uri); 128f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } catch (Throwable t) { 129f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Log.w(TAG, "get type fail", t); 130f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return null; 131f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 132f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 133f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 134f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private void startViewAction(Intent intent) { 135f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Boolean slideshow = intent.getBooleanExtra(EXTRA_SLIDESHOW, false); 136f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (slideshow) { 137f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getActionBar().hide(); 138f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin DataManager manager = getDataManager(); 13921a412c93c9b0401b039f4eb86d4950752e5bb84Owen Lin Path path = manager.findPathByUri(intent.getData(), intent.getType()); 140f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (path == null || manager.getMediaObject(path) 141f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin instanceof MediaItem) { 142f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin path = Path.fromString( 143f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin manager.getTopSetPath(DataManager.INCLUDE_IMAGE)); 144f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 145f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Bundle data = new Bundle(); 146f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putString(SlideshowPage.KEY_SET_PATH, path.toString()); 147f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putBoolean(SlideshowPage.KEY_RANDOM_ORDER, true); 148f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putBoolean(SlideshowPage.KEY_REPEAT, true); 149afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang if (intent.getBooleanExtra(EXTRA_DREAM, false)) { 150afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang data.putBoolean(SlideshowPage.KEY_DREAM, true); 151afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang } 152f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getStateManager().startState(SlideshowPage.class, data); 153f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 154f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Bundle data = new Bundle(); 155f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin DataManager dm = getDataManager(); 156f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Uri uri = intent.getData(); 157f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin String contentType = getContentType(intent); 158f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (contentType == null) { 159f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Toast.makeText(this, 160f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin R.string.no_such_item, Toast.LENGTH_LONG).show(); 161f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin finish(); 162f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return; 163f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 164bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang if (uri == null) { 165bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang int typeBits = GalleryUtils.determineTypeBits(this, intent); 166bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang data.putInt(KEY_TYPE_BITS, typeBits); 167bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang data.putString(AlbumSetPage.KEY_MEDIA_PATH, 168bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang getDataManager().getTopSetPath(typeBits)); 169bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang getStateManager().startState(AlbumSetPage.class, data); 170bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang } else if (contentType.startsWith( 171f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin ContentResolver.CURSOR_DIR_BASE_TYPE)) { 172f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int mediaType = intent.getIntExtra(KEY_MEDIA_TYPES, 0); 173f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mediaType != 0) { 174f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin uri = uri.buildUpon().appendQueryParameter( 175f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin KEY_MEDIA_TYPES, String.valueOf(mediaType)) 176f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin .build(); 177f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 17821a412c93c9b0401b039f4eb86d4950752e5bb84Owen Lin Path setPath = dm.findPathByUri(uri, null); 179bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang MediaSet mediaSet = null; 180bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang if (setPath != null) { 181bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang mediaSet = (MediaSet) dm.getMediaObject(setPath); 182bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang } 183bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang if (mediaSet != null) { 184bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang if (mediaSet.isLeafAlbum()) { 185bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang data.putString(AlbumPage.KEY_MEDIA_PATH, setPath.toString()); 18684c220f10a643927c8a2126de8a755d8d7f7ec9eRay Chen data.putString(AlbumPage.KEY_PARENT_MEDIA_PATH, 18784c220f10a643927c8a2126de8a755d8d7f7ec9eRay Chen dm.getTopSetPath(DataManager.INCLUDE_ALL)); 188bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang getStateManager().startState(AlbumPage.class, data); 189bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang } else { 190bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang data.putString(AlbumSetPage.KEY_MEDIA_PATH, setPath.toString()); 191bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang getStateManager().startState(AlbumSetPage.class, data); 192bd47a5c6bcdcb127adb13c454fec00d4989c50b6Chih-Chung Chang } 193f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 194f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin startDefaultPage(); 195f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 196f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } else { 19721a412c93c9b0401b039f4eb86d4950752e5bb84Owen Lin Path itemPath = dm.findPathByUri(uri, intent.getType()); 198f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Path albumPath = dm.getDefaultSetOf(itemPath); 199c0ba0936bac7d56b92a409380c4d378ed2c272b0Ray Chen // TODO: Make this parameter public so other activities can reference it. 200c0ba0936bac7d56b92a409380c4d378ed2c272b0Ray Chen boolean singleItemOnly = intent.getBooleanExtra("SingleItemOnly", false); 2011d33c69510326298c524593a8fb5d65b571013dcPin Ting if (!singleItemOnly && (albumPath != null)) { 2021d33c69510326298c524593a8fb5d65b571013dcPin Ting data.putString(PhotoPage.KEY_MEDIA_SET_PATH, albumPath.toString()); 203f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 204f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin data.putString(PhotoPage.KEY_MEDIA_ITEM_PATH, itemPath.toString()); 20554fe6202b6f7d233e7645c121321fe0f3d20fc8bYuli Huang if (intent.getBooleanExtra(PhotoPage.KEY_TREAT_BACK_AS_UP, false)) { 20654fe6202b6f7d233e7645c121321fe0f3d20fc8bYuli Huang data.putBoolean(PhotoPage.KEY_TREAT_BACK_AS_UP, true); 20754fe6202b6f7d233e7645c121321fe0f3d20fc8bYuli Huang } 208186f8b21cdbe6881a1e7fd452e3ef32e1d81d90fPin Ting 2091d33c69510326298c524593a8fb5d65b571013dcPin Ting // Displays the filename as title, reading the filename from the interface: 2101d33c69510326298c524593a8fb5d65b571013dcPin Ting // {@link android.provider.OpenableColumns#DISPLAY_NAME}. 2111d33c69510326298c524593a8fb5d65b571013dcPin Ting AsyncQueryHandler queryHandler = new AsyncQueryHandler(getContentResolver()) { 2121d33c69510326298c524593a8fb5d65b571013dcPin Ting @Override 2131d33c69510326298c524593a8fb5d65b571013dcPin Ting protected void onQueryComplete(int token, Object cookie, Cursor cursor) { 2141d33c69510326298c524593a8fb5d65b571013dcPin Ting try { 2151d33c69510326298c524593a8fb5d65b571013dcPin Ting if ((cursor != null) && cursor.moveToFirst()) { 2161d33c69510326298c524593a8fb5d65b571013dcPin Ting String displayName = cursor.getString(0); 2171d33c69510326298c524593a8fb5d65b571013dcPin Ting 2181d33c69510326298c524593a8fb5d65b571013dcPin Ting // Just show empty title if other apps don't set DISPLAY_NAME 2191d33c69510326298c524593a8fb5d65b571013dcPin Ting setTitle((displayName == null) ? "" : displayName); 2201d33c69510326298c524593a8fb5d65b571013dcPin Ting } 2211d33c69510326298c524593a8fb5d65b571013dcPin Ting } finally { 2221d33c69510326298c524593a8fb5d65b571013dcPin Ting Utils.closeSilently(cursor); 2231d33c69510326298c524593a8fb5d65b571013dcPin Ting } 2241d33c69510326298c524593a8fb5d65b571013dcPin Ting } 2251d33c69510326298c524593a8fb5d65b571013dcPin Ting }; 2261d33c69510326298c524593a8fb5d65b571013dcPin Ting queryHandler.startQuery(0, null, uri, new String[] {OpenableColumns.DISPLAY_NAME}, 2271d33c69510326298c524593a8fb5d65b571013dcPin Ting null, null, null); 228186f8b21cdbe6881a1e7fd452e3ef32e1d81d90fPin Ting 229f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getStateManager().startState(PhotoPage.class, data); 230f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 231f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 232f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 233f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 234f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 235f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public boolean onCreateOptionsMenu(Menu menu) { 236f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onCreateOptionsMenu(menu); 237f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return getStateManager().createOptionsMenu(menu); 238f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 239f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 240f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 241f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void onResume() { 242f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Utils.assertTrue(getStateManager().getStateCount() > 0); 243f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onResume(); 244fe49be45412f8d0f68343662318e73822da486c8Owen Lin if (mVersionCheckDialog != null) { 245fe49be45412f8d0f68343662318e73822da486c8Owen Lin mVersionCheckDialog.show(); 246fe49be45412f8d0f68343662318e73822da486c8Owen Lin } 247fe49be45412f8d0f68343662318e73822da486c8Owen Lin } 248fe49be45412f8d0f68343662318e73822da486c8Owen Lin 249fe49be45412f8d0f68343662318e73822da486c8Owen Lin @Override 250fe49be45412f8d0f68343662318e73822da486c8Owen Lin protected void onPause() { 251fe49be45412f8d0f68343662318e73822da486c8Owen Lin super.onPause(); 252fe49be45412f8d0f68343662318e73822da486c8Owen Lin if (mVersionCheckDialog != null) { 253fe49be45412f8d0f68343662318e73822da486c8Owen Lin mVersionCheckDialog.dismiss(); 254fe49be45412f8d0f68343662318e73822da486c8Owen Lin } 255f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 256f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 257f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 258fe49be45412f8d0f68343662318e73822da486c8Owen Lin public void onCancel(DialogInterface dialog) { 259fe49be45412f8d0f68343662318e73822da486c8Owen Lin if (dialog == mVersionCheckDialog) { 260fe49be45412f8d0f68343662318e73822da486c8Owen Lin mVersionCheckDialog = null; 261fe49be45412f8d0f68343662318e73822da486c8Owen Lin } 262fe49be45412f8d0f68343662318e73822da486c8Owen Lin } 263f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin} 264