diff --git a/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java b/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java index 14330085be9..e41a94b77d8 100644 --- a/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java +++ b/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java @@ -74,6 +74,7 @@ public class RestrictAppPreferenceController extends BasePreferenceController { final AppOpsManager.PackageOps packageOps = packageOpsList.get(i); mAppInfos.add(new AppInfo.Builder() .setPackageName(packageOps.getPackageName()) + .setUid(packageOps.getUid()) .build()); } diff --git a/src/com/android/settings/fuelgauge/RestrictedAppDetails.java b/src/com/android/settings/fuelgauge/RestrictedAppDetails.java index 0843c98cddb..88818001307 100644 --- a/src/com/android/settings/fuelgauge/RestrictedAppDetails.java +++ b/src/com/android/settings/fuelgauge/RestrictedAppDetails.java @@ -130,19 +130,15 @@ public class RestrictedAppDetails extends DashboardFragment { appInfo.packageName, 0 /* flags */); checkBoxPreference.setChecked(true); checkBoxPreference.setTitle(mPackageManager.getApplicationLabel(applicationInfo)); - checkBoxPreference.setKey(appInfo.packageName); checkBoxPreference.setIcon( Utils.getBadgedIcon(mIconDrawableFactory, mPackageManager, appInfo.packageName, - UserHandle.getUserId( - mBatteryUtils.getPackageUid(appInfo.packageName)))); + UserHandle.getUserId(appInfo.uid))); checkBoxPreference.setOnPreferenceChangeListener((pref, value) -> { // change the toggle final int mode = (Boolean) value ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED; - final String packageName = pref.getKey(); - final int uid = mBatteryUtils.getPackageUid(packageName); - mBatteryUtils.setForceAppStandby(uid, packageName, mode); + mBatteryUtils.setForceAppStandby(appInfo.uid, appInfo.packageName, mode); return true; }); mRestrictedAppListGroup.addPreference(checkBoxPreference); diff --git a/src/com/android/settings/fuelgauge/batterytip/AppInfo.java b/src/com/android/settings/fuelgauge/batterytip/AppInfo.java index 9557d9aa8e9..dc6ba2521b4 100644 --- a/src/com/android/settings/fuelgauge/batterytip/AppInfo.java +++ b/src/com/android/settings/fuelgauge/batterytip/AppInfo.java @@ -19,6 +19,7 @@ package com.android.settings.fuelgauge.batterytip; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.VisibleForTesting; +import android.text.TextUtils; import com.android.settings.fuelgauge.anomaly.Anomaly; @@ -74,6 +75,22 @@ public class AppInfo implements Comparable, Parcelable { + screenOnTimeMs; } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof AppInfo)) { + return false; + } + + AppInfo other = (AppInfo) obj; + return anomalyType == other.anomalyType + && uid == other.uid + && screenOnTimeMs == other.screenOnTimeMs + && TextUtils.equals(packageName, other.packageName); + } + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public AppInfo createFromParcel(Parcel in) { return new AppInfo(in); diff --git a/src/com/android/settings/fuelgauge/batterytip/HighUsageAdapter.java b/src/com/android/settings/fuelgauge/batterytip/HighUsageAdapter.java index d982280a4eb..ec45c80f5b1 100644 --- a/src/com/android/settings/fuelgauge/batterytip/HighUsageAdapter.java +++ b/src/com/android/settings/fuelgauge/batterytip/HighUsageAdapter.java @@ -76,7 +76,7 @@ public class HighUsageAdapter extends RecyclerView.Adapter(); - mRestrictedAppDetails.mAppInfos.add(new AppInfo.Builder() - .setPackageName(PACKAGE_NAME) - .build()); - mRestrictedAppDetails.mRestrictedAppListGroup = spy(new PreferenceCategory(mContext)); - mRestrictedAppDetails.mBatteryUtils = new BatteryUtils(mContext); - when(mRestrictedAppDetails.mRestrictedAppListGroup.getPreferenceManager()) - .thenReturn(mPreferenceManager); + doReturn(mPreferenceManager).when(mRestrictedAppDetails).getPreferenceManager(); + doReturn(mContext).when(mPreferenceManager).getContext(); + mRestrictedAppDetails.mPackageManager = mPackageManager; + mRestrictedAppDetails.mIconDrawableFactory = mIconDrawableFactory; + mRestrictedAppDetails.mAppInfos = new ArrayList<>(); + mRestrictedAppDetails.mAppInfos.add(mAppInfo); + mRestrictedAppDetails.mRestrictedAppListGroup = spy(new PreferenceCategory(mContext)); + mRestrictedAppDetails.mBatteryUtils = new BatteryUtils(mContext); + doReturn(mPreferenceManager).when( + mRestrictedAppDetails.mRestrictedAppListGroup).getPreferenceManager(); } @Test public void testRefreshUi_displayPreference() throws Exception { - doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(PACKAGE_NAME, 0); - doReturn(APP_NAME).when(mPackageManager).getApplicationLabel(mApplicationInfo); + doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(PACKAGE_NAME, 0); + doReturn(APP_NAME).when(mPackageManager).getApplicationLabel(mApplicationInfo); - mRestrictedAppDetails.refreshUi(); + mRestrictedAppDetails.refreshUi(); - assertThat(mRestrictedAppDetails.mRestrictedAppListGroup.getPreferenceCount()).isEqualTo(1); - final Preference preference = mRestrictedAppDetails.mRestrictedAppListGroup.getPreference(0); - assertThat(preference.getKey()).isEqualTo(PACKAGE_NAME); - assertThat(preference.getTitle()).isEqualTo(APP_NAME); + assertThat(mRestrictedAppDetails.mRestrictedAppListGroup.getPreferenceCount()).isEqualTo(1); + final Preference preference = mRestrictedAppDetails.mRestrictedAppListGroup.getPreference( + 0); + assertThat(preference.getTitle()).isEqualTo(APP_NAME); } @Test public void testStartRestrictedAppDetails_startWithCorrectData() { - final ArgumentCaptor captor = ArgumentCaptor.forClass(Intent.class); - doAnswer(invocation -> { - // Get the intent in which it has the app info bundle - mIntent = captor.getValue(); - return true; - }).when(mSettingsActivity).startActivity(captor.capture()); + final ArgumentCaptor captor = ArgumentCaptor.forClass(Intent.class); + doAnswer(invocation -> { + // Get the intent in which it has the app info bundle + mIntent = captor.getValue(); + return true; + }).when(mSettingsActivity).startActivity(captor.capture()); - RestrictedAppDetails. - startRestrictedAppDetails(mSettingsActivity, mFragment, mRestrictedAppDetails.mAppInfos); + RestrictedAppDetails.startRestrictedAppDetails(mSettingsActivity, mFragment, + mRestrictedAppDetails.mAppInfos); - final Bundle bundle = mIntent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS); - // Verify the bundle has the correct info - final List appInfos = - bundle.getParcelableArrayList(RestrictedAppDetails.EXTRA_APP_INFO_LIST); - assertThat(appInfos).isNotNull(); - assertThat(appInfos).hasSize(1); - assertThat(appInfos.get(0).packageName).isEqualTo(PACKAGE_NAME); + final Bundle bundle = mIntent.getBundleExtra( + SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS); + // Verify the bundle has the correct info + final List appInfos = bundle.getParcelableArrayList( + RestrictedAppDetails.EXTRA_APP_INFO_LIST); + assertThat(appInfos).containsExactly(mAppInfo); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java index 7dbad7acff7..14627c5b63e 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java @@ -29,8 +29,10 @@ import android.text.format.DateUtils; import com.android.internal.os.BatterySipper; import com.android.internal.os.BatteryStatsHelper; import com.android.settings.fuelgauge.BatteryUtils; +import com.android.settings.fuelgauge.batterytip.AppInfo; import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy; import com.android.settings.fuelgauge.batterytip.HighUsageDataParser; +import com.android.settings.fuelgauge.batterytip.tips.HighUsageTip; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; @@ -46,7 +48,8 @@ import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) public class HighUsageDetectorTest { - + private static final int UID = 123; + private static final long SCREEN_ON_TIME_MS = DateUtils.HOUR_IN_MILLIS; private Context mContext; @Mock private BatteryStatsHelper mBatteryStatsHelper; @@ -57,6 +60,7 @@ public class HighUsageDetectorTest { @Mock private HighUsageDataParser mDataParser; + private AppInfo mAppInfo; private BatteryTipPolicy mPolicy; private HighUsageDetector mHighUsageDetector; private List mUsageList; @@ -71,6 +75,11 @@ public class HighUsageDetectorTest { mHighUsageDetector.mBatteryUtils = mBatteryUtils; mHighUsageDetector.mDataParser = mDataParser; doNothing().when(mHighUsageDetector).parseBatteryData(); + doReturn(UID).when(mBatterySipper).getUid(); + mAppInfo = new AppInfo.Builder() + .setUid(UID) + .setScreenOnTimeMs(SCREEN_ON_TIME_MS) + .build(); mUsageList = new ArrayList<>(); mUsageList.add(mBatterySipper); @@ -87,10 +96,12 @@ public class HighUsageDetectorTest { public void testDetect_containsHighUsageApp_tipVisible() { doReturn(true).when(mDataParser).isDeviceHeavilyUsed(); when(mBatteryStatsHelper.getUsageList()).thenReturn(mUsageList); - doReturn(DateUtils.HOUR_IN_MILLIS).when(mBatteryUtils).getProcessTimeMs( + doReturn(SCREEN_ON_TIME_MS).when(mBatteryUtils).getProcessTimeMs( BatteryUtils.StatusType.FOREGROUND, mBatterySipper.uidObj, BatteryStats.STATS_SINCE_CHARGED); - assertThat(mHighUsageDetector.detect().isVisible()).isTrue(); + final HighUsageTip highUsageTip = (HighUsageTip) mHighUsageDetector.detect(); + assertThat(highUsageTip.isVisible()).isTrue(); + assertThat(highUsageTip.getHighUsageAppList()).containsExactly(mAppInfo); } }