Fixed battery tips card UI.
- Add highlight effect after navigate to new page. - Update text format inside button. Screenshot: https://screenshot.googleplex.com/8ib66dWzn6PZmhy Fix: 296001546 Fix: 296339767 Bug: 291689623 Test: manual Change-Id: Ic789e5feb684a109582477c553963a9a3f9936b8
This commit is contained in:
@@ -49,8 +49,7 @@
|
|||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:text="@string/battery_tips_card_dismiss_button"
|
android:text="@string/battery_tips_card_dismiss_button"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:textColor="?android:attr/colorAccent"
|
android:textColor="?android:attr/textColorPrimary" />
|
||||||
android:textStyle="bold" />
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/main_button"
|
android:id="@+id/main_button"
|
||||||
@@ -62,7 +61,6 @@
|
|||||||
android:text="@string/battery_tips_card_action_button"
|
android:text="@string/battery_tips_card_action_button"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
android:textStyle="bold"
|
|
||||||
app:strokeColor="?android:attr/colorAccent"
|
app:strokeColor="?android:attr/colorAccent"
|
||||||
app:strokeWidth="1dp" />
|
app:strokeWidth="1dp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@@ -18,6 +18,7 @@ package com.android.settings.fuelgauge.batteryusage;
|
|||||||
|
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -30,6 +31,7 @@ import androidx.preference.Preference;
|
|||||||
import androidx.preference.PreferenceViewHolder;
|
import androidx.preference.PreferenceViewHolder;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.SettingsActivity;
|
||||||
import com.android.settings.core.SubSettingLauncher;
|
import com.android.settings.core.SubSettingLauncher;
|
||||||
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
|
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
@@ -56,6 +58,8 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
String mDestinationComponentName;
|
String mDestinationComponentName;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
String mPreferenceHighlightKey;
|
||||||
|
@VisibleForTesting
|
||||||
Integer mSourceMetricsCategory;
|
Integer mSourceMetricsCategory;
|
||||||
|
|
||||||
public BatteryTipsCardPreference(Context context, AttributeSet attrs) {
|
public BatteryTipsCardPreference(Context context, AttributeSet attrs) {
|
||||||
@@ -98,9 +102,10 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic
|
|||||||
* Sets the info of target fragment launched by main button.
|
* Sets the info of target fragment launched by main button.
|
||||||
*/
|
*/
|
||||||
public void setMainButtonLauncherInfo(final String destinationClassName,
|
public void setMainButtonLauncherInfo(final String destinationClassName,
|
||||||
final Integer sourceMetricsCategory) {
|
final Integer sourceMetricsCategory, final String highlightKey) {
|
||||||
mDestinationComponentName = destinationClassName;
|
mDestinationComponentName = destinationClassName;
|
||||||
mSourceMetricsCategory = sourceMetricsCategory;
|
mSourceMetricsCategory = sourceMetricsCategory;
|
||||||
|
mPreferenceHighlightKey = highlightKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -110,9 +115,16 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic
|
|||||||
if (TextUtils.isEmpty(mDestinationComponentName)) {
|
if (TextUtils.isEmpty(mDestinationComponentName)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Bundle arguments = Bundle.EMPTY;
|
||||||
|
if (!TextUtils.isEmpty(mPreferenceHighlightKey)) {
|
||||||
|
arguments = new Bundle(1);
|
||||||
|
arguments.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY,
|
||||||
|
mPreferenceHighlightKey);
|
||||||
|
}
|
||||||
new SubSettingLauncher(getContext())
|
new SubSettingLauncher(getContext())
|
||||||
.setDestination(mDestinationComponentName)
|
.setDestination(mDestinationComponentName)
|
||||||
.setSourceMetricsCategory(mSourceMetricsCategory)
|
.setSourceMetricsCategory(mSourceMetricsCategory)
|
||||||
|
.setArguments(arguments)
|
||||||
.launch();
|
.launch();
|
||||||
setVisible(false);
|
setVisible(false);
|
||||||
mMetricsFeatureProvider.action(
|
mMetricsFeatureProvider.action(
|
||||||
|
@@ -69,9 +69,9 @@ public class BatteryTipsController extends BasePreferenceController {
|
|||||||
private <T> T getInfo(PowerAnomalyEvent powerAnomalyEvent,
|
private <T> T getInfo(PowerAnomalyEvent powerAnomalyEvent,
|
||||||
Function<WarningBannerInfo, T> warningBannerInfoSupplier,
|
Function<WarningBannerInfo, T> warningBannerInfoSupplier,
|
||||||
Function<WarningItemInfo, T> warningItemInfoSupplier) {
|
Function<WarningItemInfo, T> warningItemInfoSupplier) {
|
||||||
if (powerAnomalyEvent.hasWarningBannerInfo() && warningBannerInfoSupplier != null) {
|
if (warningBannerInfoSupplier != null && powerAnomalyEvent.hasWarningBannerInfo()) {
|
||||||
return warningBannerInfoSupplier.apply(powerAnomalyEvent.getWarningBannerInfo());
|
return warningBannerInfoSupplier.apply(powerAnomalyEvent.getWarningBannerInfo());
|
||||||
} else if (powerAnomalyEvent.hasWarningItemInfo() && warningItemInfoSupplier != null) {
|
} else if (warningItemInfoSupplier != null && powerAnomalyEvent.hasWarningItemInfo()) {
|
||||||
return warningItemInfoSupplier.apply(powerAnomalyEvent.getWarningItemInfo());
|
return warningItemInfoSupplier.apply(powerAnomalyEvent.getWarningItemInfo());
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -125,20 +125,20 @@ public class BatteryTipsController extends BasePreferenceController {
|
|||||||
WarningBannerInfo::getCancelButtonString, WarningItemInfo::getCancelButtonString,
|
WarningBannerInfo::getCancelButtonString, WarningItemInfo::getCancelButtonString,
|
||||||
R.array.power_anomaly_dismiss_btn_strings, resourceIndex);
|
R.array.power_anomaly_dismiss_btn_strings, resourceIndex);
|
||||||
|
|
||||||
String destinationClassName = getString(powerAnomalyEvent,
|
String destinationClassName = getInfo(powerAnomalyEvent,
|
||||||
WarningBannerInfo::getMainButtonDestination,
|
WarningBannerInfo::getMainButtonDestination, null);
|
||||||
WarningItemInfo::getMainButtonDestination,
|
|
||||||
-1, -1);
|
|
||||||
Integer sourceMetricsCategory = getInfo(powerAnomalyEvent,
|
Integer sourceMetricsCategory = getInfo(powerAnomalyEvent,
|
||||||
WarningBannerInfo::getMainButtonSourceMetricsCategory,
|
WarningBannerInfo::getMainButtonSourceMetricsCategory, null);
|
||||||
WarningItemInfo::getMainButtonSourceMetricsCategory);
|
String preferenceHighlightKey = getInfo(powerAnomalyEvent,
|
||||||
|
WarningBannerInfo::getMainButtonSourceHighlightKey, null);
|
||||||
|
|
||||||
// Updated card preference and main button fragment launcher
|
// Updated card preference and main button fragment launcher
|
||||||
mCardPreference.setAnomalyEventId(powerAnomalyEvent.getEventId());
|
mCardPreference.setAnomalyEventId(powerAnomalyEvent.getEventId());
|
||||||
mCardPreference.setTitle(titleString);
|
mCardPreference.setTitle(titleString);
|
||||||
mCardPreference.setMainButtonLabel(mainBtnString);
|
mCardPreference.setMainButtonLabel(mainBtnString);
|
||||||
mCardPreference.setDismissButtonLabel(dismissBtnString);
|
mCardPreference.setDismissButtonLabel(dismissBtnString);
|
||||||
mCardPreference.setMainButtonLauncherInfo(destinationClassName, sourceMetricsCategory);
|
mCardPreference.setMainButtonLauncherInfo(
|
||||||
|
destinationClassName, sourceMetricsCategory, preferenceHighlightKey);
|
||||||
mCardPreference.setVisible(true);
|
mCardPreference.setVisible(true);
|
||||||
|
|
||||||
mMetricsFeatureProvider.action(mContext,
|
mMetricsFeatureProvider.action(mContext,
|
||||||
|
@@ -47,7 +47,9 @@ message WarningBannerInfo {
|
|||||||
optional string main_button_destination = 4;
|
optional string main_button_destination = 4;
|
||||||
// Used in the SubSettingLauncher.setSourceMetricsCategory().
|
// Used in the SubSettingLauncher.setSourceMetricsCategory().
|
||||||
optional int32 main_button_source_metrics_category = 5;
|
optional int32 main_button_source_metrics_category = 5;
|
||||||
optional string cancel_button_string = 6;
|
// Used in the SubSettingLauncher.setArguments().
|
||||||
|
optional string main_button_source_highlight_key = 6;
|
||||||
|
optional string cancel_button_string = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
message WarningItemInfo {
|
message WarningItemInfo {
|
||||||
@@ -57,9 +59,5 @@ message WarningItemInfo {
|
|||||||
optional string title_string = 4;
|
optional string title_string = 4;
|
||||||
optional string description_string = 5;
|
optional string description_string = 5;
|
||||||
optional string main_button_string = 6;
|
optional string main_button_string = 6;
|
||||||
// Used in the SubSettingLauncher.setDestination().
|
optional string cancel_button_string = 7;
|
||||||
optional string main_button_destination = 7;
|
|
||||||
// Used in the SubSettingLauncher.setSourceMetricsCategory().
|
|
||||||
optional int32 main_button_source_metrics_category = 8;
|
|
||||||
optional string cancel_button_string = 9;
|
|
||||||
}
|
}
|
||||||
|
@@ -33,8 +33,8 @@ import androidx.preference.Preference;
|
|||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.SettingsPreferenceFragment;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.core.InstrumentedPreferenceFragment;
|
|
||||||
import com.android.settings.core.PreferenceXmlParserUtils;
|
import com.android.settings.core.PreferenceXmlParserUtils;
|
||||||
import com.android.settings.core.PreferenceXmlParserUtils.MetadataFlag;
|
import com.android.settings.core.PreferenceXmlParserUtils.MetadataFlag;
|
||||||
import com.android.settingslib.widget.CandidateInfo;
|
import com.android.settingslib.widget.CandidateInfo;
|
||||||
@@ -46,7 +46,10 @@ import java.io.IOException;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public abstract class RadioButtonPickerFragment extends InstrumentedPreferenceFragment implements
|
/**
|
||||||
|
* A fragment to handle general radio button picker
|
||||||
|
*/
|
||||||
|
public abstract class RadioButtonPickerFragment extends SettingsPreferenceFragment implements
|
||||||
SelectorWithWidgetPreference.OnClickListener {
|
SelectorWithWidgetPreference.OnClickListener {
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
@@ -29,9 +29,9 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
|
import com.android.settings.DisplaySettings;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
import com.android.settings.display.AutoBrightnessSettings;
|
|
||||||
import com.android.settings.testutils.BatteryTestUtils;
|
import com.android.settings.testutils.BatteryTestUtils;
|
||||||
import com.android.settings.testutils.FakeFeatureFactory;
|
import com.android.settings.testutils.FakeFeatureFactory;
|
||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
@@ -86,9 +86,9 @@ public final class BatteryTipsCardPreferenceTest {
|
|||||||
verify(mContext).startActivity(any(Intent.class));
|
verify(mContext).startActivity(any(Intent.class));
|
||||||
final Intent intent = captor.getValue();
|
final Intent intent = captor.getValue();
|
||||||
assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT))
|
assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT))
|
||||||
.isEqualTo(AutoBrightnessSettings.class.getName());
|
.isEqualTo(DisplaySettings.class.getName());
|
||||||
assertThat(intent.getIntExtra(MetricsFeatureProvider.EXTRA_SOURCE_METRICS_CATEGORY, -1))
|
assertThat(intent.getIntExtra(MetricsFeatureProvider.EXTRA_SOURCE_METRICS_CATEGORY, -1))
|
||||||
.isEqualTo(SettingsEnums.SETTINGS_AUTO_BRIGHTNESS);
|
.isEqualTo(SettingsEnums.DISPLAY);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT, "BrightnessAnomaly");
|
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT, "BrightnessAnomaly");
|
||||||
}
|
}
|
||||||
|
@@ -87,8 +87,8 @@ public final class BatteryTipsControllerTest {
|
|||||||
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
||||||
// Check proto info
|
// Check proto info
|
||||||
verify(mBatteryTipsCardPreference).setMainButtonLauncherInfo(
|
verify(mBatteryTipsCardPreference).setMainButtonLauncherInfo(
|
||||||
"com.android.settings.display.AutoBrightnessSettings",
|
"com.android.settings.DisplaySettings",
|
||||||
1381);
|
46, "auto_brightness_entry");
|
||||||
verify(mBatteryTipsCardPreference).setVisible(true);
|
verify(mBatteryTipsCardPreference).setVisible(true);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly");
|
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly");
|
||||||
@@ -107,11 +107,12 @@ public final class BatteryTipsControllerTest {
|
|||||||
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
||||||
verify(mBatteryTipsCardPreference).setMainButtonLauncherInfo(
|
verify(mBatteryTipsCardPreference).setMainButtonLauncherInfo(
|
||||||
"com.android.settings.display.ScreenTimeoutSettings",
|
"com.android.settings.display.ScreenTimeoutSettings",
|
||||||
1852);
|
1852, "60000");
|
||||||
verify(mBatteryTipsCardPreference).setVisible(true);
|
verify(mBatteryTipsCardPreference).setVisible(true);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly");
|
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleBatteryTipsCardUpdated_screenTimeoutAnomalyHasTitle_showAnomaly() {
|
public void handleBatteryTipsCardUpdated_screenTimeoutAnomalyHasTitle_showAnomaly() {
|
||||||
PowerAnomalyEvent event = BatteryTestUtils.createScreenTimeoutAnomalyEvent();
|
PowerAnomalyEvent event = BatteryTestUtils.createScreenTimeoutAnomalyEvent();
|
||||||
@@ -132,7 +133,7 @@ public final class BatteryTipsControllerTest {
|
|||||||
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
||||||
verify(mBatteryTipsCardPreference).setMainButtonLauncherInfo(
|
verify(mBatteryTipsCardPreference).setMainButtonLauncherInfo(
|
||||||
"com.android.settings.display.ScreenTimeoutSettings",
|
"com.android.settings.display.ScreenTimeoutSettings",
|
||||||
1852);
|
1852, "60000");
|
||||||
verify(mBatteryTipsCardPreference).setVisible(true);
|
verify(mBatteryTipsCardPreference).setVisible(true);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly");
|
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly");
|
||||||
|
@@ -29,7 +29,7 @@ import android.os.UserManager;
|
|||||||
|
|
||||||
import androidx.room.Room;
|
import androidx.room.Room;
|
||||||
|
|
||||||
import com.android.settings.display.AutoBrightnessSettings;
|
import com.android.settings.DisplaySettings;
|
||||||
import com.android.settings.display.ScreenTimeoutSettings;
|
import com.android.settings.display.ScreenTimeoutSettings;
|
||||||
import com.android.settings.fuelgauge.batteryusage.BatteryInformation;
|
import com.android.settings.fuelgauge.batteryusage.BatteryInformation;
|
||||||
import com.android.settings.fuelgauge.batteryusage.ConvertUtils;
|
import com.android.settings.fuelgauge.batteryusage.ConvertUtils;
|
||||||
@@ -215,8 +215,9 @@ public class BatteryTestUtils {
|
|||||||
.setType(PowerAnomalyType.TYPE_SETTINGS_BANNER)
|
.setType(PowerAnomalyType.TYPE_SETTINGS_BANNER)
|
||||||
.setKey(PowerAnomalyKey.KEY_BRIGHTNESS)
|
.setKey(PowerAnomalyKey.KEY_BRIGHTNESS)
|
||||||
.setWarningBannerInfo(WarningBannerInfo.newBuilder()
|
.setWarningBannerInfo(WarningBannerInfo.newBuilder()
|
||||||
.setMainButtonDestination(AutoBrightnessSettings.class.getName())
|
.setMainButtonDestination(DisplaySettings.class.getName())
|
||||||
.setMainButtonSourceMetricsCategory(SettingsEnums.SETTINGS_AUTO_BRIGHTNESS)
|
.setMainButtonSourceMetricsCategory(SettingsEnums.DISPLAY)
|
||||||
|
.setMainButtonSourceHighlightKey("auto_brightness_entry")
|
||||||
.build())
|
.build())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
@@ -230,6 +231,7 @@ public class BatteryTestUtils {
|
|||||||
.setWarningBannerInfo(WarningBannerInfo.newBuilder()
|
.setWarningBannerInfo(WarningBannerInfo.newBuilder()
|
||||||
.setMainButtonDestination(ScreenTimeoutSettings.class.getName())
|
.setMainButtonDestination(ScreenTimeoutSettings.class.getName())
|
||||||
.setMainButtonSourceMetricsCategory(SettingsEnums.SCREEN_TIMEOUT)
|
.setMainButtonSourceMetricsCategory(SettingsEnums.SCREEN_TIMEOUT)
|
||||||
|
.setMainButtonSourceHighlightKey("60000")
|
||||||
.build())
|
.build())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user