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

Commit 8fa9b6cb authored by Ömer Faruk Yılmaz's avatar Ömer Faruk Yılmaz Committed by Automerger Merge Worker
Browse files

Merge "Create new ScanController" into main am: 80c4bfeb

parents 3f9e8073 80c4bfeb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ filegroup {
        "android/bluetooth/IBluetoothProfileServiceConnection.aidl",
        "android/bluetooth/IBluetoothQualityReportReadyCallback.aidl",
        "android/bluetooth/IBluetoothSap.aidl",
        "android/bluetooth/IBluetoothScan.aidl",
        "android/bluetooth/IBluetoothSocketManager.aidl",
        "android/bluetooth/IBluetoothVolumeControl.aidl",
        "android/bluetooth/IBluetoothVolumeControlCallback.aidl",
+3 −0
Original line number Diff line number Diff line
@@ -308,6 +308,9 @@ interface IBluetooth
    @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
    oneway void getBluetoothGatt(in SynchronousResultReceiver receiver);

    @JavaPassthrough(annotation="@android.annotation.RequiresNoPermission")
    IBinder getBluetoothScan();

    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
    oneway void unregAllGattClient(in AttributionSource attributionSource, in SynchronousResultReceiver receiver);

+63 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.bluetooth;

import android.app.PendingIntent;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.le.ScanFilter;
import android.bluetooth.le.ScanSettings;
import android.bluetooth.le.ScanResult;
import android.content.AttributionSource;
import android.os.WorkSource;

import android.bluetooth.le.IScannerCallback;
import android.bluetooth.le.IPeriodicAdvertisingCallback;

/**
 * API for interacting with BLE Scan
 * @hide
 */
interface IBluetoothScan {
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
    void registerScanner(in IScannerCallback callback, in WorkSource workSource, in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
    void unregisterScanner(in int scannerId, in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
    void startScan(in int scannerId, in ScanSettings settings, in List<ScanFilter> filters,
                   in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
    void startScanForIntent(in PendingIntent intent, in ScanSettings settings, in List<ScanFilter> filters,
                            in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
    void stopScan(in int scannerId, in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
    void stopScanForIntent(in PendingIntent intent, in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
    void flushPendingBatchResults(in int scannerId, in AttributionSource attributionSource);

    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
    void registerSync(in ScanResult scanResult, in int skip, in int timeout, in IPeriodicAdvertisingCallback callback, in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
    void unregisterSync(in IPeriodicAdvertisingCallback callback, in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
    void transferSync(in BluetoothDevice bda, in int serviceData, in int syncHandle, in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
    void transferSetInfo(in BluetoothDevice bda, in int serviceData, in int advertisingHandle, in IPeriodicAdvertisingCallback callback,  in AttributionSource attributionSource);

    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
    int numHwTrackFiltersAvailable(in AttributionSource attributionSource);
}
+12 −0
Original line number Diff line number Diff line
@@ -135,6 +135,7 @@ import com.android.bluetooth.hid.HidDeviceService;
import com.android.bluetooth.hid.HidHostService;
import com.android.bluetooth.le_audio.LeAudioService;
import com.android.bluetooth.le_scan.ScanManager;
import com.android.bluetooth.le_scan.ScanController;
import com.android.bluetooth.map.BluetoothMapService;
import com.android.bluetooth.mapclient.MapClientService;
import com.android.bluetooth.mcp.McpService;
@@ -310,6 +311,7 @@ public class AdapterService extends Service {
    private BatteryService mBatteryService;
    private BluetoothQualityReportNativeInterface mBluetoothQualityReportNativeInterface;
    private GattService mGattService;
    private ScanController mScanController;

    private volatile boolean mTestModeEnabled = false;

@@ -5368,6 +5370,12 @@ public class AdapterService extends Service {
            return service.getBluetoothGatt();
        }

        @Override
        public IBinder getBluetoothScan() {
            AdapterService service = getService();
            return service == null ? null : service.getBluetoothScan();
        }

        @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
        @Override
        public void unregAllGattClient(
@@ -7140,6 +7148,10 @@ public class AdapterService extends Service {
        return ((ProfileService) mGattService).getBinder();
    }

    IBinder getBluetoothScan() {
        return mScanController == null ? null : mScanController.getBinder();
    }

    void unregAllGattClient(AttributionSource source) {
        if (mGattService != null) {
            mGattService.unregAll(source);
+7 −14
Original line number Diff line number Diff line
@@ -225,9 +225,11 @@ public class GattService extends ProfileService {
                        AdvertiseManagerNativeInterface.getInstance(),
                        mAdvertiserMap);

        if (!Flags.scanManagerRefactor()) {
            HandlerThread thread = new HandlerThread("BluetoothScanManager");
            thread.start();
            mTransitionalScanHelper.start(thread.getLooper());
        }
        mDistanceMeasurementManager = GattObjectsFactory.getInstance()
                .createDistanceMeasurementManager(mAdapterService);

@@ -1570,7 +1572,8 @@ public class GattService extends ProfileService {
            if (service == null) {
                return 0;
            }
            return service.numHwTrackFiltersAvailable(attributionSource);
            return service.getTransitionalScanHelper()
                    .numHwTrackFiltersAvailable(attributionSource);
        }

        @Override
@@ -2506,16 +2509,6 @@ public class GattService extends ProfileService {
        mNativeInterface.gattClientReadPhy(clientIf, address);
    }

    @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
    int numHwTrackFiltersAvailable(AttributionSource attributionSource) {
        if (!Utils.checkConnectPermissionForDataDelivery(
                this, attributionSource, "GattService numHwTrackFiltersAvailable")) {
            return 0;
        }
        return (AdapterService.getAdapterService().getTotalNumOfTrackableAdvertisements()
                - mTransitionalScanHelper.getCurrentUsedTrackingAdvertisement());
    }

    @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
    synchronized List<ParcelUuid> getRegisteredServiceUuids(AttributionSource attributionSource) {
        if (!Utils.checkConnectPermissionForDataDelivery(
Loading