Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb029cff authored by Andrew Sapperstein's avatar Andrew Sapperstein Committed by Android (Google) Code Review
Browse files

Merge "update the whitelist for anomaly detection" into pi-dev

parents d610e516 f4318f61
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -31,8 +31,9 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Process;
import android.os.StatsDimensionsValue;
import android.os.SystemPropertiesProto;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.support.annotation.VisibleForTesting;
@@ -122,7 +123,8 @@ public class AnomalyDetectionJobService extends JobService {
            final boolean smartBatteryOn = Settings.Global.getInt(contentResolver,
                    Settings.Global.APP_STANDBY_ENABLED, ON) == ON;
            final String packageName = batteryUtils.getPackageName(uid);
            if (!powerWhitelistBackend.isSysWhitelisted(packageName)) {
            if (!powerWhitelistBackend.isSysWhitelistedExceptIdle(packageName)
                    && !isSystemUid(uid)) {
                if (anomalyType == StatsManagerConfig.AnomalyType.EXCESSIVE_BG) {
                    // TODO(b/72385333): check battery percentage draining in batterystats
                    if (batteryUtils.isLegacyApp(packageName) && batteryUtils.isAppHeavilyUsed(
@@ -156,7 +158,7 @@ public class AnomalyDetectionJobService extends JobService {
     * 3. Bluetooth anomaly:    3:{1:{1:{1:10140|}|}|}
     */
    @VisibleForTesting
    final int extractUidFromStatsDimensionsValue(StatsDimensionsValue statsDimensionsValue) {
    int extractUidFromStatsDimensionsValue(StatsDimensionsValue statsDimensionsValue) {
        //TODO(b/73172999): Add robo test for this method
        if (statsDimensionsValue == null) {
            return UID_NULL;
@@ -178,4 +180,9 @@ public class AnomalyDetectionJobService extends JobService {

        return UID_NULL;
    }

    private boolean isSystemUid(int uid) {
        final int appUid = UserHandle.getAppId(uid);
        return appUid >= Process.ROOT_UID && appUid < Process.FIRST_APPLICATION_UID;
    }
}
+22 −3
Original line number Diff line number Diff line
@@ -18,11 +18,13 @@ package com.android.settings.fuelgauge.batterytip;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.robolectric.RuntimeEnvironment.application;

@@ -32,6 +34,7 @@ import android.app.job.JobScheduler;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Process;
import android.os.StatsDimensionsValue;
import android.os.UserManager;

@@ -84,7 +87,7 @@ public class AnomalyDetectionJobServiceTest {
        mBundle = new Bundle();
        mBundle.putParcelable(StatsManager.EXTRA_STATS_DIMENSIONS_VALUE, mStatsDimensionsValue);

        mAnomalyDetectionJobService = new AnomalyDetectionJobService();
        mAnomalyDetectionJobService = spy(new AnomalyDetectionJobService());
    }

    @Test
@@ -95,6 +98,7 @@ public class AnomalyDetectionJobServiceTest {
                Shadows.shadowOf(application.getSystemService(JobScheduler.class));
        List<JobInfo> pendingJobs = shadowJobScheduler.getAllPendingJobs();
        assertThat(pendingJobs).hasSize(1);

        JobInfo pendingJob = pendingJobs.get(0);
        assertThat(pendingJob.getId()).isEqualTo(R.id.job_anomaly_detection);
        assertThat(pendingJob.getMaxExecutionDelayMillis())
@@ -114,10 +118,25 @@ public class AnomalyDetectionJobServiceTest {
                anyInt(), anyLong());
    }

    @Test
    public void testSaveAnomalyToDatabase_systemUid_doNotSave() {
        doReturn(Process.SYSTEM_UID).when(
                mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());

        mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
                mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,
                mContext.getContentResolver(), mBundle);

        verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
                anyInt(), anyLong());
    }

    @Test
    public void testSaveAnomalyToDatabase_normalApp_save() {
        doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
        doReturn(false).when(mPowerWhitelistBackend).isSysWhitelisted(SYSTEM_PACKAGE);
        doReturn(Process.FIRST_APPLICATION_UID).when(
                mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());

        mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
                mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,