Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 90670470 authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

Do not require BLUETOOTH_PRIVILEGED for KEY_MISSING broadcast

Mulitiple device companion apps would be interested in receiving KEY_MISSING event, but they can't because it's now limited just to system apps.

Test: mma -j32
Bug: 379309588
Flag: com.android.bluetooth.flags.key_missing_public
Change-Id: Iafc1e1bf8a6e9c6bd6b71e19ca8a76fa768bed8b
parent abb11939
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static android.Manifest.permission.BLUETOOTH_SCAN;
import static com.android.modules.utils.build.SdkLevel.isAtLeastV;

import android.annotation.RequiresPermission;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.admin.SecurityLog;
import android.bluetooth.BluetoothAdapter;
@@ -1391,6 +1392,8 @@ public class RemoteDevices {
        }
    }

    // TODO: remove when key_missing_public flag is deleted
    @SuppressLint("AndroidFrameworkRequiresPermission")
    void keyMissingCallback(byte[] address) {
        BluetoothDevice bluetoothDevice = getDevice(address);
        if (bluetoothDevice == null) {
@@ -1408,6 +1411,18 @@ public class RemoteDevices {
                            .addFlags(
                                    Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
                                            | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
            if (Flags.keyMissingPublic()) {
                mAdapterService.sendOrderedBroadcast(
                        intent,
                        BLUETOOTH_CONNECT,
                        Utils.getTempBroadcastOptions().toBundle(),
                        null /* resultReceiver */,
                        null /* scheduler */,
                        Activity.RESULT_OK /* initialCode */,
                        null /* initialData */,
                        null /* initialExtras */);
                return;
            }

            if (isAtLeastV()
                    && Flags.keyMissingAsOrderedBroadcast()
+8 −0
Original line number Diff line number Diff line
@@ -97,3 +97,11 @@ flag {
    description: "Broadcast when remote device encryption changes"
    bug: "369753860"
}

flag {
    name: "key_missing_public"
    is_exported: true
    namespace: "bluetooth"
    description: "Make BluetoothDevice.ACTION_KEY_MISSING into public API"
    bug: "379729762"
}
+1 −0
Original line number Diff line number Diff line
@@ -555,6 +555,7 @@ package android.bluetooth {
    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CLASS_CHANGED = "android.bluetooth.device.action.CLASS_CHANGED";
    field @FlaggedApi("com.android.bluetooth.flags.encryption_change_broadcast") @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_ENCRYPTION_CHANGE = "android.bluetooth.device.action.ENCRYPTION_CHANGE";
    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public static final String ACTION_FOUND = "android.bluetooth.device.action.FOUND";
    field @FlaggedApi("com.android.bluetooth.flags.key_missing_public") @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}, conditional=true) public static final String ACTION_KEY_MISSING = "android.bluetooth.device.action.KEY_MISSING";
    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_NAME_CHANGED = "android.bluetooth.device.action.NAME_CHANGED";
    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_PAIRING_REQUEST = "android.bluetooth.device.action.PAIRING_REQUEST";
    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_UUID = "android.bluetooth.device.action.UUID";
+0 −1
Original line number Diff line number Diff line
@@ -236,7 +236,6 @@ package android.bluetooth {
    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_ACCESS_CANCEL = "android.bluetooth.device.action.CONNECTION_ACCESS_CANCEL";
    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_ACCESS_REPLY = "android.bluetooth.device.action.CONNECTION_ACCESS_REPLY";
    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_ACCESS_REQUEST = "android.bluetooth.device.action.CONNECTION_ACCESS_REQUEST";
    field @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public static final String ACTION_KEY_MISSING = "android.bluetooth.device.action.KEY_MISSING";
    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_PAIRING_CANCEL = "android.bluetooth.device.action.PAIRING_CANCEL";
    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_SILENCE_MODE_CHANGED = "android.bluetooth.device.action.SILENCE_MODE_CHANGED";
    field @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public static final String ACTION_SWITCH_BUFFER_SIZE = "android.bluetooth.device.action.SWITCH_BUFFER_SIZE";
+9 −6
Original line number Diff line number Diff line
@@ -296,17 +296,20 @@ public final class BluetoothDevice implements Parcelable, Attributable {
     *   <li>in case of LE devices, very unlikely address collision
     * </ul>
     *
     * Only registered receivers will receive this intent.
     *
     * <p>Always contains the extra field {@link #EXTRA_DEVICE}
     *
     * @hide
     * <p>This method requires the calling app to have the {@link
     * android.Manifest.permission#BLUETOOTH_CONNECT} permission. Before {@link
     * android.os.Build.VERSION_CODES#BAKLAVA} this method also required {@link
     * android.Manifest.permission#BLUETOOTH_PRIVILEGED}
     */
    @SuppressLint("ActionValue")
    @RequiresPermission(allOf = {BLUETOOTH_CONNECT, BLUETOOTH_PRIVILEGED})
    @RequiresPermission(
            allOf = {BLUETOOTH_CONNECT, BLUETOOTH_PRIVILEGED},
            conditional = true)
    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
    @SystemApi
    @BroadcastBehavior(includeBackground = true, protectedBroadcast = true)
    @BroadcastBehavior(protectedBroadcast = true)
    @FlaggedApi(Flags.FLAG_KEY_MISSING_PUBLIC)
    public static final String ACTION_KEY_MISSING = "android.bluetooth.device.action.KEY_MISSING";

    /**