diff options
author | Raff Tsai <rafftsai@google.com> | 2019-09-04 15:08:57 +0800 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-04-05 15:25:25 +0000 |
commit | 3dfbd9581d57c328549f05067989bb9e1ce52d9a (patch) | |
tree | 8cb58600a43398c9fc91936f6ac3623cb555900c | |
parent | 25dad8c15fd8413ed892587594108d73ef1d55b4 (diff) | |
download | base-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)
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(); } |