Merge "Add sanity check method for BatteryTip"
This commit is contained in:
@@ -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);
|
||||||
|
@@ -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
|
||||||
*/
|
*/
|
||||||
|
@@ -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,
|
||||||
|
@@ -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(
|
||||||
|
Reference in New Issue
Block a user