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 jobject RockboxYesno_instance
= NULL
;
34 static jmethodID yesno_func
;
35 static struct semaphore yesno_done
;
38 JNIEXPORT
void JNICALL
39 Java_org_rockbox_RockboxYesno_put_1result(JNIEnv
*env
, jobject
this, jboolean result
)
44 semaphore_release(&yesno_done
);
47 static void yesno_init(void)
50 static jmethodID yesno_is_usable
;
51 if (RockboxYesno_instance
== NULL
)
53 semaphore_init(&yesno_done
, 1, 0);
54 /* get the class and its constructor */
55 jclass RockboxYesno_class
= e
->FindClass(env_ptr
,
56 "org/rockbox/RockboxYesno");
57 jmethodID constructor
= e
->GetMethodID(env_ptr
,
60 RockboxYesno_instance
= e
->NewObject(env_ptr
,
63 yesno_func
= e
->GetMethodID(env_ptr
, RockboxYesno_class
,
67 "Ljava/lang/String;)V");
68 yesno_is_usable
= e
->GetMethodID(env_ptr
, RockboxYesno_class
,
71 /* need to get it every time incase the activity died/restarted */
72 while (!e
->CallBooleanMethod(env_ptr
, RockboxYesno_instance
,
77 jstring
build_message(const struct text_message
*message
)
82 for(i
=0; i
<message
->nb_lines
; i
++)
84 char* text
= P2STR((unsigned char *)message
->message_lines
[i
]);
86 strlcat(msg
, "\n", 1024);
87 strlcat(msg
, text
, 1024);
89 /* make sure the questions end in a ?, for some reason they dont! */
90 if (!strrchr(msg
, '?'))
91 strlcat(msg
, "?", 1024);
92 return e
->NewStringUTF(env_ptr
, msg
);
95 enum yesno_res
gui_syncyesno_run(const struct text_message
* main_message
,
96 const struct text_message
* yes_message
,
97 const struct text_message
* no_message
)
104 jstring message
= build_message(main_message
);
105 jstring yes
= (*env_ptr
)->NewStringUTF(env_ptr
, str(LANG_SET_BOOL_YES
));
106 jstring no
= (*env_ptr
)->NewStringUTF(env_ptr
, str(LANG_SET_BOOL_NO
));
108 e
->CallVoidMethod(env_ptr
, RockboxYesno_instance
, yesno_func
,
111 semaphore_wait(&yesno_done
, TIMEOUT_BLOCK
);
113 e
->DeleteLocalRef(env_ptr
, message
);
114 e
->DeleteLocalRef(env_ptr
, yes
);
115 e
->DeleteLocalRef(env_ptr
, no
);
117 return ret
? YESNO_YES
: YESNO_NO
;