diff --git a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java index 619913de1b1..a34bb905d31 100644 --- a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java +++ b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java @@ -38,13 +38,16 @@ import android.os.UserManager; import android.provider.Settings; import android.support.annotation.VisibleForTesting; import android.util.Log; +import android.util.Pair; +import com.android.internal.logging.nano.MetricsProto; import com.android.internal.os.BatteryStatsHelper; import com.android.internal.util.ArrayUtils; import com.android.settings.R; import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.fuelgauge.PowerUsageFeatureProvider; import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.fuelgauge.PowerWhitelistBackend; import com.android.settingslib.utils.ThreadUtils; @@ -78,6 +81,7 @@ public class AnomalyDetectionJobService extends JobService { @Override public boolean onStartJob(JobParameters params) { ThreadUtils.postOnBackgroundThread(() -> { + final Context context = AnomalyDetectionJobService.this; final BatteryDatabaseManager batteryDatabaseManager = BatteryDatabaseManager.getInstance(this); final BatteryTipPolicy policy = new BatteryTipPolicy(this); @@ -89,12 +93,14 @@ public class AnomalyDetectionJobService extends JobService { final PowerWhitelistBackend powerWhitelistBackend = PowerWhitelistBackend.getInstance(); final PowerUsageFeatureProvider powerUsageFeatureProvider = FeatureFactory .getFactory(this).getPowerUsageFeatureProvider(this); + final MetricsFeatureProvider metricsFeatureProvider = FeatureFactory + .getFactory(this).getMetricsFeatureProvider(); for (JobWorkItem item = params.dequeueWork(); item != null; item = params.dequeueWork()) { - saveAnomalyToDatabase(batteryStatsHelper, userManager, batteryDatabaseManager, - batteryUtils, policy, powerWhitelistBackend, contentResolver, - powerUsageFeatureProvider, + saveAnomalyToDatabase(context, batteryStatsHelper, userManager, + batteryDatabaseManager, batteryUtils, policy, powerWhitelistBackend, + contentResolver, powerUsageFeatureProvider, metricsFeatureProvider, item.getIntent().getExtras()); } jobFinished(params, false /* wantsReschedule */); @@ -109,11 +115,12 @@ public class AnomalyDetectionJobService extends JobService { } @VisibleForTesting - void saveAnomalyToDatabase(BatteryStatsHelper batteryStatsHelper, UserManager userManager, + void saveAnomalyToDatabase(Context context, BatteryStatsHelper batteryStatsHelper, + UserManager userManager, BatteryDatabaseManager databaseManager, BatteryUtils batteryUtils, BatteryTipPolicy policy, PowerWhitelistBackend powerWhitelistBackend, ContentResolver contentResolver, PowerUsageFeatureProvider powerUsageFeatureProvider, - Bundle bundle) { + MetricsFeatureProvider metricsFeatureProvider, Bundle bundle) { // The Example of intentDimsValue is: 35:{1:{1:{1:10013|}|}|} final StatsDimensionsValue intentDimsValue = bundle.getParcelable(StatsManager.EXTRA_STATS_DIMENSIONS_VALUE); @@ -158,6 +165,11 @@ public class AnomalyDetectionJobService extends JobService { AnomalyDatabaseHelper.State.NEW, timeMs); } + metricsFeatureProvider.action(context, + MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED, + packageName, + Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, + anomalyInfo.anomalyType)); } } } catch (NullPointerException | IndexOutOfBoundsException e) { diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java index d2b11fdb093..b5d764d0283 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java @@ -38,7 +38,9 @@ import android.os.Bundle; import android.os.Process; import android.os.StatsDimensionsValue; import android.os.UserManager; +import android.util.Pair; +import com.android.internal.logging.nano.MetricsProto; import com.android.internal.os.BatteryStatsHelper; import com.android.settings.R; import com.android.settings.fuelgauge.BatteryUtils; @@ -67,6 +69,7 @@ public class AnomalyDetectionJobServiceTest { "anomaly_type=6,auto_restriction=true"; private static final String SUBSCRIBER_COOKIES_NOT_AUTO_RESTRICTION = "anomaly_type=6,auto_restriction=false"; + private static final int ANOMALY_TYPE = 6; @Mock private BatteryStatsHelper mBatteryStatsHelper; @Mock @@ -119,9 +122,11 @@ public class AnomalyDetectionJobServiceTest { doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt()); doReturn(true).when(mPowerWhitelistBackend).isSysWhitelisted(SYSTEM_PACKAGE); - mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager, - mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend, - mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle); + mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper, + mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy, + mPowerWhitelistBackend, mContext.getContentResolver(), + mFeatureFactory.powerUsageFeatureProvider, + mFeatureFactory.metricsFeatureProvider, mBundle); verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong()); @@ -132,9 +137,11 @@ public class AnomalyDetectionJobServiceTest { doReturn(Process.SYSTEM_UID).when( mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any()); - mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager, - mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend, - mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle); + mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper, + mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy, + mPowerWhitelistBackend, mContext.getContentResolver(), + mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider, + mBundle); verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong()); @@ -149,12 +156,18 @@ public class AnomalyDetectionJobServiceTest { doReturn(Process.FIRST_APPLICATION_UID).when( mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any()); - mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager, - mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend, - mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle); + mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper, + mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy, + mPowerWhitelistBackend, mContext.getContentResolver(), + mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider, + mBundle); verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6), eq(AnomalyDatabaseHelper.State.AUTO_HANDLED), anyLong()); + verify(mFeatureFactory.metricsFeatureProvider).action(mContext, + MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED, + SYSTEM_PACKAGE, + Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, ANOMALY_TYPE)); } @@ -167,11 +180,17 @@ public class AnomalyDetectionJobServiceTest { doReturn(Process.FIRST_APPLICATION_UID).when( mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any()); - mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager, - mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend, - mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle); + mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper, + mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy, + mPowerWhitelistBackend, mContext.getContentResolver(), + mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider, + mBundle); verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6), eq(AnomalyDatabaseHelper.State.NEW), anyLong()); + verify(mFeatureFactory.metricsFeatureProvider).action(mContext, + MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED, + SYSTEM_PACKAGE, + Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, ANOMALY_TYPE)); } }