diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-04-09 23:09:28 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-04-09 23:09:28 +0000 |
commit | 4b17cbcccf3c79b9839b32d055883b4fa12dac6c (patch) | |
tree | 671509816cac7f79d56c4515300ace3e6a1c33c4 /system/gd/rust/linux/stack/src/bluetooth.rs | |
parent | c7d896b3b3e5aa58ec83546790cdd2f81ca32314 (diff) | |
parent | d76065776b2690ee6c1595e46b10115ae0d32a42 (diff) |
Snap for 8431966 from d76065776b2690ee6c1595e46b10115ae0d32a42 to tm-release
Change-Id: I0af90a0b5ca04edd75f394b617297a5f082d05f4
Diffstat (limited to 'system/gd/rust/linux/stack/src/bluetooth.rs')
-rw-r--r-- | system/gd/rust/linux/stack/src/bluetooth.rs | 46 |
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, |