package com.letsvote.provider; import java.util.Arrays; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteOpenHelper; import android.net.Uri; import android.support.annotation.NonNull; import android.util.Log; import com.letsvote.BuildConfig; import com.letsvote.provider.base.BaseContentProvider; import com.letsvote.provider.party.PartyColumns; public class MyProvider extends BaseContentProvider { private static final String TAG = MyProvider.class.getSimpleName(); private static final boolean DEBUG = BuildConfig.DEBUG; private static final String TYPE_CURSOR_ITEM = "vnd.android.cursor.item/"; private static final String TYPE_CURSOR_DIR = "vnd.android.cursor.dir/"; public static final String AUTHORITY = "com.letsvote.provider"; public static final String CONTENT_URI_BASE = "content://" + AUTHORITY; private static final int URI_TYPE_PARTY = 0; private static final int URI_TYPE_PARTY_ID = 1; private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH); static { URI_MATCHER.addURI(AUTHORITY, PartyColumns.TABLE_NAME, URI_TYPE_PARTY); URI_MATCHER.addURI(AUTHORITY, PartyColumns.TABLE_NAME + "/#", URI_TYPE_PARTY_ID); } @Override protected SQLiteOpenHelper createSqLiteOpenHelper() { return MySQLiteOpenHelper.getInstance(getContext()); } @Override protected boolean hasDebug() { return DEBUG; } @Override public String getType(Uri uri) { int match = URI_MATCHER.match(uri); switch (match) { case URI_TYPE_PARTY: return TYPE_CURSOR_DIR + PartyColumns.TABLE_NAME; case URI_TYPE_PARTY_ID: return TYPE_CURSOR_ITEM + PartyColumns.TABLE_NAME; } return null; } @Override public Uri insert(Uri uri, ContentValues values) { if (DEBUG) Log.d(TAG, "insert uri=" + uri + " values=" + values); return super.insert(uri, values); } @Override public int bulkInsert(Uri uri, ContentValues[] values) { if (DEBUG) Log.d(TAG, "bulkInsert uri=" + uri + " values.length=" + values.length); return super.bulkInsert(uri, values); } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { if (DEBUG) Log.d(TAG, "update uri=" + uri + " values=" + values + " selection=" + selection + " selectionArgs=" + Arrays.toString(selectionArgs)); return super.update(uri, values, selection, selectionArgs); } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { if (DEBUG) Log.d(TAG, "delete uri=" + uri + " selection=" + selection + " selectionArgs=" + Arrays.toString(selectionArgs)); return super.delete(uri, selection, selectionArgs); } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { if (DEBUG) Log.d(TAG, "query uri=" + uri + " selection=" + selection + " selectionArgs=" + Arrays.toString(selectionArgs) + " sortOrder=" + sortOrder + " groupBy=" + uri.getQueryParameter(QUERY_GROUP_BY) + " having=" + uri.getQueryParameter(QUERY_HAVING) + " limit=" + uri.getQueryParameter(QUERY_LIMIT)); return super.query(uri, projection, selection, selectionArgs, sortOrder); } @Override protected QueryParams getQueryParams(Uri uri, String selection, String[] projection) { QueryParams res = new QueryParams(); String id = null; int matchedId = URI_MATCHER.match(uri); switch (matchedId) { case URI_TYPE_PARTY: case URI_TYPE_PARTY_ID: res.table = PartyColumns.TABLE_NAME; res.idColumn = PartyColumns._ID; res.tablesWithJoins = PartyColumns.TABLE_NAME; res.orderBy = PartyColumns.DEFAULT_ORDER; break; default: throw new IllegalArgumentException("The uri '" + uri + "' is not supported by this ContentProvider"); } switch (matchedId) { case URI_TYPE_PARTY_ID: id = uri.getLastPathSegment(); } if (id != null) { if (selection != null) { res.selection = res.table + "." + res.idColumn + "=" + id + " and (" + selection + ")"; } else { res.selection = res.table + "." + res.idColumn + "=" + id; } } else { res.selection = selection; } return res; } }