use super::java::{call_void, new_object, JavaClass, JavaRef, JavaValue};
use super::natives::{next_handle, NATIVE_CLICK_LISTENER};
use std::cell::RefCell;
use std::collections::HashMap;
use std::rc::Rc;
ferroui_base::ferro_thread_local! {
static CLICK_HANDLERS: RefCell<HashMap<i64, Rc<dyn Fn()>>> = RefCell::new(HashMap::new());
}
pub fn set_on_click_listener(view: &dyn JavaRef, handler: Rc<dyn Fn()>) {
let handle = next_handle();
CLICK_HANDLERS.with(|handlers| handlers.borrow_mut().insert(handle, handler));
let listener = new_object(&JavaClass::find(NATIVE_CLICK_LISTENER), "(J)V", &[JavaValue::Long(handle)]);
call_void(
view,
"setOnClickListener",
"(Landroid/view/View$OnClickListener;)V",
&[JavaValue::Object(Some(&listener))],
);
}
pub(crate) fn on_click(handle: i64) {
let handler = CLICK_HANDLERS.with(|handlers| handlers.borrow().get(&handle).cloned());
if let Some(handler) = handler {
handler();
}
}