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

Commit 8ce3d8de 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 d72d3aa3
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -32,6 +32,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;
@@ -235,6 +236,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);
@@ -247,6 +255,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);
@@ -605,4 +617,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);