summaryrefslogtreecommitdiff
path: root/system/gd/rust/linux/stack/src
diff options
context:
space:
mode:
Diffstat (limited to 'system/gd/rust/linux/stack/src')
-rw-r--r--system/gd/rust/linux/stack/src/bluetooth.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/system/gd/rust/linux/stack/src/bluetooth.rs b/system/gd/rust/linux/stack/src/bluetooth.rs
index f2a610d83b..3728d1a04f 100644
--- a/system/gd/rust/linux/stack/src/bluetooth.rs
+++ b/system/gd/rust/linux/stack/src/bluetooth.rs
@@ -131,6 +131,9 @@ pub trait IBluetooth {
/// Gets the alias of the remote device.
fn get_remote_alias(&self, device: BluetoothDevice) -> String;
+ /// Sets the alias of the remote device.
+ fn set_remote_alias(&mut self, device: BluetoothDevice, new_alias: String);
+
/// Gets the class of the remote device.
fn get_remote_class(&self, device: BluetoothDevice) -> u32;
@@ -399,6 +402,16 @@ impl Bluetooth {
self.bonded_devices.get(&device.address).or_else(|| self.found_devices.get(&device.address))
}
+ fn get_remote_device_if_found_mut(
+ &mut self,
+ device: &BluetoothDevice,
+ ) -> Option<&mut BluetoothDeviceContext> {
+ match self.bonded_devices.get_mut(&device.address) {
+ None => self.found_devices.get_mut(&device.address),
+ some => some,
+ }
+ }
+
fn get_remote_device_property(
&self,
device: &BluetoothDevice,
@@ -407,6 +420,31 @@ impl Bluetooth {
self.get_remote_device_if_found(&device)
.and_then(|d| d.properties.get(property_type).and_then(|p| Some(p.clone())))
}
+
+ fn set_remote_device_property(
+ &mut self,
+ device: &BluetoothDevice,
+ property_type: BtPropertyType,
+ property: BluetoothProperty,
+ ) -> Result<(), ()> {
+ let mut remote_device = match self.get_remote_device_if_found_mut(&device) {
+ Some(d) => d,
+ None => {
+ return Err(());
+ }
+ };
+
+ let mut addr = RawAddress::from_string(device.address.clone());
+ if addr.is_none() {
+ return Err(());
+ }
+ let addr = addr.as_mut().unwrap();
+
+ // TODO: Determine why a callback isn't invoked to do this.
+ remote_device.properties.insert(property_type, property.clone());
+ self.intf.lock().unwrap().set_remote_device_property(addr, property);
+ Ok(())
+ }
}
#[btif_callbacks_dispatcher(Bluetooth, dispatch_base_callbacks, BaseCallbacks)]
@@ -1115,6 +1153,14 @@ impl IBluetooth for Bluetooth {
}
}
+ fn set_remote_alias(&mut self, device: BluetoothDevice, new_alias: String) {
+ let _ = self.set_remote_device_property(
+ &device,
+ BtPropertyType::RemoteFriendlyName,
+ BluetoothProperty::RemoteFriendlyName(new_alias),
+ );
+ }
+
fn get_remote_class(&self, device: BluetoothDevice) -> u32 {
match self.get_remote_device_property(&device, &BtPropertyType::ClassOfDevice) {
Some(BluetoothProperty::ClassOfDevice(class)) => return class,