Merge "Update dabase manager to store the uid" into pi-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
ef6eb853f9
@@ -128,14 +128,14 @@ public class AnomalyDetectionJobService extends JobService {
|
|||||||
Log.e(TAG, "Excessive detected uid=" + uid);
|
Log.e(TAG, "Excessive detected uid=" + uid);
|
||||||
batteryUtils.setForceAppStandby(uid, packageName,
|
batteryUtils.setForceAppStandby(uid, packageName,
|
||||||
AppOpsManager.MODE_IGNORED);
|
AppOpsManager.MODE_IGNORED);
|
||||||
databaseManager.insertAnomaly(packageName, anomalyType,
|
databaseManager.insertAnomaly(uid, packageName, anomalyType,
|
||||||
smartBatteryOn
|
smartBatteryOn
|
||||||
? AnomalyDatabaseHelper.State.AUTO_HANDLED
|
? AnomalyDatabaseHelper.State.AUTO_HANDLED
|
||||||
: AnomalyDatabaseHelper.State.NEW,
|
: AnomalyDatabaseHelper.State.NEW,
|
||||||
timeMs);
|
timeMs);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
databaseManager.insertAnomaly(packageName, anomalyType,
|
databaseManager.insertAnomaly(uid, packageName, anomalyType,
|
||||||
AnomalyDatabaseHelper.State.NEW, timeMs);
|
AnomalyDatabaseHelper.State.NEW, timeMs);
|
||||||
}
|
}
|
||||||
} catch (NullPointerException | IndexOutOfBoundsException e) {
|
} catch (NullPointerException | IndexOutOfBoundsException e) {
|
||||||
|
@@ -33,11 +33,13 @@ public class AppInfo implements Comparable<AppInfo>, Parcelable {
|
|||||||
*/
|
*/
|
||||||
public final int anomalyType;
|
public final int anomalyType;
|
||||||
public final long screenOnTimeMs;
|
public final long screenOnTimeMs;
|
||||||
|
public final int uid;
|
||||||
|
|
||||||
private AppInfo(AppInfo.Builder builder) {
|
private AppInfo(AppInfo.Builder builder) {
|
||||||
packageName = builder.mPackageName;
|
packageName = builder.mPackageName;
|
||||||
anomalyType = builder.mAnomalyType;
|
anomalyType = builder.mAnomalyType;
|
||||||
screenOnTimeMs = builder.mScreenOnTimeMs;
|
screenOnTimeMs = builder.mScreenOnTimeMs;
|
||||||
|
uid = builder.mUid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -45,6 +47,7 @@ public class AppInfo implements Comparable<AppInfo>, Parcelable {
|
|||||||
packageName = in.readString();
|
packageName = in.readString();
|
||||||
anomalyType = in.readInt();
|
anomalyType = in.readInt();
|
||||||
screenOnTimeMs = in.readLong();
|
screenOnTimeMs = in.readLong();
|
||||||
|
uid = in.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -62,6 +65,7 @@ public class AppInfo implements Comparable<AppInfo>, Parcelable {
|
|||||||
dest.writeString(packageName);
|
dest.writeString(packageName);
|
||||||
dest.writeInt(anomalyType);
|
dest.writeInt(anomalyType);
|
||||||
dest.writeLong(screenOnTimeMs);
|
dest.writeLong(screenOnTimeMs);
|
||||||
|
dest.writeInt(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
|
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
|
||||||
@@ -78,6 +82,7 @@ public class AppInfo implements Comparable<AppInfo>, Parcelable {
|
|||||||
private int mAnomalyType;
|
private int mAnomalyType;
|
||||||
private String mPackageName;
|
private String mPackageName;
|
||||||
private long mScreenOnTimeMs;
|
private long mScreenOnTimeMs;
|
||||||
|
private int mUid;
|
||||||
|
|
||||||
public Builder setAnomalyType(int type) {
|
public Builder setAnomalyType(int type) {
|
||||||
mAnomalyType = type;
|
mAnomalyType = type;
|
||||||
@@ -94,6 +99,11 @@ public class AppInfo implements Comparable<AppInfo>, Parcelable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Builder setUid(int uid) {
|
||||||
|
mUid = uid;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public AppInfo build() {
|
public AppInfo build() {
|
||||||
return new AppInfo(this);
|
return new AppInfo(this);
|
||||||
}
|
}
|
||||||
|
@@ -24,6 +24,7 @@ import static com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper.An
|
|||||||
.ANOMALY_TYPE;
|
.ANOMALY_TYPE;
|
||||||
import static com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper.AnomalyColumns
|
import static com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper.AnomalyColumns
|
||||||
.TIME_STAMP_MS;
|
.TIME_STAMP_MS;
|
||||||
|
import static com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper.AnomalyColumns.UID;
|
||||||
import static com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper.Tables.TABLE_ANOMALY;
|
import static com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper.Tables.TABLE_ANOMALY;
|
||||||
|
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
@@ -65,10 +66,11 @@ public class BatteryDatabaseManager {
|
|||||||
* @param anomalyState the state of the anomaly
|
* @param anomalyState the state of the anomaly
|
||||||
* @param timestampMs the time when it is happened
|
* @param timestampMs the time when it is happened
|
||||||
*/
|
*/
|
||||||
public synchronized void insertAnomaly(String packageName, int type, int anomalyState,
|
public synchronized void insertAnomaly(int uid, String packageName, int type, int anomalyState,
|
||||||
long timestampMs) {
|
long timestampMs) {
|
||||||
try (SQLiteDatabase db = mDatabaseHelper.getWritableDatabase()) {
|
try (SQLiteDatabase db = mDatabaseHelper.getWritableDatabase()) {
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
|
values.put(UID, uid);
|
||||||
values.put(PACKAGE_NAME, packageName);
|
values.put(PACKAGE_NAME, packageName);
|
||||||
values.put(ANOMALY_TYPE, type);
|
values.put(ANOMALY_TYPE, type);
|
||||||
values.put(ANOMALY_STATE, anomalyState);
|
values.put(ANOMALY_STATE, anomalyState);
|
||||||
@@ -83,7 +85,7 @@ public class BatteryDatabaseManager {
|
|||||||
public synchronized List<AppInfo> queryAllAnomalies(long timestampMsAfter, int state) {
|
public synchronized List<AppInfo> queryAllAnomalies(long timestampMsAfter, int state) {
|
||||||
final List<AppInfo> appInfos = new ArrayList<>();
|
final List<AppInfo> appInfos = new ArrayList<>();
|
||||||
try (SQLiteDatabase db = mDatabaseHelper.getReadableDatabase()) {
|
try (SQLiteDatabase db = mDatabaseHelper.getReadableDatabase()) {
|
||||||
final String[] projection = {PACKAGE_NAME, ANOMALY_TYPE};
|
final String[] projection = {PACKAGE_NAME, ANOMALY_TYPE, UID};
|
||||||
final String orderBy = AnomalyDatabaseHelper.AnomalyColumns.TIME_STAMP_MS + " DESC";
|
final String orderBy = AnomalyDatabaseHelper.AnomalyColumns.TIME_STAMP_MS + " DESC";
|
||||||
|
|
||||||
try (Cursor cursor = db.query(TABLE_ANOMALY, projection,
|
try (Cursor cursor = db.query(TABLE_ANOMALY, projection,
|
||||||
@@ -94,6 +96,7 @@ public class BatteryDatabaseManager {
|
|||||||
AppInfo appInfo = new AppInfo.Builder()
|
AppInfo appInfo = new AppInfo.Builder()
|
||||||
.setPackageName(cursor.getString(cursor.getColumnIndex(PACKAGE_NAME)))
|
.setPackageName(cursor.getString(cursor.getColumnIndex(PACKAGE_NAME)))
|
||||||
.setAnomalyType(cursor.getInt(cursor.getColumnIndex(ANOMALY_TYPE)))
|
.setAnomalyType(cursor.getInt(cursor.getColumnIndex(ANOMALY_TYPE)))
|
||||||
|
.setUid(cursor.getInt(cursor.getColumnIndex(UID)))
|
||||||
.build();
|
.build();
|
||||||
appInfos.add(appInfo);
|
appInfos.add(appInfo);
|
||||||
}
|
}
|
||||||
|
@@ -42,8 +42,10 @@ import java.util.List;
|
|||||||
public class BatteryDatabaseManagerTest {
|
public class BatteryDatabaseManagerTest {
|
||||||
|
|
||||||
private static String PACKAGE_NAME_NEW = "com.android.app1";
|
private static String PACKAGE_NAME_NEW = "com.android.app1";
|
||||||
|
private static int UID_NEW = 345;
|
||||||
private static int TYPE_NEW = 1;
|
private static int TYPE_NEW = 1;
|
||||||
private static String PACKAGE_NAME_OLD = "com.android.app2";
|
private static String PACKAGE_NAME_OLD = "com.android.app2";
|
||||||
|
private static int UID_OLD = 543;
|
||||||
private static int TYPE_OLD = 2;
|
private static int TYPE_OLD = 2;
|
||||||
private static long NOW = System.currentTimeMillis();
|
private static long NOW = System.currentTimeMillis();
|
||||||
private static long ONE_DAY_BEFORE = NOW - DateUtils.DAY_IN_MILLIS;
|
private static long ONE_DAY_BEFORE = NOW - DateUtils.DAY_IN_MILLIS;
|
||||||
@@ -67,23 +69,23 @@ public class BatteryDatabaseManagerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAllFunctions() {
|
public void testAllFunctions() {
|
||||||
mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_NEW, TYPE_NEW,
|
mBatteryDatabaseManager.insertAnomaly(UID_NEW, PACKAGE_NAME_NEW, TYPE_NEW,
|
||||||
AnomalyDatabaseHelper.State.NEW, NOW);
|
AnomalyDatabaseHelper.State.NEW, NOW);
|
||||||
mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_OLD, TYPE_OLD,
|
mBatteryDatabaseManager.insertAnomaly(UID_OLD, PACKAGE_NAME_OLD, TYPE_OLD,
|
||||||
AnomalyDatabaseHelper.State.NEW, TWO_DAYS_BEFORE);
|
AnomalyDatabaseHelper.State.NEW, TWO_DAYS_BEFORE);
|
||||||
|
|
||||||
// In database, it contains two record
|
// In database, it contains two record
|
||||||
List<AppInfo> totalAppInfos = mBatteryDatabaseManager.queryAllAnomalies(0 /* timeMsAfter */,
|
List<AppInfo> totalAppInfos = mBatteryDatabaseManager.queryAllAnomalies(0 /* timeMsAfter */,
|
||||||
AnomalyDatabaseHelper.State.NEW);
|
AnomalyDatabaseHelper.State.NEW);
|
||||||
assertThat(totalAppInfos).hasSize(2);
|
assertThat(totalAppInfos).hasSize(2);
|
||||||
assertAppInfo(totalAppInfos.get(0), PACKAGE_NAME_NEW, TYPE_NEW);
|
assertAppInfo(totalAppInfos.get(0), UID_NEW, PACKAGE_NAME_NEW, TYPE_NEW);
|
||||||
assertAppInfo(totalAppInfos.get(1), PACKAGE_NAME_OLD, TYPE_OLD);
|
assertAppInfo(totalAppInfos.get(1), UID_OLD, PACKAGE_NAME_OLD, TYPE_OLD);
|
||||||
|
|
||||||
// Only one record shows up if we query by timestamp
|
// Only one record shows up if we query by timestamp
|
||||||
List<AppInfo> appInfos = mBatteryDatabaseManager.queryAllAnomalies(ONE_DAY_BEFORE,
|
List<AppInfo> appInfos = mBatteryDatabaseManager.queryAllAnomalies(ONE_DAY_BEFORE,
|
||||||
AnomalyDatabaseHelper.State.NEW);
|
AnomalyDatabaseHelper.State.NEW);
|
||||||
assertThat(appInfos).hasSize(1);
|
assertThat(appInfos).hasSize(1);
|
||||||
assertAppInfo(appInfos.get(0), PACKAGE_NAME_NEW, TYPE_NEW);
|
assertAppInfo(appInfos.get(0), UID_NEW, PACKAGE_NAME_NEW, TYPE_NEW);
|
||||||
|
|
||||||
mBatteryDatabaseManager.deleteAllAnomaliesBeforeTimeStamp(ONE_DAY_BEFORE);
|
mBatteryDatabaseManager.deleteAllAnomaliesBeforeTimeStamp(ONE_DAY_BEFORE);
|
||||||
|
|
||||||
@@ -91,14 +93,14 @@ public class BatteryDatabaseManagerTest {
|
|||||||
List<AppInfo> appInfos1 = mBatteryDatabaseManager.queryAllAnomalies(0 /* timeMsAfter */,
|
List<AppInfo> appInfos1 = mBatteryDatabaseManager.queryAllAnomalies(0 /* timeMsAfter */,
|
||||||
AnomalyDatabaseHelper.State.NEW);
|
AnomalyDatabaseHelper.State.NEW);
|
||||||
assertThat(appInfos1).hasSize(1);
|
assertThat(appInfos1).hasSize(1);
|
||||||
assertAppInfo(appInfos1.get(0), PACKAGE_NAME_NEW, TYPE_NEW);
|
assertAppInfo(appInfos1.get(0), UID_NEW, PACKAGE_NAME_NEW, TYPE_NEW);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateAnomalies_updateSuccessfully() {
|
public void testUpdateAnomalies_updateSuccessfully() {
|
||||||
mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_NEW, TYPE_NEW,
|
mBatteryDatabaseManager.insertAnomaly(UID_NEW, PACKAGE_NAME_NEW, TYPE_NEW,
|
||||||
AnomalyDatabaseHelper.State.NEW, NOW);
|
AnomalyDatabaseHelper.State.NEW, NOW);
|
||||||
mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_OLD, TYPE_OLD,
|
mBatteryDatabaseManager.insertAnomaly(UID_OLD, PACKAGE_NAME_OLD, TYPE_OLD,
|
||||||
AnomalyDatabaseHelper.State.NEW, NOW);
|
AnomalyDatabaseHelper.State.NEW, NOW);
|
||||||
final AppInfo appInfo = new AppInfo.Builder().setPackageName(PACKAGE_NAME_OLD).build();
|
final AppInfo appInfo = new AppInfo.Builder().setPackageName(PACKAGE_NAME_OLD).build();
|
||||||
final List<AppInfo> updateAppInfos = new ArrayList<>();
|
final List<AppInfo> updateAppInfos = new ArrayList<>();
|
||||||
@@ -112,17 +114,18 @@ public class BatteryDatabaseManagerTest {
|
|||||||
List<AppInfo> newAppInfos = mBatteryDatabaseManager.queryAllAnomalies(ONE_DAY_BEFORE,
|
List<AppInfo> newAppInfos = mBatteryDatabaseManager.queryAllAnomalies(ONE_DAY_BEFORE,
|
||||||
AnomalyDatabaseHelper.State.NEW);
|
AnomalyDatabaseHelper.State.NEW);
|
||||||
assertThat(newAppInfos).hasSize(1);
|
assertThat(newAppInfos).hasSize(1);
|
||||||
assertAppInfo(newAppInfos.get(0), PACKAGE_NAME_NEW, TYPE_NEW);
|
assertAppInfo(newAppInfos.get(0), UID_NEW, PACKAGE_NAME_NEW, TYPE_NEW);
|
||||||
|
|
||||||
// The state of PACKAGE_NAME_OLD is changed to handled
|
// The state of PACKAGE_NAME_OLD is changed to handled
|
||||||
List<AppInfo> handledAppInfos = mBatteryDatabaseManager.queryAllAnomalies(ONE_DAY_BEFORE,
|
List<AppInfo> handledAppInfos = mBatteryDatabaseManager.queryAllAnomalies(ONE_DAY_BEFORE,
|
||||||
AnomalyDatabaseHelper.State.HANDLED);
|
AnomalyDatabaseHelper.State.HANDLED);
|
||||||
assertThat(handledAppInfos).hasSize(1);
|
assertThat(handledAppInfos).hasSize(1);
|
||||||
assertAppInfo(handledAppInfos.get(0), PACKAGE_NAME_OLD, TYPE_OLD);
|
assertAppInfo(handledAppInfos.get(0), UID_OLD, PACKAGE_NAME_OLD, TYPE_OLD);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertAppInfo(final AppInfo appInfo, String packageName, int type) {
|
private void assertAppInfo(final AppInfo appInfo, int uid, String packageName, int type) {
|
||||||
assertThat(appInfo.packageName).isEqualTo(packageName);
|
assertThat(appInfo.packageName).isEqualTo(packageName);
|
||||||
assertThat(appInfo.anomalyType).isEqualTo(type);
|
assertThat(appInfo.anomalyType).isEqualTo(type);
|
||||||
|
assertThat(appInfo.uid).isEqualTo(uid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -38,6 +38,7 @@ public class AppInfoTest {
|
|||||||
private static final String PACKAGE_NAME = "com.android.app";
|
private static final String PACKAGE_NAME = "com.android.app";
|
||||||
private static final int ANOMALY_TYPE = Anomaly.AnomalyType.WAKE_LOCK;
|
private static final int ANOMALY_TYPE = Anomaly.AnomalyType.WAKE_LOCK;
|
||||||
private static final long SCREEN_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
private static final long SCREEN_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
||||||
|
private static final int UID = 3452;
|
||||||
|
|
||||||
private AppInfo mAppInfo;
|
private AppInfo mAppInfo;
|
||||||
|
|
||||||
@@ -47,6 +48,7 @@ public class AppInfoTest {
|
|||||||
.setPackageName(PACKAGE_NAME)
|
.setPackageName(PACKAGE_NAME)
|
||||||
.setAnomalyType(ANOMALY_TYPE)
|
.setAnomalyType(ANOMALY_TYPE)
|
||||||
.setScreenOnTimeMs(SCREEN_TIME_MS)
|
.setScreenOnTimeMs(SCREEN_TIME_MS)
|
||||||
|
.setUid(UID)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,6 +63,7 @@ public class AppInfoTest {
|
|||||||
assertThat(appInfo.packageName).isEqualTo(PACKAGE_NAME);
|
assertThat(appInfo.packageName).isEqualTo(PACKAGE_NAME);
|
||||||
assertThat(appInfo.anomalyType).isEqualTo(ANOMALY_TYPE);
|
assertThat(appInfo.anomalyType).isEqualTo(ANOMALY_TYPE);
|
||||||
assertThat(appInfo.screenOnTimeMs).isEqualTo(SCREEN_TIME_MS);
|
assertThat(appInfo.screenOnTimeMs).isEqualTo(SCREEN_TIME_MS);
|
||||||
|
assertThat(appInfo.uid).isEqualTo(UID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -84,5 +87,6 @@ public class AppInfoTest {
|
|||||||
assertThat(mAppInfo.packageName).isEqualTo(PACKAGE_NAME);
|
assertThat(mAppInfo.packageName).isEqualTo(PACKAGE_NAME);
|
||||||
assertThat(mAppInfo.anomalyType).isEqualTo(ANOMALY_TYPE);
|
assertThat(mAppInfo.anomalyType).isEqualTo(ANOMALY_TYPE);
|
||||||
assertThat(mAppInfo.screenOnTimeMs).isEqualTo(SCREEN_TIME_MS);
|
assertThat(mAppInfo.screenOnTimeMs).isEqualTo(SCREEN_TIME_MS);
|
||||||
|
assertThat(mAppInfo.uid).isEqualTo(UID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user