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

Commit d5ae4013 authored by Ming-Shin Lu's avatar Ming-Shin Lu
Browse files

Fix showing keyboard without editor focused in some cases (2/2)

As CL[1] mentioned issue symptom, we also need to remove
STATE_ALWAYS_VISIBLE in EditTextPreference
and using new WindowInsets API to show soft-keyboard, to prevent the
keyboard may be shown without focusing editor case.

[1]: I37ae6e30d1de581ba15131c2a90396b3a522a4d6

Fix: 165910518
Test: atest CtsInputMethodTestCases
Test: manual as issue steps
1. Enter Dialer-> Menu -> Settings-> calling accounts -> Fixed Dialing Numbers
2. Tap change pin2 code, input old pin2 -> pressing ok button
3. Check if password keyboard shown

Change-Id: I763838fb7b887e09b46b1fb2360a515b77de8dd4
parent a806511d
Loading
Loading
Loading
Loading
+0 −23
Original line number Diff line number Diff line
@@ -36,8 +36,6 @@ import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;

/**
@@ -337,9 +335,6 @@ public abstract class DialogPreference extends Preference implements
        if (state != null) {
            dialog.onRestoreInstanceState(state);
        }
        if (needInputMethod()) {
            requestInputMethod(dialog);
        }
        dialog.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
@@ -379,24 +374,6 @@ public abstract class DialogPreference extends Preference implements
        }
    }

    /**
     * Returns whether the preference needs to display a soft input method when the dialog
     * is displayed. Default is false. Subclasses should override this method if they need
     * the soft input method brought up automatically.
     * @hide
     */
    protected boolean needInputMethod() {
        return false;
    }

    /**
     * Sets the required flags on the dialog window to enable input method window to show up.
     */
    private void requestInputMethod(Dialog dialog) {
        Window window = dialog.getWindow();
        window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }

    /**
     * Creates the content view for the dialog (if a custom content view is
     * required). By default, it inflates the dialog layout resource if it is
+10 −8
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
@@ -28,6 +29,7 @@ import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.WindowInsets;
import android.widget.EditText;

/**
@@ -133,6 +135,13 @@ public class EditTextPreference extends DialogPreference {
        }
    }

    @Override
    protected void showDialog(Bundle state) {
        super.showDialog(state);
        mEditText.requestFocus();
        mEditText.getWindowInsetsController().show(WindowInsets.Type.ime());
    }

    /**
     * Adds the EditText widget of this preference to the dialog's view.
     * 
@@ -183,13 +192,6 @@ public class EditTextPreference extends DialogPreference {
        return mEditText;
    }

    /** @hide */
    @Override
    protected boolean needInputMethod() {
        // We want the input method to show, if possible, when dialog is displayed
        return true;
    }

    @Override
    protected Parcelable onSaveInstanceState() {
        final Parcelable superState = super.onSaveInstanceState();