package com.ithooks.android.xreap.dao;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.provider.BaseColumns;
import android.support.annotation.NonNull;
import com.ithooks.android.xreap.app.AppApplication;
/**
* Author: ZhuWenWu
* Version V1.0
* Date: 14-11-22 14:25
* Description:
* Modification History:
* Date Author Version Description
* -----------------------------------------------------------------------------------
* 14-11-22 ZhuWenWu 1.0 1.0
* Why & What is modified:
*/
public class DataProvider extends ContentProvider {
public static final Object obj = new Object();
public static final String AUTHORITY = "com.ithooks.android.xreap";
public static final String SCHEME = "content://";
private static DBHelper mDBHelper;
public static DBHelper getDBHelper() {
if (mDBHelper == null) {
mDBHelper = new DBHelper(AppApplication.getContext());
}
return mDBHelper;
}
@Override
public boolean onCreate() {
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
synchronized (obj) {
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(matchTable(uri));
SQLiteDatabase db = getDBHelper().getReadableDatabase();
Cursor cursor = queryBuilder.query(db,
projection,
selection,
selectionArgs,
null,
null,
sortOrder);
cursor.setNotificationUri(getContext().getContentResolver(), uri);
return cursor;
}
}
private static final UriMatcher sUriMATCHER = new UriMatcher(UriMatcher.NO_MATCH) {{
}};
private String matchTable(Uri uri) {
String table = null;
switch (sUriMATCHER.match(uri)) {
default:
throw new IllegalArgumentException("Unknown Uri" + uri);
}
// return table;
}
@Override
public String getType(Uri uri) {
switch (sUriMATCHER.match(uri)) {
default:
throw new IllegalArgumentException("Unknown Uri" + uri);
}
}
@Override
public Uri insert(Uri uri, ContentValues values) {
synchronized (obj) {
SQLiteDatabase db = getDBHelper().getWritableDatabase();
long rowId = 0;
db.beginTransaction();
try {
rowId = db.insert(matchTable(uri), null, values);
db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
} finally {
db.endTransaction();
}
if (rowId > 0) {
Uri returnUri = ContentUris.withAppendedId(uri, rowId);
getContext().getContentResolver().notifyChange(uri, null);
return returnUri;
}
throw new SQLException("Failed to insert row into " + uri);
}
}
@Override
public int bulkInsert(Uri uri, @NonNull ContentValues[] values) {
synchronized (obj) {
SQLiteDatabase db = getDBHelper().getWritableDatabase();
db.beginTransaction();
try {
for (ContentValues contentValues : values) {
db.insertWithOnConflict(matchTable(uri), BaseColumns._ID, contentValues, SQLiteDatabase.CONFLICT_IGNORE);
}
db.setTransactionSuccessful();
getContext().getContentResolver().notifyChange(uri, null);
return values.length;
} catch (Exception e) {
e.printStackTrace();
} finally {
db.endTransaction();
}
throw new SQLException("Failed to insert row into " + uri);
}
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
synchronized (obj) {
SQLiteDatabase db = getDBHelper().getWritableDatabase();
int count = 0;
db.beginTransaction();
try {
count = db.delete(matchTable(uri), selection, selectionArgs);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
}
public static void clearDBCache() {
synchronized (DataProvider.obj) {
DataProvider.DBHelper mDBHelper = DataProvider.getDBHelper();
SQLiteDatabase db = mDBHelper.getWritableDatabase();
}
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
synchronized (obj) {
SQLiteDatabase db = getDBHelper().getWritableDatabase();
int count;
db.beginTransaction();
try {
count = db.update(matchTable(uri), values, selection, selectionArgs);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
}
public static class DBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "xx.db";
private static final int DB_VERSION = 1;
private DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}