diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index 950b6458119..68ddb3ca640 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -35,6 +35,7 @@ import android.net.wifi.WifiEnterpriseConfig.Eap; import android.net.wifi.WifiEnterpriseConfig.Phase2; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; +import android.os.IBinder; import android.os.UserManager; import android.security.Credentials; import android.security.KeyStore; @@ -48,6 +49,7 @@ import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; @@ -60,8 +62,6 @@ import android.widget.ScrollView; import android.widget.Spinner; import android.widget.TextView; -import androidx.annotation.VisibleForTesting; - import com.android.settings.ProxySelector; import com.android.settings.R; import com.android.settings.wifi.details.WifiPrivacyPreferenceController; @@ -76,6 +76,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; +import androidx.annotation.VisibleForTesting; + /** * The class for allowing UIs like {@link WifiDialog} and {@link WifiConfigUiBase} to * share the logic for controlling buttons, text fields, etc. @@ -1490,6 +1492,9 @@ public class WifiConfigController implements TextWatcher, if (isChecked) { toggleVisibility = View.VISIBLE; stringID = R.string.wifi_advanced_toggle_description_expanded; + + // Hide the SoftKeyboard temporary to let user can see most of the expanded items. + hideSoftKeyboard(mView.getWindowToken()); } else { toggleVisibility = View.GONE; stringID = R.string.wifi_advanced_toggle_description_collapsed; @@ -1688,4 +1693,10 @@ public class WifiConfigController implements TextWatcher, } return accessibleEntries; } + + private void hideSoftKeyboard(IBinder windowToken) { + final InputMethodManager inputMethodManager = mContext.getSystemService( + InputMethodManager.class); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0 /* flags */); + } } diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java index 9da63ba3220..8ce300bcf24 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java @@ -35,7 +35,9 @@ import android.security.KeyStore; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; +import android.widget.CheckBox; import android.widget.Spinner; import android.widget.TextView; @@ -51,7 +53,9 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import org.robolectric.Shadows; import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowInputMethodManager; @RunWith(RobolectricTestRunner.class) @Config(shadows = ShadowConnectivityManager.class) @@ -509,4 +513,17 @@ public class WifiConfigControllerTest { final int selectedItemPosition = eapMethodSpinner.getSelectedItemPosition(); assertThat(eapMethodSpinner.getSelectedItem().toString()).isEqualTo("TLS"); } + + @Test + public void checkImeStatus_whenAdvancedToggled_shouldBeHide() { + final InputMethodManager inputMethodManager = mContext + .getSystemService(InputMethodManager.class); + final ShadowInputMethodManager shadowImm = Shadows.shadowOf(inputMethodManager); + final CheckBox advButton = mView.findViewById(R.id.wifi_advanced_togglebox); + + inputMethodManager.showSoftInput(null /* view */, 0 /* flags */); + advButton.performClick(); + + assertThat(shadowImm.isSoftInputVisible()).isFalse(); + } }