Loading packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/BannerPreference.java +57 −27 Original line number Diff line number Diff line Loading @@ -23,10 +23,6 @@ import android.os.Parcelable; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** A data class representing a banner preference. */ Loading @@ -34,25 +30,24 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela private final String mTitle; private final String mMessage; private final DeviceSettingIcon mIcon; private final ImmutableList<ButtonInfo> mButtonInfos; private final ButtonInfo mPositiveButtonInfo; private final ButtonInfo mNegativeButtonInfo; private final Bundle mExtras; BannerPreference( @NonNull String title, @NonNull String message, @Nullable DeviceSettingIcon icon, @Nullable List<ButtonInfo> buttonInfos, @Nullable ButtonInfo positiveButtonInfo, @Nullable ButtonInfo negativeButtonInfo, Bundle extras) { super(DeviceSettingType.DEVICE_SETTING_TYPE_BANNER); validate(title, message); mTitle = title; mMessage = message; mIcon = Objects.requireNonNullElseGet(icon, () -> DeviceSettingIcon.NO_ICON); if (buttonInfos == null) { mButtonInfos = ImmutableList.of(); } else { mButtonInfos = ImmutableList.copyOf(buttonInfos); } mPositiveButtonInfo = positiveButtonInfo; mNegativeButtonInfo = negativeButtonInfo; mExtras = extras; } Loading @@ -71,10 +66,16 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela String title = in.readString(); String message = in.readString(); DeviceSettingIcon icon = DeviceSettingIcon.readFromParcel(in); List<ButtonInfo> buttonInfos = new ArrayList<>(); in.readTypedList(buttonInfos, ButtonInfo.CREATOR); ButtonInfo positiveButtonInfo = in.readParcelable(ButtonInfo.class.getClassLoader()); ButtonInfo negativeButtonInfo = in.readParcelable(ButtonInfo.class.getClassLoader()); Bundle extras = in.readBundle(Bundle.class.getClassLoader()); return new BannerPreference(title, message, icon, buttonInfos, extras); return new BannerPreference( title, message, icon, positiveButtonInfo, negativeButtonInfo, extras); } public static final Creator<BannerPreference> CREATOR = Loading Loading @@ -104,7 +105,8 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela dest.writeString(mTitle); dest.writeString(mMessage); mIcon.writeToParcel(dest, flags); dest.writeTypedList(mButtonInfos, flags); dest.writeParcelable(mPositiveButtonInfo, flags); dest.writeParcelable(mNegativeButtonInfo, flags); dest.writeBundle(mExtras); } Loading @@ -113,8 +115,8 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela private String mTitle; private String mMessage; private DeviceSettingIcon mIcon; private final ImmutableList.Builder<ButtonInfo> mButtonInfos = new ImmutableList.Builder<>(); private ButtonInfo mPositiveButtonInfo; private ButtonInfo mNegativeButtonInfo; private Bundle mExtras = Bundle.EMPTY; /** Loading Loading @@ -154,14 +156,26 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela } /** * Adds a button in the preference. * Sets the positive button in the preference. * * @param buttonInfo The button to set. * @return Returns the Builder object. */ @NonNull public Builder setPositiveButtonInfo(@NonNull ButtonInfo buttonInfo) { mPositiveButtonInfo = buttonInfo; return this; } /** * Sets the negative button in the preference. * * @param buttonInfo The button to add. * @param buttonInfo The button to set. * @return Returns the Builder object. */ @NonNull public Builder addButtonInfo(@NonNull ButtonInfo buttonInfo) { mButtonInfos.add(buttonInfo); public Builder setNegativeButtonInfo(@NonNull ButtonInfo buttonInfo) { mNegativeButtonInfo = buttonInfo; return this; } Loading @@ -183,7 +197,13 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela */ @NonNull public BannerPreference build() { return new BannerPreference(mTitle, mMessage, mIcon, mButtonInfos.build(), mExtras); return new BannerPreference( mTitle, mMessage, mIcon, mPositiveButtonInfo, mNegativeButtonInfo, mExtras); } } Loading Loading @@ -217,13 +237,23 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela } /** * Gets the button list in the preference. * Gets the positive button in the preference. * * @return the button list. * @return the positive button. */ @NonNull public List<ButtonInfo> getButtonInfos() { return mButtonInfos; @Nullable public ButtonInfo getPositiveButtonInfo() { return mPositiveButtonInfo; } /** * Gets the negative button in the preference. * * @return the negative button. */ @Nullable public ButtonInfo getNegativeButtonInfo() { return mNegativeButtonInfo; } /** Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/devicesettings/BannerPreferenceTest.java +22 −22 Original line number Diff line number Diff line Loading @@ -35,10 +35,10 @@ public final class BannerPreferenceTest { null, Bundle.EMPTY); private static final DeviceSettingAction ACTION = DeviceSettingAction.EMPTY_ACTION; private static final ButtonInfo Button_INFO_1 = new ButtonInfo.Builder().setLabel("label1").setAction(ACTION).build(); private static final ButtonInfo Button_INFO_2 = new ButtonInfo.Builder().setLabel("label2").setAction(ACTION).build(); private static final ButtonInfo POSITIVE_BUTTON = new ButtonInfo.Builder().setLabel("positive").setAction(ACTION).build(); private static final ButtonInfo NEGATIVE_BUTTON = new ButtonInfo.Builder().setLabel("negative").setAction(ACTION).build(); @Test public void build_withoutTitle_fail() { Loading @@ -49,8 +49,8 @@ public final class BannerPreferenceTest { new BannerPreference.Builder() .setMessage("message") .setIcon(ICON) .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .setExtras(buildBundle("key1", "value1")) .build(); }); Loading @@ -65,8 +65,8 @@ public final class BannerPreferenceTest { new BannerPreference.Builder() .setTitle("title") .setIcon(ICON) .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .setExtras(buildBundle("key1", "value1")) .build(); }); Loading @@ -78,8 +78,8 @@ public final class BannerPreferenceTest { new BannerPreference.Builder() .setTitle("title") .setMessage("message") .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .setExtras(buildBundle("key1", "value1")) .build(); } Loading @@ -102,8 +102,8 @@ public final class BannerPreferenceTest { .setTitle("title") .setMessage("message") .setIcon(ICON) .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .build(); } Loading @@ -114,8 +114,8 @@ public final class BannerPreferenceTest { .setTitle("title") .setMessage("message") .setIcon(ICON) .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .setExtras(buildBundle("key1", "value1")) .build(); } Loading @@ -127,16 +127,16 @@ public final class BannerPreferenceTest { .setTitle("title") .setMessage("message") .setIcon(ICON) .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .setExtras(buildBundle("key1", "value1")) .build(); assertThat(preference.getTitle()).isEqualTo("title"); assertThat(preference.getMessage()).isEqualTo("message"); assertThat(preference.getIcon()).isEqualTo(ICON); assertThat(preference.getButtonInfos().stream().map(ButtonInfo::getLabel).toList()) .containsExactly("label1", "label2"); assertThat(preference.getPositiveButtonInfo()).isEqualTo(POSITIVE_BUTTON); assertThat(preference.getNegativeButtonInfo()).isEqualTo(NEGATIVE_BUTTON); assertThat(preference.getExtras().getString("key1")).isEqualTo("value1"); } Loading @@ -147,8 +147,8 @@ public final class BannerPreferenceTest { .setTitle("title") .setMessage("message") .setIcon(ICON) .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .setExtras(buildBundle("key1", "value1")) .build(); Loading @@ -157,8 +157,8 @@ public final class BannerPreferenceTest { assertThat(fromParcel.getTitle()).isEqualTo(preference.getTitle()); assertThat(fromParcel.getMessage()).isEqualTo(preference.getMessage()); assertThat(fromParcel.getIcon()).isEqualTo(preference.getIcon()); assertThat(fromParcel.getButtonInfos().stream().map(ButtonInfo::getLabel).toList()) .containsExactly("label1", "label2"); assertThat(preference.getPositiveButtonInfo()).isEqualTo(POSITIVE_BUTTON); assertThat(preference.getNegativeButtonInfo()).isEqualTo(NEGATIVE_BUTTON); assertThat(fromParcel.getExtras().getString("key1")) .isEqualTo(preference.getExtras().getString("key1")); } Loading Loading
packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/BannerPreference.java +57 −27 Original line number Diff line number Diff line Loading @@ -23,10 +23,6 @@ import android.os.Parcelable; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** A data class representing a banner preference. */ Loading @@ -34,25 +30,24 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela private final String mTitle; private final String mMessage; private final DeviceSettingIcon mIcon; private final ImmutableList<ButtonInfo> mButtonInfos; private final ButtonInfo mPositiveButtonInfo; private final ButtonInfo mNegativeButtonInfo; private final Bundle mExtras; BannerPreference( @NonNull String title, @NonNull String message, @Nullable DeviceSettingIcon icon, @Nullable List<ButtonInfo> buttonInfos, @Nullable ButtonInfo positiveButtonInfo, @Nullable ButtonInfo negativeButtonInfo, Bundle extras) { super(DeviceSettingType.DEVICE_SETTING_TYPE_BANNER); validate(title, message); mTitle = title; mMessage = message; mIcon = Objects.requireNonNullElseGet(icon, () -> DeviceSettingIcon.NO_ICON); if (buttonInfos == null) { mButtonInfos = ImmutableList.of(); } else { mButtonInfos = ImmutableList.copyOf(buttonInfos); } mPositiveButtonInfo = positiveButtonInfo; mNegativeButtonInfo = negativeButtonInfo; mExtras = extras; } Loading @@ -71,10 +66,16 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela String title = in.readString(); String message = in.readString(); DeviceSettingIcon icon = DeviceSettingIcon.readFromParcel(in); List<ButtonInfo> buttonInfos = new ArrayList<>(); in.readTypedList(buttonInfos, ButtonInfo.CREATOR); ButtonInfo positiveButtonInfo = in.readParcelable(ButtonInfo.class.getClassLoader()); ButtonInfo negativeButtonInfo = in.readParcelable(ButtonInfo.class.getClassLoader()); Bundle extras = in.readBundle(Bundle.class.getClassLoader()); return new BannerPreference(title, message, icon, buttonInfos, extras); return new BannerPreference( title, message, icon, positiveButtonInfo, negativeButtonInfo, extras); } public static final Creator<BannerPreference> CREATOR = Loading Loading @@ -104,7 +105,8 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela dest.writeString(mTitle); dest.writeString(mMessage); mIcon.writeToParcel(dest, flags); dest.writeTypedList(mButtonInfos, flags); dest.writeParcelable(mPositiveButtonInfo, flags); dest.writeParcelable(mNegativeButtonInfo, flags); dest.writeBundle(mExtras); } Loading @@ -113,8 +115,8 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela private String mTitle; private String mMessage; private DeviceSettingIcon mIcon; private final ImmutableList.Builder<ButtonInfo> mButtonInfos = new ImmutableList.Builder<>(); private ButtonInfo mPositiveButtonInfo; private ButtonInfo mNegativeButtonInfo; private Bundle mExtras = Bundle.EMPTY; /** Loading Loading @@ -154,14 +156,26 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela } /** * Adds a button in the preference. * Sets the positive button in the preference. * * @param buttonInfo The button to set. * @return Returns the Builder object. */ @NonNull public Builder setPositiveButtonInfo(@NonNull ButtonInfo buttonInfo) { mPositiveButtonInfo = buttonInfo; return this; } /** * Sets the negative button in the preference. * * @param buttonInfo The button to add. * @param buttonInfo The button to set. * @return Returns the Builder object. */ @NonNull public Builder addButtonInfo(@NonNull ButtonInfo buttonInfo) { mButtonInfos.add(buttonInfo); public Builder setNegativeButtonInfo(@NonNull ButtonInfo buttonInfo) { mNegativeButtonInfo = buttonInfo; return this; } Loading @@ -183,7 +197,13 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela */ @NonNull public BannerPreference build() { return new BannerPreference(mTitle, mMessage, mIcon, mButtonInfos.build(), mExtras); return new BannerPreference( mTitle, mMessage, mIcon, mPositiveButtonInfo, mNegativeButtonInfo, mExtras); } } Loading Loading @@ -217,13 +237,23 @@ public class BannerPreference extends DeviceSettingPreference implements Parcela } /** * Gets the button list in the preference. * Gets the positive button in the preference. * * @return the button list. * @return the positive button. */ @NonNull public List<ButtonInfo> getButtonInfos() { return mButtonInfos; @Nullable public ButtonInfo getPositiveButtonInfo() { return mPositiveButtonInfo; } /** * Gets the negative button in the preference. * * @return the negative button. */ @Nullable public ButtonInfo getNegativeButtonInfo() { return mNegativeButtonInfo; } /** Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/devicesettings/BannerPreferenceTest.java +22 −22 Original line number Diff line number Diff line Loading @@ -35,10 +35,10 @@ public final class BannerPreferenceTest { null, Bundle.EMPTY); private static final DeviceSettingAction ACTION = DeviceSettingAction.EMPTY_ACTION; private static final ButtonInfo Button_INFO_1 = new ButtonInfo.Builder().setLabel("label1").setAction(ACTION).build(); private static final ButtonInfo Button_INFO_2 = new ButtonInfo.Builder().setLabel("label2").setAction(ACTION).build(); private static final ButtonInfo POSITIVE_BUTTON = new ButtonInfo.Builder().setLabel("positive").setAction(ACTION).build(); private static final ButtonInfo NEGATIVE_BUTTON = new ButtonInfo.Builder().setLabel("negative").setAction(ACTION).build(); @Test public void build_withoutTitle_fail() { Loading @@ -49,8 +49,8 @@ public final class BannerPreferenceTest { new BannerPreference.Builder() .setMessage("message") .setIcon(ICON) .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .setExtras(buildBundle("key1", "value1")) .build(); }); Loading @@ -65,8 +65,8 @@ public final class BannerPreferenceTest { new BannerPreference.Builder() .setTitle("title") .setIcon(ICON) .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .setExtras(buildBundle("key1", "value1")) .build(); }); Loading @@ -78,8 +78,8 @@ public final class BannerPreferenceTest { new BannerPreference.Builder() .setTitle("title") .setMessage("message") .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .setExtras(buildBundle("key1", "value1")) .build(); } Loading @@ -102,8 +102,8 @@ public final class BannerPreferenceTest { .setTitle("title") .setMessage("message") .setIcon(ICON) .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .build(); } Loading @@ -114,8 +114,8 @@ public final class BannerPreferenceTest { .setTitle("title") .setMessage("message") .setIcon(ICON) .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .setExtras(buildBundle("key1", "value1")) .build(); } Loading @@ -127,16 +127,16 @@ public final class BannerPreferenceTest { .setTitle("title") .setMessage("message") .setIcon(ICON) .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .setExtras(buildBundle("key1", "value1")) .build(); assertThat(preference.getTitle()).isEqualTo("title"); assertThat(preference.getMessage()).isEqualTo("message"); assertThat(preference.getIcon()).isEqualTo(ICON); assertThat(preference.getButtonInfos().stream().map(ButtonInfo::getLabel).toList()) .containsExactly("label1", "label2"); assertThat(preference.getPositiveButtonInfo()).isEqualTo(POSITIVE_BUTTON); assertThat(preference.getNegativeButtonInfo()).isEqualTo(NEGATIVE_BUTTON); assertThat(preference.getExtras().getString("key1")).isEqualTo("value1"); } Loading @@ -147,8 +147,8 @@ public final class BannerPreferenceTest { .setTitle("title") .setMessage("message") .setIcon(ICON) .addButtonInfo(Button_INFO_1) .addButtonInfo(Button_INFO_2) .setPositiveButtonInfo(POSITIVE_BUTTON) .setNegativeButtonInfo(NEGATIVE_BUTTON) .setExtras(buildBundle("key1", "value1")) .build(); Loading @@ -157,8 +157,8 @@ public final class BannerPreferenceTest { assertThat(fromParcel.getTitle()).isEqualTo(preference.getTitle()); assertThat(fromParcel.getMessage()).isEqualTo(preference.getMessage()); assertThat(fromParcel.getIcon()).isEqualTo(preference.getIcon()); assertThat(fromParcel.getButtonInfos().stream().map(ButtonInfo::getLabel).toList()) .containsExactly("label1", "label2"); assertThat(preference.getPositiveButtonInfo()).isEqualTo(POSITIVE_BUTTON); assertThat(preference.getNegativeButtonInfo()).isEqualTo(NEGATIVE_BUTTON); assertThat(fromParcel.getExtras().getString("key1")) .isEqualTo(preference.getExtras().getString("key1")); } Loading