Home | History | Annotate | Download | only in activity
      1 /*
      2  * Copyright (C) 2007 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 android.app.activity;
     18 
     19 import android.content.UriMatcher;
     20 import android.content.*;
     21 import android.database.Cursor;
     22 import android.database.sqlite.SQLiteDatabase;
     23 import android.database.sqlite.SQLiteOpenHelper;
     24 import android.database.sqlite.SQLiteQueryBuilder;
     25 import android.net.Uri;
     26 import android.util.Log;
     27 
     28 /** Simple test provider that runs in the local process. */
     29 public class LocalProvider extends ContentProvider {
     30     private static final String TAG = "LocalProvider";
     31 
     32     private static final String AUTHORITY = "com.android.frameworks.coretests.LocalProvider";
     33     private static final String TABLE_DATA_NAME = "data";
     34     public static final Uri TABLE_DATA_URI =
     35             Uri.parse("content://" + AUTHORITY + "/" + TABLE_DATA_NAME);
     36 
     37     public static final String COLUMN_TEXT_NAME = "text";
     38     public static final String COLUMN_INTEGER_NAME = "integer";
     39 
     40     public static final String TEXT1 = "first data";
     41     public static final String TEXT2 = "second data";
     42     public static final int INTEGER1 = 100;
     43     public static final int INTEGER2 = 101;
     44 
     45     private SQLiteOpenHelper mOpenHelper;
     46 
     47     private static final int DATA = 1;
     48     private static final int DATA_ID = 2;
     49     private static final UriMatcher sURLMatcher = new UriMatcher(
     50             UriMatcher.NO_MATCH);
     51 
     52     static {
     53         sURLMatcher.addURI("*", "data", DATA);
     54         sURLMatcher.addURI("*", "data/#", DATA_ID);
     55     }
     56 
     57     private static class DatabaseHelper extends SQLiteOpenHelper {
     58         private static final String DATABASE_NAME = "local.db";
     59         private static final int DATABASE_VERSION = 1;
     60 
     61         public DatabaseHelper(Context context) {
     62             super(context, DATABASE_NAME, null, DATABASE_VERSION);
     63         }
     64 
     65         @Override
     66         public void onCreate(SQLiteDatabase db) {
     67             db.execSQL("CREATE TABLE " + TABLE_DATA_NAME + " (" +
     68                        "_id INTEGER PRIMARY KEY," +
     69                        COLUMN_TEXT_NAME + " TEXT, " +
     70                        COLUMN_INTEGER_NAME + " INTEGER);");
     71 
     72             // insert alarms
     73             db.execSQL(getInsertCommand(TEXT1, INTEGER1));
     74             db.execSQL(getInsertCommand(TEXT2, INTEGER2));
     75         }
     76 
     77         private String getInsertCommand(String textValue, int integerValue) {
     78             return "INSERT INTO " + TABLE_DATA_NAME
     79                     + " (" + COLUMN_TEXT_NAME + ", " + COLUMN_INTEGER_NAME + ") "
     80                     + "VALUES ('" + textValue + "', " + integerValue + ");";
     81         }
     82 
     83         @Override
     84         public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) {
     85             Log.w(TAG, "Upgrading test database from version " +
     86                   oldVersion + " to " + currentVersion +
     87                   ", which will destroy all old data");
     88             db.execSQL("DROP TABLE IF EXISTS data");
     89             onCreate(db);
     90         }
     91     }
     92 
     93 
     94     public LocalProvider() {
     95     }
     96 
     97     static public Uri getTableDataUriForRow(int rowId) {
     98         return Uri.parse("content://" + AUTHORITY + "/" + TABLE_DATA_NAME + "/" + rowId);
     99     }
    100 
    101     @Override
    102     public boolean onCreate() {
    103         mOpenHelper = new DatabaseHelper(getContext());
    104         return true;
    105     }
    106 
    107     @Override
    108     public Cursor query(Uri url, String[] projectionIn, String selection,
    109             String[] selectionArgs, String sort) {
    110         SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
    111 
    112         // Generate the body of the query
    113         int match = sURLMatcher.match(url);
    114         switch (match) {
    115             case DATA:
    116                 qb.setTables("data");
    117                 break;
    118             case DATA_ID:
    119                 qb.setTables("data");
    120                 qb.appendWhere("_id=");
    121                 qb.appendWhere(url.getPathSegments().get(1));
    122                 break;
    123             default:
    124                 throw new IllegalArgumentException("Unknown URL " + url);
    125         }
    126 
    127         SQLiteDatabase db = mOpenHelper.getReadableDatabase();
    128         Cursor ret = qb.query(db, projectionIn, selection, selectionArgs,
    129                               null, null, sort);
    130 
    131         if (ret == null) {
    132             if (false) Log.d(TAG, "Alarms.query: failed");
    133         } else {
    134             ret.setNotificationUri(getContext().getContentResolver(), url);
    135         }
    136 
    137         return ret;
    138     }
    139 
    140     @Override
    141     public String getType(Uri url) {
    142         int match = sURLMatcher.match(url);
    143         switch (match) {
    144             case DATA:
    145                 return "vnd.android.cursor.dir/vnd.google.unit_tests.local";
    146             case DATA_ID:
    147                 return "vnd.android.cursor.item/vnd.google.unit_tests.local";
    148             default:
    149                 throw new IllegalArgumentException("Unknown URL");
    150         }
    151     }
    152 
    153     @Override
    154     public int update(Uri url, ContentValues values, String where, String[] whereArgs) {
    155         int count;
    156         long rowId = 0;
    157         int match = sURLMatcher.match(url);
    158         SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    159         switch (match) {
    160             case DATA_ID: {
    161                 String segment = url.getPathSegments().get(1);
    162                 rowId = Long.parseLong(segment);
    163                 count = db.update("data", values, "_id=" + rowId, null);
    164                 break;
    165             }
    166             default: {
    167                 throw new UnsupportedOperationException(
    168                         "Cannot update URL: " + url);
    169             }
    170         }
    171         if (false) Log.d(TAG, "*** notifyChange() rowId: " + rowId);
    172         getContext().getContentResolver().notifyChange(url, null);
    173         return count;
    174     }
    175 
    176 
    177     @Override
    178     public Uri insert(Uri url, ContentValues initialValues) {
    179         return null;
    180     }
    181 
    182     @Override
    183     public int delete(Uri url, String where, String[] whereArgs) {
    184         throw new UnsupportedOperationException("delete not supported");
    185     }
    186 }
    187