package com.mcxiaoke.apptoolkit.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;
import com.mcxiaoke.apptoolkit.AppContext;
import java.util.ArrayList;
import java.util.List;
/**
* Project: apptoolkit
* Package: com.mcxiaoke.apptoolkit.db
* User: mcxiaoke
* Date: 13-7-3
* Time: 下午10:42
*/
public class Database {
public static final boolean DEBUG = AppContext.isDebug();
public static final String TAG = Database.class.getSimpleName();
public static final int DB_VERSION = 1;
public static final String DB_NAME = "data.db";
static final String APP_TABLE = "app";
static final String PROCESS_TABLE = "process";
static final String BACKUP_TABLE = "backup";
private Context mContext;
private DBHelper mHelper;
public Database(Context context) {
mContext = context.getApplicationContext();
mHelper = new DBHelper(mContext);
}
public int addBackups(List<String> list) {
if (list == null || list.isEmpty()) {
return -1;
}
int count = 0;
SQLiteDatabase db = mHelper.getWritableDatabase();
db.beginTransaction();
ContentValues values = new ContentValues();
try {
for (String packageName : list) {
values.clear();
values.put(Columns.PACKAGE, packageName);
values.put(Columns.CREATED, System.currentTimeMillis());
db.replaceOrThrow(BACKUP_TABLE, null, values);
count++;
}
db.setTransactionSuccessful();
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
db.endTransaction();
}
if (DEBUG) {
Log.v(TAG, "addBackups() size is " + list.size() + " count is " + count);
}
return count;
}
public List<String> getBackupApps() {
List<String> list = new ArrayList<String>();
SQLiteDatabase db = mHelper.getReadableDatabase();
Cursor cursor = null;
try {
cursor = db.query(BACKUP_TABLE, null, null, null, null, null, null);
if (cursor != null) {
int packageIndex = cursor.getColumnIndexOrThrow(Columns.PACKAGE);
int createdAtIndex = cursor.getColumnIndexOrThrow(Columns.CREATED);
while (cursor.moveToNext()) {
String packageName = cursor.getString(packageIndex);
// long createdAt = cursor.getLong(createdAtIndex);
list.add(packageName);
// list.add(new Pair<String, Long>(packageName, createdAt));
}
}
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
if (DEBUG) {
Log.v(TAG, "getBackupApps() size is " + list.size());
}
return list;
}
public boolean clearBackups() {
boolean result = false;
SQLiteDatabase db = mHelper.getWritableDatabase();
try {
db.delete(BACKUP_TABLE, null, null);
result = true;
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
}
return result;
}
public boolean addBackup(String packageName) {
if (packageName == null) {
return false;
}
if (DEBUG) {
Log.v(TAG, "addBackup() packageName is " + packageName);
}
boolean result = false;
SQLiteDatabase db = mHelper.getWritableDatabase();
try {
ContentValues values = new ContentValues();
values.put(Columns.PACKAGE, packageName);
values.put(Columns.CREATED, System.currentTimeMillis());
db.replaceOrThrow(BACKUP_TABLE, null, values);
result = true;
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
}
return result;
}
public boolean removeBackup(String packageName) {
if (packageName == null || packageName.length() == 0) {
return false;
}
if (DEBUG) {
Log.v(TAG, "removeBackup() packageName is " + packageName);
}
boolean result = false;
SQLiteDatabase db = mHelper.getWritableDatabase();
String where = Columns.PACKAGE + " =? ";
String[] whereArgs = new String[]{packageName};
try {
db.delete(BACKUP_TABLE, where, whereArgs);
result = true;
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
}
return result;
}
private static class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
createBackupTable(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
static void createBackupTable(SQLiteDatabase db) {
String sql = "CREATE TABLE " + BACKUP_TABLE + " ( "
+ Columns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ Columns.PACKAGE + " TEXT NOT NULL, "
+ Columns.CREATED + " INTEGER NOT NULL, "
+ " unique ( "
+ Columns.PACKAGE
+ " ) on conflict replace );";
db.execSQL(sql);
}
public static class Columns implements BaseColumns {
public static final String PACKAGE = "package";
public static final String CREATED = "created_at";
}
}