From fdb9343ef660fc424bb8c29b48d5c06dff0241c1 Mon Sep 17 00:00:00 2001 From: Daisuke Miyakawa Date: Fri, 12 Nov 2010 16:04:04 -0800 Subject: [PATCH] Stop showing software keyboard when appropriate This change assumes the structure inside layout file. We will change the structure inside the layout, so fundemental fix should come along the layout change. Also let software keyboard hide when appropriate. onBackButtonPressed() loses the focus and hiding the keyboard doesn't work fine after the call. Bug: 3192886 Change-Id: Ifd28d1f1fd0d6f72dc1c32c066dd793c6f9f36ab --- .../wifi/WifiConfigUiForSetupWizardXL.java | 31 ++++++++++++------- .../wifi/WifiSettingsForSetupWizardXL.java | 2 +- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java b/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java index 61e59d94b74..4de7ef5afb5 100644 --- a/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java +++ b/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java @@ -70,17 +70,26 @@ public class WifiConfigUiForSetupWizardXL implements WifiConfigUiBase, OnFocusCh mView = mInflater.inflate(R.layout.wifi_config_ui_for_setup_wizard, parent, true); mController = new WifiConfigController(this, mView, mAccessPoint, edit); - // Set Focus to password View. - final View viewToBeFocused = mView.findViewById(R.id.password); - if (viewToBeFocused != null && viewToBeFocused.getVisibility() == View.VISIBLE && - viewToBeFocused instanceof EditText) { - // After acquiring the focus, we show software keyboard. - viewToBeFocused.setOnFocusChangeListener(this); - final boolean requestFocusResult = viewToBeFocused.requestFocus(); - Log.i(TAG, String.format("Focus request %s.", - (requestFocusResult ? "successful" : "failed"))); - if (!requestFocusResult) { - viewToBeFocused.setOnFocusChangeListener(null); + // Assumes R.id.password is inside security_fields. + // TODO: confirm it is ok to assume R.id.password is the only EditText to be focused, and + // R.id.security_fields is the only parent for possible EditTexts. Possibly we need to + // check parentand detect visibility manually. + if (mView.findViewById(R.id.security_fields).getVisibility() == View.VISIBLE) { + // Set Focus to password View. + final View viewToBeFocused = mView.findViewById(R.id.password); + if (viewToBeFocused == null) { + Log.w(TAG, "password field to be focused not found."); + } else if (!(viewToBeFocused instanceof EditText)) { + Log.w(TAG, "password field is not EditText"); + } else { + // After acquiring the focus, we show software keyboard. + viewToBeFocused.setOnFocusChangeListener(this); + final boolean requestFocusResult = viewToBeFocused.requestFocus(); + Log.i(TAG, String.format("Focus request %s.", + (requestFocusResult ? "successful" : "failed"))); + if (!requestFocusResult) { + viewToBeFocused.setOnFocusChangeListener(null); + } } } } diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java index f5a779a67a2..468e5c26108 100644 --- a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java +++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java @@ -163,6 +163,7 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis @Override public void onClick(View view) { + hideSoftwareKeyboard(); if (view == mAddNetworkButton) { onAddNetworkButtonPressed(); } else if (view == mRefreshButton) { @@ -184,7 +185,6 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis } else if (view == mDetailButton) { mWifiSettings.showDialogForSelectedPreference(); } - hideSoftwareKeyboard(); } private void hideSoftwareKeyboard() {