1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
10 * Copyright (C) 2010 Jonathan Gordon
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
23 #if (CONFIG_PLATFORM&PLATFORM_ANDROID)
32 extern JNIEnv
*env_ptr
;
33 static jclass RockboxYesno_class
= NULL
;
34 static jobject RockboxYesno_instance
= NULL
;
35 static jmethodID yesno_func
;
36 static struct wakeup yesno_wakeup
;
39 JNIEXPORT
void JNICALL
40 Java_org_rockbox_RockboxYesno_put_1result(JNIEnv
*env
, jobject
this, jboolean result
)
45 wakeup_signal(&yesno_wakeup
);
48 static void yesno_init(void)
51 static jmethodID yesno_is_usable
;
52 if (RockboxYesno_class
== NULL
)
54 wakeup_init(&yesno_wakeup
);
55 /* get the class and its constructor */
56 RockboxYesno_class
= e
->FindClass(env_ptr
,
57 "org/rockbox/RockboxYesno");
58 jmethodID constructor
= e
->GetMethodID(env_ptr
,
61 RockboxYesno_instance
= e
->NewObject(env_ptr
,
64 yesno_func
= e
->GetMethodID(env_ptr
, RockboxYesno_class
,
68 "Ljava/lang/String;)V");
69 yesno_is_usable
= e
->GetMethodID(env_ptr
, RockboxYesno_class
,
72 /* need to get it every time incase the activity died/restarted */
73 while (!e
->CallBooleanMethod(env_ptr
, RockboxYesno_instance
,
78 jstring
build_message(const struct text_message
*message
)
83 for(i
=0; i
<message
->nb_lines
; i
++)
85 char* text
= P2STR((unsigned char *)message
->message_lines
[i
]);
87 strlcat(msg
, "\n", 1024);
88 strlcat(msg
, text
, 1024);
90 /* make sure the questions end in a ?, for some reason they dont! */
91 if (!strrchr(msg
, '?'))
92 strlcat(msg
, "?", 1024);
93 return e
->NewStringUTF(env_ptr
, msg
);
96 enum yesno_res
gui_syncyesno_run(const struct text_message
* main_message
,
97 const struct text_message
* yes_message
,
98 const struct text_message
* no_message
)
105 jstring message
= build_message(main_message
);
106 jstring yes
= (*env_ptr
)->NewStringUTF(env_ptr
, str(LANG_SET_BOOL_YES
));
107 jstring no
= (*env_ptr
)->NewStringUTF(env_ptr
, str(LANG_SET_BOOL_NO
));
109 e
->CallVoidMethod(env_ptr
, RockboxYesno_instance
, yesno_func
,
112 wakeup_wait(&yesno_wakeup
, TIMEOUT_BLOCK
);
114 e
->DeleteLocalRef(env_ptr
, message
);
115 e
->DeleteLocalRef(env_ptr
, yes
);
116 e
->DeleteLocalRef(env_ptr
, no
);
118 return ret
? YESNO_YES
: YESNO_NO
;