DO NOT MERGE Revert "Fix showing keyboard without editor focused in some case..." am: 12ed7d3ef0
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12660210 Change-Id: Ic2782276d3895a28fb757273ec953bcd0ccc0b13
This commit is contained in:
committed by
Automerger Merge Worker
commit
e93e41c44a
@@ -224,8 +224,6 @@ public final class InputMethodDebug {
|
||||
return "HIDE_DOCKED_STACK_ATTACHED";
|
||||
case SoftInputShowHideReason.HIDE_RECENTS_ANIMATION:
|
||||
return "HIDE_RECENTS_ANIMATION";
|
||||
case SoftInputShowHideReason.HIDE_SAME_WINDOW_FOCUSED_WITHOUT_EDITOR:
|
||||
return "HIDE_SAME_WINDOW_FOCUSED_WITHOUT_EDITOR";
|
||||
default:
|
||||
return "Unknown=" + reason;
|
||||
}
|
||||
|
||||
@@ -47,8 +47,7 @@ import java.lang.annotation.Retention;
|
||||
SoftInputShowHideReason.HIDE_POWER_BUTTON_GO_HOME,
|
||||
SoftInputShowHideReason.HIDE_DOCKED_STACK_ATTACHED,
|
||||
SoftInputShowHideReason.HIDE_RECENTS_ANIMATION,
|
||||
SoftInputShowHideReason.HIDE_BUBBLES,
|
||||
SoftInputShowHideReason.HIDE_SAME_WINDOW_FOCUSED_WITHOUT_EDITOR})
|
||||
SoftInputShowHideReason.HIDE_BUBBLES})
|
||||
public @interface SoftInputShowHideReason {
|
||||
/** Show soft input by {@link android.view.inputmethod.InputMethodManager#showSoftInput}. */
|
||||
int SHOW_SOFT_INPUT = 0;
|
||||
@@ -148,17 +147,4 @@ public @interface SoftInputShowHideReason {
|
||||
* switching, or collapsing Bubbles.
|
||||
*/
|
||||
int HIDE_BUBBLES = 19;
|
||||
|
||||
/**
|
||||
* Hide soft input when focusing the same window (e.g. screen turned-off and turn-on) which no
|
||||
* valid focused editor.
|
||||
*
|
||||
* Note: From Android R, the window focus change callback is processed by InputDispatcher,
|
||||
* some focus behavior changes (e.g. There are an activity with a dialog window, after
|
||||
* screen turned-off and turned-on, before Android R the window focus sequence would be
|
||||
* the activity first and then the dialog focused, however, in R the focus sequence would be
|
||||
* only the dialog focused as it's the latest window with input focus) makes we need to hide
|
||||
* soft-input when the same window focused again to align with the same behavior prior to R.
|
||||
*/
|
||||
int HIDE_SAME_WINDOW_FOCUSED_WITHOUT_EDITOR = 20;
|
||||
}
|
||||
|
||||
@@ -71,7 +71,6 @@ import android.inputmethodservice.InputMethodService;
|
||||
import android.media.AudioManagerInternal;
|
||||
import android.net.Uri;
|
||||
import android.os.Binder;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Debug;
|
||||
import android.os.Handler;
|
||||
@@ -3273,9 +3272,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
|
||||
boolean hideCurrentInputLocked(IBinder windowToken, int flags, ResultReceiver resultReceiver,
|
||||
@SoftInputShowHideReason int reason) {
|
||||
if (mCurClient == null || mCurClient.curSession == null) {
|
||||
return false;
|
||||
}
|
||||
if ((flags&InputMethodManager.HIDE_IMPLICIT_ONLY) != 0
|
||||
&& (mShowExplicitlyRequested || mShowForced)) {
|
||||
if (DEBUG) Slog.v(TAG, "Not hiding: explicit show not cancelled by non-explicit hide");
|
||||
@@ -3460,9 +3456,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
// pre-rendering not supported on low-ram devices.
|
||||
cs.shouldPreRenderIme = DebugFlags.FLAG_PRE_RENDER_IME_VIEWS.value() && !mIsLowRam;
|
||||
|
||||
final boolean sameWindowFocused = mCurFocusedWindow == windowToken;
|
||||
final boolean isTextEditor = (startInputFlags & StartInputFlags.IS_TEXT_EDITOR) != 0;
|
||||
if (sameWindowFocused && isTextEditor) {
|
||||
if (mCurFocusedWindow == windowToken) {
|
||||
if (DEBUG) {
|
||||
Slog.w(TAG, "Window already focused, ignoring focus gain of: " + client
|
||||
+ " attribute=" + attribute + ", token = " + windowToken
|
||||
@@ -3477,7 +3471,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
InputBindResult.ResultCode.SUCCESS_REPORT_WINDOW_FOCUS_ONLY,
|
||||
null, null, null, -1, null);
|
||||
}
|
||||
|
||||
mCurFocusedWindow = windowToken;
|
||||
mCurFocusedWindowSoftInputMode = softInputMode;
|
||||
mCurFocusedWindowClient = cs;
|
||||
@@ -3495,6 +3488,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
== LayoutParams.SOFT_INPUT_ADJUST_RESIZE
|
||||
|| mRes.getConfiguration().isLayoutSizeAtLeast(
|
||||
Configuration.SCREENLAYOUT_SIZE_LARGE);
|
||||
final boolean isTextEditor = (startInputFlags & StartInputFlags.IS_TEXT_EDITOR) != 0;
|
||||
|
||||
// We want to start input before showing the IME, but after closing
|
||||
// it. We want to do this after closing it to help the IME disappear
|
||||
@@ -3554,11 +3548,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
}
|
||||
break;
|
||||
case LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN:
|
||||
if (!sameWindowFocused) {
|
||||
if (DEBUG) Slog.v(TAG, "Window asks to hide input");
|
||||
hideCurrentInputLocked(mCurFocusedWindow, 0, null,
|
||||
SoftInputShowHideReason.HIDE_ALWAYS_HIDDEN_STATE);
|
||||
}
|
||||
if (DEBUG) Slog.v(TAG, "Window asks to hide input");
|
||||
hideCurrentInputLocked(mCurFocusedWindow, 0, null,
|
||||
SoftInputShowHideReason.HIDE_ALWAYS_HIDDEN_STATE);
|
||||
break;
|
||||
case LayoutParams.SOFT_INPUT_STATE_VISIBLE:
|
||||
if ((softInputMode & LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION) != 0) {
|
||||
@@ -3583,15 +3575,13 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
if (DEBUG) Slog.v(TAG, "Window asks to always show input");
|
||||
if (InputMethodUtils.isSoftInputModeStateVisibleAllowed(
|
||||
unverifiedTargetSdkVersion, startInputFlags)) {
|
||||
if (!sameWindowFocused) {
|
||||
if (attribute != null) {
|
||||
res = startInputUncheckedLocked(cs, inputContext, missingMethods,
|
||||
attribute, startInputFlags, startInputReason);
|
||||
didStart = true;
|
||||
}
|
||||
showCurrentInputLocked(windowToken, InputMethodManager.SHOW_IMPLICIT, null,
|
||||
SoftInputShowHideReason.SHOW_STATE_ALWAYS_VISIBLE);
|
||||
if (attribute != null) {
|
||||
res = startInputUncheckedLocked(cs, inputContext, missingMethods,
|
||||
attribute, startInputFlags, startInputReason);
|
||||
didStart = true;
|
||||
}
|
||||
showCurrentInputLocked(windowToken, InputMethodManager.SHOW_IMPLICIT, null,
|
||||
SoftInputShowHideReason.SHOW_STATE_ALWAYS_VISIBLE);
|
||||
} else {
|
||||
Slog.e(TAG, "SOFT_INPUT_STATE_ALWAYS_VISIBLE is ignored because"
|
||||
+ " there is no focused view that also returns true from"
|
||||
@@ -3602,13 +3592,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
|
||||
if (!didStart) {
|
||||
if (attribute != null) {
|
||||
if (sameWindowFocused) {
|
||||
hideCurrentInputLocked(mCurFocusedWindow, 0, null,
|
||||
SoftInputShowHideReason.HIDE_SAME_WINDOW_FOCUSED_WITHOUT_EDITOR);
|
||||
res = new InputBindResult(
|
||||
InputBindResult.ResultCode.SUCCESS_REPORT_WINDOW_FOCUS_ONLY,
|
||||
null, null, null, -1, null);
|
||||
} else if (!DebugFlags.FLAG_OPTIMIZE_START_INPUT.value()
|
||||
if (!DebugFlags.FLAG_OPTIMIZE_START_INPUT.value()
|
||||
|| (startInputFlags & StartInputFlags.IS_TEXT_EDITOR) != 0) {
|
||||
res = startInputUncheckedLocked(cs, inputContext, missingMethods, attribute,
|
||||
startInputFlags, startInputReason);
|
||||
@@ -3622,10 +3606,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
return res;
|
||||
}
|
||||
|
||||
private boolean isImeVisible() {
|
||||
return (mImeWindowVis & InputMethodService.IME_VISIBLE) != 0;
|
||||
}
|
||||
|
||||
private boolean canShowInputMethodPickerLocked(IInputMethodClient client) {
|
||||
// TODO(yukawa): multi-display support.
|
||||
final int uid = Binder.getCallingUid();
|
||||
|
||||
Reference in New Issue
Block a user