Loading res/values/strings.xml +3 −1 Original line number Original line Diff line number Diff line Loading @@ -6497,8 +6497,10 @@ <string name="battery_usage_for_total_time">Total: <xliff:g id="time">%s</xliff:g></string> <string name="battery_usage_for_total_time">Total: <xliff:g id="time">%s</xliff:g></string> <!-- [CHAR_LIMIT=NONE] Battery usage item for background usage time --> <!-- [CHAR_LIMIT=NONE] Battery usage item for background usage time --> <string name="battery_usage_for_background_time">Background: <xliff:g id="time">%s</xliff:g></string> <string name="battery_usage_for_background_time">Background: <xliff:g id="time">%s</xliff:g></string> <!-- [CHAR_LIMIT=NONE] Battery usage main screen footer contentt --> <!-- [CHAR_LIMIT=NONE] Battery usage main screen footer content --> <string name="battery_usage_screen_footer">Battery usage data is approximate and doesn\'t measure usage when phone is charging</string> <string name="battery_usage_screen_footer">Battery usage data is approximate and doesn\'t measure usage when phone is charging</string> <!-- [CHAR_LIMIT=NONE] Battery usage main screen footer for empty content --> <string name="battery_usage_screen_footer_empty">Battery usage data will be available after you use your phone for a few hours</string> <!-- [CHAR_LIMIT=NONE] Accessibility content description for battery chart view. --> <!-- [CHAR_LIMIT=NONE] Accessibility content description for battery chart view. --> <string name="battery_usage_chart">Battery usage chart</string> <string name="battery_usage_chart">Battery usage chart</string> <!-- Process Stats strings --> <!-- Process Stats strings --> res/xml/power_usage_advanced.xml +1 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ android:key="app_list"/> android:key="app_list"/> <com.android.settingslib.widget.FooterPreference <com.android.settingslib.widget.FooterPreference android:key="battery_graph_footer" android:title="@string/battery_usage_screen_footer" android:title="@string/battery_usage_screen_footer" android:selectable="false" android:selectable="false" settings:searchable="false"/> settings:searchable="false"/> Loading src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java +29 −0 Original line number Original line Diff line number Diff line Loading @@ -48,6 +48,7 @@ import com.android.settingslib.core.lifecycle.events.OnDestroy; import com.android.settingslib.core.lifecycle.events.OnResume; import com.android.settingslib.core.lifecycle.events.OnResume; import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState; import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState; import com.android.settingslib.utils.StringUtil; import com.android.settingslib.utils.StringUtil; import com.android.settingslib.widget.FooterPreference; import java.util.Arrays; import java.util.Arrays; import java.util.ArrayList; import java.util.ArrayList; Loading @@ -62,6 +63,9 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll OnSaveInstanceState, BatteryChartView.OnSelectListener, OnResume, OnSaveInstanceState, BatteryChartView.OnSelectListener, OnResume, ExpandDividerPreference.OnExpandListener { ExpandDividerPreference.OnExpandListener { private static final String TAG = "BatteryChartPreferenceController"; private static final String TAG = "BatteryChartPreferenceController"; private static final String KEY_FOOTER_PREF = "battery_graph_footer"; private static final int ADD_FOOTER_DELAYED_MS = 250; /** Desired battery history size for timestamp slots. */ /** Desired battery history size for timestamp slots. */ public static final int DESIRED_HISTORY_SIZE = 25; public static final int DESIRED_HISTORY_SIZE = 25; private static final int CHART_LEVEL_ARRAY_SIZE = 13; private static final int CHART_LEVEL_ARRAY_SIZE = 13; Loading Loading @@ -90,6 +94,9 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll @VisibleForTesting int mTrapezoidIndex = BatteryChartView.SELECTED_INDEX_INVALID; @VisibleForTesting int mTrapezoidIndex = BatteryChartView.SELECTED_INDEX_INVALID; private boolean mIs24HourFormat = false; private boolean mIs24HourFormat = false; private boolean mIsFooterPrefAdded = false; private PreferenceScreen mPreferenceScreen; private FooterPreference mFooterPreference; private final String mPreferenceKey; private final String mPreferenceKey; private final SettingsActivity mActivity; private final SettingsActivity mActivity; Loading Loading @@ -178,9 +185,15 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll @Override @Override public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); super.displayPreference(screen); mPreferenceScreen = screen; mPrefContext = screen.getContext(); mPrefContext = screen.getContext(); mAppListPrefGroup = screen.findPreference(mPreferenceKey); mAppListPrefGroup = screen.findPreference(mPreferenceKey); mAppListPrefGroup.setOrderingAsAdded(false); mAppListPrefGroup.setOrderingAsAdded(false); mFooterPreference = screen.findPreference(KEY_FOOTER_PREF); // Removes footer first until usage data is loaded to avoid flashing. if (mFooterPreference != null) { screen.removePreference(mFooterPreference); } } } @Override @Override Loading Loading @@ -264,6 +277,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll mBatteryIndexedMap = null; mBatteryIndexedMap = null; mBatteryHistoryKeys = null; mBatteryHistoryKeys = null; mBatteryHistoryLevels = null; mBatteryHistoryLevels = null; addFooterPreferenceIfNeeded(false); return; return; } } mBatteryHistoryKeys = getBatteryHistoryKeys(batteryHistoryMap); mBatteryHistoryKeys = getBatteryHistoryKeys(batteryHistoryMap); Loading Loading @@ -347,6 +361,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll private void addAllPreferences() { private void addAllPreferences() { final List<BatteryDiffEntry> entries = final List<BatteryDiffEntry> entries = mBatteryIndexedMap.get(Integer.valueOf(mTrapezoidIndex)); mBatteryIndexedMap.get(Integer.valueOf(mTrapezoidIndex)); addFooterPreferenceIfNeeded(!entries.isEmpty()); if (entries == null) { if (entries == null) { Log.w(TAG, "cannot find BatteryDiffEntry for:" + mTrapezoidIndex); Log.w(TAG, "cannot find BatteryDiffEntry for:" + mTrapezoidIndex); return; return; Loading Loading @@ -575,6 +590,20 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll mBatteryChartView.setLatestTimestamp(latestTimestamp); mBatteryChartView.setLatestTimestamp(latestTimestamp); } } private void addFooterPreferenceIfNeeded(boolean containAppItems) { if (mIsFooterPrefAdded || mFooterPreference == null) { return; } mIsFooterPrefAdded = true; mFooterPreference.setTitle(mPrefContext.getString( containAppItems ? R.string.battery_usage_screen_footer : R.string.battery_usage_screen_footer_empty)); mHandler.postDelayed( () -> mPreferenceScreen.addPreference(mFooterPreference), ADD_FOOTER_DELAYED_MS); } private static String utcToLocalTime(long[] timestamps) { private static String utcToLocalTime(long[] timestamps) { final StringBuilder builder = new StringBuilder(); final StringBuilder builder = new StringBuilder(); for (int index = 0; index < timestamps.length; index++) { for (int index = 0; index < timestamps.length; index++) { Loading Loading
res/values/strings.xml +3 −1 Original line number Original line Diff line number Diff line Loading @@ -6497,8 +6497,10 @@ <string name="battery_usage_for_total_time">Total: <xliff:g id="time">%s</xliff:g></string> <string name="battery_usage_for_total_time">Total: <xliff:g id="time">%s</xliff:g></string> <!-- [CHAR_LIMIT=NONE] Battery usage item for background usage time --> <!-- [CHAR_LIMIT=NONE] Battery usage item for background usage time --> <string name="battery_usage_for_background_time">Background: <xliff:g id="time">%s</xliff:g></string> <string name="battery_usage_for_background_time">Background: <xliff:g id="time">%s</xliff:g></string> <!-- [CHAR_LIMIT=NONE] Battery usage main screen footer contentt --> <!-- [CHAR_LIMIT=NONE] Battery usage main screen footer content --> <string name="battery_usage_screen_footer">Battery usage data is approximate and doesn\'t measure usage when phone is charging</string> <string name="battery_usage_screen_footer">Battery usage data is approximate and doesn\'t measure usage when phone is charging</string> <!-- [CHAR_LIMIT=NONE] Battery usage main screen footer for empty content --> <string name="battery_usage_screen_footer_empty">Battery usage data will be available after you use your phone for a few hours</string> <!-- [CHAR_LIMIT=NONE] Accessibility content description for battery chart view. --> <!-- [CHAR_LIMIT=NONE] Accessibility content description for battery chart view. --> <string name="battery_usage_chart">Battery usage chart</string> <string name="battery_usage_chart">Battery usage chart</string> <!-- Process Stats strings --> <!-- Process Stats strings -->
res/xml/power_usage_advanced.xml +1 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ android:key="app_list"/> android:key="app_list"/> <com.android.settingslib.widget.FooterPreference <com.android.settingslib.widget.FooterPreference android:key="battery_graph_footer" android:title="@string/battery_usage_screen_footer" android:title="@string/battery_usage_screen_footer" android:selectable="false" android:selectable="false" settings:searchable="false"/> settings:searchable="false"/> Loading
src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java +29 −0 Original line number Original line Diff line number Diff line Loading @@ -48,6 +48,7 @@ import com.android.settingslib.core.lifecycle.events.OnDestroy; import com.android.settingslib.core.lifecycle.events.OnResume; import com.android.settingslib.core.lifecycle.events.OnResume; import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState; import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState; import com.android.settingslib.utils.StringUtil; import com.android.settingslib.utils.StringUtil; import com.android.settingslib.widget.FooterPreference; import java.util.Arrays; import java.util.Arrays; import java.util.ArrayList; import java.util.ArrayList; Loading @@ -62,6 +63,9 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll OnSaveInstanceState, BatteryChartView.OnSelectListener, OnResume, OnSaveInstanceState, BatteryChartView.OnSelectListener, OnResume, ExpandDividerPreference.OnExpandListener { ExpandDividerPreference.OnExpandListener { private static final String TAG = "BatteryChartPreferenceController"; private static final String TAG = "BatteryChartPreferenceController"; private static final String KEY_FOOTER_PREF = "battery_graph_footer"; private static final int ADD_FOOTER_DELAYED_MS = 250; /** Desired battery history size for timestamp slots. */ /** Desired battery history size for timestamp slots. */ public static final int DESIRED_HISTORY_SIZE = 25; public static final int DESIRED_HISTORY_SIZE = 25; private static final int CHART_LEVEL_ARRAY_SIZE = 13; private static final int CHART_LEVEL_ARRAY_SIZE = 13; Loading Loading @@ -90,6 +94,9 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll @VisibleForTesting int mTrapezoidIndex = BatteryChartView.SELECTED_INDEX_INVALID; @VisibleForTesting int mTrapezoidIndex = BatteryChartView.SELECTED_INDEX_INVALID; private boolean mIs24HourFormat = false; private boolean mIs24HourFormat = false; private boolean mIsFooterPrefAdded = false; private PreferenceScreen mPreferenceScreen; private FooterPreference mFooterPreference; private final String mPreferenceKey; private final String mPreferenceKey; private final SettingsActivity mActivity; private final SettingsActivity mActivity; Loading Loading @@ -178,9 +185,15 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll @Override @Override public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); super.displayPreference(screen); mPreferenceScreen = screen; mPrefContext = screen.getContext(); mPrefContext = screen.getContext(); mAppListPrefGroup = screen.findPreference(mPreferenceKey); mAppListPrefGroup = screen.findPreference(mPreferenceKey); mAppListPrefGroup.setOrderingAsAdded(false); mAppListPrefGroup.setOrderingAsAdded(false); mFooterPreference = screen.findPreference(KEY_FOOTER_PREF); // Removes footer first until usage data is loaded to avoid flashing. if (mFooterPreference != null) { screen.removePreference(mFooterPreference); } } } @Override @Override Loading Loading @@ -264,6 +277,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll mBatteryIndexedMap = null; mBatteryIndexedMap = null; mBatteryHistoryKeys = null; mBatteryHistoryKeys = null; mBatteryHistoryLevels = null; mBatteryHistoryLevels = null; addFooterPreferenceIfNeeded(false); return; return; } } mBatteryHistoryKeys = getBatteryHistoryKeys(batteryHistoryMap); mBatteryHistoryKeys = getBatteryHistoryKeys(batteryHistoryMap); Loading Loading @@ -347,6 +361,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll private void addAllPreferences() { private void addAllPreferences() { final List<BatteryDiffEntry> entries = final List<BatteryDiffEntry> entries = mBatteryIndexedMap.get(Integer.valueOf(mTrapezoidIndex)); mBatteryIndexedMap.get(Integer.valueOf(mTrapezoidIndex)); addFooterPreferenceIfNeeded(!entries.isEmpty()); if (entries == null) { if (entries == null) { Log.w(TAG, "cannot find BatteryDiffEntry for:" + mTrapezoidIndex); Log.w(TAG, "cannot find BatteryDiffEntry for:" + mTrapezoidIndex); return; return; Loading Loading @@ -575,6 +590,20 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll mBatteryChartView.setLatestTimestamp(latestTimestamp); mBatteryChartView.setLatestTimestamp(latestTimestamp); } } private void addFooterPreferenceIfNeeded(boolean containAppItems) { if (mIsFooterPrefAdded || mFooterPreference == null) { return; } mIsFooterPrefAdded = true; mFooterPreference.setTitle(mPrefContext.getString( containAppItems ? R.string.battery_usage_screen_footer : R.string.battery_usage_screen_footer_empty)); mHandler.postDelayed( () -> mPreferenceScreen.addPreference(mFooterPreference), ADD_FOOTER_DELAYED_MS); } private static String utcToLocalTime(long[] timestamps) { private static String utcToLocalTime(long[] timestamps) { final StringBuilder builder = new StringBuilder(); final StringBuilder builder = new StringBuilder(); for (int index = 0; index < timestamps.length; index++) { for (int index = 0; index < timestamps.length; index++) { Loading