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

Commit 59855ff1 authored by Mingbo Zhang's avatar Mingbo Zhang Committed by Bruno Martins
Browse files

Support CALLBACK_TYPE_SENSOR_ROUTING

Add support to CALLBACK_TYPE_SENSOR_ROUTING when start scanning

Change-Id: I958938b2e428b2ba68297d22eb829b4f94deab30
CRs-Fixed: 2095995
parent dd1eed00
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.os.RemoteException;
import android.os.WorkSource;
import android.util.Log;

import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -228,6 +229,13 @@ public final class BluetoothLeScanner {
            if (gatt == null) {
                return postCallbackErrorOrReturn(callback, ScanCallback.SCAN_FAILED_INTERNAL_ERROR);
            }

            if ((settings.getCallbackType() == ScanSettings.CALLBACK_TYPE_SENSOR_ROUTING)
                    && (filters == null || filters.isEmpty())) {
                ScanFilter filter = (new ScanFilter.Builder()).build();
                filters = Arrays.asList(filter);
            }

            if (!isSettingsConfigAllowedForScan(settings)) {
                return postCallbackErrorOrReturn(callback,
                        ScanCallback.SCAN_FAILED_FEATURE_UNSUPPORTED);
@@ -240,6 +248,10 @@ public final class BluetoothLeScanner {
                return postCallbackErrorOrReturn(callback,
                        ScanCallback.SCAN_FAILED_FEATURE_UNSUPPORTED);
            }
            if (!isRoutingAllowedForScan(settings)) {
                return postCallbackErrorOrReturn(callback,
                        ScanCallback.SCAN_FAILED_FEATURE_UNSUPPORTED);
            }
            if (callback != null) {
                BleScanCallbackWrapper wrapper = new BleScanCallbackWrapper(gatt, filters,
                        settings, workSource, callback, resultStorages);
@@ -599,4 +611,14 @@ public final class BluetoothLeScanner {
        }
        return true;
    }

    private boolean isRoutingAllowedForScan(ScanSettings settings) {
        final int callbackType = settings.getCallbackType();

        if (callbackType == ScanSettings.CALLBACK_TYPE_SENSOR_ROUTING
                && settings.getScanMode() == ScanSettings.SCAN_MODE_OPPORTUNISTIC) {
            return false;
        }
        return true;
    }
}
+8 −1
Original line number Diff line number Diff line
@@ -69,6 +69,12 @@ public final class ScanSettings implements Parcelable {
     */
    public static final int CALLBACK_TYPE_MATCH_LOST = 4;

    /**
     * Provide results to sensor router instead of the apps processor
     * @hide
     */
    public static final int CALLBACK_TYPE_SENSOR_ROUTING = 8;


    /**
     * Determines how many advertisements to match per filter, as this is scarce hw resource
@@ -302,7 +308,8 @@ public final class ScanSettings implements Parcelable {
        private boolean isValidCallbackType(int callbackType) {
            if (callbackType == CALLBACK_TYPE_ALL_MATCHES
                    || callbackType == CALLBACK_TYPE_FIRST_MATCH
                    || callbackType == CALLBACK_TYPE_MATCH_LOST) {
                    || callbackType == CALLBACK_TYPE_MATCH_LOST
                    || callbackType == CALLBACK_TYPE_SENSOR_ROUTING) {
                return true;
            }
            return callbackType == (CALLBACK_TYPE_FIRST_MATCH | CALLBACK_TYPE_MATCH_LOST);