8#ifndef META_OCEAN_PLATFORM_ANDROID_UTILITIES_H
9#define META_OCEAN_PLATFORM_ANDROID_UTILITIES_H
60 static jmethodID
getMethodId(JNIEnv& jniEnvironment, jclass javaClass,
const std::string& name,
const std::string& signature);
70 static jmethodID
getStaticMethodId(JNIEnv& jniEnvironment, jclass javaClass,
const std::string& name,
const std::string& signature);
80 static jfieldID
getFieldId(JNIEnv& jniEnvironment, jclass javaClass,
const std::string& name,
const std::string& signature);
90 static jfieldID
getStaticFieldId(JNIEnv& jniEnvironment, jclass javaClass,
const std::string& name,
const std::string& signature);
102 template <
typename T = jobject,
typename... TArgs>
103 static ScopedJNILocalObject<T> callObjectMethod(JNIEnv& jniEnvironment, jobject
object, jmethodID methodId, TArgs&&... args);
115 template <
typename T = jobject,
typename... TArgs>
116 static ScopedJNILocalObject<T> callStaticObjectMethod(JNIEnv& jniEnvironment, jclass javaClass, jmethodID methodId, TArgs&&... args);
128 template <
typename T = jobject,
typename... TArgs>
129 static ScopedJNILocalObject<T> newObject(JNIEnv& jniEnvironment, jclass javaClass, jmethodID methodId, TArgs&&... args);
140 template <
typename... TArgs>
141 static bool callVoidMethod(JNIEnv& jniEnvironment, jobject
object, jmethodID methodId, TArgs&&... args);
154 template <
typename... TArgs>
155 static bool callBooleanMethod(JNIEnv& jniEnvironment, jobject
object, jmethodID methodId,
bool& returnValue, TArgs&&... args);
168 template <
typename... TArgs>
169 static bool callStaticBooleanMethod(JNIEnv& jniEnvironment, jclass javaClass, jmethodID methodId,
bool& returnValue, TArgs&&... args);
182 template <
typename... TArgs>
183 static bool callIntMethod(JNIEnv& jniEnvironment, jobject
object, jmethodID methodId, int32_t& returnValue, TArgs&&... args);
196 template <
typename... TArgs>
197 static bool callStaticIntMethod(JNIEnv& jniEnvironment, jclass javaClass, jmethodID methodId, int32_t& returnValue, TArgs&&... args);
210 template <
typename... TArgs>
211 static bool callFloatMethod(JNIEnv& jniEnvironment, jobject
object, jmethodID methodId,
float& returnValue, TArgs&&... args);
219 static std::string
toAString(JNIEnv* env, jstring javaString);
227 static jstring
toJavaString(JNIEnv* env,
const std::string& stdString);
253 static bool toVector(JNIEnv* env, jobject javaIntegerList, std::vector<int>& values);
262 static bool className(JNIEnv* env, jobject
object, std::string& name);
272 static bool manifestVersion(JavaVM* javaVM, jobject activity,
int& versionCode, std::string& versionName);
293 static bool manifestSdkVersions(JNIEnv* env, jobject activity,
unsigned int& minSdkVersion,
unsigned int& targetSdkVersion);
359 static bool sendIntentToComponent(JNIEnv* env, jobject activity,
const std::string& packageName,
const std::string& className,
const std::string& extraText);
368 static bool startActivity(JNIEnv* env, jobject rootActivity,
const std::string& activityClassName);
379 static bool connectToWifi(JNIEnv* env, jobject activity,
const std::string& ssid,
const std::string& password);
417 static bool triggerVibration(JNIEnv* env, jobject activity,
unsigned int intensity = 1u,
const unsigned int duration = 50u);
439 template <
typename... TArgs>
440 static constexpr bool isValidArgumentTypes();
443template <
typename... TArgs>
446 return ((std::is_pointer<
typename std::decay<TArgs>::type>::value || std::is_arithmetic<
typename std::decay<TArgs>::type>::value) && ...);
449template <
typename T,
typename... TArgs>
452 static_assert(
isValidArgumentTypes<TArgs...>(),
"A JNI argument must be a JNI reference or a JNI primitive!");
454 ocean_assert(
object !=
nullptr);
455 ocean_assert(methodId !=
nullptr);
457 ScopedJNILocalObject<T> result(jniEnvironment, T(jniEnvironment.CallObjectMethod(
object, methodId, std::forward<TArgs>(args)...)));
469template <
typename T,
typename... TArgs>
472 static_assert(
isValidArgumentTypes<TArgs...>(),
"A JNI argument must be a JNI reference or a JNI primitive!");
474 ocean_assert(javaClass !=
nullptr);
475 ocean_assert(methodId !=
nullptr);
477 ScopedJNILocalObject<T> result(jniEnvironment, T(jniEnvironment.CallStaticObjectMethod(javaClass, methodId, std::forward<TArgs>(args)...)));
487template <
typename T,
typename... TArgs>
490 static_assert(
isValidArgumentTypes<TArgs...>(),
"A JNI argument must be a JNI reference or a JNI primitive!");
492 ocean_assert(javaClass !=
nullptr);
493 ocean_assert(methodId !=
nullptr);
495 ScopedJNILocalObject<T> result(jniEnvironment, T(jniEnvironment.NewObject(javaClass, methodId, std::forward<TArgs>(args)...)));
505template <
typename... TArgs>
508 static_assert(
isValidArgumentTypes<TArgs...>(),
"A JNI argument must be a JNI reference or a JNI primitive!");
510 ocean_assert(
object !=
nullptr);
511 ocean_assert(methodId !=
nullptr);
513 jniEnvironment.CallVoidMethod(
object, methodId, std::forward<TArgs>(args)...);
518template <
typename... TArgs>
521 static_assert(
isValidArgumentTypes<TArgs...>(),
"A JNI argument must be a JNI reference or a JNI primitive!");
523 ocean_assert(
object !=
nullptr);
524 ocean_assert(methodId !=
nullptr);
526 const jboolean result = jniEnvironment.CallBooleanMethod(
object, methodId, std::forward<TArgs>(args)...);
533 returnValue = result == JNI_TRUE;
538template <
typename... TArgs>
541 static_assert(
isValidArgumentTypes<TArgs...>(),
"A JNI argument must be a JNI reference or a JNI primitive!");
543 ocean_assert(javaClass !=
nullptr);
544 ocean_assert(methodId !=
nullptr);
546 const jboolean result = jniEnvironment.CallStaticBooleanMethod(javaClass, methodId, std::forward<TArgs>(args)...);
553 returnValue = result == JNI_TRUE;
558template <
typename... TArgs>
561 static_assert(
isValidArgumentTypes<TArgs...>(),
"A JNI argument must be a JNI reference or a JNI primitive!");
563 ocean_assert(
object !=
nullptr);
564 ocean_assert(methodId !=
nullptr);
566 const jint result = jniEnvironment.CallIntMethod(
object, methodId, std::forward<TArgs>(args)...);
573 returnValue = int32_t(result);
578template <
typename... TArgs>
581 static_assert(
isValidArgumentTypes<TArgs...>(),
"A JNI argument must be a JNI reference or a JNI primitive!");
583 ocean_assert(javaClass !=
nullptr);
584 ocean_assert(methodId !=
nullptr);
586 const jint result = jniEnvironment.CallStaticIntMethod(javaClass, methodId, std::forward<TArgs>(args)...);
593 returnValue = int32_t(result);
598template <
typename... TArgs>
601 static_assert(
isValidArgumentTypes<TArgs...>(),
"A JNI argument must be a JNI reference or a JNI primitive!");
603 ocean_assert(
object !=
nullptr);
604 ocean_assert(methodId !=
nullptr);
606 const jfloat result = jniEnvironment.CallFloatMethod(
object, methodId, std::forward<TArgs>(args)...);
613 returnValue = float(result);
std::vector< std::string > Strings
Definition of a vector holding strings.
Definition Base.h:162
The namespace covering the entire Ocean framework.
Definition Accessor.h:15