Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f531f31 authored by Prabir Pradhan's avatar Prabir Pradhan
Browse files

Push stylusPointerIconEnabled to native instead of pulling

Since the native code has a depency on the java IMS, IMS should push
values that need to be initialzed at boot once it's ready instead of
native code pulling it before it is ready.

Bug: 274664001
Test: Boot
Change-Id: If6d28a6eff5dea741789c9ae5b6eea18d533fc90
parent 60348db3
Loading
Loading
Loading
Loading
+4 −7
Original line number Original line Diff line number Diff line
@@ -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;
+6 −0
Original line number Original line Diff line number Diff line
@@ -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);
    }
    }
}
}
+28 −10
Original line number Original line Diff line number Diff line
@@ -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");