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);