/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.android.locationtracker.data; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.net.Uri; import android.util.Log; /** * Content provider for location tracking. * * It is recommended to use the TrackerDataHelper class to access this data * rather than this class directly */ public class TrackerProvider extends ContentProvider { public static final Uri CONTENT_URI = Uri .parse("content://com.android.locationtracker"); private static final String DB_NAME = "tracking.db"; private static final String TABLE_NAME = "tracking"; private static final int DB_VERSION = 1; private static final String LOG_TAG = "TrackerProvider"; /** * This class helps open, create, and upgrade the database file. */ private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { StringBuilder queryBuilder = new StringBuilder(); queryBuilder.append(String.format("CREATE TABLE %s (", TABLE_NAME)); TrackerEntry.buildCreationString(queryBuilder); queryBuilder.append(");"); db.execSQL(queryBuilder.toString()); db.setVersion(DB_VERSION); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO: reimplement this when dB version changes Log.w(LOG_TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } } private DatabaseHelper mOpenHelper; @Override public boolean onCreate() { mOpenHelper = new DatabaseHelper(getContext()); return true; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { SQLiteDatabase db = mOpenHelper.getWritableDatabase(); int result = db.delete(TABLE_NAME, selection, selectionArgs); getContext().getContentResolver().notifyChange(uri, null); return result; } @Override public String getType(Uri uri) { throw new UnsupportedOperationException(); } @Override public Uri insert(Uri uri, ContentValues values) { SQLiteDatabase db = mOpenHelper.getWritableDatabase(); long rowId = db.insert(TABLE_NAME, null, values); if (rowId > 0) { Uri addedUri = ContentUris.withAppendedId(CONTENT_URI, rowId); getContext().getContentResolver().notifyChange(addedUri, null); return addedUri; } return null; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // TODO: extract limit from URI ? Cursor cursor = db.query(TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder); getContext().getContentResolver().notifyChange(uri, null); return cursor; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { throw new UnsupportedOperationException(); } }