Index: chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorFieldModel.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorFieldModel.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorFieldModel.java |
index 12c3693194de95d2870ab011ddf896a634288434..a7c6dd3d886065624109e383b8f07c7d4db37a96 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorFieldModel.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorFieldModel.java |
@@ -11,6 +11,7 @@ import org.chromium.base.Callback; |
import org.chromium.chrome.browser.preferences.autofill.AutofillProfileBridge.DropdownKeyValue; |
import java.util.ArrayList; |
+import java.util.HashSet; |
import java.util.List; |
import java.util.Set; |
@@ -34,6 +35,11 @@ public class EditorFieldModel { |
boolean isValid(@Nullable CharSequence value); |
} |
+ private static final int INPUT_TYPE_HINT_MIN_INCLUSIVE = 0; |
+ |
+ /** Text input with no special formatting rules, e.g., a city, a suburb, or a company name. */ |
+ private static final int INPUT_TYPE_HINT_NONE = 0; |
+ |
/** Indicates a phone field. */ |
public static final int INPUT_TYPE_HINT_PHONE = 1; |
@@ -52,35 +58,139 @@ public class EditorFieldModel { |
/** Indicates an alpha-numeric value, e.g., postal code or sorting code. */ |
public static final int INPUT_TYPE_HINT_ALPHA_NUMERIC = 6; |
+ /** Indicates a credit card input. */ |
+ public static final int INPUT_TYPE_HINT_CREDIT_CARD = 7; |
+ |
+ private static final int INPUT_TYPE_HINT_MAX_TEXT_INPUT_EXCLUSIVE = 8; |
+ |
/** Indicates a dropdown. */ |
- public static final int INPUT_TYPE_HINT_DROPDOWN = 7; |
+ public static final int INPUT_TYPE_HINT_DROPDOWN = 8; |
+ |
+ /** Indicates a list of icons. */ |
+ public static final int INPUT_TYPE_HINT_ICONS = 9; |
+ |
+ /** Indicates a checkbox. */ |
+ public static final int INPUT_TYPE_HINT_CHECKBOX = 10; |
+ |
+ /** |
+ * Indicates a label, e.g., for a server credit card. |
+ * |
+ * TOP_LABEL |
+ * MID_LABEL [ICON] |
+ * BOTTOM_LABEL |
+ * |
+ * Example: |
+ * |
+ * Visa***1234 |
+ * First Last [VISA] |
+ * Exp: 03/2021 |
+ */ |
+ public static final int INPUT_TYPE_HINT_LABEL = 11; |
+ |
+ private static final int INPUT_TYPE_HINT_MAX_EXCLUSIVE = 12; |
private final int mInputTypeHint; |
- @Nullable private final List<DropdownKeyValue> mDropdownKeyValues; |
- @Nullable private final List<CharSequence> mSuggestions; |
- @Nullable private final EditorFieldValidator mValidator; |
- @Nullable private final CharSequence mInvalidErrorMessage; |
- @Nullable private CharSequence mLabel; |
+ |
+ @Nullable private List<Integer> mIconResourceIds; |
+ @Nullable private List<Integer> mIconDescriptionsForAccessibility; |
+ @Nullable private List<DropdownKeyValue> mDropdownKeyValues; |
+ @Nullable private Set<String> mDropdownKeys; |
+ @Nullable private List<CharSequence> mSuggestions; |
+ @Nullable private EditorFieldValidator mValidator; |
@Nullable private CharSequence mRequiredErrorMessage; |
+ @Nullable private CharSequence mInvalidErrorMessage; |
@Nullable private CharSequence mErrorMessage; |
+ @Nullable private CharSequence mLabel; |
+ @Nullable private CharSequence mMidLabel; |
+ @Nullable private CharSequence mBottomLabel; |
@Nullable private CharSequence mValue; |
@Nullable private Callback<Pair<String, Runnable>> mDropdownCallback; |
+ private int mLabelIconResourceId; |
+ private boolean mIsChecked = false; |
private boolean mIsFullLine = true; |
/** |
+ * Constructs a label to show in the editor. This can be, for example, description of a server |
+ * credit card and its icon. Layout: |
+ * |
+ * topLabel |
+ * midLabel iconId |
+ * bottomLabel |
+ * |
+ * @param topLabel Top label. |
+ * @param midLabel Middle label. |
+ * @param bottomLabel Bottom label. |
+ * @param iconId Icon. |
+ */ |
+ public static EditorFieldModel createLabel( |
+ CharSequence topLabel, CharSequence midLabel, CharSequence bottomLabel, int iconId) { |
+ assert topLabel != null; |
+ assert midLabel != null; |
+ assert bottomLabel != null; |
+ EditorFieldModel result = new EditorFieldModel(INPUT_TYPE_HINT_LABEL); |
+ result.mLabel = topLabel; |
+ result.mMidLabel = midLabel; |
+ result.mBottomLabel = bottomLabel; |
+ result.mLabelIconResourceId = iconId; |
+ return result; |
+ } |
+ |
+ /** |
+ * Constructs a checkbox to show in the editor. It's unchecked by default. |
+ * |
+ * @param checkboxLabel The label for the checkbox. |
+ */ |
+ public static EditorFieldModel createCheckbox(CharSequence checkboxLabel) { |
+ assert checkboxLabel != null; |
+ EditorFieldModel result = new EditorFieldModel(INPUT_TYPE_HINT_CHECKBOX); |
+ result.mLabel = checkboxLabel; |
+ return result; |
+ } |
+ |
+ /** |
+ * Constructs a list of icons to show in the editor. This can be, for example, the list of |
+ * accepted credit cards. |
+ * |
+ * @param label The label for the icons. |
+ * @param iconIds The list of drawable resources to display, in this order. |
+ * @param descIds The list of string identifiers for descriptions of the icons. This is for |
+ * accessibility. |
+ */ |
+ public static EditorFieldModel createIconList(CharSequence label, List<Integer> iconIds, |
+ List<Integer> descIds) { |
+ assert label != null; |
+ assert iconIds != null; |
+ assert descIds != null; |
+ EditorFieldModel result = new EditorFieldModel(INPUT_TYPE_HINT_ICONS); |
+ result.mLabel = label; |
+ result.mIconResourceIds = iconIds; |
+ result.mIconDescriptionsForAccessibility = descIds; |
+ return result; |
+ } |
+ |
+ /** |
* Constructs a dropdown field model. |
* |
* @param label The human-readable label for user to understand the type of data |
* that should be entered into this field. |
* @param dropdownKeyValues The keyed values to display in the dropdown. |
*/ |
- public EditorFieldModel(CharSequence label, List<DropdownKeyValue> dropdownKeyValues) { |
- mInputTypeHint = INPUT_TYPE_HINT_DROPDOWN; |
- mDropdownKeyValues = dropdownKeyValues; |
- mSuggestions = null; |
- mValidator = null; |
- mInvalidErrorMessage = null; |
- mLabel = label; |
+ public static EditorFieldModel createDropdown( |
+ @Nullable CharSequence label, List<DropdownKeyValue> dropdownKeyValues) { |
+ assert dropdownKeyValues != null; |
+ EditorFieldModel result = new EditorFieldModel(INPUT_TYPE_HINT_DROPDOWN); |
+ result.mLabel = label; |
+ result.mDropdownKeyValues = dropdownKeyValues; |
+ result.mDropdownKeys = new HashSet<>(); |
+ for (int i = 0; i < result.mDropdownKeyValues.size(); i++) { |
+ result.mDropdownKeys.add(result.mDropdownKeyValues.get(i).getKey()); |
+ } |
+ return result; |
+ } |
+ |
+ /** Constructs a text input field model without any special text formatting hints. */ |
+ public static EditorFieldModel createTextInput() { |
+ return new EditorFieldModel(INPUT_TYPE_HINT_NONE); |
} |
/** |
@@ -88,14 +198,10 @@ public class EditorFieldModel { |
* |
* @param inputTypeHint The type of input. For example, INPUT_TYPE_HINT_PHONE. |
*/ |
- public EditorFieldModel(int inputTypeHint) { |
- assert inputTypeHint != INPUT_TYPE_HINT_DROPDOWN; |
- mInputTypeHint = inputTypeHint; |
- mDropdownKeyValues = null; |
- mSuggestions = null; |
- mValidator = null; |
- mInvalidErrorMessage = null; |
- mLabel = null; |
+ public static EditorFieldModel createTextInput(int inputTypeHint) { |
+ assert inputTypeHint >= INPUT_TYPE_HINT_MIN_INCLUSIVE; |
+ assert inputTypeHint < INPUT_TYPE_HINT_MAX_TEXT_INPUT_EXCLUSIVE; |
+ return new EditorFieldModel(inputTypeHint); |
} |
/** |
@@ -104,7 +210,7 @@ public class EditorFieldModel { |
* @param inputTypeHint The type of input. For example, INPUT_TYPE_HINT_PHONE. |
* @param label The human-readable label for user to understand the type of data |
* that should be entered into this field. |
- * @param suggestions Optionally empty set of values to suggest to the user. |
+ * @param suggestions Optional set of values to suggest to the user. |
* @param validator Optional validator for the values in this field. |
* @param requiredErrorMessage The optional error message that indicates to the user that they |
* cannot leave this field empty. |
@@ -112,20 +218,27 @@ public class EditorFieldModel { |
* value they have entered is not valid. |
* @param value Optional initial value of this field. |
*/ |
- public EditorFieldModel(int inputTypeHint, CharSequence label, |
- Set<CharSequence> suggestions, @Nullable EditorFieldValidator validator, |
+ public static EditorFieldModel createTextInput(int inputTypeHint, CharSequence label, |
+ @Nullable Set<CharSequence> suggestions, @Nullable EditorFieldValidator validator, |
@Nullable CharSequence requiredErrorMessage, @Nullable CharSequence invalidErrorMessage, |
@Nullable CharSequence value) { |
- assert inputTypeHint != INPUT_TYPE_HINT_DROPDOWN; |
- assert suggestions != null; |
+ assert inputTypeHint >= INPUT_TYPE_HINT_MIN_INCLUSIVE; |
+ assert inputTypeHint < INPUT_TYPE_HINT_MAX_TEXT_INPUT_EXCLUSIVE; |
+ assert label != null; |
+ EditorFieldModel result = new EditorFieldModel(inputTypeHint); |
+ result.mSuggestions = suggestions == null ? null : new ArrayList<CharSequence>(suggestions); |
+ result.mValidator = validator; |
+ result.mInvalidErrorMessage = invalidErrorMessage; |
+ result.mRequiredErrorMessage = requiredErrorMessage; |
+ result.mLabel = label; |
+ result.mValue = value; |
+ return result; |
+ } |
+ |
+ private EditorFieldModel(int inputTypeHint) { |
+ assert inputTypeHint >= INPUT_TYPE_HINT_MIN_INCLUSIVE; |
+ assert inputTypeHint < INPUT_TYPE_HINT_MAX_EXCLUSIVE; |
mInputTypeHint = inputTypeHint; |
- mDropdownKeyValues = null; |
- mSuggestions = new ArrayList<CharSequence>(suggestions); |
- mValidator = validator; |
- mInvalidErrorMessage = invalidErrorMessage; |
- mLabel = label; |
- mRequiredErrorMessage = requiredErrorMessage; |
- mValue = value; |
} |
/** @return The type of input, for example, INPUT_TYPE_HINT_PHONE. */ |
@@ -133,17 +246,73 @@ public class EditorFieldModel { |
return mInputTypeHint; |
} |
- /** @return The spinner key values. */ |
+ /** @return Whether the checkbox is checked. */ |
+ public boolean isChecked() { |
+ assert mInputTypeHint == INPUT_TYPE_HINT_CHECKBOX; |
+ return mIsChecked; |
+ } |
+ |
+ /** Sets the checkbox state. */ |
+ public void setIsChecked(boolean isChecked) { |
+ assert mInputTypeHint == INPUT_TYPE_HINT_CHECKBOX; |
+ mIsChecked = isChecked; |
+ } |
+ |
+ /** @return The list of icons resource identifiers to display. */ |
+ public List<Integer> getIconResourceIds() { |
+ assert mInputTypeHint == INPUT_TYPE_HINT_ICONS; |
+ return mIconResourceIds; |
+ } |
+ |
+ /** @return The list of string identifiers of the descriptions of the displayed icons. This is |
+ * for the screen reader. */ |
+ public List<Integer> getIconDescriptionsForAccessibility() { |
+ assert mInputTypeHint == INPUT_TYPE_HINT_ICONS; |
+ return mIconDescriptionsForAccessibility; |
+ } |
+ |
+ /** @return The dropdown key-value pairs. */ |
public List<DropdownKeyValue> getDropdownKeyValues() { |
assert mInputTypeHint == INPUT_TYPE_HINT_DROPDOWN; |
return mDropdownKeyValues; |
} |
+ /** @return The dropdown keys. */ |
+ public Set<String> getDropdownKeys() { |
+ assert mInputTypeHint == INPUT_TYPE_HINT_DROPDOWN; |
+ return mDropdownKeys; |
+ } |
+ |
+ /** Updates the dropdown key values. */ |
+ public void setDropdownKeyValues(List<DropdownKeyValue> dropdownKeyValues) { |
+ assert mInputTypeHint == INPUT_TYPE_HINT_DROPDOWN; |
+ mDropdownKeyValues = dropdownKeyValues; |
+ } |
+ |
+ |
/** @return The human-readable label for this field. */ |
public CharSequence getLabel() { |
return mLabel; |
} |
+ /** @return The human-readable mid-level label for this field. */ |
+ public CharSequence getMidLabel() { |
+ assert mInputTypeHint == INPUT_TYPE_HINT_LABEL; |
+ return mMidLabel; |
+ } |
+ |
+ /** @return The human-readable lower-level label for this field. */ |
+ public CharSequence getBottomLabel() { |
+ assert mInputTypeHint == INPUT_TYPE_HINT_LABEL; |
+ return mBottomLabel; |
+ } |
+ |
+ /** @return The icon to show next to the label. */ |
+ public int getLabelIconResourceId() { |
+ assert mInputTypeHint == INPUT_TYPE_HINT_LABEL; |
+ return mLabelIconResourceId; |
+ } |
+ |
/** |
* Updates the label. |
* |