xref: /aosp_15_r20/frameworks/base/native/android/input_transfer_token.cpp (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
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