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

Commit 683ed076 authored by Omair Kamil's avatar Omair Kamil Committed by Gerrit Code Review
Browse files

Merge "Move scanning callbacks into ScanNativeInterface." into main

parents 19ba4be2 ea493448
Loading
Loading
Loading
Loading
+119 −79
Original line number Diff line number Diff line
@@ -106,8 +106,6 @@ namespace android {
 */

static jmethodID method_onClientRegistered;
static jmethodID method_onScannerRegistered;
static jmethodID method_onScanResult;
static jmethodID method_onConnected;
static jmethodID method_onDisconnected;
static jmethodID method_onReadCharacteristic;
@@ -120,18 +118,8 @@ static jmethodID method_onNotify;
static jmethodID method_onRegisterForNotifications;
static jmethodID method_onReadRemoteRssi;
static jmethodID method_onConfigureMTU;
static jmethodID method_onScanFilterConfig;
static jmethodID method_onScanFilterParamsConfigured;
static jmethodID method_onScanFilterEnableDisabled;
static jmethodID method_onClientCongestion;
static jmethodID method_onBatchScanStorageConfigured;
static jmethodID method_onBatchScanStartStopped;
static jmethodID method_onBatchScanReports;
static jmethodID method_onBatchScanThresholdCrossed;

static jmethodID method_createOnTrackAdvFoundLostObject;
static jmethodID method_onTrackAdvFoundLost;
static jmethodID method_onScanParamSetupCompleted;
static jmethodID method_getSampleGattDbElement;
static jmethodID method_onGetGattDb;
static jmethodID method_onClientPhyUpdate;
@@ -175,6 +163,22 @@ static jmethodID method_onPeriodicAdvertisingParametersUpdated;
static jmethodID method_onPeriodicAdvertisingDataSet;
static jmethodID method_onPeriodicAdvertisingEnabled;

/**
 * Scanner callback methods
 */
static jmethodID method_onScannerRegistered;
static jmethodID method_onScanResult;
static jmethodID method_onScanFilterConfig;
static jmethodID method_onScanFilterParamsConfigured;
static jmethodID method_onScanFilterEnableDisabled;
static jmethodID method_onBatchScanStorageConfigured;
static jmethodID method_onBatchScanStartStopped;
static jmethodID method_onBatchScanReports;
static jmethodID method_onBatchScanThresholdCrossed;
static jmethodID method_createOnTrackAdvFoundLostObject;
static jmethodID method_onTrackAdvFoundLost;
static jmethodID method_onScanParamSetupCompleted;

/**
 * Periodic scanner callback methods
 */
@@ -196,6 +200,7 @@ static jmethodID method_onDistanceMeasurementResult;
 */
static const btgatt_interface_t* sGattIf = NULL;
static jobject mCallbacksObj = NULL;
static jobject mScanCallbacksObj = NULL;
static jobject mAdvertiseCallbacksObj = NULL;
static jobject mPeriodicScanCallbacksObj = NULL;
static jobject mDistanceMeasurementCallbacksObj = NULL;
@@ -222,7 +227,7 @@ void btgattc_scan_result_cb(uint16_t event_type, uint8_t addr_type,
                            RawAddress* original_bda) {
  std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid() || !mCallbacksObj) return;
  if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;

  ScopedLocalRef<jstring> address(sCallbackEnv.get(),
                                  bdaddr2newjstr(sCallbackEnv.get(), bda));
@@ -235,9 +240,9 @@ void btgattc_scan_result_cb(uint16_t event_type, uint8_t addr_type,
      sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), original_bda));

  sCallbackEnv->CallVoidMethod(
      mCallbacksObj, method_onScanResult, event_type, addr_type, address.get(),
      primary_phy, secondary_phy, advertising_sid, tx_power, rssi,
      periodic_adv_int, jb.get(), original_address.get());
      mScanCallbacksObj, method_onScanResult, event_type, addr_type,
      address.get(), primary_phy, secondary_phy, advertising_sid, tx_power,
      rssi, periodic_adv_int, jb.get(), original_address.get());
}

