Add sanity check method for BatteryTip
This method is used to check whether data in battery tip is still valid. If not, try recover the data or dismiss the tip. Change-Id: Idc9e4d49f99e33d3f5e82e694dc78227fc1da41c Fixes: 111218723 Test: RunSettingsRoboTests
This commit is contained in:
@@ -107,6 +107,7 @@ public class BatteryTipPreferenceController extends BasePreferenceController {
|
||||
mPreferenceGroup.removeAll();
|
||||
for (int i = 0, size = batteryTips.size(); i < size; i++) {
|
||||
final BatteryTip batteryTip = mBatteryTips.get(i);
|
||||
batteryTip.sanityCheck(mContext);
|
||||
if (batteryTip.getState() != BatteryTip.StateType.INVISIBLE) {
|
||||
final Preference preference = batteryTip.buildPreference(mPrefContext);
|
||||
mBatteryTipMap.put(preference.getKey(), batteryTip);
|
||||
|
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.settings.fuelgauge.batterytip.tips;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
@@ -133,6 +134,14 @@ public abstract class BatteryTip implements Comparable<BatteryTip>, Parcelable {
|
||||
*/
|
||||
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
|
||||
*/
|
||||
|
@@ -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
|
||||
public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) {
|
||||
metricsFeatureProvider.action(context, MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP,
|
||||
|
@@ -21,6 +21,7 @@ import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyInt;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
@@ -51,6 +52,7 @@ import java.util.List;
|
||||
@RunWith(SettingsRobolectricTestRunner.class)
|
||||
public class RestrictAppTipTest {
|
||||
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 int ANOMALY_WAKEUP = 0;
|
||||
private static final int ANOMALY_WAKELOCK = 1;
|
||||
@@ -61,6 +63,7 @@ public class RestrictAppTipTest {
|
||||
private RestrictAppTip mInvisibleBatteryTip;
|
||||
private List<AppInfo> mUsageAppList;
|
||||
private AppInfo mAppInfo;
|
||||
private AppInfo mUninstallAppInfo;
|
||||
@Mock
|
||||
private ApplicationInfo mApplicationInfo;
|
||||
@Mock
|
||||
@@ -76,6 +79,9 @@ public class RestrictAppTipTest {
|
||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||
doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(PACKAGE_NAME,
|
||||
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);
|
||||
|
||||
mAppInfo = new AppInfo.Builder()
|
||||
@@ -83,6 +89,10 @@ public class RestrictAppTipTest {
|
||||
.addAnomalyType(ANOMALY_WAKEUP)
|
||||
.addAnomalyType(ANOMALY_WAKELOCK)
|
||||
.build();
|
||||
mUninstallAppInfo = new AppInfo.Builder()
|
||||
.setPackageName(UNINSTALL_PACKAGE_NAME)
|
||||
.addAnomalyType(ANOMALY_WAKEUP)
|
||||
.build();
|
||||
mUsageAppList = new ArrayList<>();
|
||||
mUsageAppList.add(mAppInfo);
|
||||
mNewBatteryTip = new RestrictAppTip(BatteryTip.StateType.NEW, mUsageAppList);
|
||||
@@ -173,6 +183,29 @@ public class RestrictAppTipTest {
|
||||
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
|
||||
public void toString_containsAppData() {
|
||||
assertThat(mNewBatteryTip.toString()).isEqualTo(
|
||||
|
Reference in New Issue
Block a user