Move ImeAwareTextEdit to android.widget
Allows it to be used in more projects Bug: 154161590 Test: Manually opened each setting that was impacted Change-Id: Ife59074e5f8ffa76c2c81cca4022ca200bb59526
This commit is contained in:
@@ -22,7 +22,7 @@
|
|||||||
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<!-- Note that crypt_keeper_pin_field.xml also has ImeAwareEditText with the same ID. -->
|
<!-- Note that crypt_keeper_pin_field.xml also has ImeAwareEditText with the same ID. -->
|
||||||
<com.android.settings.widget.ImeAwareEditText android:id="@+id/passwordEntry"
|
<ImeAwareEditText android:id="@+id/passwordEntry"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_width="0dip"
|
android:layout_width="0dip"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<!-- Note that crypt_keeper_password_field.xml also has ImeAwareEditText with the same ID. -->
|
<!-- Note that crypt_keeper_password_field.xml also has ImeAwareEditText with the same ID. -->
|
||||||
<com.android.settings.widget.ImeAwareEditText android:id="@+id/passwordEntry"
|
<ImeAwareEditText android:id="@+id/passwordEntry"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_width="0dip"
|
android:layout_width="0dip"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
android:clipChildren="false"
|
android:clipChildren="false"
|
||||||
android:clipToPadding="false" />
|
android:clipToPadding="false" />
|
||||||
|
|
||||||
<com.android.settings.widget.ImeAwareEditText
|
<ImeAwareEditText
|
||||||
android:id="@+id/fingerprint_rename_field"
|
android:id="@+id/fingerprint_rename_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@@ -57,6 +57,7 @@ import android.view.inputmethod.InputMethodInfo;
|
|||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.view.inputmethod.InputMethodSubtype;
|
import android.view.inputmethod.InputMethodSubtype;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
import android.widget.ImeAwareEditText;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
@@ -64,7 +65,6 @@ import com.android.internal.widget.LockPatternUtils;
|
|||||||
import com.android.internal.widget.LockPatternView;
|
import com.android.internal.widget.LockPatternView;
|
||||||
import com.android.internal.widget.LockPatternView.Cell;
|
import com.android.internal.widget.LockPatternView.Cell;
|
||||||
import com.android.internal.widget.LockPatternView.DisplayMode;
|
import com.android.internal.widget.LockPatternView.DisplayMode;
|
||||||
import com.android.settings.widget.ImeAwareEditText;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@@ -36,6 +36,7 @@ import android.os.UserManager;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.ImeAwareEditText;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
@@ -55,7 +56,6 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
|||||||
import com.android.settings.password.ChooseLockGeneric;
|
import com.android.settings.password.ChooseLockGeneric;
|
||||||
import com.android.settings.password.ChooseLockSettingsHelper;
|
import com.android.settings.password.ChooseLockSettingsHelper;
|
||||||
import com.android.settings.utils.AnnotationSpan;
|
import com.android.settings.utils.AnnotationSpan;
|
||||||
import com.android.settings.widget.ImeAwareEditText;
|
|
||||||
import com.android.settingslib.HelpUtils;
|
import com.android.settingslib.HelpUtils;
|
||||||
import com.android.settingslib.RestrictedLockUtils;
|
import com.android.settingslib.RestrictedLockUtils;
|
||||||
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
||||||
|
@@ -62,6 +62,7 @@ import android.view.LayoutInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import android.widget.ImeAwareEditText;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.TextView.OnEditorActionListener;
|
import android.widget.TextView.OnEditorActionListener;
|
||||||
|
|
||||||
@@ -83,7 +84,6 @@ import com.android.settings.SetupWizardUtils;
|
|||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.core.InstrumentedFragment;
|
import com.android.settings.core.InstrumentedFragment;
|
||||||
import com.android.settings.notification.RedactionInterstitial;
|
import com.android.settings.notification.RedactionInterstitial;
|
||||||
import com.android.settings.widget.ImeAwareEditText;
|
|
||||||
|
|
||||||
import com.google.android.setupcompat.template.FooterBarMixin;
|
import com.google.android.setupcompat.template.FooterBarMixin;
|
||||||
import com.google.android.setupcompat.template.FooterButton;
|
import com.google.android.setupcompat.template.FooterButton;
|
||||||
|
@@ -39,6 +39,7 @@ import android.view.ViewGroup;
|
|||||||
import android.view.animation.AnimationUtils;
|
import android.view.animation.AnimationUtils;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
|
import android.widget.ImeAwareEditText;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.TextView.OnEditorActionListener;
|
import android.widget.TextView.OnEditorActionListener;
|
||||||
|
|
||||||
@@ -49,7 +50,6 @@ import com.android.internal.widget.LockPatternUtils;
|
|||||||
import com.android.internal.widget.LockscreenCredential;
|
import com.android.internal.widget.LockscreenCredential;
|
||||||
import com.android.internal.widget.TextViewInputDisabler;
|
import com.android.internal.widget.TextViewInputDisabler;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.widget.ImeAwareEditText;
|
|
||||||
import com.android.settingslib.animation.AppearAnimationUtils;
|
import com.android.settingslib.animation.AppearAnimationUtils;
|
||||||
import com.android.settingslib.animation.DisappearAnimationUtils;
|
import com.android.settingslib.animation.DisappearAnimationUtils;
|
||||||
|
|
||||||
|
@@ -1,92 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.android.settings.widget;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.AttributeSet;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.inputmethod.EditorInfo;
|
|
||||||
import android.view.inputmethod.InputConnection;
|
|
||||||
import android.view.inputmethod.InputMethodManager;
|
|
||||||
import android.widget.EditText;
|
|
||||||
|
|
||||||
public class ImeAwareEditText extends EditText {
|
|
||||||
private boolean mHasPendingShowSoftInputRequest;
|
|
||||||
final Runnable mRunShowSoftInputIfNecessary = () -> showSoftInputIfNecessary();
|
|
||||||
|
|
||||||
public ImeAwareEditText(Context context) {
|
|
||||||
super(context, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ImeAwareEditText(Context context, AttributeSet attrs) {
|
|
||||||
super(context, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ImeAwareEditText(Context context, AttributeSet attrs, int defStyleAttr) {
|
|
||||||
super(context, attrs, defStyleAttr);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ImeAwareEditText(Context context, AttributeSet attrs, int defStyleAttr,
|
|
||||||
int defStyleRes) {
|
|
||||||
super(context, attrs, defStyleAttr, defStyleRes);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is called back by the system when the system is about to establish a connection
|
|
||||||
* to the current input method.
|
|
||||||
*
|
|
||||||
* <p>This is a good and reliable signal to schedule a pending task to call
|
|
||||||
* {@link InputMethodManager#showSoftInput(View, int)}.</p>
|
|
||||||
*
|
|
||||||
* @param editorInfo context about the text input field.
|
|
||||||
* @return {@link InputConnection} to be passed to the input method.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public InputConnection onCreateInputConnection(EditorInfo editorInfo) {
|
|
||||||
final InputConnection ic = super.onCreateInputConnection(editorInfo);
|
|
||||||
if (mHasPendingShowSoftInputRequest) {
|
|
||||||
removeCallbacks(mRunShowSoftInputIfNecessary);
|
|
||||||
post(mRunShowSoftInputIfNecessary);
|
|
||||||
}
|
|
||||||
return ic;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showSoftInputIfNecessary() {
|
|
||||||
if (mHasPendingShowSoftInputRequest) {
|
|
||||||
final InputMethodManager imm =
|
|
||||||
getContext().getSystemService(InputMethodManager.class);
|
|
||||||
imm.showSoftInput(this, 0);
|
|
||||||
mHasPendingShowSoftInputRequest = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void scheduleShowSoftInput() {
|
|
||||||
final InputMethodManager imm = getContext().getSystemService(InputMethodManager.class);
|
|
||||||
if (imm.isActive(this)) {
|
|
||||||
// This means that ImeAwareEditText is already connected to the IME.
|
|
||||||
// InputMethodManager#showSoftInput() is guaranteed to pass client-side focus check.
|
|
||||||
mHasPendingShowSoftInputRequest = false;
|
|
||||||
removeCallbacks(mRunShowSoftInputIfNecessary);
|
|
||||||
imm.showSoftInput(this, 0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Otherwise, InputMethodManager#showSoftInput() should be deferred after
|
|
||||||
// onCreateInputConnection().
|
|
||||||
mHasPendingShowSoftInputRequest = true;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -21,6 +21,7 @@ import android.graphics.Rect;
|
|||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewParent;
|
import android.view.ViewParent;
|
||||||
|
import android.widget.ImeAwareEditText;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An EditText that, instead of scrolling to itself when focused, will request scrolling to its
|
* An EditText that, instead of scrolling to itself when focused, will request scrolling to its
|
||||||
|
Reference in New Issue
Block a user