• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2013 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 package com.android.photos.data;
17 
18 import android.content.ContentValues;
19 import android.database.Cursor;
20 import android.database.sqlite.SQLiteDatabase;
21 
22 import com.android.photos.data.PhotoProvider.Accounts;
23 import com.android.photos.data.PhotoProvider.Albums;
24 import com.android.photos.data.PhotoProvider.Metadata;
25 import com.android.photos.data.PhotoProvider.Photos;
26 
27 import junit.framework.AssertionFailedError;
28 
29 public class PhotoDatabaseUtils {
30     public static String[] PROJECTION_ALBUMS = {
31         Albums._ID,
32         Albums.ACCOUNT_ID,
33         Albums.PARENT_ID,
34         Albums.VISIBILITY,
35         Albums.LOCATION_STRING,
36         Albums.TITLE,
37         Albums.SUMMARY,
38         Albums.DATE_PUBLISHED,
39         Albums.DATE_MODIFIED,
40     };
41 
42     public static String[] PROJECTION_METADATA = {
43         Metadata.PHOTO_ID,
44         Metadata.KEY,
45         Metadata.VALUE,
46     };
47 
48     public static String[] PROJECTION_PHOTOS = {
49         Photos._ID,
50         Photos.ACCOUNT_ID,
51         Photos.WIDTH,
52         Photos.HEIGHT,
53         Photos.DATE_TAKEN,
54         Photos.ALBUM_ID,
55         Photos.MIME_TYPE,
56         Photos.TITLE,
57         Photos.DATE_MODIFIED,
58         Photos.ROTATION,
59     };
60 
61     public static String[] PROJECTION_ACCOUNTS = {
62         Accounts._ID,
63         Accounts.ACCOUNT_NAME,
64     };
65 
66     private static String SELECTION_ALBUM_PARENT_ID = Albums.PARENT_ID + " = ?";
67     private static String SELECTION_PHOTO_ALBUM_ID = Photos.ALBUM_ID + " = ?";
68     private static String SELECTION_ACCOUNT_ID = Accounts.ACCOUNT_NAME + " = ?";
69 
queryAlbumIdFromParentId(SQLiteDatabase db, long parentId)70     public static long queryAlbumIdFromParentId(SQLiteDatabase db, long parentId) {
71         return queryId(db, Albums.TABLE, PROJECTION_ALBUMS, SELECTION_ALBUM_PARENT_ID, parentId);
72     }
73 
queryPhotoIdFromAlbumId(SQLiteDatabase db, long albumId)74     public static long queryPhotoIdFromAlbumId(SQLiteDatabase db, long albumId) {
75         return queryId(db, Photos.TABLE, PROJECTION_PHOTOS, SELECTION_PHOTO_ALBUM_ID, albumId);
76     }
77 
queryAccountIdFromName(SQLiteDatabase db, String accountName)78     public static long queryAccountIdFromName(SQLiteDatabase db, String accountName) {
79         return queryId(db, Accounts.TABLE, PROJECTION_ACCOUNTS, SELECTION_ACCOUNT_ID, accountName);
80     }
81 
queryId(SQLiteDatabase db, String table, String[] projection, String selection, Object parameter)82     public static long queryId(SQLiteDatabase db, String table, String[] projection,
83             String selection, Object parameter) {
84         String paramString = parameter == null ? null : parameter.toString();
85         String[] selectionArgs = {
86             paramString,
87         };
88         Cursor cursor = db.query(table, projection, selection, selectionArgs, null, null, null);
89         try {
90             if (cursor.getCount() != 1 || !cursor.moveToNext()) {
91                 throw new AssertionFailedError("Couldn't find item in table");
92             }
93             long id = cursor.getLong(0);
94             return id;
95         } finally {
96             cursor.close();
97         }
98     }
99 
insertPhoto(SQLiteDatabase db, Integer width, Integer height, Long dateTaken, Long albumId, String mimeType, Long accountId)100     public static boolean insertPhoto(SQLiteDatabase db, Integer width, Integer height,
101             Long dateTaken, Long albumId, String mimeType, Long accountId) {
102         ContentValues values = new ContentValues();
103         values.put(Photos.WIDTH, width);
104         values.put(Photos.HEIGHT, height);
105         values.put(Photos.DATE_TAKEN, dateTaken);
106         values.put(Photos.ALBUM_ID, albumId);
107         values.put(Photos.MIME_TYPE, mimeType);
108         values.put(Photos.ACCOUNT_ID, accountId);
109         return db.insert(Photos.TABLE, null, values) != -1;
110     }
111 
insertAlbum(SQLiteDatabase db, Long parentId, String title, Integer privacy, Long accountId)112     public static boolean insertAlbum(SQLiteDatabase db, Long parentId, String title,
113             Integer privacy, Long accountId) {
114         ContentValues values = new ContentValues();
115         values.put(Albums.PARENT_ID, parentId);
116         values.put(Albums.TITLE, title);
117         values.put(Albums.VISIBILITY, privacy);
118         values.put(Albums.ACCOUNT_ID, accountId);
119         return db.insert(Albums.TABLE, null, values) != -1;
120     }
121 
insertMetadata(SQLiteDatabase db, Long photosId, String key, String value)122     public static boolean insertMetadata(SQLiteDatabase db, Long photosId, String key, String value) {
123         ContentValues values = new ContentValues();
124         values.put(Metadata.PHOTO_ID, photosId);
125         values.put(Metadata.KEY, key);
126         values.put(Metadata.VALUE, value);
127         return db.insert(Metadata.TABLE, null, values) != -1;
128     }
129 
insertAccount(SQLiteDatabase db, String name)130     public static boolean insertAccount(SQLiteDatabase db, String name) {
131         ContentValues values = new ContentValues();
132         values.put(Accounts.ACCOUNT_NAME, name);
133         return db.insert(Accounts.TABLE, null, values) != -1;
134     }
135 }
136