Make app predicates singleton
1. AppLabelPredicate 2. AppRestrictionPredicate Change-Id: I1fd8611c5dd7ffa6318bcb23de7a973c111910b6 Fixes: 111323520 Test: RunSettingsRoboTests
This commit is contained in:
@@ -136,8 +136,8 @@ public class BatteryTipUtils {
|
|||||||
final List<AppInfo> highUsageApps = BatteryDatabaseManager.getInstance(context)
|
final List<AppInfo> highUsageApps = BatteryDatabaseManager.getInstance(context)
|
||||||
.queryAllAnomalies(timeAfterMs, AnomalyDatabaseHelper.State.NEW);
|
.queryAllAnomalies(timeAfterMs, AnomalyDatabaseHelper.State.NEW);
|
||||||
// Remove it if it doesn't have label or been restricted
|
// Remove it if it doesn't have label or been restricted
|
||||||
highUsageApps.removeIf(
|
highUsageApps.removeIf(AppLabelPredicate.getInstance(context)
|
||||||
new AppLabelPredicate(context).or(new AppRestrictionPredicate(context)));
|
.or(AppRestrictionPredicate.getInstance(context)));
|
||||||
|
|
||||||
return highUsageApps;
|
return highUsageApps;
|
||||||
}
|
}
|
||||||
|
@@ -53,8 +53,8 @@ public class RestrictAppDetector implements BatteryTipDetector {
|
|||||||
mContext = context;
|
mContext = context;
|
||||||
mPolicy = policy;
|
mPolicy = policy;
|
||||||
mBatteryDatabaseManager = BatteryDatabaseManager.getInstance(context);
|
mBatteryDatabaseManager = BatteryDatabaseManager.getInstance(context);
|
||||||
mAppRestrictionPredicate = new AppRestrictionPredicate(context);
|
mAppRestrictionPredicate = AppRestrictionPredicate.getInstance(context);
|
||||||
mAppLabelPredicate = new AppLabelPredicate(context);
|
mAppLabelPredicate = AppLabelPredicate.getInstance(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package com.android.settings.fuelgauge.batterytip.tips;
|
package com.android.settings.fuelgauge.batterytip.tips;
|
||||||
|
|
||||||
import android.app.AppOpsManager;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
@@ -28,12 +27,20 @@ import java.util.function.Predicate;
|
|||||||
* {@link Predicate} for {@link AppInfo} to check whether it has label
|
* {@link Predicate} for {@link AppInfo} to check whether it has label
|
||||||
*/
|
*/
|
||||||
public class AppLabelPredicate implements Predicate<AppInfo> {
|
public class AppLabelPredicate implements Predicate<AppInfo> {
|
||||||
private Context mContext;
|
|
||||||
private AppOpsManager mAppOpsManager;
|
|
||||||
|
|
||||||
public AppLabelPredicate(Context context) {
|
private static AppLabelPredicate sInstance;
|
||||||
|
private Context mContext;
|
||||||
|
|
||||||
|
public static AppLabelPredicate getInstance(Context context) {
|
||||||
|
if (sInstance == null) {
|
||||||
|
sInstance = new AppLabelPredicate(context.getApplicationContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
return sInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private AppLabelPredicate(Context context) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mAppOpsManager = context.getSystemService(AppOpsManager.class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -27,9 +27,19 @@ import java.util.function.Predicate;
|
|||||||
* {@link Predicate} for {@link AppInfo} to check whether it is restricted.
|
* {@link Predicate} for {@link AppInfo} to check whether it is restricted.
|
||||||
*/
|
*/
|
||||||
public class AppRestrictionPredicate implements Predicate<AppInfo> {
|
public class AppRestrictionPredicate implements Predicate<AppInfo> {
|
||||||
|
|
||||||
|
private static AppRestrictionPredicate sInstance;
|
||||||
private AppOpsManager mAppOpsManager;
|
private AppOpsManager mAppOpsManager;
|
||||||
|
|
||||||
public AppRestrictionPredicate(Context context) {
|
public static AppRestrictionPredicate getInstance(Context context) {
|
||||||
|
if (sInstance == null) {
|
||||||
|
sInstance = new AppRestrictionPredicate(context.getApplicationContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
return sInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private AppRestrictionPredicate(Context context) {
|
||||||
mAppOpsManager = context.getSystemService(AppOpsManager.class);
|
mAppOpsManager = context.getSystemService(AppOpsManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -112,7 +112,7 @@ public class RestrictAppTip extends BatteryTip {
|
|||||||
super.sanityCheck(context);
|
super.sanityCheck(context);
|
||||||
|
|
||||||
// Set it invisible if there is no valid app
|
// Set it invisible if there is no valid app
|
||||||
mRestrictAppList.removeIf(new AppLabelPredicate(context));
|
mRestrictAppList.removeIf(AppLabelPredicate.getInstance(context));
|
||||||
if (mRestrictAppList.isEmpty()) {
|
if (mRestrictAppList.isEmpty()) {
|
||||||
mState = StateType.INVISIBLE;
|
mState = StateType.INVISIBLE;
|
||||||
}
|
}
|
||||||
|
@@ -28,9 +28,13 @@ import android.os.PowerManager;
|
|||||||
import com.android.internal.os.BatteryStatsHelper;
|
import com.android.internal.os.BatteryStatsHelper;
|
||||||
import com.android.settings.fuelgauge.BatteryInfo;
|
import com.android.settings.fuelgauge.BatteryInfo;
|
||||||
import com.android.settings.fuelgauge.BatteryUtils;
|
import com.android.settings.fuelgauge.BatteryUtils;
|
||||||
|
import com.android.settings.fuelgauge.batterytip.tips.AppLabelPredicate;
|
||||||
|
import com.android.settings.fuelgauge.batterytip.tips.AppRestrictionPredicate;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||||
|
import com.android.settings.testutils.BatteryTestUtils;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -77,6 +81,12 @@ public class BatteryTipLoaderTest {
|
|||||||
mBatteryTipLoader.mBatteryUtils = mBatteryUtils;
|
mBatteryTipLoader.mBatteryUtils = mBatteryUtils;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void tearDown() {
|
||||||
|
BatteryTestUtils.clearStaticInstance(AppLabelPredicate.class, "sInstance");
|
||||||
|
BatteryTestUtils.clearStaticInstance(AppRestrictionPredicate.class, "sInstance");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLoadBackground_containsAllTipsWithOrder() {
|
public void testLoadBackground_containsAllTipsWithOrder() {
|
||||||
final List<BatteryTip> batteryTips = mBatteryTipLoader.loadInBackground();
|
final List<BatteryTip> batteryTips = mBatteryTipLoader.loadInBackground();
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
package com.android.settings.fuelgauge.batterytip;
|
package com.android.settings.fuelgauge.batterytip;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
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;
|
||||||
|
@@ -34,8 +34,11 @@ import com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper;
|
|||||||
import com.android.settings.fuelgauge.batterytip.AppInfo;
|
import com.android.settings.fuelgauge.batterytip.AppInfo;
|
||||||
import com.android.settings.fuelgauge.batterytip.BatteryDatabaseManager;
|
import com.android.settings.fuelgauge.batterytip.BatteryDatabaseManager;
|
||||||
import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy;
|
import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy;
|
||||||
|
import com.android.settings.fuelgauge.batterytip.tips.AppLabelPredicate;
|
||||||
|
import com.android.settings.fuelgauge.batterytip.tips.AppRestrictionPredicate;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
|
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
|
||||||
|
import com.android.settings.testutils.BatteryTestUtils;
|
||||||
import com.android.settings.testutils.DatabaseTestUtils;
|
import com.android.settings.testutils.DatabaseTestUtils;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
|
|
||||||
@@ -86,6 +89,7 @@ public class RestrictAppDetectorTest {
|
|||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
mPolicy = spy(new BatteryTipPolicy(mContext));
|
mPolicy = spy(new BatteryTipPolicy(mContext));
|
||||||
|
|
||||||
|
doReturn(mContext).when(mContext).getApplicationContext();
|
||||||
doReturn(mAppOpsManager).when(mContext).getSystemService(AppOpsManager.class);
|
doReturn(mAppOpsManager).when(mContext).getSystemService(AppOpsManager.class);
|
||||||
doReturn(AppOpsManager.MODE_IGNORED).when(mAppOpsManager).checkOpNoThrow(
|
doReturn(AppOpsManager.MODE_IGNORED).when(mAppOpsManager).checkOpNoThrow(
|
||||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, RESTRICTED_UID, RESTRICTED_PACKAGE_NAME);
|
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, RESTRICTED_UID, RESTRICTED_PACKAGE_NAME);
|
||||||
@@ -103,7 +107,12 @@ public class RestrictAppDetectorTest {
|
|||||||
|
|
||||||
mRestrictAppDetector = new RestrictAppDetector(mContext, mPolicy);
|
mRestrictAppDetector = new RestrictAppDetector(mContext, mPolicy);
|
||||||
mRestrictAppDetector.mBatteryDatabaseManager = mBatteryDatabaseManager;
|
mRestrictAppDetector.mBatteryDatabaseManager = mBatteryDatabaseManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void tearDown() {
|
||||||
|
BatteryTestUtils.clearStaticInstance(AppLabelPredicate.class, "sInstance");
|
||||||
|
BatteryTestUtils.clearStaticInstance(AppRestrictionPredicate.class, "sInstance");
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
|
@@ -34,9 +34,11 @@ import android.util.Pair;
|
|||||||
import com.android.internal.logging.nano.MetricsProto;
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.fuelgauge.batterytip.AppInfo;
|
import com.android.settings.fuelgauge.batterytip.AppInfo;
|
||||||
|
import com.android.settings.testutils.BatteryTestUtils;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -74,6 +76,7 @@ public class RestrictAppTipTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
|
doReturn(mContext).when(mContext).getApplicationContext();
|
||||||
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);
|
||||||
@@ -98,6 +101,12 @@ public class RestrictAppTipTest {
|
|||||||
mInvisibleBatteryTip = new RestrictAppTip(BatteryTip.StateType.INVISIBLE, new ArrayList<>());
|
mInvisibleBatteryTip = new RestrictAppTip(BatteryTip.StateType.INVISIBLE, new ArrayList<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void tearDown() {
|
||||||
|
BatteryTestUtils.clearStaticInstance(AppLabelPredicate.class, "sInstance");
|
||||||
|
BatteryTestUtils.clearStaticInstance(AppRestrictionPredicate.class, "sInstance");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parcelable() {
|
public void parcelable() {
|
||||||
Parcel parcel = Parcel.obtain();
|
Parcel parcel = Parcel.obtain();
|
||||||
|
@@ -19,6 +19,8 @@ package com.android.settings.testutils;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.BatteryManager;
|
import android.os.BatteryManager;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
public class BatteryTestUtils {
|
public class BatteryTestUtils {
|
||||||
|
|
||||||
public static Intent getChargingIntent() {
|
public static Intent getChargingIntent() {
|
||||||
@@ -47,4 +49,15 @@ public class BatteryTestUtils {
|
|||||||
return intent;
|
return intent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void clearStaticInstance(Class clazz, String fieldName) {
|
||||||
|
Field instance;
|
||||||
|
try {
|
||||||
|
instance = clazz.getDeclaredField(fieldName);
|
||||||
|
instance.setAccessible(true);
|
||||||
|
instance.set(null, null);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user