1 /*
2 * Copyright 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 #define LOG_TAG "InputTransferToken"
17
18 #include <android/input_transfer_token_jni.h>
19 #include <android_runtime/android_window_InputTransferToken.h>
20 #include <gui/InputTransferToken.h>
21 #include <log/log_main.h>
22
23 using namespace android;
24
25 #define CHECK_NOT_NULL(name) \
26 LOG_ALWAYS_FATAL_IF(name == nullptr, "nullptr passed as " #name " argument");
27
InputTransferToken_acquire(InputTransferToken * inputTransferToken)28 extern void InputTransferToken_acquire(InputTransferToken* inputTransferToken) {
29 // incStrong/decStrong token must be the same, doesn't matter what it is
30 inputTransferToken->incStrong((void*)InputTransferToken_acquire);
31 }
32
InputTransferToken_release(InputTransferToken * inputTransferToken)33 void InputTransferToken_release(InputTransferToken* inputTransferToken) {
34 // incStrong/decStrong token must be the same, doesn't matter what it is
35 inputTransferToken->decStrong((void*)InputTransferToken_acquire);
36 }
37
AInputTransferToken_fromJava(JNIEnv * env,jobject inputTransferTokenObj)38 AInputTransferToken* AInputTransferToken_fromJava(JNIEnv* env, jobject inputTransferTokenObj) {
39 CHECK_NOT_NULL(env);
40 CHECK_NOT_NULL(inputTransferTokenObj);
41 InputTransferToken* inputTransferToken =
42 android_window_InputTransferToken_getNativeInputTransferToken(env,
43 inputTransferTokenObj);
44 CHECK_NOT_NULL(inputTransferToken);
45 InputTransferToken_acquire(inputTransferToken);
46 return reinterpret_cast<AInputTransferToken*>(inputTransferToken);
47 }
48
AInputTransferToken_toJava(JNIEnv * _Nonnull env,const AInputTransferToken * aInputTransferToken)49 jobject AInputTransferToken_toJava(JNIEnv* _Nonnull env,
50 const AInputTransferToken* aInputTransferToken) {
51 CHECK_NOT_NULL(env);
52 CHECK_NOT_NULL(aInputTransferToken);
53 const InputTransferToken* inputTransferToken =
54 reinterpret_cast<const InputTransferToken*>(aInputTransferToken);
55 return android_window_InputTransferToken_getJavaInputTransferToken(env, *inputTransferToken);
56 }
57
AInputTransferToken_release(AInputTransferToken * aInputTransferToken)58 void AInputTransferToken_release(AInputTransferToken* aInputTransferToken) {
59 CHECK_NOT_NULL(aInputTransferToken);
60 InputTransferToken* inputTransferToken =
61 reinterpret_cast<InputTransferToken*>(aInputTransferToken);
62 InputTransferToken_release(inputTransferToken);
63 }
64