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.
      */