From b2b4ae066175e30dc3b7558d7c91283f730be67c Mon Sep 17 00:00:00 2001 From: Fabio Lenherr / DashieTM Date: Sat, 2 Dec 2023 17:13:15 +0100 Subject: [PATCH] feat: Initial work on bluetooth on and off --- src/components/bluetooth/bluetoothBox.rs | 48 ++++++++++++--------- src/components/window/handleSidebarClick.rs | 4 +- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/components/bluetooth/bluetoothBox.rs b/src/components/bluetooth/bluetoothBox.rs index 17a483e..c8f68ab 100644 --- a/src/components/bluetooth/bluetoothBox.rs +++ b/src/components/bluetooth/bluetoothBox.rs @@ -30,30 +30,38 @@ unsafe impl Send for BluetoothBox {} unsafe impl Sync for BluetoothBox {} impl BluetoothBox { - pub fn new() -> Self { - Object::builder().build() + pub fn new(listeners: Arc) -> Arc { + let obj: Arc = Arc::new(Object::builder().build()); + setupCallbacks(listeners, obj) } - pub fn setupCallbacks(&self) { - let selfImp = self.imp(); - selfImp.resetVisibility.set_activatable(true); - selfImp - .resetVisibility - .set_action_name(Some("navigation.push")); - selfImp - .resetVisibility - .set_action_target_value(Some(&Variant::from("visibility"))); - - selfImp - .resetBluetoothMainTab - .set_action_name(Some("navigation.pop")); - } + pub fn setupCallbacks(&self) {} } -impl Default for BluetoothBox { - fn default() -> Self { - Self::new() - } +fn setupCallbacks( + listeners: Arc, + bluetooth_box: Arc, +) -> Arc { + let imp = bluetooth_box.imp(); + // let bluetooth_box_ref = bluetooth_box.clone(); + imp.resetVisibility.set_activatable(true); + imp.resetVisibility.set_action_name(Some("navigation.push")); + imp.resetVisibility + .set_action_target_value(Some(&Variant::from("visibility"))); + + imp.resetBluetoothMainTab + .set_action_name(Some("navigation.pop")); + // TODO add a manual search button here + imp.resetBluetoothSwitch.connect_state_set(move |_, state| { + // TODO restart bluetooth search here. + if !state { + listeners.bluetooth_listener.store(false, Ordering::SeqCst); + } else { + listeners.bluetooth_listener.store(true, Ordering::SeqCst); + } + glib::Propagation::Proceed + }); + bluetooth_box } pub fn populate_conntected_bluetooth_devices(bluetooth_box: Arc) { diff --git a/src/components/window/handleSidebarClick.rs b/src/components/window/handleSidebarClick.rs index 00e861e..04028e3 100644 --- a/src/components/window/handleSidebarClick.rs +++ b/src/components/window/handleSidebarClick.rs @@ -23,7 +23,7 @@ pub const HANDLE_CONNECTIVITY_CLICK: fn(Arc, FlowBox) = show_stored_connections(wifiBox.clone()); scanForWifi(wifiBox.clone()); let wifiFrame = wrapInFrame(SettingBox::new(&*wifiBox)); - let bluetooth_box = Arc::new(BluetoothBox::new()); + let bluetooth_box = BluetoothBox::new(listeners.clone()); populate_conntected_bluetooth_devices(bluetooth_box.clone()); start_bluetooth_listener(listeners.clone(), bluetooth_box.clone()); let bluetoothFrame = wrapInFrame(SettingBox::new(&*bluetooth_box)); @@ -51,7 +51,7 @@ pub const HANDLE_BLUETOOTH_CLICK: fn(Arc, FlowBox) = |listeners: Arc, resetMain: FlowBox| { listeners.stop_network_listener(); listeners.stop_audio_listener(); - let bluetooth_box = Arc::new(BluetoothBox::new()); + let bluetooth_box = BluetoothBox::new(listeners.clone()); start_bluetooth_listener(listeners.clone(), bluetooth_box.clone()); populate_conntected_bluetooth_devices(bluetooth_box.clone()); let bluetoothFrame = wrapInFrame(SettingBox::new(&*bluetooth_box));