diff options
Diffstat (limited to 'src/com/android/launcher3/stats/internal/db/DatabaseHelper.java')
-rw-r--r-- | src/com/android/launcher3/stats/internal/db/DatabaseHelper.java | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/src/com/android/launcher3/stats/internal/db/DatabaseHelper.java b/src/com/android/launcher3/stats/internal/db/DatabaseHelper.java new file mode 100644 index 000000000..7ffd509ff --- /dev/null +++ b/src/com/android/launcher3/stats/internal/db/DatabaseHelper.java @@ -0,0 +1,159 @@ +package com.android.launcher3.stats.internal.db; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import com.android.launcher3.stats.internal.model.TrackingEvent; +import com.android.launcher3.stats.util.Logger; + +import java.util.ArrayList; +import java.util.List; + +/** + * <pre> + * Helper for accessing the database + * </pre> + * + * @see {@link SQLiteOpenHelper} + */ +public class DatabaseHelper extends SQLiteOpenHelper { + + // Constants + private static final String TAG = DatabaseHelper.class.getSimpleName(); + private static final String DATABASE_NAME = "events"; + private static final int DATABASE_VERSION = 1; + + // Instance + private static DatabaseHelper sInstance = null; + + /** + * Constructor + * + * @param context {@link Context} + * @return {@link DatabaseHelper} + * @throws IllegalArgumentException {@link IllegalArgumentException} + */ + public static DatabaseHelper createInstance(Context context) throws IllegalArgumentException { + if (sInstance == null) { + sInstance = new DatabaseHelper(context); + } + return sInstance; + } + + /** + * Constructor + * + * @param context {@link Context} + */ + public DatabaseHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + /** + * Write an event to the database + * + * @param trackingEvent {@link TrackingEvent} + * @throws IllegalArgumentException {@link IllegalArgumentException} + */ + public void writeEvent(TrackingEvent trackingEvent) + throws IllegalArgumentException { + if (trackingEvent == null) { + throw new IllegalArgumentException("'trackingEvent' cannot be null!"); + } + Logger.logd(TAG, "Event written to database: " + trackingEvent); + SQLiteDatabase db = getWritableDatabase(); + ContentValues contentValues = trackingEvent.toContentValues(); + db.insert(TrackingEventContract.EVENT_TABLE_NAME, null, contentValues); + db.close(); + } + + /** + * Get a list of tracking events + * + * @param instanceId {@link Integer} + * @return {@link List} + * @throws IllegalArgumentException {@link IllegalArgumentException} + */ + public List<TrackingEvent> getTrackingEventsByCategory(int instanceId, + TrackingEvent.Category category) throws IllegalArgumentException { + if (category == null) { + throw new IllegalArgumentException("'category' cannot be null!"); + } + + List<TrackingEvent> eventList = new ArrayList<TrackingEvent>(); + + // Get a writable database + SQLiteDatabase db = getWritableDatabase(); + + // Update unclaimed items for this instance + ContentValues contentValues = new ContentValues(); + contentValues.put(TrackingEventContract.EVENT_COLUMN_INSTANCE, instanceId); + String whereClause = TrackingEventContract.EVENT_COLUMN_INSTANCE + " IS NULL AND " + + TrackingEventContract.EVENT_COLUMN_CATEGORY + " = ? "; + String[] whereArgs = new String[] { + category.name(), + }; + int cnt = db.update(TrackingEventContract.EVENT_TABLE_NAME, contentValues, whereClause, + whereArgs); + + // Short circuit empty update + if (cnt < 1) { + return eventList; + } + + // Select all tagged items + String selection = TrackingEventContract.EVENT_COLUMN_CATEGORY + " = ? AND " + + TrackingEventContract.EVENT_COLUMN_INSTANCE + " = ? "; + String[] selectionArgs = new String[]{ + category.name(), + String.valueOf(instanceId), + }; + Cursor c = db.query(TrackingEventContract.EVENT_TABLE_NAME, null, selection, selectionArgs, + null, null, null); + + // Build return list + while (c != null && c.getCount() > 0 && c.moveToNext()) { + eventList.add(new TrackingEvent(c)); + } + + db.close(); + + return eventList; + } + + /** + * Deletes events related to the instance + * + * @param instanceId {@link Integer} + * @return {@link Integer} + */ + public int deleteEventsByInstanceId(int instanceId) { + SQLiteDatabase db = getWritableDatabase(); + String whereClause = TrackingEventContract.EVENT_COLUMN_INSTANCE + " = ?"; + String[] whereArgs = new String[]{ + String.valueOf(instanceId), + }; + int cnt = db.delete(TrackingEventContract.EVENT_TABLE_NAME, whereClause, whereArgs); + db.close(); + return cnt; + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL(TrackingEventContract.CREATE_EVENT_TABLE); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + + // [NOTE][MSB]: This will lose data, need to make sure this is handled if/when database + // schema changes + + // db.execSQL("DROP TABLE IF EXISTS " + TrackingEventContract.EVENT_TABLE_NAME); + // onCreate(db); + + } + +} |