Add method to update "state" column in anomaly db.

This state could be "new", "handled" or "auto-handled".

Bug: 72385333
Test: RunSettingsRoboTests
Change-Id: I2e3a9d2d3457f125421467e72f5b734990273abe
This commit is contained in:
jackqdyulei
2018-02-12 13:56:41 -08:00
parent ea153abe27
commit fe13d2813a
2 changed files with 71 additions and 15 deletions

View File

@@ -16,6 +16,8 @@
package com.android.settings.fuelgauge.batterytip;
import static com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper.AnomalyColumns
.ANOMALY_STATE;
import static com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper.AnomalyColumns
.PACKAGE_NAME;
import static com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper.AnomalyColumns
@@ -28,8 +30,10 @@ import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.text.TextUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
@@ -55,22 +59,24 @@ public class BatteryDatabaseManager {
values.put(PACKAGE_NAME, packageName);
values.put(ANOMALY_TYPE, type);
values.put(TIME_STAMP_MS, timestampMs);
values.put(ANOMALY_STATE, AnomalyDatabaseHelper.State.NEW);
db.insert(TABLE_ANOMALY, null, values);
}
}
/**
* Query all the anomalies that happened after {@code timestampMs}.
* Query all the anomalies that happened after {@code timestampMsAfter} and with {@code state}.
*/
public List<AppInfo> queryAllAnomaliesAfter(long timestampMs) {
public List<AppInfo> queryAllAnomalies(long timestampMsAfter, int state) {
final List<AppInfo> appInfos = new ArrayList<>();
try (SQLiteDatabase db = mDatabaseHelper.getReadableDatabase()) {
final String[] projection = {PACKAGE_NAME, ANOMALY_TYPE};
final String orderBy = AnomalyDatabaseHelper.AnomalyColumns.TIME_STAMP_MS + " DESC";
try (Cursor cursor = db.query(TABLE_ANOMALY, projection, TIME_STAMP_MS + " > ?",
new String[]{String.valueOf(timestampMs)}, null, null, orderBy)) {
try (Cursor cursor = db.query(TABLE_ANOMALY, projection,
TIME_STAMP_MS + " > ? AND " + ANOMALY_STATE + " = ? ",
new String[]{String.valueOf(timestampMsAfter), String.valueOf(state)}, null,
null, orderBy)) {
while (cursor.moveToNext()) {
AppInfo appInfo = new AppInfo.Builder()
.setPackageName(cursor.getString(cursor.getColumnIndex(PACKAGE_NAME)))
@@ -90,4 +96,26 @@ public class BatteryDatabaseManager {
new String[]{String.valueOf(timestampMs)});
}
}
/**
* Update the type of anomalies to {@code state}
*
* @param appInfos represents the anomalies
* @param state which state to update to
*/
public void updateAnomalies(List<AppInfo> appInfos, int state) {
if (!appInfos.isEmpty()) {
final int size = appInfos.size();
final String[] whereArgs = new String[size];
for (int i = 0; i < size; i++) {
whereArgs[i] = appInfos.get(i).packageName;
}
try (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);
}
}
}
}