Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2894959a authored by Daisuke Miyakawa's avatar Daisuke Miyakawa Committed by Android (Google) Code Review
Browse files

Merge "Delay showSoftInput() call."

parents b493153b 40124c30
Loading
Loading
Loading
Loading
+41 −17
Original line number Original line Diff line number Diff line
@@ -20,9 +20,11 @@ import com.android.settings.R;


import android.app.Activity;
import android.app.Activity;
import android.content.Context;
import android.content.Context;
import android.os.Handler;
import android.util.Log;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.Button;
@@ -32,7 +34,7 @@ import android.widget.EditText;
 * Shows simplified UI for configuring a wifi network. Used only in SetupWizard for XLarge
 * Shows simplified UI for configuring a wifi network. Used only in SetupWizard for XLarge
 * screen.
 * screen.
 */
 */
public class WifiConfigUiForSetupWizardXL implements WifiConfigUiBase {
public class WifiConfigUiForSetupWizardXL implements WifiConfigUiBase, OnFocusChangeListener {
    private static final String TAG = "SetupWizard";
    private static final String TAG = "SetupWizard";


    private Button mConnectButton;
    private Button mConnectButton;
@@ -44,6 +46,7 @@ public class WifiConfigUiForSetupWizardXL implements WifiConfigUiBase {
    private WifiConfigController mController;
    private WifiConfigController mController;
    private AccessPoint mAccessPoint;
    private AccessPoint mAccessPoint;
    private boolean mEdit;
    private boolean mEdit;
    private Handler mHandler = new Handler();


    private LayoutInflater mInflater;
    private LayoutInflater mInflater;


@@ -66,25 +69,18 @@ public class WifiConfigUiForSetupWizardXL implements WifiConfigUiBase {


        mView = mInflater.inflate(R.layout.wifi_config_ui_for_setup_wizard, parent, false);
        mView = mInflater.inflate(R.layout.wifi_config_ui_for_setup_wizard, parent, false);
        mController = new WifiConfigController(this, mView, mAccessPoint, edit);
        mController = new WifiConfigController(this, mView, mAccessPoint, edit);
        trySetFocusAndLaunchSoftInput(R.id.password);
    }


    private void trySetFocusAndLaunchSoftInput(int id) {
        // Set Focus to password View.
        final View viewToBeFocused = mView.findViewById(id);
        final View viewToBeFocused = mView.findViewById(R.id.password);
        if (viewToBeFocused != null && viewToBeFocused.getVisibility() == View.VISIBLE) {
        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();
            final boolean requestFocusResult = viewToBeFocused.requestFocus();
            Log.i(TAG, String.format("Focus request to %x %s.", id,
            Log.i(TAG, String.format("Focus request  %s.",
                    (requestFocusResult ? "successful" : "failed")));
                    (requestFocusResult ? "successful" : "failed")));
            if (requestFocusResult && viewToBeFocused instanceof EditText) {
            if (!requestFocusResult) {
                Log.i(TAG, String.format(
                viewToBeFocused.setOnFocusChangeListener(null);
                        "Focused View (%x) is EditText. Try to show software keyboard", id));
                final InputMethodManager inputMethodManager = (InputMethodManager)
                        mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
                final boolean showSoftInputResult =
                        inputMethodManager.showSoftInput(viewToBeFocused, 0);
                if (!showSoftInputResult) {
                    Log.w(TAG, "Failed to show software keyboard ");
                }
            }
            }
        }
        }
    }
    }
@@ -164,4 +160,32 @@ public class WifiConfigUiForSetupWizardXL implements WifiConfigUiBase {
    public void setTitle(CharSequence title) {
    public void setTitle(CharSequence title) {
        Log.d(TAG, "Ignoring setTitle");
        Log.d(TAG, "Ignoring setTitle");
    }
    }

    private static class FocusRunnable implements Runnable {
        final InputMethodManager mInputMethodManager;
        final View mViewToBeFocused;
        public FocusRunnable(Context context, View viewToBeFocused) {
            mInputMethodManager = (InputMethodManager)
                    context.getSystemService(Context.INPUT_METHOD_SERVICE);
            mViewToBeFocused = viewToBeFocused;
        }

        @Override
        public void run() {
            mInputMethodManager.focusIn(mViewToBeFocused);
            final boolean showSoftInputResult =
                    mInputMethodManager.showSoftInput(mViewToBeFocused, 0);
            if (!showSoftInputResult) {
                Log.w(TAG, "Failed to show software keyboard ");
            }
        }
    }

    @Override
    public void onFocusChange(View view, boolean hasFocus) {
        view.setOnFocusChangeListener(null);
        if (hasFocus) {
            mHandler.post(new FocusRunnable(mActivity, view));
        }
    }
}
}
 No newline at end of file
+2 −1
Original line number Original line Diff line number Diff line
@@ -188,6 +188,7 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis
    }
    }


    private void hideSoftwareKeyboard() {
    private void hideSoftwareKeyboard() {
        Log.i(TAG, "Hiding software keyboard.");
        final View focusedView = getCurrentFocus();
        final View focusedView = getCurrentFocus();
        if (focusedView != null) {
        if (focusedView != null) {
            mInputMethodManager.hideSoftInputFromWindow(focusedView.getWindowToken(), 0);
            mInputMethodManager.hideSoftInputFromWindow(focusedView.getWindowToken(), 0);