Merge "Push stylusPointerIconEnabled to native instead of pulling" into udc-dev

This commit is contained in:
Prabir Pradhan
2023-03-27 21:34:29 +00:00
committed by Android (Google) Code Review
3 changed files with 38 additions and 17 deletions

View File

@@ -547,6 +547,10 @@ public class InputManagerService extends IInputManager.Stub
mBatteryController.systemRunning(); mBatteryController.systemRunning();
mKeyboardBacklightController.systemRunning(); mKeyboardBacklightController.systemRunning();
mKeyRemapper.systemRunning(); mKeyRemapper.systemRunning();
mNative.setStylusPointerIconEnabled(
Objects.requireNonNull(mContext.getSystemService(InputManager.class))
.isStylusPointerIconEnabled());
} }
private void reloadDeviceAliases() { private void reloadDeviceAliases() {
@@ -2749,13 +2753,6 @@ public class InputManagerService extends IInputManager.Stub
return null; return null;
} }
// Native callback.
@SuppressWarnings("unused")
private boolean isStylusPointerIconEnabled() {
return Objects.requireNonNull(mContext.getSystemService(InputManager.class))
.isStylusPointerIconEnabled();
}
private static class PointerDisplayIdChangedArgs { private static class PointerDisplayIdChangedArgs {
final int mPointerDisplayId; final int mPointerDisplayId;
final float mXPosition; final float mXPosition;

View File

@@ -234,6 +234,9 @@ interface NativeInputManagerService {
*/ */
float[] getMouseCursorPosition(); float[] getMouseCursorPosition();
/** Set whether showing a pointer icon for styluses is enabled. */
void setStylusPointerIconEnabled(boolean enabled);
/** The native implementation of InputManagerService methods. */ /** The native implementation of InputManagerService methods. */
class NativeImpl implements NativeInputManagerService { class NativeImpl implements NativeInputManagerService {
/** Pointer to native input manager service object, used by native code. */ /** Pointer to native input manager service object, used by native code. */
@@ -478,5 +481,8 @@ interface NativeInputManagerService {
@Override @Override
public native float[] getMouseCursorPosition(); public native float[] getMouseCursorPosition();
@Override
public native void setStylusPointerIconEnabled(boolean enabled);
} }
} }

View File

@@ -137,7 +137,6 @@ static struct {
jmethodID notifyDropWindow; jmethodID notifyDropWindow;
jmethodID getParentSurfaceForPointers; jmethodID getParentSurfaceForPointers;
jmethodID isPerDisplayTouchModeEnabled; jmethodID isPerDisplayTouchModeEnabled;
jmethodID isStylusPointerIconEnabled;
} gServiceClassInfo; } gServiceClassInfo;
static struct { static struct {
@@ -309,6 +308,7 @@ public:
std::optional<std::string> getBluetoothAddress(int32_t deviceId); std::optional<std::string> getBluetoothAddress(int32_t deviceId);
void setStylusButtonMotionEventsEnabled(bool enabled); void setStylusButtonMotionEventsEnabled(bool enabled);
FloatPoint getMouseCursorPosition(); FloatPoint getMouseCursorPosition();
void setStylusPointerIconEnabled(bool enabled);
/* --- InputReaderPolicyInterface implementation --- */ /* --- InputReaderPolicyInterface implementation --- */
@@ -430,6 +430,9 @@ private:
// True to enable a zone on the right-hand side of touchpads where clicks will be turned // True to enable a zone on the right-hand side of touchpads where clicks will be turned
// into context (a.k.a. "right") clicks. // into context (a.k.a. "right") clicks.
bool touchpadRightClickZoneEnabled{false}; bool touchpadRightClickZoneEnabled{false};
// True if a pointer icon should be shown for stylus pointers.
bool stylusPointerIconEnabled{false};
} mLocked GUARDED_BY(mLock); } mLocked GUARDED_BY(mLock);
std::atomic<bool> mInteractive; std::atomic<bool> mInteractive;
@@ -662,12 +665,6 @@ void NativeInputManager::getReaderConfiguration(InputReaderConfiguration* outCon
outConfig->pointerGestureTapSlop = hoverTapSlop; outConfig->pointerGestureTapSlop = hoverTapSlop;
} }
jboolean stylusPointerIconEnabled =
env->CallBooleanMethod(mServiceObj, gServiceClassInfo.isStylusPointerIconEnabled);
if (!checkAndClearExceptionFromCallback(env, "isStylusPointerIconEnabled")) {
outConfig->stylusPointerIconEnabled = stylusPointerIconEnabled;
}
{ // acquire lock { // acquire lock
std::scoped_lock _l(mLock); std::scoped_lock _l(mLock);
@@ -692,6 +689,8 @@ void NativeInputManager::getReaderConfiguration(InputReaderConfiguration* outCon
outConfig->disabledDevices = mLocked.disabledInputDevices; outConfig->disabledDevices = mLocked.disabledInputDevices;
outConfig->stylusButtonMotionEventsEnabled = mLocked.stylusButtonMotionEventsEnabled; outConfig->stylusButtonMotionEventsEnabled = mLocked.stylusButtonMotionEventsEnabled;
outConfig->stylusPointerIconEnabled = mLocked.stylusPointerIconEnabled;
} // release lock } // release lock
} }
@@ -1664,6 +1663,21 @@ FloatPoint NativeInputManager::getMouseCursorPosition() {
return pc->getPosition(); return pc->getPosition();
} }
void NativeInputManager::setStylusPointerIconEnabled(bool enabled) {
{ // acquire lock
std::scoped_lock _l(mLock);
if (mLocked.stylusPointerIconEnabled == enabled) {
return;
}
mLocked.stylusPointerIconEnabled = enabled;
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
InputReaderConfiguration::CHANGE_DISPLAY_INFO);
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
static NativeInputManager* getNativeInputManager(JNIEnv* env, jobject clazz) { static NativeInputManager* getNativeInputManager(JNIEnv* env, jobject clazz) {
@@ -2565,6 +2579,12 @@ static jfloatArray nativeGetMouseCursorPosition(JNIEnv* env, jobject nativeImplO
return outArr; return outArr;
} }
static void nativeSetStylusPointerIconEnabled(JNIEnv* env, jobject nativeImplObj,
jboolean enabled) {
NativeInputManager* im = getNativeInputManager(env, nativeImplObj);
im->setStylusPointerIconEnabled(enabled);
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
static const JNINativeMethod gInputManagerMethods[] = { static const JNINativeMethod gInputManagerMethods[] = {
@@ -2659,6 +2679,7 @@ static const JNINativeMethod gInputManagerMethods[] = {
{"setStylusButtonMotionEventsEnabled", "(Z)V", {"setStylusButtonMotionEventsEnabled", "(Z)V",
(void*)nativeSetStylusButtonMotionEventsEnabled}, (void*)nativeSetStylusButtonMotionEventsEnabled},
{"getMouseCursorPosition", "()[F", (void*)nativeGetMouseCursorPosition}, {"getMouseCursorPosition", "()[F", (void*)nativeGetMouseCursorPosition},
{"setStylusPointerIconEnabled", "(Z)V", (void*)nativeSetStylusPointerIconEnabled},
}; };
#define FIND_CLASS(var, className) \ #define FIND_CLASS(var, className) \
@@ -2819,9 +2840,6 @@ int register_android_server_InputManager(JNIEnv* env) {
GET_METHOD_ID(gServiceClassInfo.isPerDisplayTouchModeEnabled, clazz, GET_METHOD_ID(gServiceClassInfo.isPerDisplayTouchModeEnabled, clazz,
"isPerDisplayTouchModeEnabled", "()Z"); "isPerDisplayTouchModeEnabled", "()Z");
GET_METHOD_ID(gServiceClassInfo.isStylusPointerIconEnabled, clazz, "isStylusPointerIconEnabled",
"()Z");
// InputDevice // InputDevice
FIND_CLASS(gInputDeviceClassInfo.clazz, "android/view/InputDevice"); FIND_CLASS(gInputDeviceClassInfo.clazz, "android/view/InputDevice");