1 /*
2  * Copyright (C) 2018 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.jobscheduler;
18 
19 import android.content.ContentProvider;
20 import android.content.ContentValues;
21 import android.content.Context;
22 import android.content.UriMatcher;
23 import android.database.Cursor;
24 import android.database.sqlite.SQLiteDatabase;
25 import android.database.sqlite.SQLiteOpenHelper;
26 import android.net.Uri;
27 
28 /**
29  * Stub content provider used for generating content change reports
30  */
31 public class DummyJobContentProvider extends ContentProvider {
32     private static final String DATABASE_NAME = "dummy.db";
33     private static final String NAME_VALUE_TABLE = "name_value";
34 
35     private DatabaseHelper mDbHelper;
36     private static UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
37 
38     private static final int MATCH_NAME_VALUE      = 1;
39 
40     public static final String AUTHORITY = "android.jobscheduler.dummyprovider";
41     public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
42 
43     public static final String _ID   = "_id";
44     public static final String NAME  = "name";
45     public static final String VALUE = "value";
46 
47     static {
sMatcher.addURI(AUTHORITY, null, MATCH_NAME_VALUE)48         sMatcher.addURI(AUTHORITY, null, MATCH_NAME_VALUE);
49     }
50 
51     /*
52      * (non-Javadoc)
53      * @see android.content.ContentProvider#onCreate()
54      */
55     @Override
onCreate()56     public boolean onCreate() {
57         mDbHelper = new DatabaseHelper(getContext());
58         return true;
59     }
60 
61     private class DatabaseHelper extends SQLiteOpenHelper {
62         private static final int DATABASE_VERSION = 1;
63 
DatabaseHelper(Context context)64         DatabaseHelper(Context context) {
65             super(context, DATABASE_NAME, null, DATABASE_VERSION);
66         }
67 
68         @Override
onCreate(SQLiteDatabase db)69         public void onCreate(SQLiteDatabase db) {
70             // create an empty name_value table
71             db.execSQL("CREATE TABLE " + NAME_VALUE_TABLE + " (" + _ID + " INTEGER PRIMARY KEY,"
72                     + NAME + " TEXT," + VALUE + " TEXT"+ ");");
73         }
74 
75         @Override
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)76         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
77         }
78     }
79 
80     /*
81      * (non-Javadoc)
82      * @see android.content.ContentProvider#insert(android.net.Uri,
83      * android.content.ContentValues)
84      */
85     @Override
insert(Uri uri, ContentValues values)86     public Uri insert(Uri uri, ContentValues values) {
87         String tbName = getTableName(uri);
88         if (tbName == null) {
89             return null;
90         }
91         SQLiteDatabase db = mDbHelper.getWritableDatabase();
92         db.insert(tbName, VALUE, values);
93         getContext().getContentResolver().notifyChange(uri, null);
94         return uri;
95     }
96 
97     /*
98      * (non-Javadoc)
99      * @see android.content.ContentProvider#query(android.net.Uri,
100      * java.lang.String[], java.lang.String, java.lang.String[],
101      * java.lang.String)
102      */
103     @Override
query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)104     public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
105             String sortOrder) {
106         String tbName = getTableName(uri);
107         if (tbName == null) {
108             return null;
109         }
110         SQLiteDatabase db = mDbHelper.getReadableDatabase();
111         Cursor c = db.query(tbName, projection, selection, selectionArgs, null, null, sortOrder);
112         c.setNotificationUri(getContext().getContentResolver(), uri);
113         return c;
114     }
115 
getTableName(Uri uri)116     private String getTableName(Uri uri) {
117         switch (sMatcher.match(uri)) {
118             case MATCH_NAME_VALUE:
119                 return NAME_VALUE_TABLE;
120             default:
121                 throw new UnsupportedOperationException();
122         }
123     }
124 
125     /*
126      * (non-Javadoc)
127      * @see android.content.ContentProvider#update(android.net.Uri,
128      * android.content.ContentValues, java.lang.String, java.lang.String[])
129      */
130     @Override
update(Uri uri, ContentValues values, String selection, String[] selectionArgs)131     public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
132         String tbName = getTableName(uri);
133         if (tbName == null) {
134             return 0;
135         }
136         SQLiteDatabase db = mDbHelper.getWritableDatabase();
137         int count = db.update(tbName, values, selection, selectionArgs);
138         getContext().getContentResolver().notifyChange(uri, null);
139         return count;
140     }
141 
142     /*
143      * (non-Javadoc)
144      * @see android.content.ContentProvider#delete(android.net.Uri,
145      * java.lang.String, java.lang.String[])
146      */
147     @Override
delete(Uri uri, String selection, String[] selectionArgs)148     public int delete(Uri uri, String selection, String[] selectionArgs) {
149         String tbName = getTableName(uri);
150         if (tbName == null) {
151             return 0;
152         }
153         SQLiteDatabase db = mDbHelper.getWritableDatabase();
154         int count = db.delete(tbName, selection, selectionArgs);
155         getContext().getContentResolver().notifyChange(uri, null);
156         return count;
157     }
158 
159     /*
160      * (non-Javadoc)
161      * @see android.content.ContentProvider#getType(android.net.Uri)
162      */
163     @Override
getType(Uri uri)164     public String getType(Uri uri) {
165         return null;
166     }
167 }
168