Input method manager method to check for active connection
This change adds a method to check if connection is currently active. It will be used by InputManager to hide cursor and disable tap-to-click in upcoming changes to improve typing experiance. Test: manual testing Bug: 275616121 Change-Id: I996cbbbc49510e3c1a26a2c3c5c63743fdf17f86
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -2790,6 +2795,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.
|
||||
*/
|
||||
|
||||
@@ -185,6 +185,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.
|
||||
*/
|
||||
@@ -268,6 +274,11 @@ public abstract class InputMethodManagerInternal {
|
||||
@Override
|
||||
public void switchKeyboardLayout(int direction) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAnyInputConnectionActive() {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -108,6 +108,7 @@ static struct {
|
||||
jmethodID notifySensorEvent;
|
||||
jmethodID notifySensorAccuracy;
|
||||
jmethodID notifyStylusGestureStarted;
|
||||
jmethodID isInputMethodConnectionActive;
|
||||
jmethodID notifyVibratorState;
|
||||
jmethodID filterInputEvent;
|
||||
jmethodID interceptKeyBeforeQueueing;
|
||||
@@ -322,6 +323,7 @@ public:
|
||||
|
||||
TouchAffineTransformation getTouchAffineTransformation(JNIEnv* env, jfloatArray matrixArr);
|
||||
void notifyStylusGestureStarted(int32_t deviceId, nsecs_t eventTime) override;
|
||||
bool isInputMethodConnectionActive() override;
|
||||
|
||||
/* --- InputDispatcherPolicyInterface implementation --- */
|
||||
|
||||
@@ -1306,6 +1308,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();
|
||||
@@ -2743,6 +2753,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",
|
||||
|
||||
Reference in New Issue
Block a user