summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Arpit Singh <arpitks@google.com> 2023-07-25 12:00:37 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2023-07-25 12:00:37 +0000
commit52276eef4080e9036ce64dd5d56e30f3d54927fe (patch)
tree9514665b84d23d28d480a7056de0be3aed2913a5
parenta673c7f4260ceef374a6627b89d83a415912eff8 (diff)
parent54a529399c8d3c680a8c38dd37307a03cb9a58d6 (diff)
Merge "Input method manager method to check for active connection" into udc-qpr-dev am: a5b15857ee am: 54a529399c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23877016 Change-Id: I0a231cb2ae290d44f17ccc449e9c5adb9e6a73f5 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--services/core/java/com/android/server/input/InputManagerService.java12
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java11
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java8
-rw-r--r--services/core/jni/com_android_server_input_InputManagerService.cpp13
4 files changed, 44 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index 2d0af98c29f6..6241ebbc60cc 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -116,6 +116,7 @@ import com.android.server.DisplayThread;
import com.android.server.LocalServices;
import com.android.server.Watchdog;
import com.android.server.input.InputManagerInternal.LidSwitchCallback;
+import com.android.server.inputmethod.InputMethodManagerInternal;
import com.android.server.policy.WindowManagerPolicy;
import libcore.io.IoUtils;
@@ -165,6 +166,8 @@ public class InputManagerService extends IInputManager.Stub
private final InputManagerHandler mHandler;
private DisplayManagerInternal mDisplayManagerInternal;
+ private InputMethodManagerInternal mInputMethodManagerInternal;
+
// Context cache used for loading pointer resources.
private Context mPointerIconDisplayContext;
@@ -510,6 +513,8 @@ public class InputManagerService extends IInputManager.Stub
}
mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
+ mInputMethodManagerInternal =
+ LocalServices.getService(InputMethodManagerInternal.class);
mSettingsObserver.registerAndUpdate();
@@ -2784,6 +2789,13 @@ public class InputManagerService extends IInputManager.Stub
yPosition)).sendToTarget();
}
+ // Native callback.
+ @SuppressWarnings("unused")
+ boolean isInputMethodConnectionActive() {
+ return mInputMethodManagerInternal != null
+ && mInputMethodManagerInternal.isAnyInputConnectionActive();
+ }
+
/**
* Callback interface implemented by the Window Manager.
*/
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java
index 8c7658e53dcd..08503cb2e9f8 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java
@@ -186,6 +186,12 @@ public abstract class InputMethodManagerInternal {
public abstract void switchKeyboardLayout(int direction);
/**
+ * Returns true if any InputConnection is currently active.
+ * {@hide}
+ */
+ public abstract boolean isAnyInputConnectionActive();
+
+ /**
* Fake implementation of {@link InputMethodManagerInternal}. All the methods do nothing.
*/
private static final InputMethodManagerInternal NOP =
@@ -268,6 +274,11 @@ public abstract class InputMethodManagerInternal {
@Override
public void switchKeyboardLayout(int direction) {
}
+
+ @Override
+ public boolean isAnyInputConnectionActive() {
+ return false;
+ }
};
/**
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index c5fbcb968ab6..cfcb4620bf25 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -5937,6 +5937,14 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
}
}
}
+
+ /**
+ * Returns true if any InputConnection is currently active.
+ */
+ @Override
+ public boolean isAnyInputConnectionActive() {
+ return mCurInputConnection != null;
+ }
}
@BinderThread
diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp
index ec6c75bb1991..7c8c558474bb 100644
--- a/services/core/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/core/jni/com_android_server_input_InputManagerService.cpp
@@ -108,6 +108,7 @@ static struct {
jmethodID notifySensorEvent;
jmethodID notifySensorAccuracy;
jmethodID notifyStylusGestureStarted;
+ jmethodID isInputMethodConnectionActive;
jmethodID notifyVibratorState;
jmethodID filterInputEvent;
jmethodID interceptKeyBeforeQueueing;
@@ -321,6 +322,7 @@ public:
TouchAffineTransformation getTouchAffineTransformation(JNIEnv* env, jfloatArray matrixArr);
void notifyStylusGestureStarted(int32_t deviceId, nsecs_t eventTime) override;
+ bool isInputMethodConnectionActive() override;
/* --- InputDispatcherPolicyInterface implementation --- */
@@ -1307,6 +1309,14 @@ void NativeInputManager::notifyStylusGestureStarted(int32_t deviceId, nsecs_t ev
checkAndClearExceptionFromCallback(env, "notifyStylusGestureStarted");
}
+bool NativeInputManager::isInputMethodConnectionActive() {
+ JNIEnv* env = jniEnv();
+ const jboolean result =
+ env->CallBooleanMethod(mServiceObj, gServiceClassInfo.isInputMethodConnectionActive);
+ checkAndClearExceptionFromCallback(env, "isInputMethodConnectionActive");
+ return result;
+}
+
bool NativeInputManager::filterInputEvent(const InputEvent& inputEvent, uint32_t policyFlags) {
ATRACE_CALL();
JNIEnv* env = jniEnv();
@@ -2749,6 +2759,9 @@ int register_android_server_InputManager(JNIEnv* env) {
GET_METHOD_ID(gServiceClassInfo.notifyStylusGestureStarted, clazz, "notifyStylusGestureStarted",
"(IJ)V");
+ GET_METHOD_ID(gServiceClassInfo.isInputMethodConnectionActive, clazz,
+ "isInputMethodConnectionActive", "()Z");
+
GET_METHOD_ID(gServiceClassInfo.notifyVibratorState, clazz, "notifyVibratorState", "(IZ)V");
GET_METHOD_ID(gServiceClassInfo.notifyNoFocusedWindowAnr, clazz, "notifyNoFocusedWindowAnr",