diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index 13abe7c6471dc..08f8c65d8611e 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -1495,7 +1495,7 @@ public final class InputMethodManager { boolean forceNewFocus = false; synchronized (mH) { if (DEBUG) Log.v(TAG, "onWindowFocus: " + focusedView - + " softInputMode=" + softInputMode + + " softInputMode=" + InputMethodClient.softInputModeToString(softInputMode) + " first=" + first + " flags=#" + Integer.toHexString(windowFlags)); if (mHasBeenInactive) { diff --git a/core/java/com/android/internal/view/InputMethodClient.java b/core/java/com/android/internal/view/InputMethodClient.java index cea030a3d489b..c847cc2aba653 100644 --- a/core/java/com/android/internal/view/InputMethodClient.java +++ b/core/java/com/android/internal/view/InputMethodClient.java @@ -17,6 +17,7 @@ package com.android.internal.view; import android.annotation.IntDef; +import android.view.WindowManager.LayoutParams; import java.lang.annotation.Retention; @@ -103,4 +104,65 @@ public final class InputMethodClient { return "Unknown=" + reason; } } + + public static String softInputModeToString(final int softInputMode) { + final StringBuilder sb = new StringBuilder(); + final int state = softInputMode & LayoutParams.SOFT_INPUT_MASK_STATE; + final int adjust = softInputMode & LayoutParams.SOFT_INPUT_MASK_ADJUST; + final boolean isForwardNav = + (softInputMode & LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION) != 0; + + switch (state) { + case LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED: + sb.append("STATE_UNSPECIFIED"); + break; + case LayoutParams.SOFT_INPUT_STATE_UNCHANGED: + sb.append("STATE_UNCHANGED"); + break; + case LayoutParams.SOFT_INPUT_STATE_HIDDEN: + sb.append("STATE_HIDDEN"); + break; + case LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN: + sb.append("STATE_ALWAYS_HIDDEN"); + break; + case LayoutParams.SOFT_INPUT_STATE_VISIBLE: + sb.append("STATE_VISIBLE"); + break; + case LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE: + sb.append("STATE_ALWAYS_VISIBLE"); + break; + default: + sb.append("STATE_UNKNOWN("); + sb.append(state); + sb.append(")"); + break; + } + + switch (adjust) { + case LayoutParams.SOFT_INPUT_ADJUST_UNSPECIFIED: + sb.append("|ADJUST_UNSPECIFIED"); + break; + case LayoutParams.SOFT_INPUT_ADJUST_RESIZE: + sb.append("|ADJUST_RESIZE"); + break; + case LayoutParams.SOFT_INPUT_ADJUST_PAN: + sb.append("|ADJUST_PAN"); + break; + case LayoutParams.SOFT_INPUT_ADJUST_NOTHING: + sb.append("|ADJUST_NOTHING"); + break; + default: + sb.append("|ADJUST_UNKNOWN("); + sb.append(adjust); + sb.append(")"); + break; + } + + if (isForwardNav) { + // This is a special bit that is set by the system only during the window navigation. + sb.append("|IS_FORWARD_NAVIGATION"); + } + + return sb.toString(); + } } diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index b9c47e759bda1..3a0c78cfae30f 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -346,6 +346,13 @@ public class InputMethodManagerService extends IInputMethodManager.Stub */ IBinder mCurFocusedWindow; + /** + * {@link WindowManager.LayoutParams#softInputMode} of {@link #mCurFocusedWindow}. + * + * @see #mCurFocusedWindow + */ + int mCurFocusedWindowSoftInputMode; + /** * The client by which {@link #mCurFocusedWindow} was reported. Used only for debugging. */ @@ -2281,7 +2288,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub + InputConnectionInspector.getMissingMethodFlagsAsString(missingMethods) + " attribute=" + attribute + " controlFlags=#" + Integer.toHexString(controlFlags) - + " softInputMode=#" + Integer.toHexString(softInputMode) + + " softInputMode=" + InputMethodClient.softInputModeToString(softInputMode) + " windowFlags=#" + Integer.toHexString(windowFlags)); ClientState cs = mClients.get(client.asBinder()); @@ -2326,6 +2333,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub return null; } mCurFocusedWindow = windowToken; + mCurFocusedWindowSoftInputMode = softInputMode; mCurFocusedWindowClient = cs; // Should we auto-show the IME even if the caller has not @@ -4069,9 +4077,11 @@ public class InputMethodManagerService extends IInputMethodManager.Stub p.println(" mCurMethodId=" + mCurMethodId); client = mCurClient; p.println(" mCurClient=" + client + " mCurSeq=" + mCurSeq); - p.println(" mCurFocusedWindow=" + mCurFocusedWindow); + p.println(" mCurFocusedWindow=" + mCurFocusedWindow + + " softInputMode=" + + InputMethodClient.softInputModeToString(mCurFocusedWindowSoftInputMode) + + " client=" + mCurFocusedWindowClient); focusedWindowClient = mCurFocusedWindowClient; - p.println(" mCurFocusedWindowClient=" + focusedWindowClient); p.println(" mCurId=" + mCurId + " mHaveConnect=" + mHaveConnection + " mBoundToMethod=" + mBoundToMethod); p.println(" mCurToken=" + mCurToken);