Loading core/java/com/android/internal/view/InputBindResult.java +1 −2 Original line number Diff line number Diff line Loading @@ -139,8 +139,7 @@ public final class InputBindResult implements Parcelable { * The client should try to restart input when its {@link android.view.Window} is focused * again.</p> * * @see com.android.server.wm.WindowManagerInternal#inputMethodClientHasFocus( * IInputMethodClient) * @see com.android.server.wm.WindowManagerInternal#isInputMethodClientFocus(int, int) */ int ERROR_NOT_IME_TARGET_WINDOW = 11; /** Loading services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +11 −3 Original line number Diff line number Diff line Loading @@ -2536,7 +2536,11 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // We need to check if this is the current client with // focus in the window manager, to allow this call to // be made before input is started in it. if (!mWindowManagerInternal.inputMethodClientHasFocus(client)) { final ClientState cs = mClients.get(client.asBinder()); if (cs == null) { throw new IllegalArgumentException("unknown client " + client.asBinder()); } if (!mWindowManagerInternal.isInputMethodClientFocus(cs.uid, cs.pid)) { Slog.w(TAG, "Ignoring showSoftInput of uid " + uid + ": " + client); return false; } Loading Loading @@ -2616,7 +2620,11 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // We need to check if this is the current client with // focus in the window manager, to allow this call to // be made before input is started in it. if (!mWindowManagerInternal.inputMethodClientHasFocus(client)) { final ClientState cs = mClients.get(client.asBinder()); if (cs == null) { throw new IllegalArgumentException("unknown client " + client.asBinder()); } if (!mWindowManagerInternal.isInputMethodClientFocus(cs.uid, cs.pid)) { if (DEBUG) { Slog.w(TAG, "Ignoring hideSoftInput of uid " + uid + ": " + client); } Loading Loading @@ -2734,7 +2742,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub + client.asBinder()); } if (!mWindowManagerInternal.inputMethodClientHasFocus(cs.client)) { if (!mWindowManagerInternal.isInputMethodClientFocus(cs.uid, cs.pid)) { // Check with the window manager to make sure this client actually // has a window with focus. If not, reject. This is thread safe // because if the focus changes some time before or after, the Loading services/core/java/com/android/server/wm/DisplayContent.java +5 −10 Original line number Diff line number Diff line Loading @@ -150,7 +150,6 @@ import android.view.SurfaceSession; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ToBooleanFunction; import com.android.internal.view.IInputMethodClient; import com.android.server.policy.WindowManagerPolicy; import com.android.server.wm.utils.RotationCache; import com.android.server.wm.utils.WmDisplayCutout; Loading Loading @@ -2949,7 +2948,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo } } boolean inputMethodClientHasFocus(IInputMethodClient client) { boolean isInputMethodClientFocus(int uid, int pid) { final WindowState imFocus = computeImeTarget(false /* updateImeTarget */); if (imFocus == null) { return false; Loading @@ -2961,17 +2960,13 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo Slog.i(TAG_WM, "Last focus: " + mService.mLastFocus); } final IInputMethodClient imeClient = imFocus.mSession.mClient; if (DEBUG_INPUT_METHOD) { Slog.i(TAG_WM, "IM target client: " + imeClient); if (imeClient != null) { Slog.i(TAG_WM, "IM target client binder: " + imeClient.asBinder()); Slog.i(TAG_WM, "Requesting client binder: " + client.asBinder()); } Slog.i(TAG_WM, "IM target uid/pid: " + imFocus.mSession.mUid + "/" + imFocus.mSession.mPid); Slog.i(TAG_WM, "Requesting client uid/pid: " + uid + "/" + pid); } return imeClient != null && imeClient.asBinder() == client.asBinder(); return imFocus.mSession.mUid == uid && imFocus.mSession.mPid == pid; } boolean hasSecureWindowOnScreen() { Loading services/core/java/com/android/server/wm/WindowManagerInternal.java +7 −3 Original line number Diff line number Diff line Loading @@ -30,7 +30,6 @@ import android.view.InputChannel; import android.view.MagnificationSpec; import android.view.WindowInfo; import com.android.internal.view.IInputMethodClient; import com.android.server.input.InputManagerService; import com.android.server.policy.WindowManagerPolicy; Loading Loading @@ -444,9 +443,14 @@ public abstract class WindowManagerInternal { public abstract boolean isUidFocused(int uid); /** * Returns {@code true} if a process that is identified by {@code client} has IME focus. * Checks whether the specified process has IME focus or not. * * @param uid UID of the process to be queried * @param pid PID of the process to be queried * @return {@code true} if a process that is identified by {@code uid} and {@code pid} has IME * focus */ public abstract boolean inputMethodClientHasFocus(IInputMethodClient client); public abstract boolean isInputMethodClientFocus(int uid, int pid); /** * Return the display Id for given window. Loading services/core/java/com/android/server/wm/WindowManagerService.java +4 −4 Original line number Diff line number Diff line Loading @@ -7412,12 +7412,12 @@ public class WindowManagerService extends IWindowManager.Stub } @Override public boolean inputMethodClientHasFocus(IInputMethodClient client) { public boolean isInputMethodClientFocus(int uid, int pid) { synchronized (mWindowMap) { // Check all displays if any input method window has focus. for (int i = mRoot.mChildren.size() - 1; i >= 0; --i) { final DisplayContent displayContent = mRoot.mChildren.get(i); if (displayContent.inputMethodClientHasFocus(client)) { if (displayContent.isInputMethodClientFocus(uid, pid)) { return true; } } Loading @@ -7430,8 +7430,8 @@ public class WindowManagerService extends IWindowManager.Stub // press home. Sometimes the IME won't go down.) // Would be nice to fix this more correctly, but it's // way at the end of a release, and this should be good enough. if (mCurrentFocus != null && mCurrentFocus.mSession.mClient != null && mCurrentFocus.mSession.mClient.asBinder() == client.asBinder()) { if (mCurrentFocus != null && mCurrentFocus.mSession.mUid == uid && mCurrentFocus.mSession.mPid == pid) { return true; } } Loading Loading
core/java/com/android/internal/view/InputBindResult.java +1 −2 Original line number Diff line number Diff line Loading @@ -139,8 +139,7 @@ public final class InputBindResult implements Parcelable { * The client should try to restart input when its {@link android.view.Window} is focused * again.</p> * * @see com.android.server.wm.WindowManagerInternal#inputMethodClientHasFocus( * IInputMethodClient) * @see com.android.server.wm.WindowManagerInternal#isInputMethodClientFocus(int, int) */ int ERROR_NOT_IME_TARGET_WINDOW = 11; /** Loading
services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +11 −3 Original line number Diff line number Diff line Loading @@ -2536,7 +2536,11 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // We need to check if this is the current client with // focus in the window manager, to allow this call to // be made before input is started in it. if (!mWindowManagerInternal.inputMethodClientHasFocus(client)) { final ClientState cs = mClients.get(client.asBinder()); if (cs == null) { throw new IllegalArgumentException("unknown client " + client.asBinder()); } if (!mWindowManagerInternal.isInputMethodClientFocus(cs.uid, cs.pid)) { Slog.w(TAG, "Ignoring showSoftInput of uid " + uid + ": " + client); return false; } Loading Loading @@ -2616,7 +2620,11 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // We need to check if this is the current client with // focus in the window manager, to allow this call to // be made before input is started in it. if (!mWindowManagerInternal.inputMethodClientHasFocus(client)) { final ClientState cs = mClients.get(client.asBinder()); if (cs == null) { throw new IllegalArgumentException("unknown client " + client.asBinder()); } if (!mWindowManagerInternal.isInputMethodClientFocus(cs.uid, cs.pid)) { if (DEBUG) { Slog.w(TAG, "Ignoring hideSoftInput of uid " + uid + ": " + client); } Loading Loading @@ -2734,7 +2742,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub + client.asBinder()); } if (!mWindowManagerInternal.inputMethodClientHasFocus(cs.client)) { if (!mWindowManagerInternal.isInputMethodClientFocus(cs.uid, cs.pid)) { // Check with the window manager to make sure this client actually // has a window with focus. If not, reject. This is thread safe // because if the focus changes some time before or after, the Loading
services/core/java/com/android/server/wm/DisplayContent.java +5 −10 Original line number Diff line number Diff line Loading @@ -150,7 +150,6 @@ import android.view.SurfaceSession; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ToBooleanFunction; import com.android.internal.view.IInputMethodClient; import com.android.server.policy.WindowManagerPolicy; import com.android.server.wm.utils.RotationCache; import com.android.server.wm.utils.WmDisplayCutout; Loading Loading @@ -2949,7 +2948,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo } } boolean inputMethodClientHasFocus(IInputMethodClient client) { boolean isInputMethodClientFocus(int uid, int pid) { final WindowState imFocus = computeImeTarget(false /* updateImeTarget */); if (imFocus == null) { return false; Loading @@ -2961,17 +2960,13 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo Slog.i(TAG_WM, "Last focus: " + mService.mLastFocus); } final IInputMethodClient imeClient = imFocus.mSession.mClient; if (DEBUG_INPUT_METHOD) { Slog.i(TAG_WM, "IM target client: " + imeClient); if (imeClient != null) { Slog.i(TAG_WM, "IM target client binder: " + imeClient.asBinder()); Slog.i(TAG_WM, "Requesting client binder: " + client.asBinder()); } Slog.i(TAG_WM, "IM target uid/pid: " + imFocus.mSession.mUid + "/" + imFocus.mSession.mPid); Slog.i(TAG_WM, "Requesting client uid/pid: " + uid + "/" + pid); } return imeClient != null && imeClient.asBinder() == client.asBinder(); return imFocus.mSession.mUid == uid && imFocus.mSession.mPid == pid; } boolean hasSecureWindowOnScreen() { Loading
services/core/java/com/android/server/wm/WindowManagerInternal.java +7 −3 Original line number Diff line number Diff line Loading @@ -30,7 +30,6 @@ import android.view.InputChannel; import android.view.MagnificationSpec; import android.view.WindowInfo; import com.android.internal.view.IInputMethodClient; import com.android.server.input.InputManagerService; import com.android.server.policy.WindowManagerPolicy; Loading Loading @@ -444,9 +443,14 @@ public abstract class WindowManagerInternal { public abstract boolean isUidFocused(int uid); /** * Returns {@code true} if a process that is identified by {@code client} has IME focus. * Checks whether the specified process has IME focus or not. * * @param uid UID of the process to be queried * @param pid PID of the process to be queried * @return {@code true} if a process that is identified by {@code uid} and {@code pid} has IME * focus */ public abstract boolean inputMethodClientHasFocus(IInputMethodClient client); public abstract boolean isInputMethodClientFocus(int uid, int pid); /** * Return the display Id for given window. Loading
services/core/java/com/android/server/wm/WindowManagerService.java +4 −4 Original line number Diff line number Diff line Loading @@ -7412,12 +7412,12 @@ public class WindowManagerService extends IWindowManager.Stub } @Override public boolean inputMethodClientHasFocus(IInputMethodClient client) { public boolean isInputMethodClientFocus(int uid, int pid) { synchronized (mWindowMap) { // Check all displays if any input method window has focus. for (int i = mRoot.mChildren.size() - 1; i >= 0; --i) { final DisplayContent displayContent = mRoot.mChildren.get(i); if (displayContent.inputMethodClientHasFocus(client)) { if (displayContent.isInputMethodClientFocus(uid, pid)) { return true; } } Loading @@ -7430,8 +7430,8 @@ public class WindowManagerService extends IWindowManager.Stub // press home. Sometimes the IME won't go down.) // Would be nice to fix this more correctly, but it's // way at the end of a release, and this should be good enough. if (mCurrentFocus != null && mCurrentFocus.mSession.mClient != null && mCurrentFocus.mSession.mClient.asBinder() == client.asBinder()) { if (mCurrentFocus != null && mCurrentFocus.mSession.mUid == uid && mCurrentFocus.mSession.mPid == pid) { return true; } } Loading