diff --git a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java index 9d4f86f54c0..ff715253ad5 100644 --- a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java +++ b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java @@ -128,14 +128,14 @@ public class AnomalyDetectionJobService extends JobService { Log.e(TAG, "Excessive detected uid=" + uid); batteryUtils.setForceAppStandby(uid, packageName, AppOpsManager.MODE_IGNORED); - databaseManager.insertAnomaly(packageName, anomalyType, + databaseManager.insertAnomaly(uid, packageName, anomalyType, smartBatteryOn ? AnomalyDatabaseHelper.State.AUTO_HANDLED : AnomalyDatabaseHelper.State.NEW, timeMs); } } else { - databaseManager.insertAnomaly(packageName, anomalyType, + databaseManager.insertAnomaly(uid, packageName, anomalyType, AnomalyDatabaseHelper.State.NEW, timeMs); } } catch (NullPointerException | IndexOutOfBoundsException e) { diff --git a/src/com/android/settings/fuelgauge/batterytip/AppInfo.java b/src/com/android/settings/fuelgauge/batterytip/AppInfo.java index 1daff36ab17..00faa7c724f 100644 --- a/src/com/android/settings/fuelgauge/batterytip/AppInfo.java +++ b/src/com/android/settings/fuelgauge/batterytip/AppInfo.java @@ -33,11 +33,13 @@ public class AppInfo implements Comparable, Parcelable { */ public final int anomalyType; public final long screenOnTimeMs; + public final int uid; private AppInfo(AppInfo.Builder builder) { packageName = builder.mPackageName; anomalyType = builder.mAnomalyType; screenOnTimeMs = builder.mScreenOnTimeMs; + uid = builder.mUid; } @VisibleForTesting @@ -45,6 +47,7 @@ public class AppInfo implements Comparable, Parcelable { packageName = in.readString(); anomalyType = in.readInt(); screenOnTimeMs = in.readLong(); + uid = in.readInt(); } @Override @@ -62,6 +65,7 @@ public class AppInfo implements Comparable, Parcelable { dest.writeString(packageName); dest.writeInt(anomalyType); dest.writeLong(screenOnTimeMs); + dest.writeInt(uid); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @@ -78,6 +82,7 @@ public class AppInfo implements Comparable, Parcelable { private int mAnomalyType; private String mPackageName; private long mScreenOnTimeMs; + private int mUid; public Builder setAnomalyType(int type) { mAnomalyType = type; @@ -94,6 +99,11 @@ public class AppInfo implements Comparable, Parcelable { return this; } + public Builder setUid(int uid) { + mUid = uid; + return this; + } + public AppInfo build() { return new AppInfo(this); } diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java b/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java index 935d4932575..d0bddecffad 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java @@ -24,6 +24,7 @@ import static com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper.An .ANOMALY_TYPE; import static com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper.AnomalyColumns .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 android.content.ContentValues; @@ -65,10 +66,11 @@ public class BatteryDatabaseManager { * @param anomalyState the state of the anomaly * @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) { try (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); @@ -83,7 +85,7 @@ public class BatteryDatabaseManager { public synchronized List queryAllAnomalies(long timestampMsAfter, int state) { final List appInfos = new ArrayList<>(); 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"; try (Cursor cursor = db.query(TABLE_ANOMALY, projection, @@ -94,6 +96,7 @@ public class BatteryDatabaseManager { AppInfo appInfo = new AppInfo.Builder() .setPackageName(cursor.getString(cursor.getColumnIndex(PACKAGE_NAME))) .setAnomalyType(cursor.getInt(cursor.getColumnIndex(ANOMALY_TYPE))) + .setUid(cursor.getInt(cursor.getColumnIndex(UID))) .build(); appInfos.add(appInfo); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDatabaseManagerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryDatabaseManagerTest.java index 8b4ff5302b8..636023211bc 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDatabaseManagerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryDatabaseManagerTest.java @@ -42,8 +42,10 @@ import java.util.List; public class BatteryDatabaseManagerTest { private static String PACKAGE_NAME_NEW = "com.android.app1"; + private static int UID_NEW = 345; private static int TYPE_NEW = 1; private static String PACKAGE_NAME_OLD = "com.android.app2"; + private static int UID_OLD = 543; private static int TYPE_OLD = 2; private static long NOW = System.currentTimeMillis(); private static long ONE_DAY_BEFORE = NOW - DateUtils.DAY_IN_MILLIS; @@ -67,23 +69,23 @@ public class BatteryDatabaseManagerTest { @Test public void testAllFunctions() { - mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_NEW, TYPE_NEW, + mBatteryDatabaseManager.insertAnomaly(UID_NEW, PACKAGE_NAME_NEW, TYPE_NEW, 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); // In database, it contains two record List totalAppInfos = mBatteryDatabaseManager.queryAllAnomalies(0 /* timeMsAfter */, AnomalyDatabaseHelper.State.NEW); assertThat(totalAppInfos).hasSize(2); - assertAppInfo(totalAppInfos.get(0), PACKAGE_NAME_NEW, TYPE_NEW); - assertAppInfo(totalAppInfos.get(1), PACKAGE_NAME_OLD, TYPE_OLD); + assertAppInfo(totalAppInfos.get(0), UID_NEW, PACKAGE_NAME_NEW, TYPE_NEW); + assertAppInfo(totalAppInfos.get(1), UID_OLD, PACKAGE_NAME_OLD, TYPE_OLD); // Only one record shows up if we query by timestamp List appInfos = mBatteryDatabaseManager.queryAllAnomalies(ONE_DAY_BEFORE, AnomalyDatabaseHelper.State.NEW); 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); @@ -91,14 +93,14 @@ public class BatteryDatabaseManagerTest { List appInfos1 = mBatteryDatabaseManager.queryAllAnomalies(0 /* timeMsAfter */, AnomalyDatabaseHelper.State.NEW); 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 public void testUpdateAnomalies_updateSuccessfully() { - mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_NEW, TYPE_NEW, + mBatteryDatabaseManager.insertAnomaly(UID_NEW, PACKAGE_NAME_NEW, TYPE_NEW, AnomalyDatabaseHelper.State.NEW, NOW); - mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_OLD, TYPE_OLD, + mBatteryDatabaseManager.insertAnomaly(UID_OLD, PACKAGE_NAME_OLD, TYPE_OLD, AnomalyDatabaseHelper.State.NEW, NOW); final AppInfo appInfo = new AppInfo.Builder().setPackageName(PACKAGE_NAME_OLD).build(); final List updateAppInfos = new ArrayList<>(); @@ -112,17 +114,18 @@ public class BatteryDatabaseManagerTest { List newAppInfos = mBatteryDatabaseManager.queryAllAnomalies(ONE_DAY_BEFORE, AnomalyDatabaseHelper.State.NEW); 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 List handledAppInfos = mBatteryDatabaseManager.queryAllAnomalies(ONE_DAY_BEFORE, AnomalyDatabaseHelper.State.HANDLED); 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.anomalyType).isEqualTo(type); + assertThat(appInfo.uid).isEqualTo(uid); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AppInfoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AppInfoTest.java index 155351a1f2f..b140c4cb295 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AppInfoTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AppInfoTest.java @@ -38,6 +38,7 @@ public class AppInfoTest { private static final String PACKAGE_NAME = "com.android.app"; private static final int ANOMALY_TYPE = Anomaly.AnomalyType.WAKE_LOCK; private static final long SCREEN_TIME_MS = DateUtils.HOUR_IN_MILLIS; + private static final int UID = 3452; private AppInfo mAppInfo; @@ -47,6 +48,7 @@ public class AppInfoTest { .setPackageName(PACKAGE_NAME) .setAnomalyType(ANOMALY_TYPE) .setScreenOnTimeMs(SCREEN_TIME_MS) + .setUid(UID) .build(); } @@ -61,6 +63,7 @@ public class AppInfoTest { assertThat(appInfo.packageName).isEqualTo(PACKAGE_NAME); assertThat(appInfo.anomalyType).isEqualTo(ANOMALY_TYPE); assertThat(appInfo.screenOnTimeMs).isEqualTo(SCREEN_TIME_MS); + assertThat(appInfo.uid).isEqualTo(UID); } @Test @@ -84,5 +87,6 @@ public class AppInfoTest { assertThat(mAppInfo.packageName).isEqualTo(PACKAGE_NAME); assertThat(mAppInfo.anomalyType).isEqualTo(ANOMALY_TYPE); assertThat(mAppInfo.screenOnTimeMs).isEqualTo(SCREEN_TIME_MS); + assertThat(mAppInfo.uid).isEqualTo(UID); } }