package com.ittianyu.mobileguard.dao; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.ittianyu.mobileguard.constant.Constant; import com.ittianyu.mobileguard.db.AppLockDb; import java.util.ArrayList; import java.util.List; /** * Created by yu. * Provider insert delete and select operation for app_lock.db */ public class AppLockDao { private AppLockDb dbHelper; private Context context; public AppLockDao(Context context) { dbHelper = new AppLockDb(context); this.context = context; } /** * notify the observer the app lock data changed */ private void notifyDataChanged() { context.getContentResolver().notifyChange(Constant.URI_APP_LOCK_DATA_CHANGED, null); } /** * add a new record to db * * @param packageName the app package name * @return true if success, false otherwise */ public boolean insert(String packageName) { // get db SQLiteDatabase db = dbHelper.getWritableDatabase(); // column ContentValues values = new ContentValues(); values.put(AppLockDb.LOCK_PACKAGE_NAME, packageName); // insert long rowId = db.insert(AppLockDb.TB_LOCK_NAME, null, values); // never forget closing db.close(); // if success to change data, notify the observer if(-1 != rowId) notifyDataChanged(); return -1 != rowId; } /** * delete a package from db * * @param packageName the app package name * @return true if success, false otherwise */ public boolean delete(String packageName) { // get db SQLiteDatabase db = dbHelper.getWritableDatabase(); // delete int count = db.delete(AppLockDb.TB_LOCK_NAME, AppLockDb.LOCK_PACKAGE_NAME + " = ?", new String[]{packageName}); // never forget closing db.close(); // if success to change data, notify the observer if(1 == count) notifyDataChanged(); return 1 == count; } /** * query all packages name * * @return a List<String>. It wouldn't be null. */ public List<String> selectAll() { // get db SQLiteDatabase db = dbHelper.getWritableDatabase(); // select Cursor cursor = db.query(AppLockDb.TB_LOCK_NAME, new String[]{AppLockDb.LOCK_PACKAGE_NAME}, null, null, null, null, null); // create a list which init count is specific ArrayList<String> list = new ArrayList<>(cursor.getCount()); // start get values while (cursor.moveToNext()) { // get value and add to list String string = cursor.getString(0); list.add(string); } // never forget closing cursor.close(); db.close(); return list; } /** * @param packageName the app package name * @return true if success, false otherwise */ public boolean isExists(String packageName) { // get db SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.query(AppLockDb.TB_LOCK_NAME, new String[]{"1"}, AppLockDb.LOCK_PACKAGE_NAME + " = ?", new String[]{packageName}, null, null, null); boolean exists = cursor.moveToNext(); // never forget closing cursor.close(); db.close(); return exists; } }