1*20bfefbeSAndroid Build Coastguard Worker /*
2*20bfefbeSAndroid Build Coastguard Worker *
3*20bfefbeSAndroid Build Coastguard Worker * Copyright 2019, The Android Open Source Project
4*20bfefbeSAndroid Build Coastguard Worker *
5*20bfefbeSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*20bfefbeSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*20bfefbeSAndroid Build Coastguard Worker * You may obtain a copy of the License at
8*20bfefbeSAndroid Build Coastguard Worker *
9*20bfefbeSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*20bfefbeSAndroid Build Coastguard Worker *
11*20bfefbeSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*20bfefbeSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*20bfefbeSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*20bfefbeSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*20bfefbeSAndroid Build Coastguard Worker * limitations under the License.
16*20bfefbeSAndroid Build Coastguard Worker */
17*20bfefbeSAndroid Build Coastguard Worker
18*20bfefbeSAndroid Build Coastguard Worker #include <jni.h>
19*20bfefbeSAndroid Build Coastguard Worker #include <teeui/example/example.h>
20*20bfefbeSAndroid Build Coastguard Worker #include <teeui/localization/ConfirmationUITranslations.h>
21*20bfefbeSAndroid Build Coastguard Worker
22*20bfefbeSAndroid Build Coastguard Worker using teeui::localization::getLanguages;
23*20bfefbeSAndroid Build Coastguard Worker /*
24*20bfefbeSAndroid Build Coastguard Worker * JTypeTraits provides hints for JArray on how to access and free the array elements and how
25*20bfefbeSAndroid Build Coastguard Worker * to get the array size. The traits allow JArray to be used with jbyteArray, jintArray,
26*20bfefbeSAndroid Build Coastguard Worker * and jstring.
27*20bfefbeSAndroid Build Coastguard Worker */
28*20bfefbeSAndroid Build Coastguard Worker template <typename T> struct JTypeTraits;
29*20bfefbeSAndroid Build Coastguard Worker
30*20bfefbeSAndroid Build Coastguard Worker template <> struct JTypeTraits<jintArray> {
31*20bfefbeSAndroid Build Coastguard Worker using element_type = jint;
32*20bfefbeSAndroid Build Coastguard Worker using array_type = jintArray;
33*20bfefbeSAndroid Build Coastguard Worker
34*20bfefbeSAndroid Build Coastguard Worker static constexpr element_type* (JNIEnv::*const getArrayElements)(array_type, jboolean*) =
35*20bfefbeSAndroid Build Coastguard Worker &JNIEnv::GetIntArrayElements;
36*20bfefbeSAndroid Build Coastguard Worker static constexpr void (JNIEnv::*const releaseArrayElements)(array_type, element_type*, jint) =
37*20bfefbeSAndroid Build Coastguard Worker &JNIEnv::ReleaseIntArrayElements;
38*20bfefbeSAndroid Build Coastguard Worker static constexpr jsize (JNIEnv::*const getArrayLength)(jarray) = &JNIEnv::GetArrayLength;
39*20bfefbeSAndroid Build Coastguard Worker };
40*20bfefbeSAndroid Build Coastguard Worker
41*20bfefbeSAndroid Build Coastguard Worker template <> struct JTypeTraits<jbyteArray> {
42*20bfefbeSAndroid Build Coastguard Worker using element_type = jbyte;
43*20bfefbeSAndroid Build Coastguard Worker using array_type = jbyteArray;
44*20bfefbeSAndroid Build Coastguard Worker
45*20bfefbeSAndroid Build Coastguard Worker static constexpr element_type* (JNIEnv::*const getArrayElements)(array_type, jboolean*) =
46*20bfefbeSAndroid Build Coastguard Worker &JNIEnv::GetByteArrayElements;
47*20bfefbeSAndroid Build Coastguard Worker static constexpr void (JNIEnv::*const releaseArrayElements)(array_type, element_type*, jint) =
48*20bfefbeSAndroid Build Coastguard Worker &JNIEnv::ReleaseByteArrayElements;
49*20bfefbeSAndroid Build Coastguard Worker static constexpr jsize (JNIEnv::*const getArrayLength)(jarray) = &JNIEnv::GetArrayLength;
50*20bfefbeSAndroid Build Coastguard Worker };
51*20bfefbeSAndroid Build Coastguard Worker
52*20bfefbeSAndroid Build Coastguard Worker template <> struct JTypeTraits<jstring> {
53*20bfefbeSAndroid Build Coastguard Worker using element_type = const char;
54*20bfefbeSAndroid Build Coastguard Worker using array_type = jstring;
55*20bfefbeSAndroid Build Coastguard Worker
56*20bfefbeSAndroid Build Coastguard Worker static constexpr element_type* (JNIEnv::*const getArrayElements)(array_type, jboolean*) =
57*20bfefbeSAndroid Build Coastguard Worker &JNIEnv::GetStringUTFChars;
58*20bfefbeSAndroid Build Coastguard Worker static constexpr void (JNIEnv::*const releaseArrayElements)(array_type, element_type*) =
59*20bfefbeSAndroid Build Coastguard Worker &JNIEnv::ReleaseStringUTFChars;
60*20bfefbeSAndroid Build Coastguard Worker static constexpr jsize (JNIEnv::*const getArrayLength)(array_type) =
61*20bfefbeSAndroid Build Coastguard Worker &JNIEnv::GetStringUTFLength;
62*20bfefbeSAndroid Build Coastguard Worker };
63*20bfefbeSAndroid Build Coastguard Worker
64*20bfefbeSAndroid Build Coastguard Worker /*
65*20bfefbeSAndroid Build Coastguard Worker * JArray can wrap various types of primitive Java arrays through a common typical C++ interface.
66*20bfefbeSAndroid Build Coastguard Worker * It tracks ownership. It can only be moved but not copied. It provides iterators through begin()
67*20bfefbeSAndroid Build Coastguard Worker * and end() so that it can be used in range for loops.
68*20bfefbeSAndroid Build Coastguard Worker */
69*20bfefbeSAndroid Build Coastguard Worker template <typename T> class JArray {
70*20bfefbeSAndroid Build Coastguard Worker private:
71*20bfefbeSAndroid Build Coastguard Worker JNIEnv* env_;
72*20bfefbeSAndroid Build Coastguard Worker using element_type = typename JTypeTraits<T>::element_type;
73*20bfefbeSAndroid Build Coastguard Worker using array_type = typename JTypeTraits<T>::array_type;
74*20bfefbeSAndroid Build Coastguard Worker array_type jarray_;
75*20bfefbeSAndroid Build Coastguard Worker element_type* buffer_;
76*20bfefbeSAndroid Build Coastguard Worker
77*20bfefbeSAndroid Build Coastguard Worker public:
JArray(JNIEnv * env,array_type jarray)78*20bfefbeSAndroid Build Coastguard Worker JArray(JNIEnv* env, array_type jarray) : env_(env), jarray_(jarray), buffer_(nullptr) {
79*20bfefbeSAndroid Build Coastguard Worker if (env_ == nullptr) return;
80*20bfefbeSAndroid Build Coastguard Worker buffer_ = (env_->*JTypeTraits<T>::getArrayElements)(jarray, nullptr);
81*20bfefbeSAndroid Build Coastguard Worker }
82*20bfefbeSAndroid Build Coastguard Worker JArray(const JArray&) = delete;
JArray(JArray && rhs)83*20bfefbeSAndroid Build Coastguard Worker JArray(JArray&& rhs) : env_(rhs.env_), jarray_(rhs.jarray_), buffer_(rhs.buffer_) {
84*20bfefbeSAndroid Build Coastguard Worker rhs.env_ = nullptr;
85*20bfefbeSAndroid Build Coastguard Worker rhs.buffer_ = nullptr;
86*20bfefbeSAndroid Build Coastguard Worker }
87*20bfefbeSAndroid Build Coastguard Worker ~JArray();
88*20bfefbeSAndroid Build Coastguard Worker
89*20bfefbeSAndroid Build Coastguard Worker JArray& operator=(const JArray&) = delete;
operator =(JArray && rhs)90*20bfefbeSAndroid Build Coastguard Worker JArray& operator=(JArray&& rhs) {
91*20bfefbeSAndroid Build Coastguard Worker if (&rhs != this) {
92*20bfefbeSAndroid Build Coastguard Worker env_ = rhs.env_;
93*20bfefbeSAndroid Build Coastguard Worker jarray_ = rhs.jarray_;
94*20bfefbeSAndroid Build Coastguard Worker buffer_ = rhs.buffer_;
95*20bfefbeSAndroid Build Coastguard Worker rhs.env_ = nullptr;
96*20bfefbeSAndroid Build Coastguard Worker rhs.buffer_ = nullptr;
97*20bfefbeSAndroid Build Coastguard Worker }
98*20bfefbeSAndroid Build Coastguard Worker return *this;
99*20bfefbeSAndroid Build Coastguard Worker }
100*20bfefbeSAndroid Build Coastguard Worker
operator bool() const101*20bfefbeSAndroid Build Coastguard Worker operator bool() const { return buffer_ != nullptr; }
operator [](size_t offset) const102*20bfefbeSAndroid Build Coastguard Worker const jint& operator[](size_t offset) const { return buffer_[offset]; }
operator [](size_t offset)103*20bfefbeSAndroid Build Coastguard Worker element_type& operator[](size_t offset) { return buffer_[offset]; }
size() const104*20bfefbeSAndroid Build Coastguard Worker size_t size() const { return (env_->*JTypeTraits<T>::getArrayLength)(jarray_); }
begin()105*20bfefbeSAndroid Build Coastguard Worker element_type* begin() { return buffer_; }
end()106*20bfefbeSAndroid Build Coastguard Worker element_type* end() { return buffer_ + size(); }
begin() const107*20bfefbeSAndroid Build Coastguard Worker const element_type* begin() const { return buffer_; }
end() const108*20bfefbeSAndroid Build Coastguard Worker const element_type* end() const { return buffer_ + size(); }
109*20bfefbeSAndroid Build Coastguard Worker };
110*20bfefbeSAndroid Build Coastguard Worker
~JArray()111*20bfefbeSAndroid Build Coastguard Worker template <typename T> JArray<T>::~JArray() {
112*20bfefbeSAndroid Build Coastguard Worker if (env_ == nullptr) return;
113*20bfefbeSAndroid Build Coastguard Worker if (buffer_ == nullptr) return;
114*20bfefbeSAndroid Build Coastguard Worker (env_->*JTypeTraits<T>::releaseArrayElements)(jarray_, buffer_, 0);
115*20bfefbeSAndroid Build Coastguard Worker }
116*20bfefbeSAndroid Build Coastguard Worker
~JArray()117*20bfefbeSAndroid Build Coastguard Worker template <> JArray<jstring>::~JArray() {
118*20bfefbeSAndroid Build Coastguard Worker if (env_ == nullptr) return;
119*20bfefbeSAndroid Build Coastguard Worker if (buffer_ == nullptr) return;
120*20bfefbeSAndroid Build Coastguard Worker (env_->*JTypeTraits<jstring>::releaseArrayElements)(jarray_, buffer_);
121*20bfefbeSAndroid Build Coastguard Worker }
122*20bfefbeSAndroid Build Coastguard Worker
123*20bfefbeSAndroid Build Coastguard Worker using JIntArray = JArray<jintArray>;
124*20bfefbeSAndroid Build Coastguard Worker using JByteArray = JArray<jbyteArray>;
125*20bfefbeSAndroid Build Coastguard Worker using JString = JArray<jstring>;
126*20bfefbeSAndroid Build Coastguard Worker
127*20bfefbeSAndroid Build Coastguard Worker static std::unique_ptr<teeui::example::ITeeuiExample> sCurrentExample;
128*20bfefbeSAndroid Build Coastguard Worker
129*20bfefbeSAndroid Build Coastguard Worker /*
130*20bfefbeSAndroid Build Coastguard Worker * Class: com_android_framebufferizer_NativeRenderer
131*20bfefbeSAndroid Build Coastguard Worker * Method: setDeviceInfo
132*20bfefbeSAndroid Build Coastguard Worker * Signature: (Lcom/android/framebufferizer/utils/DeviceInfo;ZZLjava/lang/String;)I
133*20bfefbeSAndroid Build Coastguard Worker */
Java_com_android_framebufferizer_NativeRenderer_setDeviceInfo(JNIEnv * env,jclass,jobject jDeviceInfo,jboolean magnified,jboolean inverted,jstring layout_type)134*20bfefbeSAndroid Build Coastguard Worker extern "C" JNIEXPORT jint JNICALL Java_com_android_framebufferizer_NativeRenderer_setDeviceInfo(
135*20bfefbeSAndroid Build Coastguard Worker JNIEnv* env, jclass, jobject jDeviceInfo, jboolean magnified, jboolean inverted,
136*20bfefbeSAndroid Build Coastguard Worker jstring layout_type) {
137*20bfefbeSAndroid Build Coastguard Worker JString layout(env, layout_type);
138*20bfefbeSAndroid Build Coastguard Worker using namespace teeui::example;
139*20bfefbeSAndroid Build Coastguard Worker jclass cDeviceInfo = env->FindClass("Lcom/android/framebufferizer/utils/DeviceInfo;");
140*20bfefbeSAndroid Build Coastguard Worker jmethodID method = env->GetMethodID(cDeviceInfo, "getWidthPx", "()I");
141*20bfefbeSAndroid Build Coastguard Worker DeviceInfo device_info;
142*20bfefbeSAndroid Build Coastguard Worker device_info.width_ = env->CallIntMethod(jDeviceInfo, method);
143*20bfefbeSAndroid Build Coastguard Worker method = env->GetMethodID(cDeviceInfo, "getHeightPx", "()I");
144*20bfefbeSAndroid Build Coastguard Worker device_info.height_ = env->CallIntMethod(jDeviceInfo, method);
145*20bfefbeSAndroid Build Coastguard Worker method = env->GetMethodID(cDeviceInfo, "getDp2px", "()D");
146*20bfefbeSAndroid Build Coastguard Worker device_info.dp2px_ = env->CallDoubleMethod(jDeviceInfo, method);
147*20bfefbeSAndroid Build Coastguard Worker method = env->GetMethodID(cDeviceInfo, "getMm2px", "()D");
148*20bfefbeSAndroid Build Coastguard Worker device_info.mm2px_ = env->CallDoubleMethod(jDeviceInfo, method);
149*20bfefbeSAndroid Build Coastguard Worker method = env->GetMethodID(cDeviceInfo, "getPowerButtonTopMm", "()D");
150*20bfefbeSAndroid Build Coastguard Worker device_info.powerButtonTopMm_ = env->CallDoubleMethod(jDeviceInfo, method);
151*20bfefbeSAndroid Build Coastguard Worker method = env->GetMethodID(cDeviceInfo, "getPowerButtonBottomMm", "()D");
152*20bfefbeSAndroid Build Coastguard Worker device_info.powerButtonBottomMm_ = env->CallDoubleMethod(jDeviceInfo, method);
153*20bfefbeSAndroid Build Coastguard Worker method = env->GetMethodID(cDeviceInfo, "getVolUpButtonTopMm", "()D");
154*20bfefbeSAndroid Build Coastguard Worker device_info.volUpButtonTopMm_ = env->CallDoubleMethod(jDeviceInfo, method);
155*20bfefbeSAndroid Build Coastguard Worker method = env->GetMethodID(cDeviceInfo, "getVolUpButtonBottomMm", "()D");
156*20bfefbeSAndroid Build Coastguard Worker device_info.volUpButtonBottomMm_ = env->CallDoubleMethod(jDeviceInfo, method);
157*20bfefbeSAndroid Build Coastguard Worker sCurrentExample =
158*20bfefbeSAndroid Build Coastguard Worker createExample((strcmp(layout.begin(), kTouchButtonLayout) == 0) ? Examples::TouchButton
159*20bfefbeSAndroid Build Coastguard Worker : Examples::PhysButton);
160*20bfefbeSAndroid Build Coastguard Worker return sCurrentExample->setDeviceInfo(device_info, magnified, inverted);
161*20bfefbeSAndroid Build Coastguard Worker }
162*20bfefbeSAndroid Build Coastguard Worker
163*20bfefbeSAndroid Build Coastguard Worker /*
164*20bfefbeSAndroid Build Coastguard Worker * Class: com_android_framebufferizer_NativeRenderer
165*20bfefbeSAndroid Build Coastguard Worker * Method: renderBuffer
166*20bfefbeSAndroid Build Coastguard Worker * Signature: (IIIII[I)I
167*20bfefbeSAndroid Build Coastguard Worker */
Java_com_android_framebufferizer_NativeRenderer_renderBuffer(JNIEnv * env,jclass,jint x,jint y,jint width,jint height,jint lineStride,jintArray jbuffer)168*20bfefbeSAndroid Build Coastguard Worker extern "C" JNIEXPORT jint JNICALL Java_com_android_framebufferizer_NativeRenderer_renderBuffer(
169*20bfefbeSAndroid Build Coastguard Worker JNIEnv* env, jclass, jint x, jint y, jint width, jint height, jint lineStride,
170*20bfefbeSAndroid Build Coastguard Worker jintArray jbuffer) {
171*20bfefbeSAndroid Build Coastguard Worker JIntArray buffer(env, jbuffer);
172*20bfefbeSAndroid Build Coastguard Worker using namespace teeui::example;
173*20bfefbeSAndroid Build Coastguard Worker if (!buffer) return kFrameBufferError;
174*20bfefbeSAndroid Build Coastguard Worker if (!sCurrentExample) return kLayoutExampleError;
175*20bfefbeSAndroid Build Coastguard Worker return sCurrentExample->renderUIIntoBuffer((uint32_t)x, (uint32_t)y, (uint32_t)width,
176*20bfefbeSAndroid Build Coastguard Worker (uint32_t)height, (uint32_t)lineStride,
177*20bfefbeSAndroid Build Coastguard Worker (uint32_t*)buffer.begin(), buffer.size());
178*20bfefbeSAndroid Build Coastguard Worker }
179*20bfefbeSAndroid Build Coastguard Worker
180*20bfefbeSAndroid Build Coastguard Worker /*
181*20bfefbeSAndroid Build Coastguard Worker * Class: com_android_confirmationui_Translation_selectLangID
182*20bfefbeSAndroid Build Coastguard Worker * Method: selectLangID
183*20bfefbeSAndroid Build Coastguard Worker * Signature: (Ljava/lang/String;)V
184*20bfefbeSAndroid Build Coastguard Worker */
185*20bfefbeSAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL
Java_com_android_framebufferizer_NativeRenderer_setLanguage(JNIEnv * env,jclass,jstring jlang_id)186*20bfefbeSAndroid Build Coastguard Worker Java_com_android_framebufferizer_NativeRenderer_setLanguage(JNIEnv* env, jclass, jstring jlang_id) {
187*20bfefbeSAndroid Build Coastguard Worker JString lang_id(env, jlang_id);
188*20bfefbeSAndroid Build Coastguard Worker if (sCurrentExample) sCurrentExample->selectLanguage(lang_id.begin());
189*20bfefbeSAndroid Build Coastguard Worker }
190*20bfefbeSAndroid Build Coastguard Worker /*
191*20bfefbeSAndroid Build Coastguard Worker * Class: com_android_confirmationui_Translation_selectLangID
192*20bfefbeSAndroid Build Coastguard Worker * Method: selectLangID
193*20bfefbeSAndroid Build Coastguard Worker * Signature: ()[Ljava/lang/String;
194*20bfefbeSAndroid Build Coastguard Worker */
195*20bfefbeSAndroid Build Coastguard Worker extern "C" JNIEXPORT jobjectArray JNICALL
Java_com_android_framebufferizer_NativeRenderer_getLanguageIdList(JNIEnv * env,jclass)196*20bfefbeSAndroid Build Coastguard Worker Java_com_android_framebufferizer_NativeRenderer_getLanguageIdList(JNIEnv* env, jclass) {
197*20bfefbeSAndroid Build Coastguard Worker jobjectArray language_ids;
198*20bfefbeSAndroid Build Coastguard Worker teeui::localization::Languages lang_list = getLanguages();
199*20bfefbeSAndroid Build Coastguard Worker const char* const* native_data = lang_list.list;
200*20bfefbeSAndroid Build Coastguard Worker size_t list_size = lang_list.size;
201*20bfefbeSAndroid Build Coastguard Worker
202*20bfefbeSAndroid Build Coastguard Worker language_ids = (jobjectArray)env->NewObjectArray(list_size, env->FindClass("java/lang/String"),
203*20bfefbeSAndroid Build Coastguard Worker env->NewStringUTF(""));
204*20bfefbeSAndroid Build Coastguard Worker
205*20bfefbeSAndroid Build Coastguard Worker for (size_t i = 0; i < list_size; i++)
206*20bfefbeSAndroid Build Coastguard Worker env->SetObjectArrayElement(language_ids, i, env->NewStringUTF(native_data[i]));
207*20bfefbeSAndroid Build Coastguard Worker
208*20bfefbeSAndroid Build Coastguard Worker return language_ids;
209*20bfefbeSAndroid Build Coastguard Worker }
210*20bfefbeSAndroid Build Coastguard Worker
211*20bfefbeSAndroid Build Coastguard Worker /*
212*20bfefbeSAndroid Build Coastguard Worker * Class: com_android_framebufferizer_NativeRenderer
213*20bfefbeSAndroid Build Coastguard Worker * Method: getAvailableLayouts
214*20bfefbeSAndroid Build Coastguard Worker * Signature: ()[Ljava/lang/String;
215*20bfefbeSAndroid Build Coastguard Worker */
216*20bfefbeSAndroid Build Coastguard Worker extern "C" JNIEXPORT jobjectArray JNICALL
Java_com_android_framebufferizer_NativeRenderer_getAvailableLayouts(JNIEnv * env,jclass)217*20bfefbeSAndroid Build Coastguard Worker Java_com_android_framebufferizer_NativeRenderer_getAvailableLayouts(JNIEnv* env, jclass) {
218*20bfefbeSAndroid Build Coastguard Worker using namespace teeui::example;
219*20bfefbeSAndroid Build Coastguard Worker jobjectArray available_layouts;
220*20bfefbeSAndroid Build Coastguard Worker const char* const* native_data = kAvailableLayouts;
221*20bfefbeSAndroid Build Coastguard Worker size_t list_size = NUM_LAYOUTS;
222*20bfefbeSAndroid Build Coastguard Worker
223*20bfefbeSAndroid Build Coastguard Worker available_layouts = (jobjectArray)env->NewObjectArray(
224*20bfefbeSAndroid Build Coastguard Worker list_size, env->FindClass("java/lang/String"), env->NewStringUTF(""));
225*20bfefbeSAndroid Build Coastguard Worker
226*20bfefbeSAndroid Build Coastguard Worker for (size_t i = 0; i < list_size; i++)
227*20bfefbeSAndroid Build Coastguard Worker env->SetObjectArrayElement(available_layouts, i, env->NewStringUTF(native_data[i]));
228*20bfefbeSAndroid Build Coastguard Worker
229*20bfefbeSAndroid Build Coastguard Worker return available_layouts;
230*20bfefbeSAndroid Build Coastguard Worker }
231*20bfefbeSAndroid Build Coastguard Worker
232*20bfefbeSAndroid Build Coastguard Worker /*
233*20bfefbeSAndroid Build Coastguard Worker * Class: com_android_framebufferizer_NativeRenderer
234*20bfefbeSAndroid Build Coastguard Worker * Method: setConfimationMessage
235*20bfefbeSAndroid Build Coastguard Worker * Signature: (Ljava/lang/String;)V
236*20bfefbeSAndroid Build Coastguard Worker */
237*20bfefbeSAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL
Java_com_android_framebufferizer_NativeRenderer_setConfimationMessage(JNIEnv * env,jclass,jstring jConfirmationMessage)238*20bfefbeSAndroid Build Coastguard Worker Java_com_android_framebufferizer_NativeRenderer_setConfimationMessage(
239*20bfefbeSAndroid Build Coastguard Worker JNIEnv* env, jclass, jstring jConfirmationMessage) {
240*20bfefbeSAndroid Build Coastguard Worker JString confirmationMessage(env, jConfirmationMessage);
241*20bfefbeSAndroid Build Coastguard Worker if (sCurrentExample) sCurrentExample->setConfirmationMessage(confirmationMessage.begin());
242*20bfefbeSAndroid Build Coastguard Worker }
243*20bfefbeSAndroid Build Coastguard Worker
244*20bfefbeSAndroid Build Coastguard Worker /*
245*20bfefbeSAndroid Build Coastguard Worker * Class: com_android_framebufferizer_NativeRenderer
246*20bfefbeSAndroid Build Coastguard Worker * Method: onEvent
247*20bfefbeSAndroid Build Coastguard Worker * Signature: (III)I
248*20bfefbeSAndroid Build Coastguard Worker */
Java_com_android_framebufferizer_NativeRenderer_onEvent(JNIEnv *,jclass,jint x,jint y,jint event)249*20bfefbeSAndroid Build Coastguard Worker extern "C" JNIEXPORT jint JNICALL Java_com_android_framebufferizer_NativeRenderer_onEvent(
250*20bfefbeSAndroid Build Coastguard Worker JNIEnv*, jclass, jint x, jint y, jint event) {
251*20bfefbeSAndroid Build Coastguard Worker if (sCurrentExample) {
252*20bfefbeSAndroid Build Coastguard Worker return (jint)sCurrentExample->onEvent((uint32_t)x, (uint32_t)y, (uint32_t)event);
253*20bfefbeSAndroid Build Coastguard Worker }
254*20bfefbeSAndroid Build Coastguard Worker return 0;
255*20bfefbeSAndroid Build Coastguard Worker }