1*b7c941bbSAndroid Build Coastguard Worker /* 2*b7c941bbSAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project. 3*b7c941bbSAndroid Build Coastguard Worker * 4*b7c941bbSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*b7c941bbSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*b7c941bbSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*b7c941bbSAndroid Build Coastguard Worker * 8*b7c941bbSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*b7c941bbSAndroid Build Coastguard Worker * 10*b7c941bbSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*b7c941bbSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*b7c941bbSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*b7c941bbSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*b7c941bbSAndroid Build Coastguard Worker * limitations under the License. 15*b7c941bbSAndroid Build Coastguard Worker */ 16*b7c941bbSAndroid Build Coastguard Worker 17*b7c941bbSAndroid Build Coastguard Worker package android.jobscheduler; 18*b7c941bbSAndroid Build Coastguard Worker 19*b7c941bbSAndroid Build Coastguard Worker import android.content.ContentProvider; 20*b7c941bbSAndroid Build Coastguard Worker import android.content.ContentValues; 21*b7c941bbSAndroid Build Coastguard Worker import android.content.Context; 22*b7c941bbSAndroid Build Coastguard Worker import android.content.UriMatcher; 23*b7c941bbSAndroid Build Coastguard Worker import android.database.Cursor; 24*b7c941bbSAndroid Build Coastguard Worker import android.database.sqlite.SQLiteDatabase; 25*b7c941bbSAndroid Build Coastguard Worker import android.database.sqlite.SQLiteOpenHelper; 26*b7c941bbSAndroid Build Coastguard Worker import android.net.Uri; 27*b7c941bbSAndroid Build Coastguard Worker 28*b7c941bbSAndroid Build Coastguard Worker /** 29*b7c941bbSAndroid Build Coastguard Worker * Stub content provider used for generating content change reports 30*b7c941bbSAndroid Build Coastguard Worker */ 31*b7c941bbSAndroid Build Coastguard Worker public class DummyJobContentProvider extends ContentProvider { 32*b7c941bbSAndroid Build Coastguard Worker private static final String DATABASE_NAME = "dummy.db"; 33*b7c941bbSAndroid Build Coastguard Worker private static final String NAME_VALUE_TABLE = "name_value"; 34*b7c941bbSAndroid Build Coastguard Worker 35*b7c941bbSAndroid Build Coastguard Worker private DatabaseHelper mDbHelper; 36*b7c941bbSAndroid Build Coastguard Worker private static UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH); 37*b7c941bbSAndroid Build Coastguard Worker 38*b7c941bbSAndroid Build Coastguard Worker private static final int MATCH_NAME_VALUE = 1; 39*b7c941bbSAndroid Build Coastguard Worker 40*b7c941bbSAndroid Build Coastguard Worker public static final String AUTHORITY = "android.jobscheduler.dummyprovider"; 41*b7c941bbSAndroid Build Coastguard Worker public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY); 42*b7c941bbSAndroid Build Coastguard Worker 43*b7c941bbSAndroid Build Coastguard Worker public static final String _ID = "_id"; 44*b7c941bbSAndroid Build Coastguard Worker public static final String NAME = "name"; 45*b7c941bbSAndroid Build Coastguard Worker public static final String VALUE = "value"; 46*b7c941bbSAndroid Build Coastguard Worker 47*b7c941bbSAndroid Build Coastguard Worker static { sMatcher.addURI(AUTHORITY, null, MATCH_NAME_VALUE)48*b7c941bbSAndroid Build Coastguard Worker sMatcher.addURI(AUTHORITY, null, MATCH_NAME_VALUE); 49*b7c941bbSAndroid Build Coastguard Worker } 50*b7c941bbSAndroid Build Coastguard Worker 51*b7c941bbSAndroid Build Coastguard Worker /* 52*b7c941bbSAndroid Build Coastguard Worker * (non-Javadoc) 53*b7c941bbSAndroid Build Coastguard Worker * @see android.content.ContentProvider#onCreate() 54*b7c941bbSAndroid Build Coastguard Worker */ 55*b7c941bbSAndroid Build Coastguard Worker @Override onCreate()56*b7c941bbSAndroid Build Coastguard Worker public boolean onCreate() { 57*b7c941bbSAndroid Build Coastguard Worker mDbHelper = new DatabaseHelper(getContext()); 58*b7c941bbSAndroid Build Coastguard Worker return true; 59*b7c941bbSAndroid Build Coastguard Worker } 60*b7c941bbSAndroid Build Coastguard Worker 61*b7c941bbSAndroid Build Coastguard Worker private class DatabaseHelper extends SQLiteOpenHelper { 62*b7c941bbSAndroid Build Coastguard Worker private static final int DATABASE_VERSION = 1; 63*b7c941bbSAndroid Build Coastguard Worker DatabaseHelper(Context context)64*b7c941bbSAndroid Build Coastguard Worker DatabaseHelper(Context context) { 65*b7c941bbSAndroid Build Coastguard Worker super(context, DATABASE_NAME, null, DATABASE_VERSION); 66*b7c941bbSAndroid Build Coastguard Worker } 67*b7c941bbSAndroid Build Coastguard Worker 68*b7c941bbSAndroid Build Coastguard Worker @Override onCreate(SQLiteDatabase db)69*b7c941bbSAndroid Build Coastguard Worker public void onCreate(SQLiteDatabase db) { 70*b7c941bbSAndroid Build Coastguard Worker // create an empty name_value table 71*b7c941bbSAndroid Build Coastguard Worker db.execSQL("CREATE TABLE " + NAME_VALUE_TABLE + " (" + _ID + " INTEGER PRIMARY KEY," 72*b7c941bbSAndroid Build Coastguard Worker + NAME + " TEXT," + VALUE + " TEXT"+ ");"); 73*b7c941bbSAndroid Build Coastguard Worker } 74*b7c941bbSAndroid Build Coastguard Worker 75*b7c941bbSAndroid Build Coastguard Worker @Override onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)76*b7c941bbSAndroid Build Coastguard Worker public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 77*b7c941bbSAndroid Build Coastguard Worker } 78*b7c941bbSAndroid Build Coastguard Worker } 79*b7c941bbSAndroid Build Coastguard Worker 80*b7c941bbSAndroid Build Coastguard Worker /* 81*b7c941bbSAndroid Build Coastguard Worker * (non-Javadoc) 82*b7c941bbSAndroid Build Coastguard Worker * @see android.content.ContentProvider#insert(android.net.Uri, 83*b7c941bbSAndroid Build Coastguard Worker * android.content.ContentValues) 84*b7c941bbSAndroid Build Coastguard Worker */ 85*b7c941bbSAndroid Build Coastguard Worker @Override insert(Uri uri, ContentValues values)86*b7c941bbSAndroid Build Coastguard Worker public Uri insert(Uri uri, ContentValues values) { 87*b7c941bbSAndroid Build Coastguard Worker String tbName = getTableName(uri); 88*b7c941bbSAndroid Build Coastguard Worker if (tbName == null) { 89*b7c941bbSAndroid Build Coastguard Worker return null; 90*b7c941bbSAndroid Build Coastguard Worker } 91*b7c941bbSAndroid Build Coastguard Worker SQLiteDatabase db = mDbHelper.getWritableDatabase(); 92*b7c941bbSAndroid Build Coastguard Worker db.insert(tbName, VALUE, values); 93*b7c941bbSAndroid Build Coastguard Worker getContext().getContentResolver().notifyChange(uri, null); 94*b7c941bbSAndroid Build Coastguard Worker return uri; 95*b7c941bbSAndroid Build Coastguard Worker } 96*b7c941bbSAndroid Build Coastguard Worker 97*b7c941bbSAndroid Build Coastguard Worker /* 98*b7c941bbSAndroid Build Coastguard Worker * (non-Javadoc) 99*b7c941bbSAndroid Build Coastguard Worker * @see android.content.ContentProvider#query(android.net.Uri, 100*b7c941bbSAndroid Build Coastguard Worker * java.lang.String[], java.lang.String, java.lang.String[], 101*b7c941bbSAndroid Build Coastguard Worker * java.lang.String) 102*b7c941bbSAndroid Build Coastguard Worker */ 103*b7c941bbSAndroid Build Coastguard Worker @Override query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)104*b7c941bbSAndroid Build Coastguard Worker public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, 105*b7c941bbSAndroid Build Coastguard Worker String sortOrder) { 106*b7c941bbSAndroid Build Coastguard Worker String tbName = getTableName(uri); 107*b7c941bbSAndroid Build Coastguard Worker if (tbName == null) { 108*b7c941bbSAndroid Build Coastguard Worker return null; 109*b7c941bbSAndroid Build Coastguard Worker } 110*b7c941bbSAndroid Build Coastguard Worker SQLiteDatabase db = mDbHelper.getReadableDatabase(); 111*b7c941bbSAndroid Build Coastguard Worker Cursor c = db.query(tbName, projection, selection, selectionArgs, null, null, sortOrder); 112*b7c941bbSAndroid Build Coastguard Worker c.setNotificationUri(getContext().getContentResolver(), uri); 113*b7c941bbSAndroid Build Coastguard Worker return c; 114*b7c941bbSAndroid Build Coastguard Worker } 115*b7c941bbSAndroid Build Coastguard Worker getTableName(Uri uri)116*b7c941bbSAndroid Build Coastguard Worker private String getTableName(Uri uri) { 117*b7c941bbSAndroid Build Coastguard Worker switch (sMatcher.match(uri)) { 118*b7c941bbSAndroid Build Coastguard Worker case MATCH_NAME_VALUE: 119*b7c941bbSAndroid Build Coastguard Worker return NAME_VALUE_TABLE; 120*b7c941bbSAndroid Build Coastguard Worker default: 121*b7c941bbSAndroid Build Coastguard Worker throw new UnsupportedOperationException(); 122*b7c941bbSAndroid Build Coastguard Worker } 123*b7c941bbSAndroid Build Coastguard Worker } 124*b7c941bbSAndroid Build Coastguard Worker 125*b7c941bbSAndroid Build Coastguard Worker /* 126*b7c941bbSAndroid Build Coastguard Worker * (non-Javadoc) 127*b7c941bbSAndroid Build Coastguard Worker * @see android.content.ContentProvider#update(android.net.Uri, 128*b7c941bbSAndroid Build Coastguard Worker * android.content.ContentValues, java.lang.String, java.lang.String[]) 129*b7c941bbSAndroid Build Coastguard Worker */ 130*b7c941bbSAndroid Build Coastguard Worker @Override update(Uri uri, ContentValues values, String selection, String[] selectionArgs)131*b7c941bbSAndroid Build Coastguard Worker public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { 132*b7c941bbSAndroid Build Coastguard Worker String tbName = getTableName(uri); 133*b7c941bbSAndroid Build Coastguard Worker if (tbName == null) { 134*b7c941bbSAndroid Build Coastguard Worker return 0; 135*b7c941bbSAndroid Build Coastguard Worker } 136*b7c941bbSAndroid Build Coastguard Worker SQLiteDatabase db = mDbHelper.getWritableDatabase(); 137*b7c941bbSAndroid Build Coastguard Worker int count = db.update(tbName, values, selection, selectionArgs); 138*b7c941bbSAndroid Build Coastguard Worker getContext().getContentResolver().notifyChange(uri, null); 139*b7c941bbSAndroid Build Coastguard Worker return count; 140*b7c941bbSAndroid Build Coastguard Worker } 141*b7c941bbSAndroid Build Coastguard Worker 142*b7c941bbSAndroid Build Coastguard Worker /* 143*b7c941bbSAndroid Build Coastguard Worker * (non-Javadoc) 144*b7c941bbSAndroid Build Coastguard Worker * @see android.content.ContentProvider#delete(android.net.Uri, 145*b7c941bbSAndroid Build Coastguard Worker * java.lang.String, java.lang.String[]) 146*b7c941bbSAndroid Build Coastguard Worker */ 147*b7c941bbSAndroid Build Coastguard Worker @Override delete(Uri uri, String selection, String[] selectionArgs)148*b7c941bbSAndroid Build Coastguard Worker public int delete(Uri uri, String selection, String[] selectionArgs) { 149*b7c941bbSAndroid Build Coastguard Worker String tbName = getTableName(uri); 150*b7c941bbSAndroid Build Coastguard Worker if (tbName == null) { 151*b7c941bbSAndroid Build Coastguard Worker return 0; 152*b7c941bbSAndroid Build Coastguard Worker } 153*b7c941bbSAndroid Build Coastguard Worker SQLiteDatabase db = mDbHelper.getWritableDatabase(); 154*b7c941bbSAndroid Build Coastguard Worker int count = db.delete(tbName, selection, selectionArgs); 155*b7c941bbSAndroid Build Coastguard Worker getContext().getContentResolver().notifyChange(uri, null); 156*b7c941bbSAndroid Build Coastguard Worker return count; 157*b7c941bbSAndroid Build Coastguard Worker } 158*b7c941bbSAndroid Build Coastguard Worker 159*b7c941bbSAndroid Build Coastguard Worker /* 160*b7c941bbSAndroid Build Coastguard Worker * (non-Javadoc) 161*b7c941bbSAndroid Build Coastguard Worker * @see android.content.ContentProvider#getType(android.net.Uri) 162*b7c941bbSAndroid Build Coastguard Worker */ 163*b7c941bbSAndroid Build Coastguard Worker @Override getType(Uri uri)164*b7c941bbSAndroid Build Coastguard Worker public String getType(Uri uri) { 165*b7c941bbSAndroid Build Coastguard Worker return null; 166*b7c941bbSAndroid Build Coastguard Worker } 167*b7c941bbSAndroid Build Coastguard Worker } 168