1 // Copyright 2024 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef BASE_ANDROID_ANDROID_INPUT_RECEIVER_COMPAT_H_ 6 #define BASE_ANDROID_ANDROID_INPUT_RECEIVER_COMPAT_H_ 7 8 #include <android/input.h> 9 #include <jni.h> 10 11 #include "base/base_export.h" 12 13 extern "C" { 14 typedef struct ALooper ALooper; 15 typedef struct ASurfaceControl ASurfaceControl; 16 typedef struct AInputReceiverCallbacks AInputReceiverCallbacks; 17 typedef struct AInputTransferToken AInputTransferToken; 18 typedef struct AInputReceiver AInputReceiver; 19 typedef bool (*AInputReceiver_onMotionEvent)(void* context, 20 AInputEvent* motionEvent); 21 22 using pAInputTransferToken_fromJava = AInputTransferToken* (*)(JNIEnv*, 23 jobject); 24 using pAInputTransferToken_toJava = jobject (*)(JNIEnv*, 25 const AInputTransferToken*); 26 using pAInputTransferToken_release = 27 void (*)(AInputTransferToken* aInputTransferToken); 28 using pAInputEvent_toJava = jobject (*)(JNIEnv*, const AInputEvent*); 29 using pAInputReceiverCallbacks_create = 30 AInputReceiverCallbacks* (*)(void* context); 31 using pAInputReceiverCallbacks_release = 32 void (*)(AInputReceiverCallbacks* callbacks); 33 using pAInputReceiverCallbacks_setMotionEventCallback = 34 void (*)(AInputReceiverCallbacks*, AInputReceiver_onMotionEvent); 35 using pAInputReceiver_createUnbatchedInputReceiver = 36 AInputReceiver* (*)(ALooper*, 37 const AInputTransferToken*, 38 const ASurfaceControl*, 39 AInputReceiverCallbacks*); 40 using pAInputReceiver_getInputTransferToken = 41 AInputTransferToken* (*)(AInputReceiver*); 42 using pAInputReceiver_release = void (*)(AInputReceiver*); 43 44 } // extern "C" 45 46 namespace base { 47 48 // This class provides runtime support for using surface control input receiver 49 // methods. 50 // Don't call GetInstance() unless IsSupportAvailable() returns true. 51 class BASE_EXPORT AndroidInputReceiverCompat { 52 public: 53 static bool IsSupportAvailable(); 54 static const AndroidInputReceiverCompat& GetInstance(); 55 56 AndroidInputReceiverCompat(const AndroidInputReceiverCompat&) = delete; 57 AndroidInputReceiverCompat& operator=(const AndroidInputReceiverCompat&) = 58 delete; 59 60 pAInputTransferToken_fromJava AInputTransferToken_fromJavaFn; 61 pAInputTransferToken_toJava AInputTransferToken_toJavaFn; 62 pAInputTransferToken_release AInputTransferToken_releaseFn; 63 pAInputEvent_toJava AInputEvent_toJavaFn; 64 pAInputReceiverCallbacks_create AInputReceiverCallbacks_createFn; 65 pAInputReceiverCallbacks_release AInputReceiverCallbacks_releaseFn; 66 pAInputReceiverCallbacks_setMotionEventCallback 67 AInputReceiverCallbacks_setMotionEventCallbackFn; 68 pAInputReceiver_createUnbatchedInputReceiver 69 AInputReceiver_createUnbatchedInputReceiverFn; 70 pAInputReceiver_getInputTransferToken AInputReceiver_getInputTransferTokenFn; 71 pAInputReceiver_release AInputReceiver_releaseFn; 72 73 private: 74 AndroidInputReceiverCompat(); 75 }; 76 77 } // namespace base 78 79 #endif // BASE_ANDROID_ANDROID_INPUT_RECEIVER_COMPAT_H_ 80