void btgattc_open_cb(int conn_id, int status, int clientIf,
@@ -408,28 +413,29 @@ void btgattc_batchscan_reports_cb(int client_if, int status, int report_format,
                                  int num_records, std::vector<uint8_t> data) {
  std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid() || !mCallbacksObj) return;
  if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;
  ScopedLocalRef<jbyteArray> jb(sCallbackEnv.get(),
                                sCallbackEnv->NewByteArray(data.size()));
  sCallbackEnv->SetByteArrayRegion(jb.get(), 0, data.size(),
                                   (jbyte*)data.data());

  sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onBatchScanReports, status,
                               client_if, report_format, num_records, jb.get());
  sCallbackEnv->CallVoidMethod(mScanCallbacksObj, method_onBatchScanReports,
                               status, client_if, report_format, num_records,
                               jb.get());
}

void btgattc_batchscan_threshold_cb(int client_if) {
  std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid() || !mCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mCallbacksObj,
  if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mScanCallbacksObj,
                               method_onBatchScanThresholdCrossed, client_if);
}

void btgattc_track_adv_event_cb(btgatt_track_adv_info_t* p_adv_track_info) {
  std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid() || !mCallbacksObj) return;
  if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;

  ScopedLocalRef<jstring> address(
      sCallbackEnv.get(),
@@ -462,7 +468,7 @@ void btgattc_track_adv_event_cb(btgatt_track_adv_info_t* p_adv_track_info) {
          p_adv_track_info->rssi_value, p_adv_track_info->time_stamp));

  if (NULL != trackadv_obj.get()) {
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onTrackAdvFoundLost,
    sCallbackEnv->CallVoidMethod(mScanCallbacksObj, method_onTrackAdvFoundLost,
                                 trackadv_obj.get());
  }
}
@@ -988,17 +994,17 @@ class JniScanningCallbacks : ScanningCallbacks {
                           uint8_t status) {
    std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
    CallbackEnv sCallbackEnv(__func__);
    if (!sCallbackEnv.valid() || !mCallbacksObj) return;
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScannerRegistered,
    if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;
    sCallbackEnv->CallVoidMethod(mScanCallbacksObj, method_onScannerRegistered,
                                 status, scannerId, UUID_PARAMS(app_uuid));
  }

  void OnSetScannerParameterComplete(uint8_t scannerId, uint8_t status) {
    std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
    CallbackEnv sCallbackEnv(__func__);
    if (!sCallbackEnv.valid() || !mCallbacksObj) return;
    if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;
    sCallbackEnv->CallVoidMethod(
        mCallbacksObj, method_onScanParamSetupCompleted, status, scannerId);
        mScanCallbacksObj, method_onScanParamSetupCompleted, status, scannerId);
  }

  void OnScanResult(uint16_t event_type, uint8_t addr_type, RawAddress bda,
@@ -1007,7 +1013,7 @@ class JniScanningCallbacks : ScanningCallbacks {
                    uint16_t periodic_adv_int, std::vector<uint8_t> adv_data) {
    std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
    CallbackEnv sCallbackEnv(__func__);
    if (!sCallbackEnv.valid() || !mCallbacksObj) return;
    if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;

    ScopedLocalRef<jstring> address(sCallbackEnv.get(),
                                    bdaddr2newjstr(sCallbackEnv.get(), &bda));
@@ -1025,7 +1031,7 @@ class JniScanningCallbacks : ScanningCallbacks {
        sCallbackEnv.get(), sCallbackEnv->NewStringUTF(empty_address));

    sCallbackEnv->CallVoidMethod(
        mCallbacksObj, method_onScanResult, event_type, addr_type,
        mScanCallbacksObj, method_onScanResult, event_type, addr_type,
        address.get(), primary_phy, secondary_phy, advertising_sid, tx_power,
        rssi, periodic_adv_int, jb.get(), fake_address.get());
  }
@@ -1033,7 +1039,7 @@ class JniScanningCallbacks : ScanningCallbacks {
  void OnTrackAdvFoundLost(AdvertisingTrackInfo track_info) {
    std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
    CallbackEnv sCallbackEnv(__func__);
    if (!sCallbackEnv.valid() || !mCallbacksObj) return;
    if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;

    ScopedLocalRef<jstring> address(
        sCallbackEnv.get(),
@@ -1066,8 +1072,8 @@ class JniScanningCallbacks : ScanningCallbacks {
            track_info.rssi, track_info.time_stamp));

    if (NULL != trackadv_obj.get()) {
      sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onTrackAdvFoundLost,
                                   trackadv_obj.get());
      sCallbackEnv->CallVoidMethod(
          mScanCallbacksObj, method_onTrackAdvFoundLost, trackadv_obj.get());
    }
  }

@@ -1075,13 +1081,13 @@ class JniScanningCallbacks : ScanningCallbacks {
                          int num_records, std::vector<uint8_t> data) {
    std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
    CallbackEnv sCallbackEnv(__func__);
    if (!sCallbackEnv.valid() || !mCallbacksObj) return;
    if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;
    ScopedLocalRef<jbyteArray> jb(sCallbackEnv.get(),
                                  sCallbackEnv->NewByteArray(data.size()));
    sCallbackEnv->SetByteArrayRegion(jb.get(), 0, data.size(),
                                     (jbyte*)data.data());

    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onBatchScanReports,
    sCallbackEnv->CallVoidMethod(mScanCallbacksObj, method_onBatchScanReports,
                                 status, client_if, report_format, num_records,
                                 jb.get());
  }
@@ -1089,8 +1095,8 @@ class JniScanningCallbacks : ScanningCallbacks {
  void OnBatchScanThresholdCrossed(int client_if) {
    std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
    CallbackEnv sCallbackEnv(__func__);
    if (!sCallbackEnv.valid() || !mCallbacksObj) return;
    sCallbackEnv->CallVoidMethod(mCallbacksObj,
    if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;
    sCallbackEnv->CallVoidMethod(mScanCallbacksObj,
                                 method_onBatchScanThresholdCrossed, client_if);
  }

@@ -1323,8 +1329,8 @@ void btgattc_register_scanner_cb(const Uuid& app_uuid, uint8_t scannerId,
                                 uint8_t status) {
  std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid() || !mCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScannerRegistered,
  if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mScanCallbacksObj, method_onScannerRegistered,
                               status, scannerId, UUID_PARAMS(app_uuid));
}

@@ -1533,9 +1539,9 @@ static void gattClientReadRemoteRssiNative(JNIEnv* env, jobject /* object */,
void set_scan_params_cmpl_cb(int client_if, uint8_t status) {
  std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid() || !mCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanParamSetupCompleted,
                               status, client_if);
  if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(
      mScanCallbacksObj, method_onScanParamSetupCompleted, status, client_if);
}

static void gattSetScanParametersNative(JNIEnv* /* env */, jobject /* object */,
@@ -1551,8 +1557,8 @@ void scan_filter_param_cb(uint8_t client_if, uint8_t avbl_space, uint8_t action,
                          uint8_t status) {
  std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid() || !mCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mCallbacksObj,
  if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mScanCallbacksObj,
                               method_onScanFilterParamsConfigured, action,
                               status, client_if, avbl_space);
}
@@ -1634,9 +1640,10 @@ static void scan_filter_cfg_cb(uint8_t client_if, uint8_t filt_type,
                               uint8_t status) {
  std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid() || !mCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanFilterConfig, action,
                               status, client_if, filt_type, avbl_space);
  if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mScanCallbacksObj, method_onScanFilterConfig,
                               action, status, client_if, filt_type,
                               avbl_space);
}

