Merge "Fix footer preference may flash one time when entering" into sc-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1c5f833..8141192 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6497,8 +6497,10 @@
<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 -->
<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>
+ <!-- [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. -->
<string name="battery_usage_chart">Battery usage chart</string>
<!-- Process Stats strings -->
diff --git a/res/xml/power_usage_advanced.xml b/res/xml/power_usage_advanced.xml
index 67f1783..7a9c44b 100644
--- a/res/xml/power_usage_advanced.xml
+++ b/res/xml/power_usage_advanced.xml
@@ -28,6 +28,7 @@
android:key="app_list"/>
<com.android.settingslib.widget.FooterPreference
+ android:key="battery_graph_footer"
android:title="@string/battery_usage_screen_footer"
android:selectable="false"
settings:searchable="false"/>
diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
index 2ac55e7..a36c2ef 100644
--- a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
@@ -48,6 +48,7 @@
import com.android.settingslib.core.lifecycle.events.OnResume;
import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
import com.android.settingslib.utils.StringUtil;
+import com.android.settingslib.widget.FooterPreference;
import java.util.Arrays;
import java.util.ArrayList;
@@ -62,6 +63,9 @@
OnSaveInstanceState, BatteryChartView.OnSelectListener, OnResume,
ExpandDividerPreference.OnExpandListener {
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. */
public static final int DESIRED_HISTORY_SIZE = 25;
private static final int CHART_LEVEL_ARRAY_SIZE = 13;
@@ -90,6 +94,9 @@
@VisibleForTesting int mTrapezoidIndex = BatteryChartView.SELECTED_INDEX_INVALID;
private boolean mIs24HourFormat = false;
+ private boolean mIsFooterPrefAdded = false;
+ private PreferenceScreen mPreferenceScreen;
+ private FooterPreference mFooterPreference;
private final String mPreferenceKey;
private final SettingsActivity mActivity;
@@ -178,9 +185,15 @@
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
+ mPreferenceScreen = screen;
mPrefContext = screen.getContext();
mAppListPrefGroup = screen.findPreference(mPreferenceKey);
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
@@ -264,6 +277,7 @@
mBatteryIndexedMap = null;
mBatteryHistoryKeys = null;
mBatteryHistoryLevels = null;
+ addFooterPreferenceIfNeeded(false);
return;
}
mBatteryHistoryKeys = getBatteryHistoryKeys(batteryHistoryMap);
@@ -347,6 +361,7 @@
private void addAllPreferences() {
final List<BatteryDiffEntry> entries =
mBatteryIndexedMap.get(Integer.valueOf(mTrapezoidIndex));
+ addFooterPreferenceIfNeeded(!entries.isEmpty());
if (entries == null) {
Log.w(TAG, "cannot find BatteryDiffEntry for:" + mTrapezoidIndex);
return;
@@ -575,6 +590,20 @@
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) {
final StringBuilder builder = new StringBuilder();
for (int index = 0; index < timestamps.length; index++) {