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

Commit 2b69f307 authored by David Duarte's avatar David Duarte
Browse files

Apply delivery group policies to ACTION_DISCOVERY_FINISHED.

- The "set-defer-until-active" policy is applied so that the
broadcast targeted to apps in the Cached state is deferred until
they come out of that state.
- The "deliver-most-recent" policy is applied so that if there are
already pending broadcasts waiting to be delivered when a new
broadcast is sent, the old ones are discarded.

Bug: 266474854
Test: atest CtsBluetoothTestCases
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:a44cb9326a83c85340fb96fd967486b5168fa0f7)
Merged-In: Iaa505809fdb2f67a440a9a568fd44a753814b0e2
Change-Id: Iaa505809fdb2f67a440a9a568fd44a753814b0e2
parent a8d114ff
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -20,7 +20,9 @@ package com.android.bluetooth.btservice;
import static android.Manifest.permission.BLUETOOTH_CONNECT;
import static android.Manifest.permission.BLUETOOTH_SCAN;

import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.app.BroadcastOptions;
import android.bluetooth.BluetoothA2dp;
import android.bluetooth.BluetoothA2dpSink;
import android.bluetooth.BluetoothAdapter;
@@ -46,6 +48,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.ParcelUuid;
import android.os.SystemProperties;
import android.os.UserHandle;
@@ -57,6 +60,7 @@ import androidx.annotation.VisibleForTesting;
import com.android.bluetooth.BluetoothStatsLog;
import com.android.bluetooth.Utils;
import com.android.bluetooth.btservice.RemoteDevices.DeviceProperties;
import com.android.modules.utils.build.SdkLevel;

import com.google.common.collect.EvictingQueue;

@@ -1168,7 +1172,7 @@ class AdapterProperties {
                mDiscoveryEndMs = System.currentTimeMillis();
                intent = new Intent(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
                Utils.sendBroadcast(mService, intent, BLUETOOTH_SCAN,
                        Utils.getTempAllowlistBroadcastOptions());
                        getBroadcastOptionsForDiscoveryFinished());
            } else if (state == AbstractionLayer.BT_DISCOVERY_STARTED) {
                mDiscovering = true;
                mDiscoveryEndMs = System.currentTimeMillis() + DEFAULT_DISCOVERY_TIMEOUT_MS;
@@ -1179,6 +1183,18 @@ class AdapterProperties {
        }
    }

    /**
     * @return broadcast options for ACTION_DISCOVERY_FINISHED broadcast
     */
    private static @NonNull Bundle getBroadcastOptionsForDiscoveryFinished() {
        final BroadcastOptions options = Utils.getTempBroadcastOptions();
        if (SdkLevel.isAtLeastU()) {
            options.setDeliveryGroupPolicy(BroadcastOptions.DELIVERY_GROUP_POLICY_MOST_RECENT);
            options.setDeferUntilActive(true);
        }
        return options.toBundle();
    }

    @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
    protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
        writer.println(TAG);