/src/com/android/deskclock/provider/ClockProvider.java

https://gitlab.com/parkourkarthik/android_packages_apps_DeskClock · Java · 240 lines · 205 code · 19 blank · 16 comment · 14 complexity · a1f9302b9e8322f0d3b94a7adcc28403 MD5 · raw file

  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.deskclock.provider;
  17. import cyanogenmod.alarmclock.ClockContract;
  18. import android.content.ContentProvider;
  19. import android.content.ContentUris;
  20. import android.content.ContentValues;
  21. import android.content.UriMatcher;
  22. import android.database.Cursor;
  23. import android.database.sqlite.SQLiteDatabase;
  24. import android.database.sqlite.SQLiteQueryBuilder;
  25. import android.net.Uri;
  26. import android.text.TextUtils;
  27. import com.android.deskclock.LogUtils;
  28. public class ClockProvider extends ContentProvider {
  29. private ClockDatabaseHelper mOpenHelper;
  30. private static final int ALARMS = 1;
  31. private static final int ALARMS_ID = 2;
  32. private static final int INSTANCES = 3;
  33. private static final int INSTANCES_ID = 4;
  34. private static final int CITIES = 5;
  35. private static final int CITIES_ID = 6;
  36. private static final UriMatcher sURLMatcher = new UriMatcher(UriMatcher.NO_MATCH);
  37. static {
  38. sURLMatcher.addURI(ClockContract.AUTHORITY, "alarms", ALARMS);
  39. sURLMatcher.addURI(ClockContract.AUTHORITY, "alarms/#", ALARMS_ID);
  40. sURLMatcher.addURI(ClockContract.AUTHORITY, "instances", INSTANCES);
  41. sURLMatcher.addURI(ClockContract.AUTHORITY, "instances/#", INSTANCES_ID);
  42. sURLMatcher.addURI(ClockContract.AUTHORITY, "cities", CITIES);
  43. sURLMatcher.addURI(ClockContract.AUTHORITY, "cities/*", CITIES_ID);
  44. }
  45. public ClockProvider() {
  46. }
  47. @Override
  48. public boolean onCreate() {
  49. mOpenHelper = new ClockDatabaseHelper(getContext());
  50. return true;
  51. }
  52. @Override
  53. public Cursor query(Uri uri, String[] projectionIn, String selection, String[] selectionArgs,
  54. String sort) {
  55. SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
  56. // Generate the body of the query
  57. int match = sURLMatcher.match(uri);
  58. switch (match) {
  59. case ALARMS:
  60. qb.setTables(ClockDatabaseHelper.ALARMS_TABLE_NAME);
  61. break;
  62. case ALARMS_ID:
  63. qb.setTables(ClockDatabaseHelper.ALARMS_TABLE_NAME);
  64. qb.appendWhere(ClockContract.AlarmsColumns._ID + "=");
  65. qb.appendWhere(uri.getLastPathSegment());
  66. break;
  67. case INSTANCES:
  68. qb.setTables(ClockDatabaseHelper.INSTANCES_TABLE_NAME);
  69. break;
  70. case INSTANCES_ID:
  71. qb.setTables(ClockDatabaseHelper.INSTANCES_TABLE_NAME);
  72. qb.appendWhere(ClockContract.InstancesColumns._ID + "=");
  73. qb.appendWhere(uri.getLastPathSegment());
  74. break;
  75. case CITIES:
  76. qb.setTables(ClockDatabaseHelper.CITIES_TABLE_NAME);
  77. break;
  78. case CITIES_ID:
  79. qb.setTables(ClockDatabaseHelper.CITIES_TABLE_NAME);
  80. qb.appendWhere(ClockContract.CitiesColumns.CITY_ID + "=");
  81. qb.appendWhere(uri.getLastPathSegment());
  82. break;
  83. default:
  84. throw new IllegalArgumentException("Unknown URL " + uri);
  85. }
  86. SQLiteDatabase db = mOpenHelper.getReadableDatabase();
  87. Cursor ret = qb.query(db, projectionIn, selection, selectionArgs,
  88. null, null, sort);
  89. if (ret == null) {
  90. LogUtils.e("Alarms.query: failed");
  91. } else {
  92. ret.setNotificationUri(getContext().getContentResolver(), uri);
  93. }
  94. return ret;
  95. }
  96. @Override
  97. public String getType(Uri uri) {
  98. int match = sURLMatcher.match(uri);
  99. switch (match) {
  100. case ALARMS:
  101. return "vnd.android.cursor.dir/alarms";
  102. case ALARMS_ID:
  103. return "vnd.android.cursor.item/alarms";
  104. case INSTANCES:
  105. return "vnd.android.cursor.dir/instances";
  106. case INSTANCES_ID:
  107. return "vnd.android.cursor.item/instances";
  108. case CITIES:
  109. return "vnd.android.cursor.dir/cities";
  110. case CITIES_ID:
  111. return "vnd.android.cursor.item/cities";
  112. default:
  113. throw new IllegalArgumentException("Unknown URL");
  114. }
  115. }
  116. @Override
  117. public int update(Uri uri, ContentValues values, String where, String[] whereArgs) {
  118. int count;
  119. String alarmId;
  120. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  121. switch (sURLMatcher.match(uri)) {
  122. case ALARMS_ID:
  123. alarmId = uri.getLastPathSegment();
  124. count = db.update(ClockDatabaseHelper.ALARMS_TABLE_NAME, values,
  125. ClockContract.AlarmsColumns._ID + "=" + alarmId,
  126. null);
  127. break;
  128. case INSTANCES_ID:
  129. alarmId = uri.getLastPathSegment();
  130. count = db.update(ClockDatabaseHelper.INSTANCES_TABLE_NAME, values,
  131. ClockContract.InstancesColumns._ID + "=" + alarmId,
  132. null);
  133. break;
  134. case CITIES_ID:
  135. alarmId = uri.getLastPathSegment();
  136. count = db.update(ClockDatabaseHelper.CITIES_TABLE_NAME, values,
  137. ClockContract.CitiesColumns.CITY_ID + "=" + alarmId,
  138. null);
  139. break;
  140. default: {
  141. throw new UnsupportedOperationException(
  142. "Cannot update URL: " + uri);
  143. }
  144. }
  145. LogUtils.v("*** notifyChange() id: " + alarmId + " url " + uri);
  146. getContext().getContentResolver().notifyChange(uri, null);
  147. return count;
  148. }
  149. @Override
  150. public Uri insert(Uri uri, ContentValues initialValues) {
  151. long rowId;
  152. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  153. switch (sURLMatcher.match(uri)) {
  154. case ALARMS:
  155. rowId = mOpenHelper.fixAlarmInsert(initialValues);
  156. break;
  157. case INSTANCES:
  158. rowId = db.insert(ClockDatabaseHelper.INSTANCES_TABLE_NAME, null, initialValues);
  159. break;
  160. case CITIES:
  161. rowId = db.insert(ClockDatabaseHelper.CITIES_TABLE_NAME, null, initialValues);
  162. break;
  163. default:
  164. throw new IllegalArgumentException("Cannot insert from URL: " + uri);
  165. }
  166. Uri uriResult = ContentUris.withAppendedId(ClockContract.AlarmsColumns.CONTENT_URI, rowId);
  167. getContext().getContentResolver().notifyChange(uriResult, null);
  168. return uriResult;
  169. }
  170. @Override
  171. public int delete(Uri uri, String where, String[] whereArgs) {
  172. int count;
  173. String primaryKey;
  174. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  175. switch (sURLMatcher.match(uri)) {
  176. case ALARMS:
  177. count = db.delete(ClockDatabaseHelper.ALARMS_TABLE_NAME, where, whereArgs);
  178. break;
  179. case ALARMS_ID:
  180. primaryKey = uri.getLastPathSegment();
  181. if (TextUtils.isEmpty(where)) {
  182. where = ClockContract.AlarmsColumns._ID + "=" + primaryKey;
  183. } else {
  184. where = ClockContract.AlarmsColumns._ID + "=" + primaryKey +
  185. " AND (" + where + ")";
  186. }
  187. count = db.delete(ClockDatabaseHelper.ALARMS_TABLE_NAME, where, whereArgs);
  188. break;
  189. case INSTANCES:
  190. count = db.delete(ClockDatabaseHelper.INSTANCES_TABLE_NAME, where, whereArgs);
  191. break;
  192. case INSTANCES_ID:
  193. primaryKey = uri.getLastPathSegment();
  194. if (TextUtils.isEmpty(where)) {
  195. where = ClockContract.InstancesColumns._ID + "=" + primaryKey;
  196. } else {
  197. where = ClockContract.InstancesColumns._ID + "=" + primaryKey +
  198. " AND (" + where + ")";
  199. }
  200. count = db.delete(ClockDatabaseHelper.INSTANCES_TABLE_NAME, where, whereArgs);
  201. break;
  202. case CITIES:
  203. count = db.delete(ClockDatabaseHelper.CITIES_TABLE_NAME, where, whereArgs);
  204. break;
  205. case CITIES_ID:
  206. primaryKey = uri.getLastPathSegment();
  207. if (TextUtils.isEmpty(where)) {
  208. where = ClockContract.CitiesColumns.CITY_ID + "=" + primaryKey;
  209. } else {
  210. where = ClockContract.CitiesColumns.CITY_ID +"=" + primaryKey +
  211. " AND (" + where + ")";
  212. }
  213. count = db.delete(ClockDatabaseHelper.CITIES_TABLE_NAME, where, whereArgs);
  214. break;
  215. default:
  216. throw new IllegalArgumentException("Cannot delete from URL: " + uri);
  217. }
  218. getContext().getContentResolver().notifyChange(uri, null);
  219. return count;
  220. }
  221. }