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();
         }
     }