1666ea1b28a76aeba74744148b15099254d918671Owen Lin/* 2666ea1b28a76aeba74744148b15099254d918671Owen Lin * Copyright (C) 2009 The Android Open Source Project 3666ea1b28a76aeba74744148b15099254d918671Owen Lin * 4666ea1b28a76aeba74744148b15099254d918671Owen Lin * Licensed under the Apache License, Version 2.0 (the "License"); 5666ea1b28a76aeba74744148b15099254d918671Owen Lin * you may not use this file except in compliance with the License. 6666ea1b28a76aeba74744148b15099254d918671Owen Lin * You may obtain a copy of the License at 7666ea1b28a76aeba74744148b15099254d918671Owen Lin * 8666ea1b28a76aeba74744148b15099254d918671Owen Lin * http://www.apache.org/licenses/LICENSE-2.0 9666ea1b28a76aeba74744148b15099254d918671Owen Lin * 10666ea1b28a76aeba74744148b15099254d918671Owen Lin * Unless required by applicable law or agreed to in writing, software 11666ea1b28a76aeba74744148b15099254d918671Owen Lin * distributed under the License is distributed on an "AS IS" BASIS, 12666ea1b28a76aeba74744148b15099254d918671Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13666ea1b28a76aeba74744148b15099254d918671Owen Lin * See the License for the specific language governing permissions and 14666ea1b28a76aeba74744148b15099254d918671Owen Lin * limitations under the License. 15666ea1b28a76aeba74744148b15099254d918671Owen Lin */ 16666ea1b28a76aeba74744148b15099254d918671Owen Lin 17666ea1b28a76aeba74744148b15099254d918671Owen Linpackage com.android.camera.gallery; 18666ea1b28a76aeba74744148b15099254d918671Owen Lin 19666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.content.ContentResolver; 20666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.database.Cursor; 21666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.net.Uri; 22666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.provider.MediaStore.Images; 23666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.provider.MediaStore.Video.Media; 24666ea1b28a76aeba74744148b15099254d918671Owen Lin 25666ea1b28a76aeba74744148b15099254d918671Owen Linimport java.util.HashMap; 26666ea1b28a76aeba74744148b15099254d918671Owen Lin 27666ea1b28a76aeba74744148b15099254d918671Owen Lin/** 28666ea1b28a76aeba74744148b15099254d918671Owen Lin * A collection of all the <code>VideoObject</code> in gallery. 29666ea1b28a76aeba74744148b15099254d918671Owen Lin */ 30666ea1b28a76aeba74744148b15099254d918671Owen Linpublic class VideoList extends BaseImageList { 31666ea1b28a76aeba74744148b15099254d918671Owen Lin 32666ea1b28a76aeba74744148b15099254d918671Owen Lin @SuppressWarnings("unused") 33666ea1b28a76aeba74744148b15099254d918671Owen Lin private static final String TAG = "BaseImageList"; 34666ea1b28a76aeba74744148b15099254d918671Owen Lin 35666ea1b28a76aeba74744148b15099254d918671Owen Lin private static final String[] VIDEO_PROJECTION = new String[] { 36666ea1b28a76aeba74744148b15099254d918671Owen Lin Media._ID, 37666ea1b28a76aeba74744148b15099254d918671Owen Lin Media.DATA, 38666ea1b28a76aeba74744148b15099254d918671Owen Lin Media.DATE_TAKEN, 39666ea1b28a76aeba74744148b15099254d918671Owen Lin Media.TITLE, 40666ea1b28a76aeba74744148b15099254d918671Owen Lin Media.MINI_THUMB_MAGIC, 41666ea1b28a76aeba74744148b15099254d918671Owen Lin Media.MIME_TYPE, 42666ea1b28a76aeba74744148b15099254d918671Owen Lin Media.DATE_MODIFIED}; 43666ea1b28a76aeba74744148b15099254d918671Owen Lin 44666ea1b28a76aeba74744148b15099254d918671Owen Lin private static final int INDEX_ID = 0; 45666ea1b28a76aeba74744148b15099254d918671Owen Lin private static final int INDEX_DATA_PATH = 1; 46666ea1b28a76aeba74744148b15099254d918671Owen Lin private static final int INDEX_DATE_TAKEN = 2; 47666ea1b28a76aeba74744148b15099254d918671Owen Lin private static final int INDEX_TITLE = 3; 48185a1a7c5f33ecc5cb9a36d23cecb719c8727178Chih-Chung Chang private static final int INDEX_MIMI_THUMB_MAGIC = 4; 49185a1a7c5f33ecc5cb9a36d23cecb719c8727178Chih-Chung Chang private static final int INDEX_MIME_TYPE = 5; 50185a1a7c5f33ecc5cb9a36d23cecb719c8727178Chih-Chung Chang private static final int INDEX_DATE_MODIFIED = 6; 51666ea1b28a76aeba74744148b15099254d918671Owen Lin 52666ea1b28a76aeba74744148b15099254d918671Owen Lin @Override 53666ea1b28a76aeba74744148b15099254d918671Owen Lin protected long getImageId(Cursor cursor) { 54666ea1b28a76aeba74744148b15099254d918671Owen Lin return cursor.getLong(INDEX_ID); 55666ea1b28a76aeba74744148b15099254d918671Owen Lin } 56666ea1b28a76aeba74744148b15099254d918671Owen Lin 57666ea1b28a76aeba74744148b15099254d918671Owen Lin @Override 58666ea1b28a76aeba74744148b15099254d918671Owen Lin protected BaseImage loadImageFromCursor(Cursor cursor) { 59666ea1b28a76aeba74744148b15099254d918671Owen Lin long id = cursor.getLong(INDEX_ID); 60666ea1b28a76aeba74744148b15099254d918671Owen Lin String dataPath = cursor.getString(INDEX_DATA_PATH); 61666ea1b28a76aeba74744148b15099254d918671Owen Lin long dateTaken = cursor.getLong(INDEX_DATE_TAKEN); 62666ea1b28a76aeba74744148b15099254d918671Owen Lin if (dateTaken == 0) { 63666ea1b28a76aeba74744148b15099254d918671Owen Lin dateTaken = cursor.getLong(INDEX_DATE_MODIFIED) * 1000; 64666ea1b28a76aeba74744148b15099254d918671Owen Lin } 65666ea1b28a76aeba74744148b15099254d918671Owen Lin long miniThumbMagic = cursor.getLong(INDEX_MIMI_THUMB_MAGIC); 66185a1a7c5f33ecc5cb9a36d23cecb719c8727178Chih-Chung Chang String title = cursor.getString(INDEX_TITLE); 67666ea1b28a76aeba74744148b15099254d918671Owen Lin String mimeType = cursor.getString(INDEX_MIME_TYPE); 68185a1a7c5f33ecc5cb9a36d23cecb719c8727178Chih-Chung Chang if (title == null || title.length() == 0) { 69185a1a7c5f33ecc5cb9a36d23cecb719c8727178Chih-Chung Chang title = dataPath; 70185a1a7c5f33ecc5cb9a36d23cecb719c8727178Chih-Chung Chang } 71666ea1b28a76aeba74744148b15099254d918671Owen Lin return new VideoObject(this, mContentResolver, 72666ea1b28a76aeba74744148b15099254d918671Owen Lin id, cursor.getPosition(), contentUri(id), dataPath, 73185a1a7c5f33ecc5cb9a36d23cecb719c8727178Chih-Chung Chang mimeType, dateTaken, title); 74666ea1b28a76aeba74744148b15099254d918671Owen Lin } 75666ea1b28a76aeba74744148b15099254d918671Owen Lin 76666ea1b28a76aeba74744148b15099254d918671Owen Lin public VideoList(ContentResolver resolver, Uri uri, int sort, 77666ea1b28a76aeba74744148b15099254d918671Owen Lin String bucketId) { 78666ea1b28a76aeba74744148b15099254d918671Owen Lin super(resolver, uri, sort, bucketId); 79666ea1b28a76aeba74744148b15099254d918671Owen Lin } 80666ea1b28a76aeba74744148b15099254d918671Owen Lin 81666ea1b28a76aeba74744148b15099254d918671Owen Lin public HashMap<String, String> getBucketIds() { 82666ea1b28a76aeba74744148b15099254d918671Owen Lin Uri uri = mBaseUri.buildUpon() 83666ea1b28a76aeba74744148b15099254d918671Owen Lin .appendQueryParameter("distinct", "true").build(); 84666ea1b28a76aeba74744148b15099254d918671Owen Lin Cursor c = Images.Media.query( 85666ea1b28a76aeba74744148b15099254d918671Owen Lin mContentResolver, uri, 86666ea1b28a76aeba74744148b15099254d918671Owen Lin new String[] { 87666ea1b28a76aeba74744148b15099254d918671Owen Lin Media.BUCKET_DISPLAY_NAME, 88666ea1b28a76aeba74744148b15099254d918671Owen Lin Media.BUCKET_ID 89666ea1b28a76aeba74744148b15099254d918671Owen Lin }, 90666ea1b28a76aeba74744148b15099254d918671Owen Lin whereClause(), whereClauseArgs(), sortOrder()); 91666ea1b28a76aeba74744148b15099254d918671Owen Lin try { 92666ea1b28a76aeba74744148b15099254d918671Owen Lin HashMap<String, String> hash = new HashMap<String, String>(); 93666ea1b28a76aeba74744148b15099254d918671Owen Lin while (c.moveToNext()) { 94666ea1b28a76aeba74744148b15099254d918671Owen Lin hash.put(c.getString(1), c.getString(0)); 95666ea1b28a76aeba74744148b15099254d918671Owen Lin } 96666ea1b28a76aeba74744148b15099254d918671Owen Lin return hash; 97666ea1b28a76aeba74744148b15099254d918671Owen Lin } finally { 98666ea1b28a76aeba74744148b15099254d918671Owen Lin c.close(); 99666ea1b28a76aeba74744148b15099254d918671Owen Lin } 100666ea1b28a76aeba74744148b15099254d918671Owen Lin } 101666ea1b28a76aeba74744148b15099254d918671Owen Lin 102666ea1b28a76aeba74744148b15099254d918671Owen Lin protected String whereClause() { 103666ea1b28a76aeba74744148b15099254d918671Owen Lin return mBucketId != null 104666ea1b28a76aeba74744148b15099254d918671Owen Lin ? Images.Media.BUCKET_ID + " = '" + mBucketId + "'" 105666ea1b28a76aeba74744148b15099254d918671Owen Lin : null; 106666ea1b28a76aeba74744148b15099254d918671Owen Lin } 107666ea1b28a76aeba74744148b15099254d918671Owen Lin 108666ea1b28a76aeba74744148b15099254d918671Owen Lin protected String[] whereClauseArgs() { 109666ea1b28a76aeba74744148b15099254d918671Owen Lin return null; 110666ea1b28a76aeba74744148b15099254d918671Owen Lin } 111666ea1b28a76aeba74744148b15099254d918671Owen Lin 112666ea1b28a76aeba74744148b15099254d918671Owen Lin @Override 113666ea1b28a76aeba74744148b15099254d918671Owen Lin protected Cursor createCursor() { 114666ea1b28a76aeba74744148b15099254d918671Owen Lin Cursor c = Images.Media.query( 115666ea1b28a76aeba74744148b15099254d918671Owen Lin mContentResolver, mBaseUri, VIDEO_PROJECTION, 116666ea1b28a76aeba74744148b15099254d918671Owen Lin whereClause(), whereClauseArgs(), sortOrder()); 117666ea1b28a76aeba74744148b15099254d918671Owen Lin return c; 118666ea1b28a76aeba74744148b15099254d918671Owen Lin } 119666ea1b28a76aeba74744148b15099254d918671Owen Lin} 120