Merge "Fixes for TextInputLayout" into mnc-ub-dev
diff --git a/design/res/values/strings.xml b/design/res/values/strings.xml
index 5db715f..416d289 100644
--- a/design/res/values/strings.xml
+++ b/design/res/values/strings.xml
@@ -18,6 +18,6 @@
<!-- The class name to the ScrollingChildBehavior required for AppBarLayout -->
<string name="appbar_scrolling_view_behavior" translatable="false">android.support.design.widget.AppBarLayout$ScrollingViewBehavior</string>
<!-- The text pattern for the character counter -->
- <string name="character_counter_pattern" translatable="false">%1$d/%2$d</string>
+ <string name="character_counter_pattern" translatable="false">%1$d / %2$d</string>
</resources>
diff --git a/design/res/values/styles.xml b/design/res/values/styles.xml
index 7ccabbe..24a9aa9 100644
--- a/design/res/values/styles.xml
+++ b/design/res/values/styles.xml
@@ -74,9 +74,7 @@
<item name="android:textColor">@color/design_textinput_error_color</item>
</style>
- <style name="TextAppearance.Design.Counter" parent="TextAppearance.AppCompat.Caption">
- <item name="android:textColor">?attr/colorControlActivated</item>
- </style>
+ <style name="TextAppearance.Design.Counter" parent="TextAppearance.AppCompat.Caption"/>
<style name="TextAppearance.Design.Counter.Overflow" parent="TextAppearance.AppCompat.Caption">
<item name="android:textColor">@color/design_textinput_error_color</item>
diff --git a/design/src/android/support/design/widget/TextInputLayout.java b/design/src/android/support/design/widget/TextInputLayout.java
index 325f116..7d7e37a 100644
--- a/design/src/android/support/design/widget/TextInputLayout.java
+++ b/design/src/android/support/design/widget/TextInputLayout.java
@@ -32,6 +32,7 @@
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPropertyAnimatorListenerAdapter;
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
+import android.support.v4.widget.Space;
import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.text.Editable;
import android.text.TextUtils;
@@ -250,16 +251,22 @@
}
private void updateLabelVisibility(boolean animate) {
- boolean hasText = mEditText != null && !TextUtils.isEmpty(mEditText.getText());
- boolean isFocused = arrayContains(getDrawableState(), android.R.attr.state_focused);
- boolean isErrorShowing = !TextUtils.isEmpty(getError());
+ final boolean hasText = mEditText != null && !TextUtils.isEmpty(mEditText.getText());
+ final boolean isFocused = arrayContains(getDrawableState(), android.R.attr.state_focused);
+ final boolean isErrorShowing = !TextUtils.isEmpty(getError());
-
- if (mDefaultTextColor != null && mFocusedTextColor != null) {
+ if (mDefaultTextColor != null) {
mCollapsingTextHelper.setExpandedTextColor(mDefaultTextColor.getDefaultColor());
- mCollapsingTextHelper.setCollapsedTextColor(isFocused
- ? mFocusedTextColor.getDefaultColor()
- : mDefaultTextColor.getDefaultColor());
+ }
+
+ if (mCounterOverflowed && mCounterView != null) {
+ mCollapsingTextHelper.setCollapsedTextColor(mCounterView.getCurrentTextColor());
+ } else if (isErrorShowing && mErrorView != null) {
+ mCollapsingTextHelper.setCollapsedTextColor(mErrorView.getCurrentTextColor());
+ } else if (isFocused && mFocusedTextColor != null) {
+ mCollapsingTextHelper.setCollapsedTextColor(mFocusedTextColor.getDefaultColor());
+ } else if (mDefaultTextColor != null) {
+ mCollapsingTextHelper.setCollapsedTextColor(mDefaultTextColor.getDefaultColor());
}
if (hasText || isFocused || isErrorShowing) {
@@ -320,16 +327,24 @@
}
}
- private void addIndicator(TextView indicator, int index, LinearLayout.LayoutParams params) {
+ private void addIndicator(TextView indicator, int index) {
if (mIndicatorArea == null) {
mIndicatorArea = new LinearLayout(getContext());
mIndicatorArea.setOrientation(LinearLayout.HORIZONTAL);
- addView(mIndicatorArea);
+ addView(mIndicatorArea, LinearLayout.LayoutParams.MATCH_PARENT,
+ LinearLayout.LayoutParams.WRAP_CONTENT);
+
+ // Add a flexible spacer in the middle so that the left/right views stay pinned
+ final Space spacer = new Space(getContext());
+ final LinearLayout.LayoutParams spacerLp = new LinearLayout.LayoutParams(0, 0, 1f);
+ mIndicatorArea.addView(spacer, spacerLp);
+
if (mEditText != null) {
adjustIndicatorPadding();
}
}
- mIndicatorArea.addView(indicator, index, params);
+ mIndicatorArea.setVisibility(View.VISIBLE);
+ mIndicatorArea.addView(indicator, index);
}
private void adjustIndicatorPadding() {
@@ -339,9 +354,11 @@
}
private void removeIndicator(TextView indicator) {
- mIndicatorArea.removeView(indicator);
- if (mIndicatorArea.getChildCount() == 0) {
- removeView(mIndicatorArea);
+ if (mIndicatorArea != null) {
+ mIndicatorArea.removeView(indicator);
+ if (mIndicatorArea.getChildCount() == 0) {
+ mIndicatorArea.setVisibility(View.GONE);
+ }
}
}
@@ -364,10 +381,7 @@
mErrorView.setVisibility(INVISIBLE);
ViewCompat.setAccessibilityLiveRegion(mErrorView,
ViewCompat.ACCESSIBILITY_LIVE_REGION_POLITE);
- LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
- 0, LinearLayout.LayoutParams.WRAP_CONTENT);
- params.weight = 1.f;
- addIndicator(mErrorView, 0, params);
+ addIndicator(mErrorView, 0);
} else {
mErrorShown = false;
updateEditTextBackground();
@@ -462,14 +476,9 @@
mCounterView = new TextView(getContext());
mCounterView.setMaxLines(1);
mCounterView.setTextAppearance(getContext(), mCounterTextAppearance);
- LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.WRAP_CONTENT,
- LinearLayout.LayoutParams.WRAP_CONTENT);
- params.gravity = (params.gravity & Gravity.VERTICAL_GRAVITY_MASK) |
- GravityCompat.END;
ViewCompat.setAccessibilityLiveRegion(mCounterView,
ViewCompat.ACCESSIBILITY_LIVE_REGION_POLITE);
- addIndicator(mCounterView, -1, params);
+ addIndicator(mCounterView, -1);
if (mEditText == null) {
updateCounter(0);
} else {
@@ -538,6 +547,7 @@
length, mCounterMaxLength));
}
if (mEditText != null && wasCounterOverflowed != mCounterOverflowed) {
+ updateLabelVisibility(false);
updateEditTextBackground();
}
}