Merge "Force associated devices to be strongly typed and expose AssociatedDevice."

This commit is contained in:
Raphael Kim
2022-11-01 22:58:19 +00:00
committed by Android (Google) Code Review
3 changed files with 53 additions and 20 deletions

View File

@@ -8956,9 +8956,18 @@ package android.appwidget {
package android.companion {
public final class AssociatedDevice implements android.os.Parcelable {
method public int describeContents();
method @Nullable public android.bluetooth.le.ScanResult getBleDevice();
method @Nullable public android.bluetooth.BluetoothDevice getBluetoothDevice();
method @Nullable public android.net.wifi.ScanResult getWifiDevice();
method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.companion.AssociatedDevice> CREATOR;
}
public final class AssociationInfo implements android.os.Parcelable {
method public int describeContents();
method @Nullable public android.os.Parcelable getAssociatedDevice();
method @Nullable public android.companion.AssociatedDevice getAssociatedDevice();
method @Nullable public android.net.MacAddress getDeviceMacAddress();
method @Nullable public String getDeviceProfile();
method @Nullable public CharSequence getDisplayName();

View File

@@ -16,6 +16,7 @@
package android.companion;
import android.bluetooth.BluetoothDevice;
import android.os.Parcel;
import android.os.Parcelable;
@@ -23,19 +24,14 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
/**
* Loose wrapper around device parcelable. Device can be one of three types:
* Container for device info from an association that is not self-managed.
* Device can be one of three types:
*
* <ul>
* <li>for classic Bluetooth - {@link android.bluetooth.BluetoothDevice}</li>
* <li>for Bluetooth LE - {@link android.bluetooth.le.ScanResult}</li>
* <li>for WiFi - {@link android.net.wifi.ScanResult}</li>
* </ul>
*
* This class serves as temporary wrapper to deliver a loosely-typed parcelable object from
* {@link com.android.companiondevicemanager.CompanionDeviceActivity} to the Companion app,
* and should only be used internally.
*
* @hide
*/
public final class AssociatedDevice implements Parcelable {
private static final int CLASSIC_BLUETOOTH = 0;
@@ -44,6 +40,7 @@ public final class AssociatedDevice implements Parcelable {
@NonNull private final Parcelable mDevice;
/** @hide */
public AssociatedDevice(@NonNull Parcelable device) {
mDevice = device;
}
@@ -54,11 +51,39 @@ public final class AssociatedDevice implements Parcelable {
}
/**
* Return device info. Cast to expected device type.
* Return bluetooth device info. Null if associated device is not a bluetooth device.
* @return Remote bluetooth device details containing MAC address.
*/
@NonNull
public Parcelable getDevice() {
return mDevice;
@Nullable
public BluetoothDevice getBluetoothDevice() {
if (mDevice instanceof BluetoothDevice) {
return (BluetoothDevice) mDevice;
}
return null;
}
/**
* Return bluetooth LE device info. Null if associated device is not a BLE device.
* @return BLE scan result containing details of detected BLE device.
*/
@Nullable
public android.bluetooth.le.ScanResult getBleDevice() {
if (mDevice instanceof android.bluetooth.le.ScanResult) {
return (android.bluetooth.le.ScanResult) mDevice;
}
return null;
}
/**
* Return Wi-Fi device info. Null if associated device is not a Wi-Fi device.
* @return Wi-Fi scan result containing details of detected access point.
*/
@Nullable
public android.net.wifi.ScanResult getWifiDevice() {
if (mDevice instanceof android.net.wifi.ScanResult) {
return (android.net.wifi.ScanResult) mDevice;
}
return null;
}
@Override

View File

@@ -164,20 +164,19 @@ public final class AssociationInfo implements Parcelable {
/**
* Companion device that was associated. Note that this field is not persisted across sessions.
*
* Cast to expected device type before use:
* Device can be one of the following types:
*
* <ul>
* <li>for classic Bluetooth - {@link android.bluetooth.BluetoothDevice}</li>
* <li>for Bluetooth LE - {@link android.bluetooth.le.ScanResult}</li>
* <li>for WiFi - {@link android.net.wifi.ScanResult}</li>
* <li>for classic Bluetooth - {@link AssociatedDevice#getBluetoothDevice()}</li>
* <li>for Bluetooth LE - {@link AssociatedDevice#getBleDevice()}</li>
* <li>for WiFi - {@link AssociatedDevice#getWifiDevice()}</li>
* </ul>
*
* @return the companion device that was associated, or {@code null} if the device is
* self-managed.
* self-managed or this association info was retrieved from persistent storage.
*/
public @Nullable Parcelable getAssociatedDevice() {
return mAssociatedDevice == null ? null : mAssociatedDevice.getDevice();
public @Nullable AssociatedDevice getAssociatedDevice() {
return mAssociatedDevice;
}
/**