Support help message when battery is unavailable(1/2)

- Present help preference when battery is unavailable

Bug: 179237551
Test: make SettingsRoboTests
Change-Id: If6e82210d831123cb1169d53a18d24cb2c576b10
This commit is contained in:
Wesley.CW Wang
2021-04-08 18:01:15 +08:00
parent b914ec91f1
commit 756028aadd
6 changed files with 95 additions and 10 deletions

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2021 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<!-- TODO(b/179237551): Refine the layout once the design been lock down. -->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.card.MaterialCardView
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
style="@style/ContextualCardStyle">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top|start"
android:orientation="vertical"
android:padding="16dp"
android:background="@color/homepage_emergency_background">
<ImageView
android:id="@+id/battery_icon"
android:src="@drawable/ic_battery_alert_24dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView android:id="@+id/summary_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/battery_missing_message"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorSecondary" />
<TextView android:id="@+id/link_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:text="@string/battery_missing_link_message"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/colorError" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</FrameLayout>

View File

@@ -6051,9 +6051,9 @@
<string name="battery_header_title_alternate"><xliff:g id="number" example="88">^1</xliff:g><small> <font size="20"><xliff:g id="unit" example="%">%</xliff:g></font></small></string> <string name="battery_header_title_alternate"><xliff:g id="number" example="88">^1</xliff:g><small> <font size="20"><xliff:g id="unit" example="%">%</xliff:g></font></small></string>
<!-- Summary for top level battery tile if battery is not present. [CHAR LIMIT=NONE] --> <!-- Summary for top level battery tile if battery is not present. [CHAR LIMIT=NONE] -->
<string name="battery_missing_message">Problem reading your battery meter</string> <string name="battery_missing_message">Cant update battery info</string>
<!-- Summary to battery page if battery is not present. [CHAR LIMIT=NONE] --> <!-- Help text if battery is not present. [CHAR LIMIT=NONE] -->
<string name="battery_missing_help_message">Problem reading your battery meter. Tap to <annotation id="url">learn more</annotation></string> <string name="battery_missing_link_message"></string>
<!-- Title for force stop dialog [CHAR LIMIT=30] --> <!-- Title for force stop dialog [CHAR LIMIT=30] -->
<string name="dialog_stop_title">Stop app?</string> <string name="dialog_stop_title">Stop app?</string>

View File

@@ -28,11 +28,10 @@
android:selectable="false" android:selectable="false"
settings:controller="com.android.settings.fuelgauge.BatteryHeaderPreferenceController" /> settings:controller="com.android.settings.fuelgauge.BatteryHeaderPreferenceController" />
<Preference <com.android.settingslib.widget.LayoutPreference
android:fragment="com.android.settings.fuelgauge.PowerUsageAdvanced" android:key="battery_help_message"
android:key="battery_usage_summary" android:layout="@layout/preference_battery_error"
android:title="@string/advanced_battery_preference_title" android:selectable="false"
app:iconSpaceReserved="false"
settings:searchable="false" /> settings:searchable="false" />
<com.android.settings.widget.CardPreference <com.android.settings.widget.CardPreference
@@ -40,6 +39,13 @@
android:title="@string/summary_placeholder" android:title="@string/summary_placeholder"
settings:controller="com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController" /> settings:controller="com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController" />
<Preference
android:fragment="com.android.settings.fuelgauge.PowerUsageAdvanced"
android:key="battery_usage_summary"
android:title="@string/advanced_battery_preference_title"
app:iconSpaceReserved="false"
settings:searchable="false" />
<Preference <Preference
android:fragment="com.android.settings.fuelgauge.batterysaver.BatterySaverSettings" android:fragment="com.android.settings.fuelgauge.batterysaver.BatterySaverSettings"
android:key="battery_saver_summary" android:key="battery_saver_summary"

View File

@@ -91,7 +91,7 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController
if (com.android.settings.Utils.isBatteryPresent(mContext)) { if (com.android.settings.Utils.isBatteryPresent(mContext)) {
quickUpdateHeaderPreference(); quickUpdateHeaderPreference();
} else { } else {
//TODO(b/179237551): Make new progress bar widget support help message mBatteryUsageProgressBarPref.setVisible(false);
} }
} }

View File

@@ -29,6 +29,7 @@ import android.provider.Settings.Global;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.loader.app.LoaderManager; import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader; import androidx.loader.content.Loader;
import androidx.preference.Preference;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
@@ -51,6 +52,8 @@ import java.util.List;
public class PowerUsageSummary extends PowerUsageBase implements public class PowerUsageSummary extends PowerUsageBase implements
BatteryTipPreferenceController.BatteryTipListener { BatteryTipPreferenceController.BatteryTipListener {
private static final String KEY_BATTERY_ERROR = "battery_help_message";
static final String TAG = "PowerUsageSummary"; static final String TAG = "PowerUsageSummary";
@VisibleForTesting @VisibleForTesting
@@ -70,9 +73,11 @@ public class PowerUsageSummary extends PowerUsageBase implements
@VisibleForTesting @VisibleForTesting
BatteryHeaderPreferenceController mBatteryHeaderPreferenceController; BatteryHeaderPreferenceController mBatteryHeaderPreferenceController;
@VisibleForTesting @VisibleForTesting
BatteryTipPreferenceController mBatteryTipPreferenceController;
@VisibleForTesting
boolean mNeedUpdateBatteryTip; boolean mNeedUpdateBatteryTip;
@VisibleForTesting @VisibleForTesting
BatteryTipPreferenceController mBatteryTipPreferenceController; Preference mHelpPreference;
@VisibleForTesting @VisibleForTesting
final ContentObserver mSettingsObserver = new ContentObserver(new Handler()) { final ContentObserver mSettingsObserver = new ContentObserver(new Handler()) {
@@ -152,8 +157,14 @@ public class PowerUsageSummary extends PowerUsageBase implements
mBatteryUtils = BatteryUtils.getInstance(getContext()); mBatteryUtils = BatteryUtils.getInstance(getContext());
mHelpPreference = findPreference(KEY_BATTERY_ERROR);
mHelpPreference.setVisible(false);
if (Utils.isBatteryPresent(getContext())) { if (Utils.isBatteryPresent(getContext())) {
restartBatteryInfoLoader(); restartBatteryInfoLoader();
} else {
// Present help preference when battery is unavailable.
mHelpPreference.setVisible(true);
} }
mBatteryTipPreferenceController.restoreInstanceState(icicle); mBatteryTipPreferenceController.restoreInstanceState(icicle);
updateBatteryTipFlag(icicle); updateBatteryTipFlag(icicle);

View File

@@ -308,6 +308,15 @@ public class BatteryHeaderPreferenceControllerTest {
BasePreferenceController.AVAILABLE_UNSEARCHABLE); BasePreferenceController.AVAILABLE_UNSEARCHABLE);
} }
@Test
public void displayPreference_batteryNotPresent_isInvisible() {
ShadowUtils.setIsBatteryPresent(false);
mController.displayPreference(mPreferenceScreen);
assertThat(mBatteryUsageProgressBarPref.isVisible()).isFalse();
}
private CharSequence formatBatteryPercentageText() { private CharSequence formatBatteryPercentageText() {
return TextUtils.expandTemplate(mContext.getText(R.string.battery_header_title_alternate), return TextUtils.expandTemplate(mContext.getText(R.string.battery_header_title_alternate),
NumberFormat.getIntegerInstance().format(BATTERY_LEVEL)); NumberFormat.getIntegerInstance().format(BATTERY_LEVEL));