Fix TextInputLayout hint not working in extract mode
Test: included
BUG: 31621289
Change-Id: I47c2f2254cb54a6dd430ea754e623318b2acacb3
diff --git a/design/src/android/support/design/widget/TextInputEditText.java b/design/src/android/support/design/widget/TextInputEditText.java
index a141439..7235ec2 100644
--- a/design/src/android/support/design/widget/TextInputEditText.java
+++ b/design/src/android/support/design/widget/TextInputEditText.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.support.v7.widget.AppCompatEditText;
import android.util.AttributeSet;
+import android.view.View;
import android.view.ViewParent;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
@@ -49,9 +50,13 @@
if (ic != null && outAttrs.hintText == null) {
// If we don't have a hint and our parent is a TextInputLayout, use it's hint for the
// EditorInfo. This allows us to display a hint in 'extract mode'.
- final ViewParent parent = getParent();
- if (parent instanceof TextInputLayout) {
- outAttrs.hintText = ((TextInputLayout) parent).getHint();
+ ViewParent parent = getParent();
+ while (parent instanceof View) {
+ if (parent instanceof TextInputLayout) {
+ outAttrs.hintText = ((TextInputLayout) parent).getHint();
+ break;
+ }
+ parent = parent.getParent();
}
}
return ic;
diff --git a/design/tests/src/android/support/design/widget/TextInputLayoutTest.java b/design/tests/src/android/support/design/widget/TextInputLayoutTest.java
index 66ea00b..8182504 100755
--- a/design/tests/src/android/support/design/widget/TextInputLayoutTest.java
+++ b/design/tests/src/android/support/design/widget/TextInputLayoutTest.java
@@ -48,6 +48,7 @@
import android.support.test.espresso.ViewAssertion;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.View;
+import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import org.junit.Test;
@@ -217,6 +218,25 @@
onView(withId(R.id.textinput_edittext)).check(matches(not(isEnabled())));
}
+ @UiThreadTest
+ @Test
+ public void testExtractUiHintSet() {
+ final Activity activity = mActivityTestRule.getActivity();
+
+ // Set a hint on the TextInputLayout
+ final TextInputLayout layout = (TextInputLayout) activity.findViewById(R.id.textinput);
+ layout.setHint(INPUT_TEXT);
+
+ final EditText editText = (EditText) activity.findViewById(R.id.textinput_edittext);
+
+ // Now manually pass in a EditorInfo to the EditText and make sure it updates the
+ // hintText to our known value
+ final EditorInfo info = new EditorInfo();
+ editText.onCreateInputConnection(info);
+
+ assertEquals(INPUT_TEXT, info.hintText);
+ }
+
/**
* Regression test for b/31663756.
*/