/* This file is part of DarkFi (https://dark.fi)
*
* Copyright (C) 2020-2026 Dyne.org foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
use miniquad::native::android::{self, ndk_sys, ndk_utils};
use parking_lot::Mutex as SyncMutex;
use std::sync::LazyLock;
type Insets = [f32; 4];
type InsetsSender = async_channel::Sender;
struct InsetsGlobals {
sender: Option,
insets: Insets,
}
static GLOBALS: LazyLock> =
LazyLock::new(|| SyncMutex::new(InsetsGlobals { sender: None, insets: [0.; 4] }));
pub fn set_sender(sender: InsetsSender) {
GLOBALS.lock().sender = Some(sender);
}
pub fn get_insets() -> Insets {
GLOBALS.lock().insets.clone()
}
#[no_mangle]
pub unsafe extern "C" fn Java_darkfi_darkfi_1app_ResizingLayout_onApplyInsets(
_env: *mut ndk_sys::JNIEnv,
_: ndk_sys::jobject,
sys_left: ndk_sys::jint,
sys_top: ndk_sys::jint,
sys_right: ndk_sys::jint,
sys_bottom: ndk_sys::jint,
ime_left: ndk_sys::jint,
ime_top: ndk_sys::jint,
ime_right: ndk_sys::jint,
ime_bottom: ndk_sys::jint,
) {
debug!(
target: "android::insets",
"onApplyInsets() \
sys=({sys_left}, {sys_top}, {sys_right}, {sys_bottom}) \
ime=({ime_left}, {ime_top}, {ime_right}, {ime_bottom}) \
)"
);
let mut globals = GLOBALS.lock();
globals.insets = [sys_left as f32, sys_top as f32, sys_right as f32, sys_bottom as f32];
if ime_bottom > 0 {
globals.insets[3] = ime_bottom as f32;
}
if let Some(sender) = &globals.sender {
let _ = sender.try_send(globals.insets.clone());
} else {
warn!(target: "android::insets", "Dropping insets notify since no sender is set");
}
}