void callback_start(callback *c) { c->attached = false; JNIEnv *env = getJavaEnv(); if (env != NULL) { c->env = env; c->attached = true; } }
void InAppPurchaseWrapper::initializeProduct(const std::string &url, const std::vector<std::string> &productIdentifiers) const { ANativeActivity *activity = __state->activity; JNIEnv *env = getJavaEnv(); jclass nativeActivityClass = env->GetObjectClass(activity->clazz); GP_ASSERT(nativeActivityClass != NULL); jmethodID mid_startInAppSetup = env->GetMethodID(nativeActivityClass, "startInAppSetup", "()V"); GP_ASSERT(mid_startInAppSetup); env->CallVoidMethod(activity->clazz, mid_startInAppSetup); }
void InAppPurchaseWrapper::buyProduct(const InAppPurchaseItem &product) const { ANativeActivity *activity = __state->activity; JNIEnv *env = getJavaEnv(); jclass nativeActivityClass = env->GetObjectClass(activity->clazz); GP_ASSERT(nativeActivityClass != NULL); jmethodID mid_buyProduct = env->GetMethodID(nativeActivityClass, "buyProduct", "(Ljava/lang/String;)V"); GP_ASSERT(mid_buyProduct); jstring js_productIdentifier = env->NewStringUTF(product.productIdentifier.c_str()); env->CallVoidMethod(activity->clazz, mid_buyProduct, js_productIdentifier); }
bool InAppPurchaseWrapper::canMakePayments(void) const { ANativeActivity *activity = __state->activity; JNIEnv *env = getJavaEnv(); jclass nativeActivityClass = env->GetObjectClass(activity->clazz); GP_ASSERT(nativeActivityClass != NULL); jmethodID mid_canMakePayments = env->GetMethodID(nativeActivityClass, "canMakePayments", "()Z"); GP_ASSERT(mid_canMakePayments); jboolean canMakePayments = env->CallBooleanMethod(activity->clazz, mid_canMakePayments); return canMakePayments; }
void toggle_java_ref(gpointer data, GObject *object, gboolean is_last_ref) { jobject ref = g_object_get_data(object, JAVA_REF); JNIEnv *env = getJavaEnv(); if (is_last_ref) { jobject weak_ref = (*env)->NewWeakGlobalRef(env, ref); g_object_set_data(object, JAVA_REF, weak_ref); (*env)->DeleteGlobalRef(env, ref); g_debug("ref toggled to weak: %ld", (long)object); } else { jobject strong_ref = (*env)->NewGlobalRef(env, ref); g_object_set_data(object, JAVA_REF, strong_ref); (*env)->DeleteWeakGlobalRef(env, ref); g_debug("ref toggled back to strong: %ld", (long)object); } }
void InAppPurchaseWrapper::restoreTransactions(void) const { ANativeActivity *activity = __state->activity; JNIEnv *env = getJavaEnv(); jclass nativeActivityClass = env->GetObjectClass(activity->clazz); GP_ASSERT(nativeActivityClass != NULL); jmethodID mid_getExtraAreasPurchased = env->GetMethodID(nativeActivityClass, "getExtraAreasPurchased", "()Ljava/util/ArrayList;"); jobject arrayList = env->CallObjectMethod(activity->clazz, mid_getExtraAreasPurchased); jclass arrayClass = env->FindClass("java/util/ArrayList"); GP_ASSERT(arrayClass); jmethodID mid_size = env->GetMethodID(arrayClass, "size", "()I"); GP_ASSERT(mid_size); jmethodID mid_get = env->GetMethodID(arrayClass, "get", "(I)Ljava/lang/Object;"); GP_ASSERT(mid_get); jboolean isCopy; jint size = env->CallIntMethod(arrayList, mid_size); std::vector<std::string> local_skuList; // then we copy the(se) SKU(s) to be processed by checkRestorePurchase for (int i = 0; i < size; ++i) { const jstring js_sku = static_cast<const jstring>(env->CallObjectMethod(arrayList, mid_get, i)); const char *nativeSKUName = env->GetStringUTFChars(js_sku, &isCopy); local_skuList.push_back(nativeSKUName); env->ReleaseStringUTFChars(js_sku, nativeSKUName); } gameplay::InAppPurchaseWrapper &the_inAppPurchaseWrapper = gameplay::InAppPurchaseWrapper::GetUniqueInstance(); for (std::vector<gameplay::InAppPurchaseCallback *>::const_iterator cit = the_inAppPurchaseWrapper.getCallbacks().begin(); cit != the_inAppPurchaseWrapper.getCallbacks().end(); ++cit) { (*cit)->checkRestorePurchase(local_skuList); } jmethodID mid_restorePurchasedSKU = env->GetMethodID(nativeActivityClass, "restorePurchasedSKU", "(Ljava/lang/String;)V"); GP_ASSERT(mid_restorePurchasedSKU); for (std::vector<std::string>::const_iterator cit = local_skuList.begin(); cit != local_skuList.end(); ++cit) { const jstring js_sku = env->NewStringUTF(cit->c_str()); env->CallVoidMethod(activity->clazz, mid_restorePurchasedSKU, js_sku); } }
std::string InAppPurchaseWrapper::getPathForContent(const std::string &productIdentifier) const { ANativeActivity *activity = __state->activity; JNIEnv *env = getJavaEnv(); jclass nativeActivityClass = env->GetObjectClass(activity->clazz); GP_ASSERT(nativeActivityClass); jmethodID mid_getExternalFilesDir = env->GetMethodID(nativeActivityClass, "getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;"); GP_ASSERT(mid_getFilesDir); jobject fileObject = env->CallObjectMethod(activity->clazz, mid_getExternalFilesDir, NULL); GP_ASSERT(fileObject); jclass fileClass = env->GetObjectClass(fileObject); GP_ASSERT(fileClass); jmethodID mid_getAbsolutePath= env->GetMethodID(fileClass, "getAbsolutePath", "()Ljava/lang/String;"); GP_ASSERT(mid_getAbsolutePath); jstring path4Content = static_cast<jstring>(env->CallObjectMethod(fileObject, mid_getAbsolutePath)); jboolean isCopy; const char *nativePath = env->GetStringUTFChars(path4Content, &isCopy); const std::string result = nativePath + std::string("/" + productIdentifier + "/"); env->ReleaseStringUTFChars(path4Content, nativePath); return result; }