Merge "Add Intentfilter BasePreferenceController" into pi-dev
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index a1f5df2..c62af8f 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -45,6 +45,8 @@
import com.android.internal.util.ArrayUtils;
import com.android.settings.R;
import com.android.settings.fuelgauge.anomaly.Anomaly;
+import com.android.settings.fuelgauge.batterytip.AnomalyInfo;
+import com.android.settings.fuelgauge.batterytip.StatsManagerConfig;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
@@ -511,10 +513,25 @@
return false;
}
+ public boolean isPreOApp(final String[] packageNames) {
+ if (ArrayUtils.isEmpty(packageNames)) {
+ return false;
+ }
+
+ for (String packageName : packageNames) {
+ if (isPreOApp(packageName)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
/**
* Return {@code true} if we should hide anomaly app represented by {@code uid}
*/
- public boolean shouldHideAnomaly(PowerWhitelistBackend powerWhitelistBackend, int uid) {
+ public boolean shouldHideAnomaly(PowerWhitelistBackend powerWhitelistBackend, int uid,
+ AnomalyInfo anomalyInfo) {
final String[] packageNames = mPackageManager.getPackagesForUid(uid);
if (ArrayUtils.isEmpty(packageNames)) {
// Don't show it if app has been uninstalled
@@ -522,7 +539,13 @@
}
return isSystemUid(uid) || powerWhitelistBackend.isWhitelisted(packageNames)
- || (isSystemApp(mPackageManager, packageNames) && !hasLauncherEntry(packageNames));
+ || (isSystemApp(mPackageManager, packageNames) && !hasLauncherEntry(packageNames))
+ || (isExcessiveBackgroundAnomaly(anomalyInfo) && !isPreOApp(packageNames));
+ }
+
+ private boolean isExcessiveBackgroundAnomaly(AnomalyInfo anomalyInfo) {
+ return anomalyInfo.anomalyType
+ == StatsManagerConfig.AnomalyType.EXCESSIVE_BACKGROUND_SERVICE;
}
private boolean isSystemUid(int uid) {
diff --git a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java
index b6bcd54..84ef864 100644
--- a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java
+++ b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java
@@ -155,44 +155,36 @@
final String packageName = batteryUtils.getPackageName(uid);
final long versionCode = batteryUtils.getAppLongVersionCode(packageName);
- final boolean anomalyDetected;
- if (isExcessiveBackgroundAnomaly(anomalyInfo)) {
- anomalyDetected = batteryUtils.isPreOApp(packageName);
+ if (batteryUtils.shouldHideAnomaly(powerWhitelistBackend, uid, anomalyInfo)) {
+ metricsFeatureProvider.action(context,
+ MetricsProto.MetricsEvent.ACTION_ANOMALY_IGNORED,
+ packageName,
+ Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT,
+ anomalyInfo.anomalyType),
+ Pair.create(MetricsProto.MetricsEvent.FIELD_APP_VERSION_CODE,
+ versionCode));
} else {
- anomalyDetected = true;
+ if (autoFeatureOn && anomalyInfo.autoRestriction) {
+ // Auto restrict this app
+ batteryUtils.setForceAppStandby(uid, packageName,
+ AppOpsManager.MODE_IGNORED);
+ databaseManager.insertAnomaly(uid, packageName, anomalyInfo.anomalyType,
+ AnomalyDatabaseHelper.State.AUTO_HANDLED,
+ timeMs);
+ } else {
+ databaseManager.insertAnomaly(uid, packageName, anomalyInfo.anomalyType,
+ AnomalyDatabaseHelper.State.NEW,
+ timeMs);
+ }
+ metricsFeatureProvider.action(context,
+ MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
+ packageName,
+ Pair.create(MetricsProto.MetricsEvent.FIELD_ANOMALY_TYPE,
+ anomalyInfo.anomalyType),
+ Pair.create(MetricsProto.MetricsEvent.FIELD_APP_VERSION_CODE,
+ versionCode));
}
- if (anomalyDetected) {
- if (batteryUtils.shouldHideAnomaly(powerWhitelistBackend, uid)) {
- metricsFeatureProvider.action(context,
- MetricsProto.MetricsEvent.ACTION_ANOMALY_IGNORED,
- packageName,
- Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT,
- anomalyInfo.anomalyType),
- Pair.create(MetricsProto.MetricsEvent.FIELD_APP_VERSION_CODE,
- versionCode));
- } else {
- if (autoFeatureOn && anomalyInfo.autoRestriction) {
- // Auto restrict this app
- batteryUtils.setForceAppStandby(uid, packageName,
- AppOpsManager.MODE_IGNORED);
- databaseManager.insertAnomaly(uid, packageName, anomalyInfo.anomalyType,
- AnomalyDatabaseHelper.State.AUTO_HANDLED,
- timeMs);
- } else {
- databaseManager.insertAnomaly(uid, packageName, anomalyInfo.anomalyType,
- AnomalyDatabaseHelper.State.NEW,
- timeMs);
- }
- metricsFeatureProvider.action(context,
- MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
- packageName,
- Pair.create(MetricsProto.MetricsEvent.FIELD_ANOMALY_TYPE,
- anomalyInfo.anomalyType),
- Pair.create(MetricsProto.MetricsEvent.FIELD_APP_VERSION_CODE,
- versionCode));
- }
- }
} catch (NullPointerException | IndexOutOfBoundsException e) {
Log.e(TAG, "Parse stats dimensions value error.", e);
}
@@ -229,11 +221,6 @@
return UID_NULL;
}
- private boolean isExcessiveBackgroundAnomaly(AnomalyInfo anomalyInfo) {
- return anomalyInfo.anomalyType
- == StatsManagerConfig.AnomalyType.EXCESSIVE_BACKGROUND_SERVICE;
- }
-
@VisibleForTesting
JobWorkItem dequeueWork(JobParameters parameters) {
synchronized (mLock) {
diff --git a/src/com/android/settings/sound/AudioSwitchPreferenceController.java b/src/com/android/settings/sound/AudioSwitchPreferenceController.java
index 6d9d3a4..62f3453 100644
--- a/src/com/android/settings/sound/AudioSwitchPreferenceController.java
+++ b/src/com/android/settings/sound/AudioSwitchPreferenceController.java
@@ -136,7 +136,7 @@
final BluetoothDevice btDevice = mConnectedDevices.get(connectedDeviceIndex);
mSelectedIndex = connectedDeviceIndex;
setActiveBluetoothDevice(btDevice);
- listPreference.setSummary(btDevice.getName());
+ listPreference.setSummary(btDevice.getAliasName());
}
return true;
}
@@ -328,7 +328,7 @@
mediaValues[mSelectedIndex] = mContext.getText(R.string.media_output_default_summary);
for (int i = 0, size = mConnectedDevices.size(); i < size; i++) {
final BluetoothDevice btDevice = mConnectedDevices.get(i);
- mediaOutputs[i] = btDevice.getName();
+ mediaOutputs[i] = btDevice.getAliasName();
mediaValues[i] = btDevice.getAddress();
if (btDevice.equals(activeDevice)) {
// select the active connected device.
diff --git a/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceController.java b/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceController.java
index 2039913..f7f547a 100644
--- a/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceController.java
+++ b/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceController.java
@@ -66,7 +66,11 @@
if (numDevices == 0) {
// No connected devices, disable switch entry.
mPreference.setVisible(false);
- preference.setSummary(mContext.getText(R.string.media_output_default_summary));
+ final CharSequence summary = mContext.getText(R.string.media_output_default_summary);
+ final CharSequence[] defaultMediaOutput = new CharSequence[]{summary};
+ mSelectedIndex = getDefaultDeviceIndex();
+ preference.setSummary(summary);
+ setPreference(defaultMediaOutput, defaultMediaOutput, preference);
return;
}
diff --git a/src/com/android/settings/sound/MediaOutputPreferenceController.java b/src/com/android/settings/sound/MediaOutputPreferenceController.java
index 79f3c9d..b456263 100644
--- a/src/com/android/settings/sound/MediaOutputPreferenceController.java
+++ b/src/com/android/settings/sound/MediaOutputPreferenceController.java
@@ -78,7 +78,11 @@
if (numDevices == 0) {
// Disable switch entry if there is no connected devices.
mPreference.setVisible(false);
- preference.setSummary(mContext.getText(R.string.media_output_default_summary));
+ final CharSequence summary = mContext.getText(R.string.media_output_default_summary);
+ final CharSequence[] defaultMediaOutput = new CharSequence[]{summary};
+ mSelectedIndex = getDefaultDeviceIndex();
+ preference.setSummary(summary);
+ setPreference(defaultMediaOutput, defaultMediaOutput, preference);
return;
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
index 4fd3a82..ac0b25a 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
@@ -53,6 +53,8 @@
import com.android.internal.os.BatteryStatsHelper;
import com.android.settings.R;
import com.android.settings.fuelgauge.anomaly.Anomaly;
+import com.android.settings.fuelgauge.batterytip.AnomalyInfo;
+import com.android.settings.fuelgauge.batterytip.StatsManagerConfig;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
@@ -106,6 +108,9 @@
private static final String HIGH_SDK_PACKAGE = "com.android.package.high";
private static final String LOW_SDK_PACKAGE = "com.android.package.low";
+ private static final String INFO_EXCESSIVE = "anomaly_type=4,auto_restriction=false";
+ private static final String INFO_WAKELOCK = "anomaly_type=1,auto_restriction=false";
+
@Mock
private BatteryStats.Uid mUid;
@Mock
@@ -146,6 +151,7 @@
private ApplicationInfo mLowApplicationInfo;
@Mock
private PowerWhitelistBackend mPowerWhitelistBackend;
+ private AnomalyInfo mAnomalyInfo;
private BatteryUtils mBatteryUtils;
private FakeFeatureFactory mFeatureFactory;
private PowerUsageFeatureProvider mProvider;
@@ -211,6 +217,7 @@
mBatteryUtils.mPowerUsageFeatureProvider = mProvider;
doReturn(0L).when(mBatteryUtils)
.getForegroundServiceTotalTimeUs(any(BatteryStats.Uid.class), anyLong());
+ mAnomalyInfo = new AnomalyInfo(INFO_WAKELOCK);
mUsageList = new ArrayList<>();
mUsageList.add(mNormalBatterySipper);
@@ -532,16 +539,27 @@
}
@Test
- public void testIsLegacyApp_SdkLowerThanO_ReturnTrue() {
+ public void testIsPreOApp_SdkLowerThanO_ReturnTrue() {
assertThat(mBatteryUtils.isPreOApp(LOW_SDK_PACKAGE)).isTrue();
}
@Test
- public void testIsLegacyApp_SdkLargerOrEqualThanO_ReturnFalse() {
+ public void testIsPreOApp_SdkLargerOrEqualThanO_ReturnFalse() {
assertThat(mBatteryUtils.isPreOApp(HIGH_SDK_PACKAGE)).isFalse();
}
@Test
+ public void testIsPreOApp_containPreOApp_ReturnTrue() {
+ assertThat(
+ mBatteryUtils.isPreOApp(new String[]{HIGH_SDK_PACKAGE, LOW_SDK_PACKAGE})).isTrue();
+ }
+
+ @Test
+ public void testIsPreOApp_emptyList_ReturnFalse() {
+ assertThat(mBatteryUtils.isPreOApp(new String[]{})).isFalse();
+ }
+
+ @Test
public void testSetForceAppStandby_forcePreOApp_forceTwoRestrictions() {
mBatteryUtils.setForceAppStandby(UID, LOW_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
@@ -591,7 +609,8 @@
doReturn(new String[]{HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
mHighApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
- assertThat(mBatteryUtils.shouldHideAnomaly(mPowerWhitelistBackend, UID)).isTrue();
+ assertThat(mBatteryUtils.shouldHideAnomaly(mPowerWhitelistBackend, UID,
+ mAnomalyInfo)).isTrue();
}
@Test
@@ -600,7 +619,8 @@
doReturn(new String[]{HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
mHighApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
- assertThat(mBatteryUtils.shouldHideAnomaly(mPowerWhitelistBackend, UID)).isTrue();
+ assertThat(mBatteryUtils.shouldHideAnomaly(mPowerWhitelistBackend, UID,
+ mAnomalyInfo)).isTrue();
}
@Test
@@ -608,7 +628,8 @@
final int systemUid = Process.ROOT_UID;
doReturn(new String[]{HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(systemUid);
- assertThat(mBatteryUtils.shouldHideAnomaly(mPowerWhitelistBackend, systemUid)).isTrue();
+ assertThat(mBatteryUtils.shouldHideAnomaly(mPowerWhitelistBackend, systemUid,
+ mAnomalyInfo)).isTrue();
}
@Test
@@ -616,13 +637,33 @@
doReturn(new String[]{HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
doReturn(true).when(mPowerWhitelistBackend).isWhitelisted(new String[]{HIGH_SDK_PACKAGE});
- assertThat(mBatteryUtils.shouldHideAnomaly(mPowerWhitelistBackend, UID)).isTrue();
+ assertThat(mBatteryUtils.shouldHideAnomaly(mPowerWhitelistBackend, UID,
+ mAnomalyInfo)).isTrue();
}
@Test
public void testShouldHideAnomaly_normalApp_returnFalse() {
doReturn(new String[]{HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
- assertThat(mBatteryUtils.shouldHideAnomaly(mPowerWhitelistBackend, UID)).isFalse();
+ assertThat(mBatteryUtils.shouldHideAnomaly(mPowerWhitelistBackend, UID,
+ mAnomalyInfo)).isFalse();
+ }
+
+ @Test
+ public void testShouldHideAnomaly_excessivePriorOApp_returnFalse() {
+ doReturn(new String[]{LOW_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
+ mAnomalyInfo = new AnomalyInfo(INFO_EXCESSIVE);
+
+ assertThat(mBatteryUtils.shouldHideAnomaly(mPowerWhitelistBackend, UID,
+ mAnomalyInfo)).isFalse();
+ }
+
+ @Test
+ public void testShouldHideAnomaly_excessiveOApp_returnTrue() {
+ doReturn(new String[]{HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
+ mAnomalyInfo = new AnomalyInfo(INFO_EXCESSIVE);
+
+ assertThat(mBatteryUtils.shouldHideAnomaly(mPowerWhitelistBackend, UID,
+ mAnomalyInfo)).isTrue();
}
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java
index 8df1f21..b55bf6b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java
@@ -165,7 +165,7 @@
doReturn(false).when(mPowerWhitelistBackend).isSysWhitelisted(SYSTEM_PACKAGE);
doReturn(Process.FIRST_APPLICATION_UID).when(
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
- doReturn(true).when(mBatteryUtils).shouldHideAnomaly(any(), anyInt());
+ doReturn(true).when(mBatteryUtils).shouldHideAnomaly(any(), anyInt(), any());
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
diff --git a/tests/robotests/src/com/android/settings/sound/AudioOutputSwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/sound/AudioOutputSwitchPreferenceControllerTest.java
index 272fd20..7eccd42 100644
--- a/tests/robotests/src/com/android/settings/sound/AudioOutputSwitchPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/sound/AudioOutputSwitchPreferenceControllerTest.java
@@ -226,7 +226,7 @@
mController.onPreferenceChange(mPreference, TEST_DEVICE_ADDRESS_1);
- assertThat(mPreference.getSummary()).isEqualTo(mBluetoothDevice.getName());
+ assertThat(mPreference.getSummary()).isEqualTo(TEST_DEVICE_NAME_1);
}
/**
@@ -246,7 +246,7 @@
mController.onPreferenceChange(mPreference, TEST_DEVICE_ADDRESS_2);
- assertThat(mPreference.getSummary()).isEqualTo(secondBluetoothDevice.getName());
+ assertThat(mPreference.getSummary()).isEqualTo(TEST_DEVICE_NAME_2);
}
/**
diff --git a/tests/robotests/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceControllerTest.java
index 6a573e0..614bcce 100644
--- a/tests/robotests/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/sound/HandsFreeProfileOutputPreferenceControllerTest.java
@@ -253,7 +253,7 @@
mController.updateState(mPreference);
assertThat(mPreference.isVisible()).isTrue();
- assertThat(mPreference.getSummary()).isEqualTo(mBluetoothDevice.getName());
+ assertThat(mPreference.getSummary()).isEqualTo(TEST_DEVICE_NAME_1);
}
/**
@@ -275,7 +275,7 @@
mController.updateState(mPreference);
assertThat(mPreference.isVisible()).isTrue();
- assertThat(mPreference.getSummary()).isEqualTo(mSecondBluetoothDevice.getName());
+ assertThat(mPreference.getSummary()).isEqualTo(TEST_DEVICE_NAME_2);
}
/**
diff --git a/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java
index 6aec5ef..4dd809c 100644
--- a/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java
@@ -305,7 +305,7 @@
mController.updateState(mPreference);
assertThat(mPreference.isVisible()).isTrue();
- assertThat(mPreference.getSummary()).isEqualTo(mBluetoothDevice.getName());
+ assertThat(mPreference.getSummary()).isEqualTo(TEST_DEVICE_NAME_1);
}
/**
@@ -326,7 +326,7 @@
mController.updateState(mPreference);
assertThat(mPreference.isVisible()).isTrue();
- assertThat(mPreference.getSummary()).isEqualTo(mSecondBluetoothDevice.getName());
+ assertThat(mPreference.getSummary()).isEqualTo(TEST_DEVICE_NAME_2);
}
/**