package com.gh4a.db;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.provider.BaseColumns;
import android.support.annotation.NonNull;
import android.util.Log;
public class SuggestionsProvider extends ContentProvider {
private static final String TAG = "SuggestionsProvider";
public interface Columns extends BaseColumns {
Uri CONTENT_URI = Uri.parse("content://com.gh4a.SuggestionsProvider/suggestions");
String TYPE = "type";
String SUGGESTION = "suggestion";
String DATE = "date";
int TYPE_REPO = 0;
int TYPE_USER = 1;
int TYPE_CODE = 2;
}
private static final int MATCH_ALL = 0;
private static final UriMatcher
sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
sURIMatcher.addURI("com.gh4a.SuggestionsProvider", "suggestions", MATCH_ALL);
}
private DbHelper mDbHelper;
@Override
public boolean onCreate() {
mDbHelper = new DbHelper(getContext());
return true;
}
@Override
public Cursor query(@NonNull Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
int match = sURIMatcher.match(uri);
qb.setTables(DbHelper.SUGGESTIONS_TABLE);
switch (match) {
case MATCH_ALL:
break;
default:
Log.e(TAG, "query: invalid request: " + uri);
return null;
}
if (sortOrder == null) {
sortOrder = Columns.DATE + " desc";
}
SQLiteDatabase db = mDbHelper.getReadableDatabase();
Cursor ret = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder);
ret.setNotificationUri(getContext().getContentResolver(), uri);
return ret;
}
@Override
public String getType(@NonNull Uri uri) {
return null;
}
@Override
public Uri insert(@NonNull Uri uri, ContentValues values) {
if (sURIMatcher.match(uri) != MATCH_ALL) {
return null;
}
SQLiteDatabase db = mDbHelper.getWritableDatabase();
long rowID = db.insert(DbHelper.SUGGESTIONS_TABLE, null, values);
if (rowID <= 0) {
return null;
}
getContext().getContentResolver().notifyChange(Columns.CONTENT_URI, null);
return ContentUris.withAppendedId(Columns.CONTENT_URI, rowID);
}
@Override
public int update(@NonNull Uri uri, ContentValues values, String selection, String[] selectionArgs) {
int count;
int match = sURIMatcher.match(uri);
SQLiteDatabase db = mDbHelper.getWritableDatabase();
switch (match) {
case MATCH_ALL:
count = db.update(DbHelper.SUGGESTIONS_TABLE, values, selection, selectionArgs);
break;
default:
throw new UnsupportedOperationException("Cannot update that URI: " + uri);
}
if (count > 0) {
getContext().getContentResolver().notifyChange(Columns.CONTENT_URI, null);
}
return count;
}
@Override
public int delete(@NonNull Uri uri, String selection, String[] selectionArgs) {
int match = sURIMatcher.match(uri);
SQLiteDatabase db = mDbHelper.getWritableDatabase();
switch (match) {
case MATCH_ALL:
break;
default:
throw new UnsupportedOperationException("Cannot delete the URI " + uri);
}
int count = db.delete(DbHelper.SUGGESTIONS_TABLE, selection, selectionArgs);
if (count > 0) {
getContext().getContentResolver().notifyChange(Columns.CONTENT_URI, null);
}
return count;
}
}