blob: 2e74aa3dbcbede40aff30c44dbb7e4e32b0f6e80 [file] [log] [blame]
Chavi Weingartenb94da302024-02-29 16:33:27 +00001/*
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
23using namespace android;
24
25#define CHECK_NOT_NULL(name) \
26 LOG_ALWAYS_FATAL_IF(name == nullptr, "nullptr passed as " #name " argument");
27
Chavi Weingartend57801e2024-03-04 22:49:03 +000028extern void InputTransferToken_acquire(InputTransferToken* inputTransferToken) {
Chavi Weingartenb94da302024-02-29 16:33:27 +000029 // incStrong/decStrong token must be the same, doesn't matter what it is
30 inputTransferToken->incStrong((void*)InputTransferToken_acquire);
31}
32
33void 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
38AInputTransferToken* 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
49jobject 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);
Chavi Weingartend57801e2024-03-04 22:49:03 +000055 return android_window_InputTransferToken_getJavaInputTransferToken(env, *inputTransferToken);
Chavi Weingartenb94da302024-02-29 16:33:27 +000056}
57
58void AInputTransferToken_release(AInputTransferToken* aInputTransferToken) {
59 CHECK_NOT_NULL(aInputTransferToken);
60 InputTransferToken* inputTransferToken =
61 reinterpret_cast<InputTransferToken*>(aInputTransferToken);
62 InputTransferToken_release(inputTransferToken);
63}