From e030d8613a92ac6ade8a8ce3f62ef9ab704f7590 Mon Sep 17 00:00:00 2001 From: ykhung Date: Fri, 21 May 2021 14:45:28 +0800 Subject: [PATCH] Fix footer preference may flash one time when entering new solution > We will not show the footer preference in the beginning when users entering the app, it will wait until the data is loaded to show the footer and app item in the same time. We also enhance the footer message as "Battery usage data will be available after you use your phone for a few hours" when there are not content in the begining. Bug: 187766862 Bug: 188871770 Test: make SettingsRoboTests Change-Id: I8d19173b4402722797b1ae3c4cfe6dcdf2d3fe3f --- res/values/strings.xml | 4 ++- res/xml/power_usage_advanced.xml | 1 + .../BatteryChartPreferenceController.java | 29 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 1c5f833da78..8141192b34e 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6497,8 +6497,10 @@ Total: %s Background: %s - + Battery usage data is approximate and doesn\'t measure usage when phone is charging + + Battery usage data will be available after you use your phone for a few hours Battery usage chart diff --git a/res/xml/power_usage_advanced.xml b/res/xml/power_usage_advanced.xml index 67f17834c7d..7a9c44bc61a 100644 --- a/res/xml/power_usage_advanced.xml +++ b/res/xml/power_usage_advanced.xml @@ -28,6 +28,7 @@ android:key="app_list"/> diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java index 2ac55e75d1b..a36c2ef964a 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.OnDestroy; 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 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll 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 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll @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 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll @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 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll mBatteryIndexedMap = null; mBatteryHistoryKeys = null; mBatteryHistoryLevels = null; + addFooterPreferenceIfNeeded(false); return; } mBatteryHistoryKeys = getBatteryHistoryKeys(batteryHistoryMap); @@ -347,6 +361,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll private void addAllPreferences() { final List 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 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll 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++) {