1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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);
}
}
|