diff options
Diffstat (limited to 'tests/LocationTracker/src/com/google/android/locationtracker/data/TrackerProvider.java')
-rw-r--r-- | tests/LocationTracker/src/com/google/android/locationtracker/data/TrackerProvider.java | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/tests/LocationTracker/src/com/google/android/locationtracker/data/TrackerProvider.java b/tests/LocationTracker/src/com/google/android/locationtracker/data/TrackerProvider.java new file mode 100644 index 0000000..052d813 --- /dev/null +++ b/tests/LocationTracker/src/com/google/android/locationtracker/data/TrackerProvider.java @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2008 Google Inc. + * + * 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.google.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.google.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(); + } +} |