blob: 70fd282cff150ffa49115cc10e728a1308b13797 [file] [log] [blame]
Kartar Singh92a1d1f2024-09-09 10:41:131// 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
13extern "C" {
Petr Čermák4445cea2025-04-23 21:51:5614typedef struct AChoreographer AChoreographer;
Kartar Singh92a1d1f2024-09-09 10:41:1315typedef struct ALooper ALooper;
16typedef struct ASurfaceControl ASurfaceControl;
17typedef struct AInputReceiverCallbacks AInputReceiverCallbacks;
18typedef struct AInputTransferToken AInputTransferToken;
19typedef struct AInputReceiver AInputReceiver;
20typedef bool (*AInputReceiver_onMotionEvent)(void* context,
21 AInputEvent* motionEvent);
22
23using pAInputTransferToken_fromJava = AInputTransferToken* (*)(JNIEnv*,
24 jobject);
25using pAInputTransferToken_toJava = jobject (*)(JNIEnv*,
26 const AInputTransferToken*);
Kartar Singha7656a62024-10-09 10:32:5427using pAInputTransferToken_release =
28 void (*)(AInputTransferToken* aInputTransferToken);
Kartar Singh92a1d1f2024-09-09 10:41:1329using pAInputEvent_toJava = jobject (*)(JNIEnv*, const AInputEvent*);
30using pAInputReceiverCallbacks_create =
31 AInputReceiverCallbacks* (*)(void* context);
Kartar Singha7656a62024-10-09 10:32:5432using pAInputReceiverCallbacks_release =
33 void (*)(AInputReceiverCallbacks* callbacks);
Kartar Singh92a1d1f2024-09-09 10:41:1334using pAInputReceiverCallbacks_setMotionEventCallback =
35 void (*)(AInputReceiverCallbacks*, AInputReceiver_onMotionEvent);
Petr Čermák4445cea2025-04-23 21:51:5636using pAInputReceiver_createBatchedInputReceiver =
37 AInputReceiver* (*)(AChoreographer*,
38 const AInputTransferToken*,
39 const ASurfaceControl*,
40 AInputReceiverCallbacks*);
Kartar Singh92a1d1f2024-09-09 10:41:1341using pAInputReceiver_createUnbatchedInputReceiver =
42 AInputReceiver* (*)(ALooper*,
43 const AInputTransferToken*,
44 const ASurfaceControl*,
45 AInputReceiverCallbacks*);
46using pAInputReceiver_getInputTransferToken =
47 AInputTransferToken* (*)(AInputReceiver*);
Kartar Singha7656a62024-10-09 10:32:5448using pAInputReceiver_release = void (*)(AInputReceiver*);
Kartar Singh92a1d1f2024-09-09 10:41:1349
50} // extern "C"
51
52namespace base {
53
54// This class provides runtime support for using surface control input receiver
55// methods.
56// Don't call GetInstance() unless IsSupportAvailable() returns true.
57class BASE_EXPORT AndroidInputReceiverCompat {
58 public:
59 static bool IsSupportAvailable();
60 static const AndroidInputReceiverCompat& GetInstance();
61
62 AndroidInputReceiverCompat(const AndroidInputReceiverCompat&) = delete;
63 AndroidInputReceiverCompat& operator=(const AndroidInputReceiverCompat&) =
64 delete;
65
66 pAInputTransferToken_fromJava AInputTransferToken_fromJavaFn;
67 pAInputTransferToken_toJava AInputTransferToken_toJavaFn;
Kartar Singha7656a62024-10-09 10:32:5468 pAInputTransferToken_release AInputTransferToken_releaseFn;
Kartar Singh92a1d1f2024-09-09 10:41:1369 pAInputEvent_toJava AInputEvent_toJavaFn;
70 pAInputReceiverCallbacks_create AInputReceiverCallbacks_createFn;
Kartar Singha7656a62024-10-09 10:32:5471 pAInputReceiverCallbacks_release AInputReceiverCallbacks_releaseFn;
Kartar Singh92a1d1f2024-09-09 10:41:1372 pAInputReceiverCallbacks_setMotionEventCallback
73 AInputReceiverCallbacks_setMotionEventCallbackFn;
74 pAInputReceiver_createUnbatchedInputReceiver
75 AInputReceiver_createUnbatchedInputReceiverFn;
Petr Čermák4445cea2025-04-23 21:51:5676 pAInputReceiver_createBatchedInputReceiver
77 AInputReceiver_createBatchedInputReceiverFn;
Kartar Singh92a1d1f2024-09-09 10:41:1378 pAInputReceiver_getInputTransferToken AInputReceiver_getInputTransferTokenFn;
Kartar Singha7656a62024-10-09 10:32:5479 pAInputReceiver_release AInputReceiver_releaseFn;
Kartar Singh92a1d1f2024-09-09 10:41:1380
81 private:
82 AndroidInputReceiverCompat();
83};
84
85} // namespace base
86
87#endif // BASE_ANDROID_ANDROID_INPUT_RECEIVER_COMPAT_H_