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

Commit fbd376b1 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add debug data in AnomalyLoader"

parents 17ebf1f4 5753e6d9
Loading
Loading
Loading
Loading
+33 −1
Original line number Original line Diff line number Diff line
@@ -17,12 +17,14 @@
package com.android.settings.fuelgauge.anomaly;
package com.android.settings.fuelgauge.anomaly;


import android.content.Context;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.BatteryStats;
import android.os.BatteryStats;
import android.os.Bundle;
import android.os.Bundle;
import android.os.UserManager;
import android.os.UserManager;
import android.support.annotation.VisibleForTesting;
import android.support.annotation.VisibleForTesting;


import com.android.internal.os.BatteryStatsHelper;
import com.android.internal.os.BatteryStatsHelper;
import com.android.settings.Utils;
import com.android.settings.utils.AsyncLoader;
import com.android.settings.utils.AsyncLoader;


import java.util.ArrayList;
import java.util.ArrayList;
@@ -33,6 +35,7 @@ import java.util.List;
 * an empty list if there is no anomaly.
 * an empty list if there is no anomaly.
 */
 */
public class AnomalyLoader extends AsyncLoader<List<Anomaly>> {
public class AnomalyLoader extends AsyncLoader<List<Anomaly>> {
    private static final boolean USE_FAKE_DATA = false;
    private BatteryStatsHelper mBatteryStatsHelper;
    private BatteryStatsHelper mBatteryStatsHelper;
    private String mPackageName;
    private String mPackageName;
    private UserManager mUserManager;
    private UserManager mUserManager;
@@ -56,7 +59,6 @@ public class AnomalyLoader extends AsyncLoader<List<Anomaly>> {
     *
     *
     * This constructor will create {@link BatteryStatsHelper} in background thread.
     * This constructor will create {@link BatteryStatsHelper} in background thread.
     *
     *
     * @param context
     * @param packageName if set, only finds anomalies for this package. If {@code null},
     * @param packageName if set, only finds anomalies for this package. If {@code null},
     *                    detects all anomalies of this type.
     *                    detects all anomalies of this type.
     */
     */
@@ -81,6 +83,9 @@ public class AnomalyLoader extends AsyncLoader<List<Anomaly>> {


    @Override
    @Override
    public List<Anomaly> loadInBackground() {
    public List<Anomaly> loadInBackground() {
        if (USE_FAKE_DATA) {
            return generateFakeData();
        }
        if (mBatteryStatsHelper == null) {
        if (mBatteryStatsHelper == null) {
            mBatteryStatsHelper = new BatteryStatsHelper(getContext());
            mBatteryStatsHelper = new BatteryStatsHelper(getContext());
            mBatteryStatsHelper.create((Bundle) null);
            mBatteryStatsHelper.create((Bundle) null);
@@ -99,4 +104,31 @@ public class AnomalyLoader extends AsyncLoader<List<Anomaly>> {
        return anomalies;
        return anomalies;
    }
    }


    @VisibleForTesting
    List<Anomaly> generateFakeData() {
        final List<Anomaly> anomalies = new ArrayList<>();
        final Context context = getContext();
        try {
            final String packageName = "com.android.settings";
            final CharSequence displayName = "Settings";
            final int uid = context.getPackageManager().getPackageUid(packageName, 0);

            anomalies.add(new Anomaly.Builder()
                    .setUid(uid)
                    .setType(Anomaly.AnomalyType.WAKE_LOCK)
                    .setPackageName(packageName)
                    .setDisplayName(displayName)
                    .build());
            anomalies.add(new Anomaly.Builder()
                    .setUid(uid)
                    .setType(Anomaly.AnomalyType.WAKEUP_ALARM)
                    .setPackageName(packageName)
                    .setDisplayName(displayName)
                    .build());
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return anomalies;
    }

}
}
+17 −1
Original line number Original line Diff line number Diff line
@@ -20,11 +20,13 @@ import static com.google.common.truth.Truth.assertThat;


import static org.mockito.Matchers.any;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


import android.content.Context;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.UserManager;
import android.os.UserManager;


import com.android.internal.os.BatteryStatsHelper;
import com.android.internal.os.BatteryStatsHelper;
@@ -48,6 +50,9 @@ import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class)
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class AnomalyLoaderTest {
public class AnomalyLoaderTest {
    private static final String PACKAGE_NAME = "com.android.settings";
    private static final CharSequence DISPLAY_NAME = "Settings";
    private static final int UID = 0;
    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private Context mContext;
    private Context mContext;
    @Mock
    @Mock
@@ -67,12 +72,13 @@ public class AnomalyLoaderTest {
    private AnomalyLoader mAnomalyLoader;
    private AnomalyLoader mAnomalyLoader;


    @Before
    @Before
    public void setUp() {
    public void setUp() throws PackageManager.NameNotFoundException {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);


        FakeFeatureFactory.setupForTest(mContext);
        FakeFeatureFactory.setupForTest(mContext);
        doReturn(true).when(mAnomalyDetectionPolicy).isAnomalyDetectorEnabled(anyInt());
        doReturn(true).when(mAnomalyDetectionPolicy).isAnomalyDetectorEnabled(anyInt());
        doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE);
        doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE);
        when(mContext.getPackageManager().getPackageUid(anyString(), anyInt())).thenReturn(UID);


        mWakeLockAnomalies = new ArrayList<>();
        mWakeLockAnomalies = new ArrayList<>();
        mWakeLockAnomaly = createAnomaly(Anomaly.AnomalyType.WAKE_LOCK);
        mWakeLockAnomaly = createAnomaly(Anomaly.AnomalyType.WAKE_LOCK);
@@ -105,6 +111,16 @@ public class AnomalyLoaderTest {
    private Anomaly createAnomaly(@Anomaly.AnomalyType int type) {
    private Anomaly createAnomaly(@Anomaly.AnomalyType int type) {
        return new Anomaly.Builder()
        return new Anomaly.Builder()
                .setType(type)
                .setType(type)
                .setUid(UID)
                .setPackageName(PACKAGE_NAME)
                .setDisplayName(DISPLAY_NAME)
                .build();
                .build();
    }
    }

    @Test
    public void testGenerateFakeData() {
        List<Anomaly> anomalies = mAnomalyLoader.generateFakeData();

        assertThat(anomalies).containsExactly(mWakeLockAnomaly, mWakeupAlarmAnomaly);
    }
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -171,7 +171,7 @@ public class WakeLockAnomalyDetectorTest {
    }
    }


    @Test
    @Test
    public void testDetectAnomalies_containsTargetpackage_detectIt() {
    public void testDetectAnomalies_containsTargetPackage_detectIt() {
        doReturn(TARGET_UID).when(mBatteryUtils).getPackageUid(TARGET_PACKAGE_NAME);
        doReturn(TARGET_UID).when(mBatteryUtils).getPackageUid(TARGET_PACKAGE_NAME);
        final Anomaly targetAnomaly = new Anomaly.Builder()
        final Anomaly targetAnomaly = new Anomaly.Builder()
                .setUid(TARGET_UID)
                .setUid(TARGET_UID)