Loading res/values/strings.xml +3 −0 Original line number Diff line number Diff line Loading @@ -5133,6 +5133,9 @@ <!-- Title for the battery management group [CHAR LIMIT=40] --> <string name ="battery_detail_manage_title">Manage battery usage</string> <!-- Graph subtext displayed to user when enhanced battery estimate is being used [CHAR LIMIT=120] --> <string name="advanced_battery_graph_subtext">Battery left estimate is based on your device usage</string> <!-- Description for battery time left, i.e. 50min Estimated time left. [CHAR LIMIT=80]--> <string name="estimated_time_left">Estimated time left</string> Loading src/com/android/settings/Utils.java +1 −116 Original line number Diff line number Diff line Loading @@ -52,11 +52,8 @@ import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.hardware.fingerprint.FingerprintManager; import android.icu.text.MeasureFormat; import android.icu.text.RelativeDateTimeFormatter; import android.icu.text.RelativeDateTimeFormatter.RelativeUnit; import android.icu.util.Measure; import android.icu.util.MeasureUnit; import android.icu.util.ULocale; import android.net.ConnectivityManager; import android.net.LinkProperties; Loading Loading @@ -88,8 +85,6 @@ import android.support.v7.preference.PreferenceScreen; import android.telephony.TelephonyManager; import android.text.Spannable; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.TextUtils; import android.text.format.DateUtils; import android.text.style.TtsSpan; Loading @@ -112,6 +107,7 @@ import com.android.settings.wrapper.DevicePolicyManagerWrapper; import com.android.settings.wrapper.FingerprintManagerWrapper; import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin; import com.android.settingslib.utils.StringUtil; import java.net.InetAddress; import java.util.ArrayList; import java.util.Iterator; Loading @@ -138,10 +134,6 @@ public final class Utils extends com.android.settingslib.Utils { private static final String SETTINGS_PACKAGE_NAME = "com.android.settings"; private static final int SECONDS_PER_MINUTE = 60; private static final int SECONDS_PER_HOUR = 60 * 60; private static final int SECONDS_PER_DAY = 24 * 60 * 60; public static final String OS_PKG = "os"; /** Loading Loading @@ -771,113 +763,6 @@ public final class Utils extends com.android.settingslib.Utils { return tm.getSimCount() > 1; } /** * Returns elapsed time for the given millis, in the following format: * 2d 5h 40m 29s * @param context the application context * @param millis the elapsed time in milli seconds * @param withSeconds include seconds? * @return the formatted elapsed time */ public static CharSequence formatElapsedTime(Context context, double millis, boolean withSeconds) { SpannableStringBuilder sb = new SpannableStringBuilder(); int seconds = (int) Math.floor(millis / 1000); if (!withSeconds) { // Round up. seconds += 30; } int days = 0, hours = 0, minutes = 0; if (seconds >= SECONDS_PER_DAY) { days = seconds / SECONDS_PER_DAY; seconds -= days * SECONDS_PER_DAY; } if (seconds >= SECONDS_PER_HOUR) { hours = seconds / SECONDS_PER_HOUR; seconds -= hours * SECONDS_PER_HOUR; } if (seconds >= SECONDS_PER_MINUTE) { minutes = seconds / SECONDS_PER_MINUTE; seconds -= minutes * SECONDS_PER_MINUTE; } final ArrayList<Measure> measureList = new ArrayList(4); if (days > 0) { measureList.add(new Measure(days, MeasureUnit.DAY)); } if (hours > 0) { measureList.add(new Measure(hours, MeasureUnit.HOUR)); } if (minutes > 0) { measureList.add(new Measure(minutes, MeasureUnit.MINUTE)); } if (withSeconds && seconds > 0) { measureList.add(new Measure(seconds, MeasureUnit.SECOND)); } if (measureList.size() == 0) { // Everything addable was zero, so nothing was added. We add a zero. measureList.add(new Measure(0, withSeconds ? MeasureUnit.SECOND : MeasureUnit.MINUTE)); } final Measure[] measureArray = measureList.toArray(new Measure[measureList.size()]); final Locale locale = context.getResources().getConfiguration().locale; final MeasureFormat measureFormat = MeasureFormat.getInstance( locale, MeasureFormat.FormatWidth.NARROW); sb.append(measureFormat.formatMeasures(measureArray)); if (measureArray.length == 1 && MeasureUnit.MINUTE.equals(measureArray[0].getUnit())) { // Add ttsSpan if it only have minute value, because it will be read as "meters" final TtsSpan ttsSpan = new TtsSpan.MeasureBuilder().setNumber(minutes) .setUnit("minute").build(); sb.setSpan(ttsSpan, 0, sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } return sb; } /** * Returns relative time for the given millis in the past, in a short format such as "2 days * ago", "5 hr. ago", "40 min. ago", or "29 sec. ago". * * <p>The unit is chosen to have good information value while only using one unit. So 27 hours * and 50 minutes would be formatted as "28 hr. ago", while 50 hours would be formatted as * "2 days ago". * * @param context the application context * @param millis the elapsed time in milli seconds * @param withSeconds include seconds? * @return the formatted elapsed time */ public static CharSequence formatRelativeTime(Context context, double millis, boolean withSeconds) { final int seconds = (int) Math.floor(millis / 1000); final RelativeUnit unit; final int value; if (withSeconds && seconds < 2 * SECONDS_PER_MINUTE) { unit = RelativeUnit.SECONDS; value = seconds; } else if (seconds < 2 * SECONDS_PER_HOUR) { unit = RelativeUnit.MINUTES; value = (seconds + SECONDS_PER_MINUTE / 2) / SECONDS_PER_MINUTE; } else if (seconds < 2 * SECONDS_PER_DAY) { unit = RelativeUnit.HOURS; value = (seconds + SECONDS_PER_HOUR / 2) / SECONDS_PER_HOUR; } else { unit = RelativeUnit.DAYS; value = (seconds + SECONDS_PER_DAY / 2) / SECONDS_PER_DAY; } final Locale locale = context.getResources().getConfiguration().locale; final RelativeDateTimeFormatter formatter = RelativeDateTimeFormatter.getInstance( ULocale.forLocale(locale), null /* default NumberFormat */, RelativeDateTimeFormatter.Style.SHORT, android.icu.text.DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE); return formatter.format(value, RelativeDateTimeFormatter.Direction.LAST, unit); } /** * Queries for the UserInfo of a user. Returns null if the user doesn't exist (was removed). * @param userManager Instance of UserManager Loading src/com/android/settings/applications/RecentAppsPreferenceController.java +2 −2 Original line number Diff line number Diff line Loading @@ -38,13 +38,13 @@ import android.util.IconDrawableFactory; import android.util.Log; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.widget.AppPreference; 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.wrapper.PackageManagerWrapper; import java.util.ArrayList; Loading Loading @@ -239,7 +239,7 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController pref.setKey(pkgName); pref.setTitle(appEntry.label); pref.setIcon(mIconDrawableFactory.getBadgedIcon(appEntry.info)); pref.setSummary(Utils.formatRelativeTime(mContext, pref.setSummary(StringUtil.formatRelativeTime(mContext, System.currentTimeMillis() - stat.getLastTimeUsed(), false)); pref.setOrder(i); pref.setOnPreferenceClickListener(preference -> { Loading src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +3 −2 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ 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 java.util.ArrayList; import java.util.List; Loading Loading @@ -284,10 +285,10 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements final int powerMah = bundle.getInt(EXTRA_POWER_USAGE_AMOUNT); mForegroundPreference.setSummary( TextUtils.expandTemplate(getText(R.string.battery_used_for), Utils.formatElapsedTime(context, foregroundTimeMs, false))); StringUtil.formatElapsedTime(context, foregroundTimeMs, false))); mBackgroundPreference.setSummary( TextUtils.expandTemplate(getText(R.string.battery_active_for), Utils.formatElapsedTime(context, backgroundTimeMs, false))); StringUtil.formatElapsedTime(context, backgroundTimeMs, false))); mPowerUsagePreference.setSummary( getString(R.string.battery_detail_power_percentage, usagePercent, powerMah)); } Loading src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java +3 −7 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.settings.fuelgauge; import android.app.Activity; import android.app.Fragment; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.BatteryStats; Loading @@ -31,7 +30,6 @@ import android.support.annotation.VisibleForTesting; import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; import android.text.format.DateUtils; Loading @@ -48,16 +46,14 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.core.FeatureFlags; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.Utils; import com.android.settings.fuelgauge.anomaly.Anomaly; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnDestroy; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.utils.StringUtil; import java.util.ArrayList; import java.util.List; Loading Loading @@ -362,8 +358,8 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro // Only show summary when usage time is longer than one minute final long usageTimeMs = sipper.usageTimeMs; if (usageTimeMs >= DateUtils.MINUTE_IN_MILLIS) { final CharSequence timeSequence = Utils.formatElapsedTime(mContext, usageTimeMs, false); final CharSequence timeSequence = StringUtil.formatElapsedTime(mContext, usageTimeMs, false); preference.setSummary( (sipper.drainType != DrainType.APP || mBatteryUtils.shouldHideSipper(sipper)) ? timeSequence Loading Loading
res/values/strings.xml +3 −0 Original line number Diff line number Diff line Loading @@ -5133,6 +5133,9 @@ <!-- Title for the battery management group [CHAR LIMIT=40] --> <string name ="battery_detail_manage_title">Manage battery usage</string> <!-- Graph subtext displayed to user when enhanced battery estimate is being used [CHAR LIMIT=120] --> <string name="advanced_battery_graph_subtext">Battery left estimate is based on your device usage</string> <!-- Description for battery time left, i.e. 50min Estimated time left. [CHAR LIMIT=80]--> <string name="estimated_time_left">Estimated time left</string> Loading
src/com/android/settings/Utils.java +1 −116 Original line number Diff line number Diff line Loading @@ -52,11 +52,8 @@ import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.hardware.fingerprint.FingerprintManager; import android.icu.text.MeasureFormat; import android.icu.text.RelativeDateTimeFormatter; import android.icu.text.RelativeDateTimeFormatter.RelativeUnit; import android.icu.util.Measure; import android.icu.util.MeasureUnit; import android.icu.util.ULocale; import android.net.ConnectivityManager; import android.net.LinkProperties; Loading Loading @@ -88,8 +85,6 @@ import android.support.v7.preference.PreferenceScreen; import android.telephony.TelephonyManager; import android.text.Spannable; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.TextUtils; import android.text.format.DateUtils; import android.text.style.TtsSpan; Loading @@ -112,6 +107,7 @@ import com.android.settings.wrapper.DevicePolicyManagerWrapper; import com.android.settings.wrapper.FingerprintManagerWrapper; import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin; import com.android.settingslib.utils.StringUtil; import java.net.InetAddress; import java.util.ArrayList; import java.util.Iterator; Loading @@ -138,10 +134,6 @@ public final class Utils extends com.android.settingslib.Utils { private static final String SETTINGS_PACKAGE_NAME = "com.android.settings"; private static final int SECONDS_PER_MINUTE = 60; private static final int SECONDS_PER_HOUR = 60 * 60; private static final int SECONDS_PER_DAY = 24 * 60 * 60; public static final String OS_PKG = "os"; /** Loading Loading @@ -771,113 +763,6 @@ public final class Utils extends com.android.settingslib.Utils { return tm.getSimCount() > 1; } /** * Returns elapsed time for the given millis, in the following format: * 2d 5h 40m 29s * @param context the application context * @param millis the elapsed time in milli seconds * @param withSeconds include seconds? * @return the formatted elapsed time */ public static CharSequence formatElapsedTime(Context context, double millis, boolean withSeconds) { SpannableStringBuilder sb = new SpannableStringBuilder(); int seconds = (int) Math.floor(millis / 1000); if (!withSeconds) { // Round up. seconds += 30; } int days = 0, hours = 0, minutes = 0; if (seconds >= SECONDS_PER_DAY) { days = seconds / SECONDS_PER_DAY; seconds -= days * SECONDS_PER_DAY; } if (seconds >= SECONDS_PER_HOUR) { hours = seconds / SECONDS_PER_HOUR; seconds -= hours * SECONDS_PER_HOUR; } if (seconds >= SECONDS_PER_MINUTE) { minutes = seconds / SECONDS_PER_MINUTE; seconds -= minutes * SECONDS_PER_MINUTE; } final ArrayList<Measure> measureList = new ArrayList(4); if (days > 0) { measureList.add(new Measure(days, MeasureUnit.DAY)); } if (hours > 0) { measureList.add(new Measure(hours, MeasureUnit.HOUR)); } if (minutes > 0) { measureList.add(new Measure(minutes, MeasureUnit.MINUTE)); } if (withSeconds && seconds > 0) { measureList.add(new Measure(seconds, MeasureUnit.SECOND)); } if (measureList.size() == 0) { // Everything addable was zero, so nothing was added. We add a zero. measureList.add(new Measure(0, withSeconds ? MeasureUnit.SECOND : MeasureUnit.MINUTE)); } final Measure[] measureArray = measureList.toArray(new Measure[measureList.size()]); final Locale locale = context.getResources().getConfiguration().locale; final MeasureFormat measureFormat = MeasureFormat.getInstance( locale, MeasureFormat.FormatWidth.NARROW); sb.append(measureFormat.formatMeasures(measureArray)); if (measureArray.length == 1 && MeasureUnit.MINUTE.equals(measureArray[0].getUnit())) { // Add ttsSpan if it only have minute value, because it will be read as "meters" final TtsSpan ttsSpan = new TtsSpan.MeasureBuilder().setNumber(minutes) .setUnit("minute").build(); sb.setSpan(ttsSpan, 0, sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } return sb; } /** * Returns relative time for the given millis in the past, in a short format such as "2 days * ago", "5 hr. ago", "40 min. ago", or "29 sec. ago". * * <p>The unit is chosen to have good information value while only using one unit. So 27 hours * and 50 minutes would be formatted as "28 hr. ago", while 50 hours would be formatted as * "2 days ago". * * @param context the application context * @param millis the elapsed time in milli seconds * @param withSeconds include seconds? * @return the formatted elapsed time */ public static CharSequence formatRelativeTime(Context context, double millis, boolean withSeconds) { final int seconds = (int) Math.floor(millis / 1000); final RelativeUnit unit; final int value; if (withSeconds && seconds < 2 * SECONDS_PER_MINUTE) { unit = RelativeUnit.SECONDS; value = seconds; } else if (seconds < 2 * SECONDS_PER_HOUR) { unit = RelativeUnit.MINUTES; value = (seconds + SECONDS_PER_MINUTE / 2) / SECONDS_PER_MINUTE; } else if (seconds < 2 * SECONDS_PER_DAY) { unit = RelativeUnit.HOURS; value = (seconds + SECONDS_PER_HOUR / 2) / SECONDS_PER_HOUR; } else { unit = RelativeUnit.DAYS; value = (seconds + SECONDS_PER_DAY / 2) / SECONDS_PER_DAY; } final Locale locale = context.getResources().getConfiguration().locale; final RelativeDateTimeFormatter formatter = RelativeDateTimeFormatter.getInstance( ULocale.forLocale(locale), null /* default NumberFormat */, RelativeDateTimeFormatter.Style.SHORT, android.icu.text.DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE); return formatter.format(value, RelativeDateTimeFormatter.Direction.LAST, unit); } /** * Queries for the UserInfo of a user. Returns null if the user doesn't exist (was removed). * @param userManager Instance of UserManager Loading
src/com/android/settings/applications/RecentAppsPreferenceController.java +2 −2 Original line number Diff line number Diff line Loading @@ -38,13 +38,13 @@ import android.util.IconDrawableFactory; import android.util.Log; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.widget.AppPreference; 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.wrapper.PackageManagerWrapper; import java.util.ArrayList; Loading Loading @@ -239,7 +239,7 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController pref.setKey(pkgName); pref.setTitle(appEntry.label); pref.setIcon(mIconDrawableFactory.getBadgedIcon(appEntry.info)); pref.setSummary(Utils.formatRelativeTime(mContext, pref.setSummary(StringUtil.formatRelativeTime(mContext, System.currentTimeMillis() - stat.getLastTimeUsed(), false)); pref.setOrder(i); pref.setOnPreferenceClickListener(preference -> { Loading
src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +3 −2 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ 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 java.util.ArrayList; import java.util.List; Loading Loading @@ -284,10 +285,10 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements final int powerMah = bundle.getInt(EXTRA_POWER_USAGE_AMOUNT); mForegroundPreference.setSummary( TextUtils.expandTemplate(getText(R.string.battery_used_for), Utils.formatElapsedTime(context, foregroundTimeMs, false))); StringUtil.formatElapsedTime(context, foregroundTimeMs, false))); mBackgroundPreference.setSummary( TextUtils.expandTemplate(getText(R.string.battery_active_for), Utils.formatElapsedTime(context, backgroundTimeMs, false))); StringUtil.formatElapsedTime(context, backgroundTimeMs, false))); mPowerUsagePreference.setSummary( getString(R.string.battery_detail_power_percentage, usagePercent, powerMah)); } Loading
src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java +3 −7 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.settings.fuelgauge; import android.app.Activity; import android.app.Fragment; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.BatteryStats; Loading @@ -31,7 +30,6 @@ import android.support.annotation.VisibleForTesting; import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; import android.text.format.DateUtils; Loading @@ -48,16 +46,14 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.core.FeatureFlags; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.Utils; import com.android.settings.fuelgauge.anomaly.Anomaly; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnDestroy; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.utils.StringUtil; import java.util.ArrayList; import java.util.List; Loading Loading @@ -362,8 +358,8 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro // Only show summary when usage time is longer than one minute final long usageTimeMs = sipper.usageTimeMs; if (usageTimeMs >= DateUtils.MINUTE_IN_MILLIS) { final CharSequence timeSequence = Utils.formatElapsedTime(mContext, usageTimeMs, false); final CharSequence timeSequence = StringUtil.formatElapsedTime(mContext, usageTimeMs, false); preference.setSummary( (sipper.drainType != DrainType.APP || mBatteryUtils.shouldHideSipper(sipper)) ? timeSequence Loading