summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaff Tsai <rafftsai@google.com>2019-09-04 15:08:57 +0800
committerandroid-build-team Robot <android-build-team-robot@google.com>2020-04-05 15:25:25 +0000
commit3dfbd9581d57c328549f05067989bb9e1ce52d9a (patch)
tree8cb58600a43398c9fc91936f6ac3623cb555900c
parent25dad8c15fd8413ed892587594108d73ef1d55b4 (diff)
downloadbase-3dfbd9581d57c328549f05067989bb9e1ce52d9a.tar.gz
Fix Battery optimization takes long time
isDefaultActiveApp is called on every package. We can cache default dialer and default sms package in a list, and check if the list contains target package name. Fixes: 140279638 Bug: 151233929 Test: manual, make RunSettingsLibRoboTests Change-Id: I81f5ccb7aed1ebec797a21af6094971e05f456a7 (cherry picked from commit 19c2bbccfd34af8cd305b7416f4a64632f461b8b) (cherry picked from commit 8ef5d5e438957e39fc4fa9423b5420326ff04b92)
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/fuelgauge/PowerWhitelistBackend.java29
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java4
2 files changed, 22 insertions, 11 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/PowerWhitelistBackend.java b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/PowerWhitelistBackend.java
index eeb6cb015ae6..ea8a62f84164 100644
--- a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/PowerWhitelistBackend.java
+++ b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/PowerWhitelistBackend.java
@@ -49,6 +49,7 @@ public class PowerWhitelistBackend {
private final ArraySet<String> mWhitelistedApps = new ArraySet<>();
private final ArraySet<String> mSysWhitelistedApps = new ArraySet<>();
private final ArraySet<String> mSysWhitelistedAppsExceptIdle = new ArraySet<>();
+ private final ArraySet<String> mDefaultActiveApps = new ArraySet<>();
public PowerWhitelistBackend(Context context) {
this(context, IDeviceIdleController.Stub.asInterface(
@@ -90,17 +91,7 @@ public class PowerWhitelistBackend {
// should be automatically whitelisted (otherwise user may be able to set restriction on
// them, leading to bad device behavior.)
- final boolean hasTelephony = mAppContext.getPackageManager().hasSystemFeature(
- PackageManager.FEATURE_TELEPHONY);
- final ComponentName defaultSms = SmsApplication.getDefaultSmsApplication(mAppContext,
- true /* updateIfNeeded */);
- if (hasTelephony && defaultSms != null && TextUtils.equals(pkg,
- defaultSms.getPackageName())) {
- return true;
- }
-
- final String defaultDialer = DefaultDialerManager.getDefaultDialerApplication(mAppContext);
- if (hasTelephony && TextUtils.equals(pkg, defaultDialer)) {
+ if (mDefaultActiveApps.contains(pkg)) {
return true;
}
@@ -166,6 +157,7 @@ public class PowerWhitelistBackend {
mSysWhitelistedApps.clear();
mSysWhitelistedAppsExceptIdle.clear();
mWhitelistedApps.clear();
+ mDefaultActiveApps.clear();
if (mDeviceIdleService == null) {
return;
}
@@ -183,6 +175,21 @@ public class PowerWhitelistBackend {
for (String app : sysWhitelistedAppsExceptIdle) {
mSysWhitelistedAppsExceptIdle.add(app);
}
+ final boolean hasTelephony = mAppContext.getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_TELEPHONY);
+ final ComponentName defaultSms = SmsApplication.getDefaultSmsApplication(mAppContext,
+ true /* updateIfNeeded */);
+ final String defaultDialer = DefaultDialerManager.getDefaultDialerApplication(
+ mAppContext);
+
+ if (hasTelephony) {
+ if (defaultSms != null) {
+ mDefaultActiveApps.add(defaultSms.getPackageName());
+ }
+ if (!TextUtils.isEmpty(defaultDialer)) {
+ mDefaultActiveApps.add(defaultDialer);
+ }
+ }
} catch (RemoteException e) {
Log.w(TAG, "Unable to reach IDeviceIdleController", e);
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java
index 44ee423785c2..3a571f9c24cf 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java
@@ -117,6 +117,8 @@ public class PowerWhitelistBackendTest {
final String testSms = "com.android.test.defaultsms";
ShadowSmsApplication.setDefaultSmsApplication(new ComponentName(testSms, "receiver"));
+ mPowerWhitelistBackend.refreshList();
+
assertThat(mPowerWhitelistBackend.isWhitelisted(testSms)).isTrue();
assertThat(mPowerWhitelistBackend.isDefaultActiveApp(testSms)).isTrue();
}
@@ -126,6 +128,8 @@ public class PowerWhitelistBackendTest {
final String testDialer = "com.android.test.defaultdialer";
ShadowDefaultDialerManager.setDefaultDialerApplication(testDialer);
+ mPowerWhitelistBackend.refreshList();
+
assertThat(mPowerWhitelistBackend.isWhitelisted(testDialer)).isTrue();
assertThat(mPowerWhitelistBackend.isDefaultActiveApp(testDialer)).isTrue();
}