From 1eea27ae82a9fed4b6b832bb4ae08baee98a5433 Mon Sep 17 00:00:00 2001 From: Zhenwei Chen Date: Wed, 14 Dec 2022 18:33:12 +0800 Subject: [PATCH 1/3] Update string for all defenders Test: Unit test passed Bug: 262508668 Change-Id: Ia0126f9761caa43d0746962a9bb77173e9f45ad1 --- res/values/strings.xml | 14 ++++++------ .../settings/fuelgauge/BatteryInfo.java | 10 ++------- .../batterytip/tips/DockDefenderTip.java | 21 ++++-------------- .../settings/fuelgauge/BatteryInfoTest.java | 4 ++-- .../batterytip/tips/DockDefenderTipTest.java | 22 +++++-------------- 5 files changed, 20 insertions(+), 51 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 62d55fa1337..cc090dce9d6 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6410,21 +6410,21 @@ See apps with highest usage - Charging is paused + Charging optimized to protect your battery - Protecting battery to extend battery lifespan + To help extend your batter\'s lifespan, charging is optimized - Charging to %1$s to protect the battery + Charging optimized to protect your battery - When your tablet is docked, charging will be paused at %1$s to extend battery lifespan + To help extend your battery\'s lifespan, charging is optimized while docked - Charging paused to protect battery + Charging optimized to protect your battery - When your tablet is docked, charging is paused at %1$s to extend battery lifespan + To help extend your battery\'s lifespan, charging is optimized while docked Charging to full - To protect your battery, charging will be paused at %1$s the next time your tablet is docked + To protect your battery, charging will be optimized the next time your tablet is docked Learn more about charging is paused diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java index 52d6d58061c..da3bbe4d379 100644 --- a/src/com/android/settings/fuelgauge/BatteryInfo.java +++ b/src/com/android/settings/fuelgauge/BatteryInfo.java @@ -42,8 +42,6 @@ import com.android.settingslib.fuelgauge.EstimateKt; import com.android.settingslib.utils.PowerUtil; import com.android.settingslib.utils.StringUtil; -import java.text.NumberFormat; - public class BatteryInfo { private static final String TAG = "BatteryInfo"; @@ -305,13 +303,9 @@ public class BatteryInfo { timeString); info.chargeLabel = context.getString(resId, info.batteryPercentString, timeString); } else if (dockDefenderMode == BatteryUtils.DockDefenderMode.FUTURE_BYPASS) { - // Dock defender will be triggered in the future, charging will be paused at 90%. - final int extraValue = context.getResources().getInteger( - R.integer.config_battery_extra_tip_value); - final String extraPercentage = NumberFormat.getPercentInstance().format( - extraValue * 0.01f); + // Dock defender will be triggered in the future, charging will be optimized. info.chargeLabel = context.getString(R.string.power_charging_future_paused, - info.batteryPercentString, extraPercentage); + info.batteryPercentString); } else { final String chargeStatusLabel = Utils.getBatteryStatus(context, batteryBroadcast, compactStatus); diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java index dae4af4283c..f02adf58bf9 100644 --- a/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java +++ b/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java @@ -32,8 +32,6 @@ import com.android.settings.widget.CardPreference; import com.android.settingslib.HelpUtils; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; -import java.text.NumberFormat; - /** * Tip to show dock defender status */ @@ -58,8 +56,7 @@ public class DockDefenderTip extends BatteryTip { public CharSequence getTitle(Context context) { switch (mMode) { case DockDefenderMode.FUTURE_BYPASS: - return context.getString(R.string.battery_tip_dock_defender_future_bypass_title, - getExtraPercentage(context)); + return context.getString(R.string.battery_tip_dock_defender_future_bypass_title); case DockDefenderMode.ACTIVE: return context.getString(R.string.battery_tip_dock_defender_active_title); case DockDefenderMode.TEMPORARILY_BYPASSED: @@ -74,15 +71,12 @@ public class DockDefenderTip extends BatteryTip { public CharSequence getSummary(Context context) { switch (mMode) { case DockDefenderMode.FUTURE_BYPASS: - return context.getString(R.string.battery_tip_dock_defender_future_bypass_summary, - getExtraPercentage(context)); + return context.getString(R.string.battery_tip_dock_defender_future_bypass_summary); case DockDefenderMode.ACTIVE: - return context.getString(R.string.battery_tip_dock_defender_active_summary, - getExtraPercentage(context)); + return context.getString(R.string.battery_tip_dock_defender_active_summary); case DockDefenderMode.TEMPORARILY_BYPASSED: return context.getString( - R.string.battery_tip_dock_defender_temporarily_bypassed_summary, - getExtraPercentage(context)); + R.string.battery_tip_dock_defender_temporarily_bypassed_summary); default: return null; } @@ -174,13 +168,6 @@ public class DockDefenderTip extends BatteryTip { Log.i(TAG, "send resume charging broadcast intent=" + intent); } - private String getExtraPercentage(Context context) { - final int extraValue = context.getResources() - .getInteger(R.integer.config_battery_extra_tip_value); - return NumberFormat.getPercentInstance() - .format(extraValue * 0.01f); - } - public static final Creator CREATOR = new Creator() { public BatteryTip createFromParcel(Parcel in) { return new DockDefenderTip(in); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java index 59c0f680bfa..2fac0eb6e1f 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java @@ -67,8 +67,8 @@ public class BatteryInfoTest { private static final String STATUS_CHARGING_NO_TIME = "50% - charging"; private static final String STATUS_CHARGING_TIME = "50% - 0 min left until full"; private static final String STATUS_NOT_CHARGING = "Not charging"; - private static final String STATUS_CHARGING_FUTURE_BYPASS = "50% - Charging to 12%"; - private static final String STATUS_CHARGING_PAUSED = "50% - Charging paused"; + private static final String STATUS_CHARGING_FUTURE_BYPASS = "50% - Charging optimized"; + private static final String STATUS_CHARGING_PAUSED = "50% - Charging optimized"; private static final long REMAINING_TIME_NULL = -1; private static final long REMAINING_TIME = 2; // Strings are defined in frameworks/base/packages/SettingsLib/res/values/strings.xml diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTipTest.java index 69d54777c18..e897a1ca531 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTipTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTipTest.java @@ -44,8 +44,6 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.shadows.ShadowLog; -import java.text.NumberFormat; - @RunWith(RobolectricTestRunner.class) public class DockDefenderTipTest { private Context mContext; @@ -85,8 +83,7 @@ public class DockDefenderTipTest { @Test public void testGetTitle() { assertThat(mDockDefenderTipFutureBypass.getTitle(mContext).toString()).isEqualTo( - mContext.getString(R.string.battery_tip_dock_defender_future_bypass_title, - getExtraPercentage(mContext))); + mContext.getString(R.string.battery_tip_dock_defender_future_bypass_title)); assertThat(mDockDefenderTipActive.getTitle(mContext).toString()).isEqualTo( mContext.getString(R.string.battery_tip_dock_defender_active_title)); assertThat(mDockDefenderTipTemporarilyBypassed.getTitle(mContext).toString()).isEqualTo( @@ -97,14 +94,12 @@ public class DockDefenderTipTest { @Test public void testGetSummary() { assertThat(mDockDefenderTipFutureBypass.getSummary(mContext).toString()).isEqualTo( - mContext.getString(R.string.battery_tip_dock_defender_future_bypass_summary, - getExtraPercentage(mContext))); + mContext.getString(R.string.battery_tip_dock_defender_future_bypass_summary)); assertThat(mDockDefenderTipActive.getSummary(mContext).toString()).isEqualTo( - mContext.getString(R.string.battery_tip_dock_defender_active_summary, - getExtraPercentage(mContext))); + mContext.getString(R.string.battery_tip_dock_defender_active_summary)); assertThat(mDockDefenderTipTemporarilyBypassed.getSummary(mContext).toString()).isEqualTo( - mContext.getString(R.string.battery_tip_dock_defender_temporarily_bypassed_summary, - getExtraPercentage(mContext))); + mContext.getString( + R.string.battery_tip_dock_defender_temporarily_bypassed_summary)); assertThat(mDockDefenderTipDisabled.getSummary(mContext)).isNull(); } @@ -195,11 +190,4 @@ public class DockDefenderTipTest { private ShadowLog.LogItem createErrorLog(String msg) { return new ShadowLog.LogItem(Log.ERROR, "tag", msg, null); } - - private String getExtraPercentage(Context context) { - final int extraValue = context.getResources().getInteger( - R.integer.config_battery_extra_tip_value); - return NumberFormat.getPercentInstance().format(extraValue * 0.01f); - } - } From 35caf2ffb79029679aff4d2b4507d3bd9be07c75 Mon Sep 17 00:00:00 2001 From: Zhenwei Chen Date: Thu, 15 Dec 2022 10:29:51 +0800 Subject: [PATCH 2/3] Update dock defender helper URL Bug: 261206713 Test: Unit test passed Change-Id: I6a8489b7e1a54d2c1d88cf6b04c8d1a4c9c6c235 --- res/values/strings.xml | 2 ++ .../settings/fuelgauge/batterytip/tips/DockDefenderTip.java | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index cc090dce9d6..5de57fe9b02 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8141,6 +8141,8 @@ + + diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java index f02adf58bf9..bc0ba080fc6 100644 --- a/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java +++ b/src/com/android/settings/fuelgauge/batterytip/tips/DockDefenderTip.java @@ -139,12 +139,11 @@ public class DockDefenderTip extends BatteryTip { } cardPreference.setSecondaryButtonText(context.getString(R.string.learn_more)); - //TODO: update helper string cardPreference.setSecondaryButtonClickListener( button -> button.startActivityForResult( HelpUtils.getHelpIntent( context, - context.getString(R.string.help_url_battery_defender), + context.getString(R.string.help_url_dock_defender), /* backupContext */ ""), /* requestCode */ 0)); cardPreference.setSecondaryButtonVisible(true); cardPreference.setSecondaryButtonContentDescription(context.getString( From d907a12980922c2a3ec705ebb3aa635b61e812d9 Mon Sep 17 00:00:00 2001 From: Wesley Wang Date: Tue, 13 Dec 2022 19:04:42 +0800 Subject: [PATCH 3/3] Move setup optimization mode to main thread - Due to unclear root cause of optimization mode being reset after reboot, update the setup logic from deferred background thread to main thread, to avoid any possible background task unexecuted case. Bug: 241735485 Test: make SettingsRoboTests Change-Id: I2de2181321712f89fadc04bf5000aea91a01485a Merged-In: I2de2181321712f89fadc04bf5000aea91a01485a (cherry picked from commit 7423f4390c924e81db94cc20828ccdf78ef24a2f) --- .../android/settings/fuelgauge/AdvancedPowerUsageDetail.java | 2 +- src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java index 3705dfce3b4..7d080c9cc93 100644 --- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java @@ -301,7 +301,6 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements notifyBackupManager(); logMetricCategory(selectedPreference); - mBatteryOptimizeUtils.setAppUsageState(selectedPreference); Log.d(TAG, "Leave with mode: " + selectedPreference); } } @@ -468,6 +467,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements updatePreferenceState(mUnrestrictedPreference, selectedKey); updatePreferenceState(mOptimizePreference, selectedKey); updatePreferenceState(mRestrictedPreference, selectedKey); + mBatteryOptimizeUtils.setAppUsageState(getSelectedPreference()); } private void updatePreferenceState(SelectorWithWidgetPreference preference, diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java index dbfacc6907c..e2a4efe9fb8 100644 --- a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java +++ b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java @@ -24,7 +24,6 @@ import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.ParceledListSlice; import android.content.pm.UserInfo; -import android.os.AsyncTask; import android.os.UserHandle; import android.os.UserManager; import android.util.ArraySet; @@ -222,10 +221,8 @@ public class BatteryOptimizeUtils { mode == MODE_RESTRICTED ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED; final boolean allowListed = mode == MODE_UNRESTRICTED; - AsyncTask.execute(() -> { - setAppOptimizationModeInternal(appOpsManagerMode, allowListed, uid, packageName, + setAppOptimizationModeInternal(appOpsManagerMode, allowListed, uid, packageName, batteryUtils, powerAllowlistBackend); - }); } private static void setAppOptimizationModeInternal(