Merge "Add sanity check method for BatteryTip"

This commit is contained in:
Lei Yu
2018-07-11 22:23:36 +00:00
committed by Android (Google) Code Review
4 changed files with 54 additions and 0 deletions

View File

@@ -107,6 +107,7 @@ public class BatteryTipPreferenceController extends BasePreferenceController {
mPreferenceGroup.removeAll(); mPreferenceGroup.removeAll();
for (int i = 0, size = batteryTips.size(); i < size; i++) { for (int i = 0, size = batteryTips.size(); i < size; i++) {
final BatteryTip batteryTip = mBatteryTips.get(i); final BatteryTip batteryTip = mBatteryTips.get(i);
batteryTip.sanityCheck(mContext);
if (batteryTip.getState() != BatteryTip.StateType.INVISIBLE) { if (batteryTip.getState() != BatteryTip.StateType.INVISIBLE) {
final Preference preference = batteryTip.buildPreference(mPrefContext); final Preference preference = batteryTip.buildPreference(mPrefContext);
mBatteryTipMap.put(preference.getKey(), batteryTip); mBatteryTipMap.put(preference.getKey(), batteryTip);

View File

@@ -16,6 +16,7 @@
package com.android.settings.fuelgauge.batterytip.tips; package com.android.settings.fuelgauge.batterytip.tips;
import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -133,6 +134,14 @@ public abstract class BatteryTip implements Comparable<BatteryTip>, Parcelable {
*/ */
public abstract void updateState(BatteryTip tip); public abstract void updateState(BatteryTip tip);
/**
* Check whether data is still make sense. If not, try recover.
* @param context used to do sanity check
*/
public void sanityCheck(Context context) {
// do nothing
}
/** /**
* Log the battery tip * Log the battery tip
*/ */

View File

@@ -106,6 +106,17 @@ public class RestrictAppTip extends BatteryTip {
} }
} }
@Override
public void sanityCheck(Context context) {
super.sanityCheck(context);
// Set it invisible if there is no valid app
mRestrictAppList.removeIf(new AppLabelPredicate(context));
if (mRestrictAppList.isEmpty()) {
mState = StateType.INVISIBLE;
}
}
@Override @Override
public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) { public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) {
metricsFeatureProvider.action(context, MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP, metricsFeatureProvider.action(context, MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP,

View File

@@ -21,6 +21,7 @@ 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.Matchers.anyString;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
@@ -51,6 +52,7 @@ import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
public class RestrictAppTipTest { public class RestrictAppTipTest {
private static final String PACKAGE_NAME = "com.android.app"; private static final String PACKAGE_NAME = "com.android.app";
private static final String UNINSTALL_PACKAGE_NAME = "com.android.app.unintall";
private static final String DISPLAY_NAME = "app"; private static final String DISPLAY_NAME = "app";
private static final int ANOMALY_WAKEUP = 0; private static final int ANOMALY_WAKEUP = 0;
private static final int ANOMALY_WAKELOCK = 1; private static final int ANOMALY_WAKELOCK = 1;
@@ -61,6 +63,7 @@ public class RestrictAppTipTest {
private RestrictAppTip mInvisibleBatteryTip; private RestrictAppTip mInvisibleBatteryTip;
private List<AppInfo> mUsageAppList; private List<AppInfo> mUsageAppList;
private AppInfo mAppInfo; private AppInfo mAppInfo;
private AppInfo mUninstallAppInfo;
@Mock @Mock
private ApplicationInfo mApplicationInfo; private ApplicationInfo mApplicationInfo;
@Mock @Mock
@@ -76,6 +79,9 @@ public class RestrictAppTipTest {
doReturn(mPackageManager).when(mContext).getPackageManager(); doReturn(mPackageManager).when(mContext).getPackageManager();
doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(PACKAGE_NAME, doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(PACKAGE_NAME,
PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER); PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER);
doThrow(new PackageManager.NameNotFoundException()).when(mPackageManager)
.getApplicationInfo(UNINSTALL_PACKAGE_NAME,
PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER);
doReturn(DISPLAY_NAME).when(mApplicationInfo).loadLabel(mPackageManager); doReturn(DISPLAY_NAME).when(mApplicationInfo).loadLabel(mPackageManager);
mAppInfo = new AppInfo.Builder() mAppInfo = new AppInfo.Builder()
@@ -83,6 +89,10 @@ public class RestrictAppTipTest {
.addAnomalyType(ANOMALY_WAKEUP) .addAnomalyType(ANOMALY_WAKEUP)
.addAnomalyType(ANOMALY_WAKELOCK) .addAnomalyType(ANOMALY_WAKELOCK)
.build(); .build();
mUninstallAppInfo = new AppInfo.Builder()
.setPackageName(UNINSTALL_PACKAGE_NAME)
.addAnomalyType(ANOMALY_WAKEUP)
.build();
mUsageAppList = new ArrayList<>(); mUsageAppList = new ArrayList<>();
mUsageAppList.add(mAppInfo); mUsageAppList.add(mAppInfo);
mNewBatteryTip = new RestrictAppTip(BatteryTip.StateType.NEW, mUsageAppList); mNewBatteryTip = new RestrictAppTip(BatteryTip.StateType.NEW, mUsageAppList);
@@ -173,6 +183,29 @@ public class RestrictAppTipTest {
assertThat(mInvisibleBatteryTip.getRestrictAppList()).containsExactly(mAppInfo); assertThat(mInvisibleBatteryTip.getRestrictAppList()).containsExactly(mAppInfo);
} }
@Test
public void sanityCheck_appUninstalled_stateInvisible() {
final List<AppInfo> appInfos = new ArrayList<>();
appInfos.add(mUninstallAppInfo);
final BatteryTip batteryTip = new RestrictAppTip(BatteryTip.StateType.NEW, appInfos);
batteryTip.sanityCheck(mContext);
assertThat(batteryTip.getState()).isEqualTo(BatteryTip.StateType.INVISIBLE);
}
@Test
public void sanityCheck_twoRestrictedAppsWhileUninstallOne_stateVisible() {
final List<AppInfo> appInfos = new ArrayList<>();
appInfos.add(mAppInfo);
appInfos.add(mUninstallAppInfo);
final BatteryTip batteryTip = new RestrictAppTip(BatteryTip.StateType.NEW, appInfos);
batteryTip.sanityCheck(mContext);
assertThat(batteryTip.getState()).isEqualTo(BatteryTip.StateType.NEW);
}
@Test @Test
public void toString_containsAppData() { public void toString_containsAppData() {
assertThat(mNewBatteryTip.toString()).isEqualTo( assertThat(mNewBatteryTip.toString()).isEqualTo(