1 /*
2  * Copyright (C) 2009 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 
17 package com.android.camera.gallery;
18 
19 import android.content.ContentResolver;
20 import android.database.Cursor;
21 import android.net.Uri;
22 import android.provider.MediaStore.Images;
23 import android.provider.MediaStore.Video.Media;
24 
25 import java.util.HashMap;
26 
27 /**
28  * A collection of all the <code>VideoObject</code> in gallery.
29  */
30 public class VideoList extends BaseImageList {
31 
32     @SuppressWarnings("unused")
33     private static final String TAG = "BaseImageList";
34 
35     private static final String[] VIDEO_PROJECTION = new String[] {
36             Media._ID,
37             Media.DATA,
38             Media.DATE_TAKEN,
39             Media.TITLE,
40             Media.MINI_THUMB_MAGIC,
41             Media.MIME_TYPE,
42             Media.DATE_MODIFIED};
43 
44     private static final int INDEX_ID = 0;
45     private static final int INDEX_DATA_PATH = 1;
46     private static final int INDEX_DATE_TAKEN = 2;
47     private static final int INDEX_TITLE = 3;
48     private static final int INDEX_MIMI_THUMB_MAGIC = 4;
49     private static final int INDEX_MIME_TYPE = 5;
50     private static final int INDEX_DATE_MODIFIED = 6;
51 
52     @Override
getImageId(Cursor cursor)53     protected long getImageId(Cursor cursor) {
54         return cursor.getLong(INDEX_ID);
55     }
56 
57     @Override
loadImageFromCursor(Cursor cursor)58     protected BaseImage loadImageFromCursor(Cursor cursor) {
59         long id = cursor.getLong(INDEX_ID);
60         String dataPath = cursor.getString(INDEX_DATA_PATH);
61         long dateTaken = cursor.getLong(INDEX_DATE_TAKEN);
62         if (dateTaken == 0) {
63             dateTaken = cursor.getLong(INDEX_DATE_MODIFIED) * 1000;
64         }
65         long miniThumbMagic = cursor.getLong(INDEX_MIMI_THUMB_MAGIC);
66         String title = cursor.getString(INDEX_TITLE);
67         String mimeType = cursor.getString(INDEX_MIME_TYPE);
68         if (title == null || title.length() == 0) {
69             title = dataPath;
70         }
71         return new VideoObject(this, mContentResolver,
72                 id, cursor.getPosition(), contentUri(id), dataPath,
73                 mimeType, dateTaken, title);
74     }
75 
VideoList(ContentResolver resolver, Uri uri, int sort, String bucketId)76     public VideoList(ContentResolver resolver, Uri uri, int sort,
77             String bucketId) {
78         super(resolver, uri, sort, bucketId);
79     }
80 
getBucketIds()81     public HashMap<String, String> getBucketIds() {
82         Uri uri = mBaseUri.buildUpon()
83                 .appendQueryParameter("distinct", "true").build();
84         Cursor c = Images.Media.query(
85                 mContentResolver, uri,
86                 new String[] {
87                     Media.BUCKET_DISPLAY_NAME,
88                     Media.BUCKET_ID
89                 },
90                 whereClause(), whereClauseArgs(), sortOrder());
91         try {
92             HashMap<String, String> hash = new HashMap<String, String>();
93             while (c.moveToNext()) {
94                 hash.put(c.getString(1), c.getString(0));
95             }
96             return hash;
97         } finally {
98             c.close();
99         }
100     }
101 
whereClause()102     protected String whereClause() {
103         return mBucketId != null
104                 ? Images.Media.BUCKET_ID + " = '" + mBucketId + "'"
105                 : null;
106     }
107 
whereClauseArgs()108     protected String[] whereClauseArgs() {
109         return null;
110     }
111 
112     @Override
createCursor()113     protected Cursor createCursor() {
114         Cursor c = Images.Media.query(
115                 mContentResolver, mBaseUri, VIDEO_PROJECTION,
116                 whereClause(), whereClauseArgs(), sortOrder());
117         return c;
118     }
119 }
120