15fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project/* 25fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 35fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * 45fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 55fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * you may not use this file except in compliance with the License. 65fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * You may obtain a copy of the License at 75fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * 85fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 95fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * 105fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 115fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 125fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * See the License for the specific language governing permissions and 145fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * limitations under the License. 155fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project */ 165fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 17fa954248b41b567dfa2ddd7bd063d3936a51758eDaniel Sandlerpackage com.android.deskclock; 185fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 195fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.content.ContentProvider; 205fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.content.ContentValues; 215fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.content.Context; 225fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.content.UriMatcher; 235fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.database.Cursor; 245fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.database.SQLException; 255fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase; 265fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.database.sqlite.SQLiteQueryBuilder; 275fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.net.Uri; 285fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.text.TextUtils; 295fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 305fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectpublic class AlarmProvider extends ContentProvider { 311a7925761a5db1b424d976ba03fb335e821b7db3Patrick Scott private AlarmDatabaseHelper mOpenHelper; 325fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 335fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project private static final int ALARMS = 1; 345fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project private static final int ALARMS_ID = 2; 355fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project private static final UriMatcher sURLMatcher = new UriMatcher( 365fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project UriMatcher.NO_MATCH); 375fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 385fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project static { 39fa954248b41b567dfa2ddd7bd063d3936a51758eDaniel Sandler sURLMatcher.addURI("com.android.deskclock", "alarm", ALARMS); 40fa954248b41b567dfa2ddd7bd063d3936a51758eDaniel Sandler sURLMatcher.addURI("com.android.deskclock", "alarm/#", ALARMS_ID); 415fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 425fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 435fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project public AlarmProvider() { 445fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 455fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 465fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project @Override 475fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project public boolean onCreate() { 481a7925761a5db1b424d976ba03fb335e821b7db3Patrick Scott mOpenHelper = new AlarmDatabaseHelper(getContext()); 495fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project return true; 505fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 515fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 525fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project @Override 535fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project public Cursor query(Uri url, String[] projectionIn, String selection, 545fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project String[] selectionArgs, String sort) { 555fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); 565fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 575fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project // Generate the body of the query 585fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project int match = sURLMatcher.match(url); 595fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project switch (match) { 605fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project case ALARMS: 615fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project qb.setTables("alarms"); 625fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project break; 635fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project case ALARMS_ID: 645fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project qb.setTables("alarms"); 655fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project qb.appendWhere("_id="); 665fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project qb.appendWhere(url.getPathSegments().get(1)); 675fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project break; 685fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project default: 695fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project throw new IllegalArgumentException("Unknown URL " + url); 705fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 715fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 725fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project SQLiteDatabase db = mOpenHelper.getReadableDatabase(); 735fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project Cursor ret = qb.query(db, projectionIn, selection, selectionArgs, 745fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project null, null, sort); 755fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 765fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project if (ret == null) { 775fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project if (Log.LOGV) Log.v("Alarms.query: failed"); 785fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } else { 795fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project ret.setNotificationUri(getContext().getContentResolver(), url); 805fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 815fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 825fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project return ret; 835fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 845fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 855fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project @Override 865fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project public String getType(Uri url) { 875fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project int match = sURLMatcher.match(url); 885fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project switch (match) { 895fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project case ALARMS: 905fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project return "vnd.android.cursor.dir/alarms"; 915fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project case ALARMS_ID: 925fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project return "vnd.android.cursor.item/alarms"; 935fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project default: 945fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project throw new IllegalArgumentException("Unknown URL"); 955fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 965fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 975fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 985fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project @Override 995fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project public int update(Uri url, ContentValues values, String where, String[] whereArgs) { 1005fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project int count; 1015fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project long rowId = 0; 1025fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project int match = sURLMatcher.match(url); 1035fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project SQLiteDatabase db = mOpenHelper.getWritableDatabase(); 1045fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project switch (match) { 1055fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project case ALARMS_ID: { 1065fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project String segment = url.getPathSegments().get(1); 1075fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project rowId = Long.parseLong(segment); 1085fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project count = db.update("alarms", values, "_id=" + rowId, null); 1095fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project break; 1105fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1115fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project default: { 1125fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project throw new UnsupportedOperationException( 1135fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project "Cannot update URL: " + url); 1145fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1155fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1165fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project if (Log.LOGV) Log.v("*** notifyChange() rowId: " + rowId + " url " + url); 1175fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project getContext().getContentResolver().notifyChange(url, null); 1185fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project return count; 1195fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1205fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 1215fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project @Override 1225fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project public Uri insert(Uri url, ContentValues initialValues) { 1235fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project if (sURLMatcher.match(url) != ALARMS) { 1245fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project throw new IllegalArgumentException("Cannot insert into URL: " + url); 1255fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1265fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 1271a7925761a5db1b424d976ba03fb335e821b7db3Patrick Scott Uri newUrl = mOpenHelper.commonInsert(initialValues); 1285fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project getContext().getContentResolver().notifyChange(newUrl, null); 1295fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project return newUrl; 1305fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1315fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 1325fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project public int delete(Uri url, String where, String[] whereArgs) { 1335fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project SQLiteDatabase db = mOpenHelper.getWritableDatabase(); 1345fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project int count; 1355fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project long rowId = 0; 1365fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project switch (sURLMatcher.match(url)) { 1375fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project case ALARMS: 1385fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project count = db.delete("alarms", where, whereArgs); 1395fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project break; 1405fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project case ALARMS_ID: 1415fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project String segment = url.getPathSegments().get(1); 1425fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project rowId = Long.parseLong(segment); 1435fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project if (TextUtils.isEmpty(where)) { 1445fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project where = "_id=" + segment; 1455fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } else { 1465fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project where = "_id=" + segment + " AND (" + where + ")"; 1475fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1485fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project count = db.delete("alarms", where, whereArgs); 1495fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project break; 1505fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project default: 1515fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project throw new IllegalArgumentException("Cannot delete from URL: " + url); 1525fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1535fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 1545fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project getContext().getContentResolver().notifyChange(url, null); 1555fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project return count; 1565fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1575fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project} 158