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

Commit aa3f94ef authored by Bill Yi's avatar Bill Yi
Browse files

Merge RQ1A.210205.004 to stage-aosp-master - DO NOT MERGE

Merged-In: I4ec150ed9933c54fe661da15d6b1799087b9d6dd
Change-Id: Iba4c9b1ccba122752444853b64f7aca1b1375e64
parents 026e53c6 5c8c9949
Loading
Loading
Loading
Loading
+41 −1
Original line number Original line Diff line number Diff line
@@ -217,7 +217,7 @@ class AdvertiseManager {


        Map.Entry<IBinder, AdvertiserInfo> entry = findAdvertiser(advertiserId);
        Map.Entry<IBinder, AdvertiserInfo> entry = findAdvertiser(advertiserId);
        if (entry == null) {
        if (entry == null) {
            Log.i(TAG, "onOwnAddressRead() - bad advertiserId " + advertiserId);
            Log.w(TAG, "onOwnAddressRead() - bad advertiserId " + advertiserId);
            return;
            return;
        }
        }


@@ -226,6 +226,11 @@ class AdvertiseManager {
    }
    }


    void getOwnAddress(int advertiserId) {
    void getOwnAddress(int advertiserId) {
        Map.Entry<IBinder, AdvertiserInfo> entry = findAdvertiser(advertiserId);
        if (entry == null) {
            Log.w(TAG, "getOwnAddress() - bad advertiserId " + advertiserId);
            return;
        }
        getOwnAddressNative(advertiserId);
        getOwnAddressNative(advertiserId);
    }
    }


@@ -260,37 +265,72 @@ class AdvertiseManager {
    }
    }


    void enableAdvertisingSet(int advertiserId, boolean enable, int duration, int maxExtAdvEvents) {
    void enableAdvertisingSet(int advertiserId, boolean enable, int duration, int maxExtAdvEvents) {
        Map.Entry<IBinder, AdvertiserInfo> entry = findAdvertiser(advertiserId);
        if (entry == null) {
            Log.w(TAG, "enableAdvertisingSet() - bad advertiserId " + advertiserId);
            return;
        }
        enableAdvertisingSetNative(advertiserId, enable, duration, maxExtAdvEvents);
        enableAdvertisingSetNative(advertiserId, enable, duration, maxExtAdvEvents);
    }
    }


    void setAdvertisingData(int advertiserId, AdvertiseData data) {
    void setAdvertisingData(int advertiserId, AdvertiseData data) {
        Map.Entry<IBinder, AdvertiserInfo> entry = findAdvertiser(advertiserId);
        if (entry == null) {
            Log.w(TAG, "setAdvertisingData() - bad advertiserId " + advertiserId);
            return;
        }
        String deviceName = AdapterService.getAdapterService().getName();
        String deviceName = AdapterService.getAdapterService().getName();
        setAdvertisingDataNative(advertiserId,
        setAdvertisingDataNative(advertiserId,
                AdvertiseHelper.advertiseDataToBytes(data, deviceName));
                AdvertiseHelper.advertiseDataToBytes(data, deviceName));
    }
    }


    void setScanResponseData(int advertiserId, AdvertiseData data) {
    void setScanResponseData(int advertiserId, AdvertiseData data) {
        Map.Entry<IBinder, AdvertiserInfo> entry = findAdvertiser(advertiserId);
        if (entry == null) {
            Log.w(TAG, "setScanResponseData() - bad advertiserId " + advertiserId);
            return;
        }
        String deviceName = AdapterService.getAdapterService().getName();
        String deviceName = AdapterService.getAdapterService().getName();
        setScanResponseDataNative(advertiserId,
        setScanResponseDataNative(advertiserId,
                AdvertiseHelper.advertiseDataToBytes(data, deviceName));
                AdvertiseHelper.advertiseDataToBytes(data, deviceName));
    }
    }


    void setAdvertisingParameters(int advertiserId, AdvertisingSetParameters parameters) {
    void setAdvertisingParameters(int advertiserId, AdvertisingSetParameters parameters) {
        Map.Entry<IBinder, AdvertiserInfo> entry = findAdvertiser(advertiserId);
        if (entry == null) {
            Log.w(TAG, "setAdvertisingParameters() - bad advertiserId " + advertiserId);
            return;
        }
        setAdvertisingParametersNative(advertiserId, parameters);
        setAdvertisingParametersNative(advertiserId, parameters);
    }
    }


    void setPeriodicAdvertisingParameters(int advertiserId,
    void setPeriodicAdvertisingParameters(int advertiserId,
            PeriodicAdvertisingParameters parameters) {
            PeriodicAdvertisingParameters parameters) {
        Map.Entry<IBinder, AdvertiserInfo> entry = findAdvertiser(advertiserId);
        if (entry == null) {
            Log.w(TAG, "setPeriodicAdvertisingParameters() - bad advertiserId " + advertiserId);
            return;
        }
        setPeriodicAdvertisingParametersNative(advertiserId, parameters);
        setPeriodicAdvertisingParametersNative(advertiserId, parameters);
    }
    }


    void setPeriodicAdvertisingData(int advertiserId, AdvertiseData data) {
    void setPeriodicAdvertisingData(int advertiserId, AdvertiseData data) {
        Map.Entry<IBinder, AdvertiserInfo> entry = findAdvertiser(advertiserId);
        if (entry == null) {
            Log.w(TAG, "setPeriodicAdvertisingData() - bad advertiserId " + advertiserId);
            return;
        }
        String deviceName = AdapterService.getAdapterService().getName();
        String deviceName = AdapterService.getAdapterService().getName();
        setPeriodicAdvertisingDataNative(advertiserId,
        setPeriodicAdvertisingDataNative(advertiserId,
                AdvertiseHelper.advertiseDataToBytes(data, deviceName));
                AdvertiseHelper.advertiseDataToBytes(data, deviceName));
    }
    }


    void setPeriodicAdvertisingEnable(int advertiserId, boolean enable) {
    void setPeriodicAdvertisingEnable(int advertiserId, boolean enable) {
        Map.Entry<IBinder, AdvertiserInfo> entry = findAdvertiser(advertiserId);
        if (entry == null) {
            Log.w(TAG, "setPeriodicAdvertisingEnable() - bad advertiserId " + advertiserId);
            return;
        }
        setPeriodicAdvertisingEnableNative(advertiserId, enable);
        setPeriodicAdvertisingEnableNative(advertiserId, enable);
    }
    }


