Exemplo n.º 1
0
local_ref<jstring> make_jstring(const char* utf8) {
  if (!utf8) {
    return {};
  }
  const auto env = internal::getEnv();
  size_t len;
  size_t modlen = detail::modifiedLength(reinterpret_cast<const uint8_t*>(utf8), &len);
  jstring result;
  if (modlen == len) {
    // The only difference between utf8 and modifiedUTF8 is in encoding 4-byte UTF8 chars
    // and '\0' that is encoded on 2 bytes.
    //
    // Since modifiedUTF8-encoded string can be no shorter than it's UTF8 conterpart we
    // know that if those two strings are of the same length we don't need to do any
    // conversion -> no 4-byte chars nor '\0'.
    result = env->NewStringUTF(utf8);
  } else {
    auto modified = std::vector<char>(modlen + 1); // allocate extra byte for \0
    detail::utf8ToModifiedUTF8(
      reinterpret_cast<const uint8_t*>(utf8), len,
      reinterpret_cast<uint8_t*>(modified.data()), modified.size());
    result = env->NewStringUTF(modified.data());
  }
  FACEBOOK_JNI_THROW_PENDING_EXCEPTION();
  return adopt_local(result);
}
Exemplo n.º 2
0
void JniFirebase::AuthWithPassword (const char* email, const char* password, long callback) {
    auto env = getEnv();
    if (!GetClass(env, "jnistub/AuthPasswordStub", &s_passwordClass)) {
        return;
    }
    
    if (!GetMethod(env, s_passwordClass, "<init>",
                   "(Lcom/firebase/client/Firebase;JLjava/lang/String;Ljava/lang/String;)V", &s_passwordCtor)) {
        return;
    }
    
    JOBJECT localRef = JOBJECT(env,
                               env->NewObject(s_passwordClass, s_passwordCtor, getJniObject(),
                                              (jlong)callback,
                                              (jstring)JSTRING(env, env->NewStringUTF(email)),
                                              (jstring)JSTRING(env, env->NewStringUTF(password))));
}
Exemplo n.º 3
0
void JniFirebase::AuthWithOAuthToken (const char* provider, const char* token, long callback) {
    auto env = getEnv();
    if (!GetClass(env, "jnistub/AuthOAuthStub", &s_oauthClass)) {
        return;
    }
    
    if (!GetMethod(env, s_oauthClass, "<init>",
                   "(Lcom/firebase/client/Firebase;JLjava/lang/String;Ljava/lang/String;)V",
                   &s_oauthCtor)) {
        return;
    }
    
    JOBJECT localRef = JOBJECT(env,
                               env->NewObject(s_oauthClass, s_oauthCtor, getJniObject(),
                                              (jlong)callback,
                                              (jstring)JSTRING(env, env->NewStringUTF(provider)),
                                              (jstring)JSTRING(env, env->NewStringUTF(token))));
}
Exemplo n.º 4
0
	void _copyString(const std::string &value) {
		auto env = spjni::getJniEnv();
		auto clipboard = spjni::getService(spjni::Service::Clipboard, env);
		auto clipboardClass = env->GetObjectClass(clipboard);
		auto method = spjni::getMethodID(env, clipboardClass, "copyStringToClipboard", "(Ljava/lang/String;)V");
		if (method) {
			auto str = env->NewStringUTF(value.c_str());
			env->CallVoidMethod(clipboard, method, str);
			env->DeleteLocalRef(str);
		}
	}
Exemplo n.º 5
0
void JniFirebase::SetString(const char *value) {
    if (!m_firebase) {
        return;
    }
    auto env = getEnv();
    
    if (!GetMethod(env, s_firebaseClass, s_firebaseSetValueName, s_firebaseSetValueSig, &s_firebaseSetValue)) {
        return;
    }
    env->CallVoidMethod(m_firebase, s_firebaseSetValue, (jstring)JSTRING(env, env->NewStringUTF(value)));
}
Exemplo n.º 6
0
JniFirebase::JniFirebase(const char* path) {
    auto env = getEnv();
    
    if (!GetClass(env, "com/firebase/client/Firebase", &s_firebaseClass)) {
        return;
    }
        
    if (!GetMethod(env, s_firebaseClass, "<init>", "(Ljava/lang/String;)V", &s_firebaseCtor)) {
        return;
    }
        
    JOBJECT localRef = JOBJECT(env, env->NewObject(s_firebaseClass, s_firebaseCtor,
                                                  (jstring)JSTRING(env, env->NewStringUTF(path))));
    m_firebase = env->NewGlobalRef(localRef);
}
Exemplo n.º 7
0
void JniFirebase::SetJson(const char *value) {
    auto env = getEnv();
    
    if (s_objectMapperInstance == NULL) {
        lock<std::mutex> lock(s_objectMapperLock);
        if (s_objectMapperInstance == NULL) {
            if (!GetClass(env, "java/util/HashMap", &s_objectClass)) {
                return;
            }

            if (!GetClass(env, s_objectMapperClassName, &s_objectMapperClass)) {
                return;
            }

            jmethodID ctor = NULL;
            if (!GetMethod(env, s_objectMapperClass, "<init>", "()V", &ctor))
            {
                return;
            }

            if (!GetMethod(env, s_objectMapperClass, s_objectMapperReadValueName, s_objectMapperReadValueSig, &s_objectMapperReadValue)) {
                return;
            }

            JOBJECT localRef = JOBJECT(env, env->NewObject(s_objectMapperClass, ctor));
            s_objectMapperInstance = env->NewGlobalRef(localRef);
        }
    }
    
    JOBJECT localValue = JOBJECT(env,
                                env->CallObjectMethod(s_objectMapperInstance, s_objectMapperReadValue,
                                                      (jstring)JSTRING(env, env->NewStringUTF(value)), s_objectClass));

    if (env->ExceptionCheck() == JNI_TRUE) {
        SetString(GetJNIExceptionDescription(env, env->ExceptionOccurred()));
        return;
    }
    
    if (!GetMethod(env, s_firebaseClass, s_firebaseSetValueName, s_firebaseSetValueSig, &s_firebaseSetValue)) {
        return;
    }
    
    env->CallVoidMethod(m_firebase, s_firebaseSetValue, (jobject)localValue);
}
Exemplo n.º 8
0
String::String(const char* string):
    CharSequence(NewStringUTF(string))
{
    Construct();
}
Exemplo n.º 9
0
/*
 * Class:     java_lang_VMClassRegistry
 * Method:    getSystemPackages
 * Signature: (I)[[Ljava/lang/String;
 */
