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
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
@@ -123,7 +125,7 @@ public class EditTextPreference extends DialogPreference {
|
||||
|
||||
EditText editText = mEditText;
|
||||
editText.setText(getText());
|
||||
|
||||
|
||||
ViewParent oldParent = editText.getParent();
|
||||
if (oldParent != view) {
|
||||
if (oldParent != null) {
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user