From eaff333bf526225cfca84cd686fe5332b852e506 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Sun, 31 Oct 2010 10:35:55 +0000 Subject: Use a Native keyboard GUI instead of rockbox's internal one on android git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28407 a1c6a512-1295-4272-9138-f99709370657 --- apps/hosted/keyboard.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 apps/hosted/keyboard.c (limited to 'apps/hosted') diff --git a/apps/hosted/keyboard.c b/apps/hosted/keyboard.c new file mode 100644 index 0000000000..b395168156 --- /dev/null +++ b/apps/hosted/keyboard.c @@ -0,0 +1,86 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2010 Jonathan Gordon + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include "config.h" + +#if (CONFIG_PLATFORM&PLATFORM_ANDROID) +#include +#include +#include +#include + +extern JNIEnv *env_ptr; +static jclass RockboxKeyboardInput_class = NULL; +static jobject RockboxKeyboardInput_instance; +static jmethodID kbd_inputfunc, kbd_result; + +static void kdb_init(void) +{ + JNIEnv e = *env_ptr; + jmethodID kbd_is_usable; + if (RockboxKeyboardInput_class == NULL) + { + /* get the class and its constructor */ + RockboxKeyboardInput_class = e->FindClass(env_ptr, "org/rockbox/RockboxKeyboardInput"); + jmethodID constructor = e->GetMethodID(env_ptr, RockboxKeyboardInput_class, "", "()V"); + RockboxKeyboardInput_instance = e->NewObject(env_ptr, RockboxKeyboardInput_class, constructor); + kbd_inputfunc = e->GetMethodID(env_ptr, RockboxKeyboardInput_class, + "kbd_input", "(Ljava/lang/String;)V"); + kbd_result = e->GetMethodID(env_ptr, RockboxKeyboardInput_class, + "get_result", "()Ljava/lang/String;"); + } + /* need to get it every time incase the activity died/restarted */ + kbd_is_usable = e->GetMethodID(env_ptr, RockboxKeyboardInput_class, + "is_usable", "()Z"); + while (!e->CallBooleanMethod(env_ptr, RockboxKeyboardInput_instance, kbd_is_usable)) + sleep(HZ/10); +} + +int kbd_input(char* text, int buflen) +{ + JNIEnv e = *env_ptr; + jstring str = e->NewStringUTF(env_ptr, text); + jobject ret; + const char* retchars; + kdb_init(); + + e->CallVoidMethod(env_ptr, RockboxKeyboardInput_instance, kbd_inputfunc, str); + + do { + sleep(HZ/10); + ret = e->CallObjectMethod(env_ptr, RockboxKeyboardInput_instance, kbd_result); + } while (!ret); + + e->ReleaseStringChars(env_ptr, str, NULL); + retchars = e->GetStringUTFChars(env_ptr, ret, 0); + if (retchars[0]) + snprintf(text, buflen, retchars); + e->ReleaseStringUTFChars(env_ptr, ret, retchars); + + return retchars[0]?0:1; /* return 0 on success */ +} + +int load_kbd(unsigned char* filename) +{ + (void)filename; + return 1; +} + +#endif -- cgit v1.2.3