JNIEXPORT jobjectArray JNICALL Java_java_lang_VMClassRegistry_getSystemPackages
  (JNIEnv *jenv, jclass, jint len)
{
    Global_Env* genv = VM_Global_State::loader_env;
    ClassLoader* cl = static_cast<ClassLoader*>
        (genv->bootstrap_class_loader);
    Package_Table* ptab = cl->getPackageTable();
    cl->Lock();
    unsigned p_num = (unsigned)ptab->size();
    if (p_num == (unsigned)len) 
    {
        cl->Unlock();
        return NULL;
    }
    const char ** pkgs = (const char **)STD_MALLOC(p_num * 2 * sizeof(char*));
    size_t buf_len = 0;
    unsigned index = 0;
    for (Package_Table::const_iterator it = ptab->begin(), end = ptab->end(); 
        it != end; ++it)
    {
        const char* name = pkgs[index++] = (*it).first->bytes;
        pkgs[index++] = (*it).second->get_jar();
        size_t name_len = (*it).first->len;
        if (name_len > buf_len) {
            buf_len = name_len;
        }
    }
    cl->Unlock();

    jclass string_class = struct_Class_to_java_lang_Class_Handle(genv->JavaLangString_Class);
    static Class* aos = genv->LoadCoreClass("[Ljava/lang/String;");
    jclass string_array_class = struct_Class_to_java_lang_Class_Handle(aos);
    assert(string_class);
    assert(string_array_class);
        
    jobjectArray result = NewObjectArray(jenv, p_num, string_array_class, NULL);
    if (result) 
    {
        char* buf = (char*)STD_MALLOC(buf_len + 1);
        p_num *= 2;
        for (index = 0; index < p_num; )
        {
            jobjectArray pair = NewObjectArray(jenv, 2, string_class, NULL);
            if (!pair) {
                break;
            }
            SetObjectArrayElement(jenv, result, index/2, pair);

            char* name = strcpy(buf, pkgs[index++]);
            for (char* c = name; *c != '\0'; ++c) {
                if (*c == '/') {
                    *c = '.';
                }
            }
            jstring jname = NewStringUTF(jenv, name);
            if (!jname) {
                break;
            }
            SetObjectArrayElement(jenv, pair, 0, jname);

            const char * jar = pkgs[index++];
            if (jar) {
                jstring js = NewStringUTF(jenv, jar);
                if (!js) break;
                SetObjectArrayElement(jenv, pair, 1, js);
            }
        }
        STD_FREE(buf);
    }

    STD_FREE(pkgs);
    
    assert(result || exn_raised());
    return result;
}
Exemplo n.º 10
0
			//------------------------------------------------------------------------------
			//------------------------------------------------------------------------------
			jstring CreateJStringFromSTDString(const std::string& in_string)
			{
				auto environment = JavaVirtualMachine::Get()->GetJNIEnvironment();
				jstring output = environment->NewStringUTF(in_string.c_str());
				return output;
			}
Exemplo n.º 11
0
JniFirebase* JniFirebase::Child(const char *value) {
    if (!m_firebase) {
        return NULL;
    }
    auto env = getEnv();
    
    if (!GetMethod(env, s_firebaseClass, s_firebaseChildName, s_firebaseChildSig, &s_firebaseChild)) {
        return NULL;
    }
    JOBJECT childFirebase = JOBJECT(env, env->CallObjectMethod(m_firebase, s_firebaseChild, (jstring)JSTRING(env, env->NewStringUTF(value))));
    return new JniFirebase(childFirebase);
}