| Index: chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorTextField.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorTextField.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorTextField.java
|
| index a3dab17cacb105e5db0365bda40a37e82d82599b..ab70d61ea9040db603316121e535c64e0626ccbf 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorTextField.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/EditorTextField.java
|
| @@ -34,7 +34,10 @@ public class EditorTextField extends FrameLayout implements EditorFieldView, Vie
|
| private EditorFieldModel mEditorFieldModel;
|
| private CompatibilityTextInputLayout mInputLayout;
|
| private AutoCompleteTextView mInput;
|
| + private View mIconsLayer;
|
| private ImageView mActionIcon;
|
| + private ImageView mValueIcon;
|
| + private int mValueIconId;
|
| private boolean mHasFocusedAtLeastOnce;
|
| @Nullable private PaymentRequestObserverForTest mObserverForTest;
|
|
|
| @@ -59,17 +62,35 @@ public class EditorTextField extends FrameLayout implements EditorFieldView, Vie
|
| mInput.setContentDescription(label);
|
| mInput.setOnEditorActionListener(actionlistener);
|
|
|
| - if (fieldModel.getIconAction() != null) {
|
| - mActionIcon = (ImageView) findViewById(R.id.action_icon);
|
| + mIconsLayer = findViewById(R.id.icons_layer);
|
| + mIconsLayer.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
|
| + @Override
|
| + public void onLayoutChange(View v, int left, int top, int right, int bottom,
|
| + int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
| + // Padding at the end of mInput to preserve space for mIconsLayer.
|
| + ApiCompatibilityUtils.setPaddingRelative(mInput,
|
| + ApiCompatibilityUtils.getPaddingStart(mInput), mInput.getPaddingTop(),
|
| + mIconsLayer.getWidth(), mInput.getPaddingBottom());
|
| + }
|
| + });
|
| +
|
| + if (fieldModel.getActionIconAction() != null) {
|
| + mActionIcon = (ImageView) mIconsLayer.findViewById(R.id.action_icon);
|
| mActionIcon.setImageDrawable(
|
| TintedDrawable.constructTintedDrawable(context.getResources(),
|
| fieldModel.getActionIconResourceId(), R.color.light_active_color));
|
| mActionIcon.setContentDescription(context.getResources().getString(
|
| - fieldModel.getActionDescriptionForAccessibility()));
|
| + fieldModel.getActionIconDescriptionForAccessibility()));
|
| mActionIcon.setOnClickListener(this);
|
| mActionIcon.setVisibility(VISIBLE);
|
| }
|
|
|
| + if (fieldModel.getValueIconGenerator() != null) {
|
| + mValueIcon = (ImageView) mIconsLayer.findViewById(R.id.value_icon);
|
| + mValueIcon.setBackgroundResource(R.drawable.payments_ui_logo_bg);
|
| + mValueIcon.setVisibility(VISIBLE);
|
| + }
|
| +
|
| // Validate the field when the user de-focuses it.
|
| mInput.setOnFocusChangeListener(new OnFocusChangeListener() {
|
| @Override
|
| @@ -89,6 +110,7 @@ public class EditorTextField extends FrameLayout implements EditorFieldView, Vie
|
| public void afterTextChanged(Editable s) {
|
| fieldModel.setValue(s.toString());
|
| updateDisplayedError(false);
|
| + updateFieldValueIcon(false);
|
| if (mObserverForTest != null) {
|
| mObserverForTest.onPaymentRequestEditorTextUpdate();
|
| }
|
| @@ -165,43 +187,34 @@ public class EditorTextField extends FrameLayout implements EditorFieldView, Vie
|
| }
|
|
|
| @Override
|
| - public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
| - if (mActionIcon != null) {
|
| - if (mActionIcon.getMeasuredWidth() == 0) {
|
| - mActionIcon.measure(widthMeasureSpec, heightMeasureSpec);
|
| - }
|
| -
|
| - // Padding at the end of mInput to preserve space for mActionIcon.
|
| - ApiCompatibilityUtils.setPaddingRelative(mInput,
|
| - ApiCompatibilityUtils.getPaddingStart(mInput), mInput.getPaddingTop(),
|
| - mActionIcon.getWidth(), mInput.getPaddingBottom());
|
| - }
|
| -
|
| - super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
| - }
|
| -
|
| - @Override
|
| public void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
| super.onLayout(changed, left, top, right, bottom);
|
|
|
| - if (changed && mActionIcon != null) {
|
| - // Align the bottom of mActionIcon to the bottom of mInput (mActionIcon overlaps
|
| + if (changed) {
|
| + // Align the bottom of mIconsLayer to the bottom of mInput (mIconsLayer overlaps
|
| // mInput).
|
| - // Note one: mActionIcon can not be put inside mInputLayout to display on top of
|
| + // Note one: mIconsLayer can not be put inside mInputLayout to display on top of
|
| // mInput since mInputLayout is LinearLayout in essential.
|
| - // Note two: mActionIcon and mInput can not be put in ViewGroup to display over each
|
| + // Note two: mIconsLayer and mInput can not be put in ViewGroup to display over each
|
| // other inside mInputLayout since mInputLayout must contain an instance of EditText
|
| // child view.
|
| // Note three: mInputLayout's bottom changes when displaying error.
|
| float offset = mInputLayout.getY() + mInput.getY() + (float) mInput.getHeight()
|
| - - (float) mActionIcon.getHeight() - mActionIcon.getTop();
|
| - mActionIcon.setTranslationY(offset);
|
| + - (float) mIconsLayer.getHeight() - mIconsLayer.getTop();
|
| + mIconsLayer.setTranslationY(offset);
|
| }
|
| }
|
|
|
| @Override
|
| + public void onWindowFocusChanged(boolean hasWindowFocus) {
|
| + super.onWindowFocusChanged(hasWindowFocus);
|
| +
|
| + if (hasWindowFocus) updateFieldValueIcon(true);
|
| + }
|
| +
|
| + @Override
|
| public void onClick(View v) {
|
| - mEditorFieldModel.getIconAction().run();
|
| + mEditorFieldModel.getActionIconAction().run();
|
| }
|
|
|
| /** @return The EditorFieldModel that the TextView represents. */
|
| @@ -236,4 +249,18 @@ public class EditorTextField extends FrameLayout implements EditorFieldView, Vie
|
| public void update() {
|
| mInput.setText(mEditorFieldModel.getValue());
|
| }
|
| +
|
| + private void updateFieldValueIcon(boolean force) {
|
| + if (mValueIcon == null) return;
|
| +
|
| + int iconId = mEditorFieldModel.getValueIconGenerator().getIconResourceId(mInput.getText());
|
| + if (mValueIconId == iconId && !force) return;
|
| + mValueIconId = iconId;
|
| + if (mValueIconId == 0) {
|
| + mValueIcon.setVisibility(GONE);
|
| + } else {
|
| + mValueIcon.setImageResource(mValueIconId);
|
| + mValueIcon.setVisibility(VISIBLE);
|
| + }
|
| + }
|
| }
|
|
|