package com.chrome.codereview.data;
import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
public class IssueStateProvider extends ContentProvider {
public static final String COLUMN_ISSUE_ID = "ISSUE_ID";
public static final String COLUMN_MODIFICATION_TIME = "TIME";
private static final String HIDDEN_TABLE = "hidden_issues";
private static final String SQL_CREATE_HIDDEN_ISSUE_TABLE = "CREATE TABLE " +
HIDDEN_TABLE + " " + // Table's name
"(" + // The columns in the table
" _ID INTEGER PRIMARY KEY, " +
COLUMN_ISSUE_ID + " INTEGER UNIQUE," +
COLUMN_MODIFICATION_TIME + " INTEGER" +
")";
private static final String AUTHORITY = "com.chromium.codereview.issue.state";
private static final int HIDDEN_CODE = 1;
private static final String HIDDEN = "hidden";
public static final Uri HIDDEN_ISSUES_URI = Uri.parse("content://" + AUTHORITY + "/" + HIDDEN);
private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
static {
URI_MATCHER.addURI(AUTHORITY, HIDDEN, HIDDEN_CODE);
}
private static class DBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "issue.db";
private static final int VERSION = 1;
public DBHelper(Context context) {
super(context, DB_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_HIDDEN_ISSUE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
private DBHelper dbHelper;
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteDatabase database = dbHelper.getWritableDatabase();
switch (URI_MATCHER.match(uri)) {
case HIDDEN_CODE:
int deleted = database.delete(HIDDEN_TABLE, selection, selectionArgs);
getContext().getContentResolver().notifyChange(HIDDEN_ISSUES_URI, null);
return deleted;
}
throw new IllegalArgumentException("Unknown uri " + uri);
}
@Override
public String getType(Uri uri) {
throw new UnsupportedOperationException("Not supported");
}
@Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteDatabase database = dbHelper.getWritableDatabase();
switch (URI_MATCHER.match(uri)) {
case HIDDEN_CODE:
database.insertWithOnConflict(HIDDEN_TABLE, null, values, SQLiteDatabase.CONFLICT_REPLACE);
getContext().getContentResolver().notifyChange(HIDDEN_ISSUES_URI, null);
return uri;
}
throw new IllegalArgumentException("Unknown uri " + uri);
}
@Override
public boolean onCreate() {
dbHelper = new DBHelper(getContext());
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase database = dbHelper.getReadableDatabase();
switch (URI_MATCHER.match(uri)) {
case HIDDEN_CODE:
Cursor cursor = database.query(HIDDEN_TABLE, projection, selection, selectionArgs, null, null, null);
cursor.setNotificationUri(getContext().getContentResolver(), HIDDEN_ISSUES_URI);
return cursor;
}
throw new IllegalArgumentException("Unknown uri " + uri);
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
throw new UnsupportedOperationException("Update is not supported");
}
public static void updateIssueState(Context context, int issueId, long modificationTime) {
ContentValues values = new ContentValues();
values.put(IssueStateProvider.COLUMN_ISSUE_ID, issueId);
values.put(IssueStateProvider.COLUMN_MODIFICATION_TIME, modificationTime);
ContentResolver contentResolver = context.getContentResolver();
contentResolver.insert(IssueStateProvider.HIDDEN_ISSUES_URI, values);
}
}