Home | History | Annotate | Download | only in data
      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 
     70     public static long queryAlbumIdFromParentId(SQLiteDatabase db, long parentId) {
     71         return queryId(db, Albums.TABLE, PROJECTION_ALBUMS, SELECTION_ALBUM_PARENT_ID, parentId);
     72     }
     73 
     74     public static long queryPhotoIdFromAlbumId(SQLiteDatabase db, long albumId) {
     75         return queryId(db, Photos.TABLE, PROJECTION_PHOTOS, SELECTION_PHOTO_ALBUM_ID, albumId);
     76     }
     77 
     78     public static long queryAccountIdFromName(SQLiteDatabase db, String accountName) {
     79         return queryId(db, Accounts.TABLE, PROJECTION_ACCOUNTS, SELECTION_ACCOUNT_ID, accountName);
     80     }
     81 
     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 
    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 
    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 
    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 
    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