diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3cf0bdc3f95..e564461a52e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5999,6 +5999,8 @@
unrestricted
optimized
+
+ Learn more about battery usage options
Screen usage since full charge
@@ -6087,6 +6089,8 @@
Battery may run out earlier than usual
Battery Saver on
+
+ Learn more about Battery saver
Some features may be limited
@@ -12152,6 +12156,9 @@
+
+
+
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index cd0c114381c..ca228e68218 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -25,7 +25,6 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.UserHandle;
-import android.text.Html;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.util.Log;
@@ -47,10 +46,12 @@ import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.EntityHeaderController;
+import com.android.settingslib.HelpUtils;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.utils.StringUtil;
+import com.android.settingslib.widget.FooterPreference;
import com.android.settingslib.widget.LayoutPreference;
import com.android.settingslib.widget.RadioButtonPreference;
@@ -104,7 +105,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
@VisibleForTesting
Preference mBackgroundPreference;
@VisibleForTesting
- Preference mFooterPreference;
+ FooterPreference mFooterPreference;
@VisibleForTesting
RadioButtonPreference mRestrictedPreference;
@VisibleForTesting
@@ -351,7 +352,13 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
//Present default string to normal app.
footerString = context.getString(R.string.manager_battery_usage_footer);
}
- mFooterPreference.setTitle(Html.fromHtml(footerString, Html.FROM_HTML_MODE_COMPACT));
+ mFooterPreference.setTitle(footerString);
+ mFooterPreference.setLearnMoreAction(v ->
+ startActivityForResult(HelpUtils.getHelpIntent(context,
+ context.getString(R.string.help_url_app_usage_settings),
+ /*backupContext=*/ ""), /*requestCode=*/ 0));
+ mFooterPreference.setLearnMoreContentDescription(
+ context.getString(R.string.manager_battery_usage_link_a11y));
}
@Override
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
index f8576119cfa..676ed20e35a 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
@@ -17,17 +17,10 @@
package com.android.settings.fuelgauge.batterysaver;
import android.app.settings.SettingsEnums;
-import android.text.Annotation;
-import android.text.Spannable;
import android.text.SpannableStringBuilder;
-import android.text.Spanned;
-import android.text.TextPaint;
import android.text.TextUtils;
-import android.text.style.URLSpan;
-import android.view.View;
import androidx.annotation.VisibleForTesting;
-import androidx.fragment.app.Fragment;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
@@ -94,64 +87,16 @@ public class BatterySaverSettings extends DashboardFragment {
void addHelpLink() {
FooterPreference pref = getPreferenceScreen().findPreference(KEY_FOOTER_PREFERENCE);
if (pref != null) {
- SupportPageLearnMoreSpan.linkify(mFooterText, this, mHelpUri);
pref.setTitle(mFooterText);
pref.setSelectable(false);
- }
- }
-
- /**
- * A {@link URLSpan} that opens a support page when clicked
- */
- public static class SupportPageLearnMoreSpan extends URLSpan {
-
-
- private static final String ANNOTATION_URL = "url";
- private final Fragment mFragment;
- private final String mUriString;
-
- public SupportPageLearnMoreSpan(Fragment fragment, String uriString) {
- // sets the url to empty string so we can prevent any other span processing from
- // from clearing things we need in this string.
- super("");
- mFragment = fragment;
- mUriString = uriString;
- }
-
- @Override
- public void onClick(View widget) {
- if (mFragment != null) {
- // launch the support page
- mFragment.startActivityForResult(HelpUtils.getHelpIntent(mFragment.getContext(),
- mUriString, ""), 0);
- }
- }
-
- @Override
- public void updateDrawState(TextPaint ds) {
- super.updateDrawState(ds);
- }
-
- /**
- * This method takes a string and turns it into a url span that will launch a support page
- * @param msg The text to turn into a link
- * @param fragment The fragment which contains this span
- * @param uriString The URI string of the help article to open when clicked
- * @return A CharSequence containing the original text content as a url
- */
- public static CharSequence linkify(Spannable msg, Fragment fragment, String uriString) {
- Annotation[] spans = msg.getSpans(0, msg.length(), Annotation.class);
- for (Annotation annotation : spans) {
- int start = msg.getSpanStart(annotation);
- int end = msg.getSpanEnd(annotation);
- if (ANNOTATION_URL.equals(annotation.getValue())) {
- SupportPageLearnMoreSpan link =
- new SupportPageLearnMoreSpan(fragment, uriString);
- msg.removeSpan(annotation);
- msg.setSpan(link, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
- }
- return msg;
+ pref.setLearnMoreAction(v -> {
+ mMetricsFeatureProvider.action(getContext(),
+ SettingsEnums.ACTION_APP_BATTERY_LEARN_MORE);
+ startActivityForResult(HelpUtils.getHelpIntent(getContext(),
+ getString(R.string.help_url_battery_saver_settings),
+ /*backupContext=*/ ""), /*requestCode=*/ 0);
+ });
+ pref.setLearnMoreContentDescription(getString(R.string.battery_saver_link_a11y));
}
}
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index ba978b99abe..014ce2921ff 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -60,6 +60,7 @@ import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.widget.FooterPreference;
import com.android.settingslib.widget.LayoutPreference;
import com.android.settingslib.widget.RadioButtonPreference;
@@ -125,7 +126,7 @@ public class AdvancedPowerUsageDetailTest {
private Context mContext;
private Preference mForegroundPreference;
private Preference mBackgroundPreference;
- private Preference mFooterPreference;
+ private FooterPreference mFooterPreference;
private RadioButtonPreference mRestrictedPreference;
private RadioButtonPreference mOptimizePreference;
private RadioButtonPreference mUnrestrictedPreference;
@@ -206,7 +207,7 @@ public class AdvancedPowerUsageDetailTest {
mForegroundPreference = new Preference(mContext);
mBackgroundPreference = new Preference(mContext);
- mFooterPreference = new Preference(mContext);
+ mFooterPreference = new FooterPreference(mContext);
mRestrictedPreference = new RadioButtonPreference(mContext);
mOptimizePreference = new RadioButtonPreference(mContext);
mUnrestrictedPreference = new RadioButtonPreference(mContext);