static void gattClientScanFilterAddNative(JNIEnv* env, jobject /* object */,
@@ -1811,9 +1818,10 @@ static void gattClientScanFilterClearNative(JNIEnv* /* env */,
void scan_enable_cb(uint8_t client_if, uint8_t action, uint8_t status) {
  std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid() || !mCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanFilterEnableDisabled,
                               action, status, client_if);
  if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mScanCallbacksObj,
                               method_onScanFilterEnableDisabled, action,
                               status, client_if);
}

static void gattClientScanFilterEnableNative(JNIEnv* /* env */,
@@ -1855,9 +1863,10 @@ static void gattSubrateRequestNative(JNIEnv* env, jobject /* object */,
void batchscan_cfg_storage_cb(uint8_t client_if, uint8_t status) {
  std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid() || !mCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(
      mCallbacksObj, method_onBatchScanStorageConfigured, status, client_if);
  if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mScanCallbacksObj,
                               method_onBatchScanStorageConfigured, status,
                               client_if);
}

static void gattClientConfigBatchScanStorageNative(
@@ -1874,9 +1883,10 @@ static void gattClientConfigBatchScanStorageNative(
void batchscan_enable_cb(uint8_t client_if, uint8_t status) {
  std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid() || !mCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onBatchScanStartStopped,
                               0 /* unused */, status, client_if);
  if (!sCallbackEnv.valid() || !mScanCallbacksObj) return;
  sCallbackEnv->CallVoidMethod(mScanCallbacksObj,
                               method_onBatchScanStartStopped, 0 /* unused */,
                               status, client_if);
}

static void gattClientStartBatchScanNative(JNIEnv* /* env */,
@@ -2454,6 +2464,25 @@ static void periodicScanCleanupNative(JNIEnv* env, jobject /* object */) {
  }
}

static void scanInitializeNative(JNIEnv* env, jobject object) {
  std::unique_lock<std::shared_mutex> lock(callbacks_mutex);
  if (mScanCallbacksObj != NULL) {
    log::warn("Cleaning up scan callback object");
    env->DeleteGlobalRef(mScanCallbacksObj);
    mScanCallbacksObj = NULL;
  }

  mScanCallbacksObj = env->NewGlobalRef(object);
}

static void scanCleanupNative(JNIEnv* env, jobject /* object */) {
  std::unique_lock<std::shared_mutex> lock(callbacks_mutex);
  if (mScanCallbacksObj != NULL) {
    env->DeleteGlobalRef(mScanCallbacksObj);
    mScanCallbacksObj = NULL;
  }
}

static void startSyncNative(JNIEnv* env, jobject /* object */, jint sid,
                            jstring address, jint skip, jint timeout,
                            jint reg_id) {
@@ -2557,6 +2586,8 @@ static void stopDistanceMeasurementNative(JNIEnv* env, jobject /* object */,
// JNI functions defined in GattNativeInterface class.
static int register_com_android_bluetooth_gatt_scan(JNIEnv* env) {
  const JNINativeMethod methods[] = {
      {"initializeNative", "()V", (void*)scanInitializeNative},
      {"cleanupNative", "()V", (void*)scanCleanupNative},
      {"registerScannerNative", "(JJ)V", (void*)registerScannerNative},
      {"unregisterScannerNative", "(I)V", (void*)unregisterScannerNative},
      {"gattClientScanNative", "(Z)V", (void*)gattClientScanNative},
@@ -2587,8 +2618,40 @@ static int register_com_android_bluetooth_gatt_scan(JNIEnv* env) {
      {"gattSetScanParametersNative", "(III)V",
       (void*)gattSetScanParametersNative},
  };
  return REGISTER_NATIVE_METHODS(
  const int result = REGISTER_NATIVE_METHODS(
      env, "com/android/bluetooth/le_scan/ScanNativeInterface", methods);
  if (result != 0) {
    return result;
  }

  const JNIJavaMethod javaMethods[] = {
      // Client callbacks
      {"onScannerRegistered", "(IIJJ)V", &method_onScannerRegistered},
      {"onScanResult", "(IILjava/lang/String;IIIIII[BLjava/lang/String;)V",
       &method_onScanResult},
      {"onScanFilterConfig", "(IIIII)V", &method_onScanFilterConfig},
      {"onScanFilterParamsConfigured", "(IIII)V",
       &method_onScanFilterParamsConfigured},
      {"onScanFilterEnableDisabled", "(III)V",
       &method_onScanFilterEnableDisabled},
      {"onBatchScanStorageConfigured", "(II)V",
       &method_onBatchScanStorageConfigured},
      {"onBatchScanStartStopped", "(III)V", &method_onBatchScanStartStopped},
      {"onBatchScanReports", "(IIII[B)V", &method_onBatchScanReports},
      {"onBatchScanThresholdCrossed", "(I)V",
       &method_onBatchScanThresholdCrossed},
      {"createOnTrackAdvFoundLostObject",
       "(II[BI[BIIILjava/lang/String;IIII)"
       "Lcom/android/bluetooth/le_scan/AdvtFilterOnFoundOnLostInfo;",
       &method_createOnTrackAdvFoundLostObject},
      {"onTrackAdvFoundLost",
       "(Lcom/android/bluetooth/le_scan/AdvtFilterOnFoundOnLostInfo;)V",
       &method_onTrackAdvFoundLost},
      {"onScanParamSetupCompleted", "(II)V", &method_onScanParamSetupCompleted},
  };
  GET_JAVA_METHODS(env, "com/android/bluetooth/le_scan/ScanNativeInterface",
                   javaMethods);
  return 0;
}

static int register_com_android_bluetooth_gatt_advertise_manager(JNIEnv* env) {
@@ -2796,9 +2859,6 @@ static int register_com_android_bluetooth_gatt_(JNIEnv* env) {
  const JNIJavaMethod javaMethods[] = {
      // Client callbacks
      {"onClientRegistered", "(IIJJ)V", &method_onClientRegistered},
      {"onScannerRegistered", "(IIJJ)V", &method_onScannerRegistered},
      {"onScanResult", "(IILjava/lang/String;IIIIII[BLjava/lang/String;)V",
       &method_onScanResult},
      {"onConnected", "(IIILjava/lang/String;)V", &method_onConnected},
      {"onDisconnected", "(IIILjava/lang/String;)V", &method_onDisconnected},
      {"onReadCharacteristic", "(III[B)V", &method_onReadCharacteristic},
@@ -2813,26 +2873,7 @@ static int register_com_android_bluetooth_gatt_(JNIEnv* env) {
      {"onReadRemoteRssi", "(ILjava/lang/String;II)V",
       &method_onReadRemoteRssi},
      {"onConfigureMTU", "(III)V", &method_onConfigureMTU},
      {"onScanFilterConfig", "(IIIII)V", &method_onScanFilterConfig},
      {"onScanFilterParamsConfigured", "(IIII)V",
       &method_onScanFilterParamsConfigured},
      {"onScanFilterEnableDisabled", "(III)V",
       &method_onScanFilterEnableDisabled},
      {"onClientCongestion", "(IZ)V", &method_onClientCongestion},
      {"onBatchScanStorageConfigured", "(II)V",
       &method_onBatchScanStorageConfigured},
      {"onBatchScanStartStopped", "(III)V", &method_onBatchScanStartStopped},
      {"onBatchScanReports", "(IIII[B)V", &method_onBatchScanReports},
      {"onBatchScanThresholdCrossed", "(I)V",
       &method_onBatchScanThresholdCrossed},
      {"createOnTrackAdvFoundLostObject",
       "(II[BI[BIIILjava/lang/String;IIII)"
       "Lcom/android/bluetooth/le_scan/AdvtFilterOnFoundOnLostInfo;",
       &method_createOnTrackAdvFoundLostObject},
      {"onTrackAdvFoundLost",
       "(Lcom/android/bluetooth/le_scan/AdvtFilterOnFoundOnLostInfo;)V",
       &method_onTrackAdvFoundLost},
      {"onScanParamSetupCompleted", "(II)V", &method_onScanParamSetupCompleted},
      {"getSampleGattDbElement", "()Lcom/android/bluetooth/gatt/GattDbElement;",
       &method_getSampleGattDbElement},
      {"onGetGattDb", "(ILjava/util/ArrayList;)V", &method_onGetGattDb},
@@ -2869,7 +2910,6 @@ static int register_com_android_bluetooth_gatt_(JNIEnv* env) {
  };
  GET_JAVA_METHODS(env, "com/android/bluetooth/gatt/GattNativeInterface",
                   javaMethods);

  return 0;
}

+18 −101

File changed.

Preview size limit exceeded, changes collapsed.

+30 −24
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ public class ScanManager {
        mContext = context;
        mScanHelper = scanHelper;
        mAdapterService = adapterService;
        mScanNative = new ScanNative();
        mScanNative = new ScanNative(scanHelper);
        mDm = mContext.getSystemService(DisplayManager.class);
        mActivityManager = mContext.getSystemService(ActivityManager.class);
        mLocationManager = mAdapterService.getSystemService(LocationManager.class);
@@ -1018,8 +1018,9 @@ public class ScanManager {
        private PendingIntent mBatchScanIntervalIntent;
        private ScanNativeInterface mNativeInterface;

        ScanNative() {
        ScanNative(TransitionalScanHelper scanHelper) {
            mNativeInterface = GattObjectsFactory.getInstance().getScanNativeInterface();
            mNativeInterface.init(scanHelper);
            mFilterIndexStack = new ArrayDeque<Integer>();
            mClientFilterIndexMap = new HashMap<Integer, Deque<Integer>>();

@@ -1031,7 +1032,8 @@ public class ScanManager {
            IntentFilter filter = new IntentFilter();
            filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
            filter.addAction(ACTION_REFRESH_BATCHED_SCAN);
            mBatchAlarmReceiver = new BroadcastReceiver() {
            mBatchAlarmReceiver =
                    new BroadcastReceiver() {
                        @Override
                        public void onReceive(Context context, Intent intent) {
                            Log.d(TAG, "awakened up at time " + SystemClock.elapsedRealtime());
@@ -1487,6 +1489,7 @@ public class ScanManager {
                mContext.unregisterReceiver(mBatchAlarmReceiver);
            }
            mBatchAlarmReceiverRegistered = false;
            mNativeInterface.cleanup();
        }

        private long getBatchTriggerIntervalMillis() {
@@ -1547,7 +1550,9 @@ public class ScanManager {
                    if (deliveryMode == DELIVERY_MODE_ON_FOUND_LOST) {
                        trackEntries = getNumOfTrackingAdvertisements(client.settings);
                        if (!manageAllocationOfTrackingAdvertisement(trackEntries, true)) {
                            Log.e(TAG, "No hardware resources for onfound/onlost filter "
                            Log.e(
                                    TAG,
                                    "No hardware resources for onfound/onlost filter "
                                            + trackEntries);
                            client.stats.recordTrackingHwFilterNotAvailableCountMetrics();
                            try {
@@ -1701,7 +1706,8 @@ public class ScanManager {
                return DELIVERY_MODE_ON_FOUND_LOST;
            }
            if (isAllMatchesAutoBatchScanClient(client)) {
                return isAutoBatchScanClientEnabled(client) ? DELIVERY_MODE_BATCH
                return isAutoBatchScanClientEnabled(client)
                        ? DELIVERY_MODE_BATCH
                        : DELIVERY_MODE_IMMEDIATE;
            }
            return settings.getReportDelayMillis() == 0 ? DELIVERY_MODE_IMMEDIATE
+179 −3

File changed.

Preview size limit exceeded, changes collapsed.

+4 −0
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ import com.android.bluetooth.gatt.AdvertiseManagerNativeInterface;
import com.android.bluetooth.gatt.DistanceMeasurementNativeInterface;
import com.android.bluetooth.gatt.GattNativeInterface;
import com.android.bluetooth.le_scan.PeriodicScanNativeInterface;
import com.android.bluetooth.le_scan.ScanNativeInterface;
import com.android.bluetooth.sdp.SdpManagerNativeInterface;
import com.android.internal.app.IBatteryStats;

@@ -136,6 +137,7 @@ public class AdapterServiceTest {
    private @Mock DistanceMeasurementNativeInterface mDistanceNativeInterface;
    private @Mock GattNativeInterface mGattNativeInterface;
    private @Mock PeriodicScanNativeInterface mPeriodicNativeInterface;
    private @Mock ScanNativeInterface mScanNativeInterface;
    private @Mock JniCallbacks mJniCallbacks;

    @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@@ -203,6 +205,7 @@ public class AdapterServiceTest {
        DistanceMeasurementNativeInterface.setInstance(mDistanceNativeInterface);
        GattNativeInterface.setInstance(mGattNativeInterface);
        PeriodicScanNativeInterface.setInstance(mPeriodicNativeInterface);
        ScanNativeInterface.setInstance(mScanNativeInterface);

        // Post the creation of AdapterService since it rely on Looper.myLooper()
        handler.post(() -> mAdapterService = spy(new AdapterService(mLooper.getLooper())));
@@ -331,6 +334,7 @@ public class AdapterServiceTest {
        DistanceMeasurementNativeInterface.setInstance(null);
        GattNativeInterface.setInstance(null);
        PeriodicScanNativeInterface.setInstance(null);
        ScanNativeInterface.setInstance(null);
    }

    private void syncHandler(int... what) {