Loading src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java +72 −76 Original line number Diff line number Diff line Loading @@ -59,7 +59,7 @@ public class BatteryDatabaseManager { mDatabaseHelper = AnomalyDatabaseHelper.getInstance(context); } public static BatteryDatabaseManager getInstance(Context context) { public static synchronized BatteryDatabaseManager getInstance(Context context) { if (sSingleton == null) { sSingleton = new BatteryDatabaseManager(context); } Loading @@ -84,23 +84,23 @@ public class BatteryDatabaseManager { public synchronized boolean insertAnomaly(int uid, String packageName, int type, int anomalyState, long timestampMs) { try (SQLiteDatabase db = mDatabaseHelper.getWritableDatabase()) { final SQLiteDatabase db = mDatabaseHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(UID, uid); values.put(PACKAGE_NAME, packageName); values.put(ANOMALY_TYPE, type); values.put(ANOMALY_STATE, anomalyState); values.put(TIME_STAMP_MS, timestampMs); return db.insertWithOnConflict(TABLE_ANOMALY, null, values, CONFLICT_IGNORE) != -1; } } /** * Query all the anomalies that happened after {@code timestampMsAfter} and with {@code state}. */ public synchronized List<AppInfo> queryAllAnomalies(long timestampMsAfter, int state) { final List<AppInfo> appInfos = new ArrayList<>(); try (SQLiteDatabase db = mDatabaseHelper.getReadableDatabase()) { final SQLiteDatabase db = mDatabaseHelper.getReadableDatabase(); final String[] projection = {PACKAGE_NAME, ANOMALY_TYPE, UID}; final String orderBy = AnomalyDatabaseHelper.AnomalyColumns.TIME_STAMP_MS + " DESC"; final Map<Integer, AppInfo.Builder> mAppInfoBuilders = new ArrayMap<>(); Loading @@ -127,17 +127,15 @@ public class BatteryDatabaseManager { for (Integer uid : mAppInfoBuilders.keySet()) { appInfos.add(mAppInfoBuilders.get(uid).build()); } } return appInfos; } public synchronized void deleteAllAnomaliesBeforeTimeStamp(long timestampMs) { try (SQLiteDatabase db = mDatabaseHelper.getWritableDatabase()) { final SQLiteDatabase db = mDatabaseHelper.getWritableDatabase(); db.delete(TABLE_ANOMALY, TIME_STAMP_MS + " < ?", new String[]{String.valueOf(timestampMs)}); } } /** * Update the type of anomalies to {@code state} Loading @@ -152,14 +150,14 @@ public class BatteryDatabaseManager { for (int i = 0; i < size; i++) { whereArgs[i] = appInfos.get(i).packageName; } try (SQLiteDatabase db = mDatabaseHelper.getWritableDatabase()) { final SQLiteDatabase db = mDatabaseHelper.getWritableDatabase(); final ContentValues values = new ContentValues(); values.put(ANOMALY_STATE, state); db.update(TABLE_ANOMALY, values, PACKAGE_NAME + " IN (" + TextUtils.join(",", Collections.nCopies(appInfos.size(), "?")) + ")", whereArgs); } } } /** * Query latest timestamps when an app has been performed action {@code type} Loading @@ -170,7 +168,7 @@ public class BatteryDatabaseManager { public synchronized SparseLongArray queryActionTime( @AnomalyDatabaseHelper.ActionType int type) { final SparseLongArray timeStamps = new SparseLongArray(); try (SQLiteDatabase db = mDatabaseHelper.getReadableDatabase()) { final SQLiteDatabase db = mDatabaseHelper.getReadableDatabase(); final String[] projection = {ActionColumns.UID, ActionColumns.TIME_STAMP_MS}; final String selection = ActionColumns.ACTION_TYPE + " = ? "; final String[] selectionArgs = new String[]{String.valueOf(type)}; Loading @@ -186,7 +184,6 @@ public class BatteryDatabaseManager { timeStamps.append(uid, timeStamp); } } } return timeStamps; } Loading @@ -196,22 +193,22 @@ public class BatteryDatabaseManager { */ public synchronized boolean insertAction(@AnomalyDatabaseHelper.ActionType int type, int uid, String packageName, long timestampMs) { try (SQLiteDatabase db = mDatabaseHelper.getWritableDatabase()) { final SQLiteDatabase db = mDatabaseHelper.getWritableDatabase(); final ContentValues values = new ContentValues(); values.put(ActionColumns.UID, uid); values.put(ActionColumns.PACKAGE_NAME, packageName); values.put(ActionColumns.ACTION_TYPE, type); values.put(ActionColumns.TIME_STAMP_MS, timestampMs); return db.insertWithOnConflict(TABLE_ACTION, null, values, CONFLICT_REPLACE) != -1; } } /** * Remove an action */ public synchronized boolean deleteAction(@AnomalyDatabaseHelper.ActionType int type, int uid, String packageName) { try (SQLiteDatabase db = mDatabaseHelper.getWritableDatabase()) { SQLiteDatabase db = mDatabaseHelper.getWritableDatabase(); final String where = ActionColumns.ACTION_TYPE + " = ? AND " + ActionColumns.UID + " = ? AND " + ActionColumns.PACKAGE_NAME + " = ? "; Loading @@ -221,4 +218,3 @@ public class BatteryDatabaseManager { return db.delete(TABLE_ACTION, where, whereArgs) != 0; } } } Loading
src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java +72 −76 Original line number Diff line number Diff line Loading @@ -59,7 +59,7 @@ public class BatteryDatabaseManager { mDatabaseHelper = AnomalyDatabaseHelper.getInstance(context); } public static BatteryDatabaseManager getInstance(Context context) { public static synchronized BatteryDatabaseManager getInstance(Context context) { if (sSingleton == null) { sSingleton = new BatteryDatabaseManager(context); } Loading @@ -84,23 +84,23 @@ public class BatteryDatabaseManager { public synchronized boolean insertAnomaly(int uid, String packageName, int type, int anomalyState, long timestampMs) { try (SQLiteDatabase db = mDatabaseHelper.getWritableDatabase()) { final SQLiteDatabase db = mDatabaseHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(UID, uid); values.put(PACKAGE_NAME, packageName); values.put(ANOMALY_TYPE, type); values.put(ANOMALY_STATE, anomalyState); values.put(TIME_STAMP_MS, timestampMs); return db.insertWithOnConflict(TABLE_ANOMALY, null, values, CONFLICT_IGNORE) != -1; } } /** * Query all the anomalies that happened after {@code timestampMsAfter} and with {@code state}. */ public synchronized List<AppInfo> queryAllAnomalies(long timestampMsAfter, int state) { final List<AppInfo> appInfos = new ArrayList<>(); try (SQLiteDatabase db = mDatabaseHelper.getReadableDatabase()) { final SQLiteDatabase db = mDatabaseHelper.getReadableDatabase(); final String[] projection = {PACKAGE_NAME, ANOMALY_TYPE, UID}; final String orderBy = AnomalyDatabaseHelper.AnomalyColumns.TIME_STAMP_MS + " DESC"; final Map<Integer, AppInfo.Builder> mAppInfoBuilders = new ArrayMap<>(); Loading @@ -127,17 +127,15 @@ public class BatteryDatabaseManager { for (Integer uid : mAppInfoBuilders.keySet()) { appInfos.add(mAppInfoBuilders.get(uid).build()); } } return appInfos; } public synchronized void deleteAllAnomaliesBeforeTimeStamp(long timestampMs) { try (SQLiteDatabase db = mDatabaseHelper.getWritableDatabase()) { final SQLiteDatabase db = mDatabaseHelper.getWritableDatabase(); db.delete(TABLE_ANOMALY, TIME_STAMP_MS + " < ?", new String[]{String.valueOf(timestampMs)}); } } /** * Update the type of anomalies to {@code state} Loading @@ -152,14 +150,14 @@ public class BatteryDatabaseManager { for (int i = 0; i < size; i++) { whereArgs[i] = appInfos.get(i).packageName; } try (SQLiteDatabase db = mDatabaseHelper.getWritableDatabase()) { final SQLiteDatabase db = mDatabaseHelper.getWritableDatabase(); final ContentValues values = new ContentValues(); values.put(ANOMALY_STATE, state); db.update(TABLE_ANOMALY, values, PACKAGE_NAME + " IN (" + TextUtils.join(",", Collections.nCopies(appInfos.size(), "?")) + ")", whereArgs); } } } /** * Query latest timestamps when an app has been performed action {@code type} Loading @@ -170,7 +168,7 @@ public class BatteryDatabaseManager { public synchronized SparseLongArray queryActionTime( @AnomalyDatabaseHelper.ActionType int type) { final SparseLongArray timeStamps = new SparseLongArray(); try (SQLiteDatabase db = mDatabaseHelper.getReadableDatabase()) { final SQLiteDatabase db = mDatabaseHelper.getReadableDatabase(); final String[] projection = {ActionColumns.UID, ActionColumns.TIME_STAMP_MS}; final String selection = ActionColumns.ACTION_TYPE + " = ? "; final String[] selectionArgs = new String[]{String.valueOf(type)}; Loading @@ -186,7 +184,6 @@ public class BatteryDatabaseManager { timeStamps.append(uid, timeStamp); } } } return timeStamps; } Loading @@ -196,22 +193,22 @@ public class BatteryDatabaseManager { */ public synchronized boolean insertAction(@AnomalyDatabaseHelper.ActionType int type, int uid, String packageName, long timestampMs) { try (SQLiteDatabase db = mDatabaseHelper.getWritableDatabase()) { final SQLiteDatabase db = mDatabaseHelper.getWritableDatabase(); final ContentValues values = new ContentValues(); values.put(ActionColumns.UID, uid); values.put(ActionColumns.PACKAGE_NAME, packageName); values.put(ActionColumns.ACTION_TYPE, type); values.put(ActionColumns.TIME_STAMP_MS, timestampMs); return db.insertWithOnConflict(TABLE_ACTION, null, values, CONFLICT_REPLACE) != -1; } } /** * Remove an action */ public synchronized boolean deleteAction(@AnomalyDatabaseHelper.ActionType int type, int uid, String packageName) { try (SQLiteDatabase db = mDatabaseHelper.getWritableDatabase()) { SQLiteDatabase db = mDatabaseHelper.getWritableDatabase(); final String where = ActionColumns.ACTION_TYPE + " = ? AND " + ActionColumns.UID + " = ? AND " + ActionColumns.PACKAGE_NAME + " = ? "; Loading @@ -221,4 +218,3 @@ public class BatteryDatabaseManager { return db.delete(TABLE_ACTION, where, whereArgs) != 0; } } }