+55 −4
Original line number Original line Diff line number Diff line
@@ -1637,6 +1637,15 @@ public class GattService extends ProfileService {
        mScanManager.callbackDone(clientIf, status);
        mScanManager.callbackDone(clientIf, status);
    }
    }


    ScanClient findBatchScanClientById(int scannerId) {
        for (ScanClient client : mScanManager.getBatchScanQueue()) {
            if (client.scannerId == scannerId) {
                return client;
            }
        }
        return null;
    }

    void onBatchScanReports(int status, int scannerId, int reportType, int numRecords,
    void onBatchScanReports(int status, int scannerId, int reportType, int numRecords,
            byte[] recordData) throws RemoteException {
            byte[] recordData) throws RemoteException {
        if (DBG) {
        if (DBG) {
@@ -1651,12 +1660,36 @@ public class GattService extends ProfileService {
            if (app == null) {
            if (app == null) {
                return;
                return;
            }
            }

            ScanClient client = findBatchScanClientById(scannerId);
            if (client == null) {
                return;
            }

            ArrayList<ScanResult> permittedResults;
            if (hasScanResultPermission(client)) {
                permittedResults = new ArrayList<ScanResult>(results);
            } else {
                permittedResults = new ArrayList<ScanResult>();
                for (ScanResult scanResult : results) {
                    for (String associatedDevice : client.associatedDevices) {
                        if (associatedDevice.equalsIgnoreCase(scanResult.getDevice()
                                    .getAddress())) {
                            permittedResults.add(scanResult);
                        }
                    }
                }
                if (permittedResults.isEmpty()) {
                    return;
                }
            }

            if (app.callback != null) {
            if (app.callback != null) {
                app.callback.onBatchScanResults(new ArrayList<ScanResult>(results));
                app.callback.onBatchScanResults(permittedResults);
            } else {
            } else {
                // PendingIntent based
                // PendingIntent based
                try {
                try {
                    sendResultsByPendingIntent(app.info, new ArrayList<ScanResult>(results),
                    sendResultsByPendingIntent(app.info, permittedResults,
                            ScanSettings.CALLBACK_TYPE_ALL_MATCHES);
                            ScanSettings.CALLBACK_TYPE_ALL_MATCHES);
                } catch (PendingIntent.CanceledException e) {
                } catch (PendingIntent.CanceledException e) {
                }
                }
@@ -1692,13 +1725,31 @@ public class GattService extends ProfileService {
        if (app == null) {
        if (app == null) {
            return;
            return;
        }
        }

        ArrayList<ScanResult> permittedResults;
        if (hasScanResultPermission(client)) {
            permittedResults = new ArrayList<ScanResult>(allResults);
        } else {
            permittedResults = new ArrayList<ScanResult>();
            for (ScanResult scanResult : allResults) {
                for (String associatedDevice : client.associatedDevices) {
                    if (associatedDevice.equalsIgnoreCase(scanResult.getDevice().getAddress())) {
                        permittedResults.add(scanResult);
                    }
                }
            }
            if (permittedResults.isEmpty()) {
                return;
            }
        }

        if (client.filters == null || client.filters.isEmpty()) {
        if (client.filters == null || client.filters.isEmpty()) {
            sendBatchScanResults(app, client, new ArrayList<ScanResult>(allResults));
            sendBatchScanResults(app, client, permittedResults);
            // TODO: Question to reviewer: Shouldn't there be a return here?
            // TODO: Question to reviewer: Shouldn't there be a return here?
        }
        }
        // Reconstruct the scan results.
        // Reconstruct the scan results.
        ArrayList<ScanResult> results = new ArrayList<ScanResult>();
        ArrayList<ScanResult> results = new ArrayList<ScanResult>();
        for (ScanResult scanResult : allResults) {
        for (ScanResult scanResult : permittedResults) {
            if (matchesFilters(client, scanResult)) {
            if (matchesFilters(client, scanResult)) {
                results.add(scanResult);
                results.add(scanResult);
            }
            }