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

Commit 95067a56 authored by Steven Liu's avatar Steven Liu Committed by Gerrit Code Review
Browse files

Merge "Simplify the onStartFail, keep java layer check only." into main

parents 9919522b ad9b228b
Loading
Loading
Loading
Loading
+1 −13
Original line number Diff line number Diff line
@@ -197,7 +197,6 @@ static jmethodID method_onBigInfoReport;
 * Distance Measurement callback methods
 */
static jmethodID method_onDistanceMeasurementStarted;
static jmethodID method_onDistanceMeasurementStartFail;
static jmethodID method_onDistanceMeasurementStopped;
static jmethodID method_onDistanceMeasurementResult;

@@ -1210,16 +1209,7 @@ public:
    sCallbackEnv->CallVoidMethod(mDistanceMeasurementCallbacksObj,
                                 method_onDistanceMeasurementStarted, addr.get(), method);
  }
  void OnDistanceMeasurementStartFail(RawAddress address, uint8_t reason, uint8_t method) {
    std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
    CallbackEnv sCallbackEnv(__func__);
    if (!sCallbackEnv.valid() || !mDistanceMeasurementCallbacksObj) {
      return;
    }
    ScopedLocalRef<jstring> addr(sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &address));
    sCallbackEnv->CallVoidMethod(mDistanceMeasurementCallbacksObj,
                                 method_onDistanceMeasurementStartFail, addr.get(), reason, method);
  }

  void OnDistanceMeasurementStopped(RawAddress address, uint8_t reason, uint8_t method) {
    std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
    CallbackEnv sCallbackEnv(__func__);
@@ -2975,8 +2965,6 @@ static int register_com_android_bluetooth_gatt_distance_measurement(JNIEnv* env)
  const JNIJavaMethod javaMethods[] = {
          {"onDistanceMeasurementStarted", "(Ljava/lang/String;I)V",
           &method_onDistanceMeasurementStarted},
          {"onDistanceMeasurementStartFail", "(Ljava/lang/String;II)V",
           &method_onDistanceMeasurementStartFail},
          {"onDistanceMeasurementStopped", "(Ljava/lang/String;II)V",
           &method_onDistanceMeasurementStopped},
          {"onDistanceMeasurementResult", "(Ljava/lang/String;IIIIIIJII)V",
+6 −48
Original line number Diff line number Diff line
@@ -364,52 +364,6 @@ public class DistanceMeasurementManager {
        }
    }

    void onDistanceMeasurementStartFail(String address, int reason, int method) {
        logd(
                "onDistanceMeasurementStartFail address:"
                        + BluetoothUtils.toAnonymizedAddress(address)
                        + ", method:"
                        + method);
        switch (method) {
            case DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_RSSI:
                handleRssiStartFail(address, reason);
                break;
            case DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_CHANNEL_SOUNDING:
                handleCsStartFail(address, reason);
                break;
            default:
                Log.w(TAG, "onDistanceMeasurementStartFail: invalid method " + method);
        }
    }

    void handleRssiStartFail(String address, int reason) {
        CopyOnWriteArraySet<DistanceMeasurementTracker> set = mRssiTrackers.get(address);
        if (set == null) {
            Log.w(TAG, "Can't find rssi tracker");
            return;
        }
        for (DistanceMeasurementTracker tracker : set) {
            if (!tracker.mStarted) {
                invokeStartFail(tracker.mCallback, tracker.mDevice, reason);
            }
        }
        set.removeIf(tracker -> !tracker.mStarted);
    }

    void handleCsStartFail(String address, int reason) {
        CopyOnWriteArraySet<DistanceMeasurementTracker> set = mCsTrackers.get(address);
        if (set == null) {
            Log.w(TAG, "Can't find CS tracker");
            return;
        }
        for (DistanceMeasurementTracker tracker : set) {
            if (!tracker.mStarted) {
                invokeStartFail(tracker.mCallback, tracker.mDevice, reason);
            }
        }
        set.removeIf(tracker -> !tracker.mStarted);
    }

    void onDistanceMeasurementStopped(String address, int reason, int method) {
        logd(
                "onDistanceMeasurementStopped address:"
@@ -440,9 +394,11 @@ public class DistanceMeasurementManager {
            if (tracker.mStarted) {
                tracker.cancelTimer();
                invokeOnStopped(tracker.mCallback, tracker.mDevice, reason);
            } else {
                invokeStartFail(tracker.mCallback, tracker.mDevice, reason);
            }
        }
        set.removeIf(tracker -> tracker.mStarted);
        mRssiTrackers.remove(address);
    }

    void handleCsStopped(String address, int reason) {
@@ -455,9 +411,11 @@ public class DistanceMeasurementManager {
            if (tracker.mStarted) {
                tracker.cancelTimer();
                invokeOnStopped(tracker.mCallback, tracker.mDevice, reason);
            } else {
                invokeStartFail(tracker.mCallback, tracker.mDevice, reason);
            }
        }
        set.removeIf(tracker -> tracker.mStarted);
        mCsTrackers.remove(address);
    }

    void onDistanceMeasurementResult(
+0 −5
Original line number Diff line number Diff line
@@ -92,11 +92,6 @@ public class DistanceMeasurementNativeInterface {
        mDistanceMeasurementManager.onDistanceMeasurementStarted(address, method);
    }

    void onDistanceMeasurementStartFail(String address, int reason, int method) {
        mDistanceMeasurementManager.onDistanceMeasurementStartFail(
                address, convertErrorCode(reason), method);
    }

    void onDistanceMeasurementStopped(String address, int reason, int method) {
        mDistanceMeasurementManager.onDistanceMeasurementStopped(
                address, convertErrorCode(reason), method);
+1 −1
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@ public class DistanceMeasurementManagerTest {
                        IDENTITY_ADDRESS,
                        RSSI_FREQUENCY_LOW,
                        DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_RSSI);
        mDistanceMeasurementManager.onDistanceMeasurementStartFail(
        mDistanceMeasurementManager.onDistanceMeasurementStopped(
                IDENTITY_ADDRESS,
                BluetoothStatusCodes.ERROR_DISTANCE_MEASUREMENT_INTERNAL,
                DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_RSSI);
+20 −25
Original line number Diff line number Diff line
@@ -195,7 +195,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
      log::error("Can't find CS tracker for connection_handle {}", connection_handle);
      return;
    }
    distance_measurement_callbacks_->OnDistanceMeasurementStartFail(
    distance_measurement_callbacks_->OnDistanceMeasurementStopped(
            cs_requester_trackers_[connection_handle].address, REASON_INTERNAL_ERROR, METHOD_CS);
  }

@@ -269,7 +269,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
    // Remove this check if we support any connection less method
    if (connection_handle == kIllegalConnectionHandle) {
      log::warn("Can't find any LE connection for {}", address);
      distance_measurement_callbacks_->OnDistanceMeasurementStartFail(
      distance_measurement_callbacks_->OnDistanceMeasurementStopped(
              address, REASON_NO_LE_CONNECTION, method);
      return;
    }
@@ -328,7 +328,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
    log::info("connection_handle: {}, address: {}", connection_handle, cs_remote_address);
    if (!com::android::bluetooth::flags::channel_sounding_in_stack()) {
      log::error("Channel Sounding is not enabled");
      distance_measurement_callbacks_->OnDistanceMeasurementStartFail(
      distance_measurement_callbacks_->OnDistanceMeasurementStopped(
              cs_remote_address, REASON_INTERNAL_ERROR, METHOD_CS);
      return;
    }
@@ -492,14 +492,14 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
    auto it = cs_requester_trackers_.find(connection_handle);
    if (it == cs_requester_trackers_.end()) {
      log::warn("can't find tracker for 0x{:04x}", connection_handle);
      distance_measurement_callbacks_->OnDistanceMeasurementStartFail(
              address, REASON_INTERNAL_ERROR, METHOD_CS);
      distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR,
                                                                    METHOD_CS);
      return;
    }

    if (!success) {
      distance_measurement_callbacks_->OnDistanceMeasurementStartFail(
              address, REASON_INTERNAL_ERROR, METHOD_CS);
      distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR,
                                                                    METHOD_CS);
      return;
    }

@@ -619,13 +619,8 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
      return;
    }
    if (it->second.measurement_ongoing) {
      if (it->second.waiting_for_start_callback) {
        distance_measurement_callbacks_->OnDistanceMeasurementStartFail(it->second.address,
                                                                        errorCode, METHOD_CS);
      } else {
      distance_measurement_callbacks_->OnDistanceMeasurementStopped(it->second.address, errorCode,
                                                                    METHOD_CS);
      }
      it->second.repeating_alarm->Cancel();
      it->second.repeating_alarm.reset();
    }
@@ -1505,14 +1500,14 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
    auto status_view = LeReadRemoteTransmitPowerLevelStatusView::Create(view);
    if (!status_view.IsValid()) {
      log::warn("Invalid LeReadRemoteTransmitPowerLevelStatus event");
      distance_measurement_callbacks_->OnDistanceMeasurementStartFail(
              address, REASON_INTERNAL_ERROR, METHOD_RSSI);
      distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR,
                                                                    METHOD_RSSI);
      rssi_trackers.erase(address);
    } else if (status_view.GetStatus() != ErrorCode::SUCCESS) {
      std::string error_code = ErrorCodeText(status_view.GetStatus());
      log::warn("Received LeReadRemoteTransmitPowerLevelStatus with error code {}", error_code);
      distance_measurement_callbacks_->OnDistanceMeasurementStartFail(
              address, REASON_INTERNAL_ERROR, METHOD_RSSI);
      distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR,
                                                                    METHOD_RSSI);
      rssi_trackers.erase(address);
    }
  }
@@ -1558,7 +1553,7 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
                                     address, event_view.GetConnectionHandle()));
      } else {
        log::warn("Read remote transmit power level fail");
        distance_measurement_callbacks_->OnDistanceMeasurementStartFail(
        distance_measurement_callbacks_->OnDistanceMeasurementStopped(
                address, REASON_INTERNAL_ERROR, METHOD_RSSI);
        rssi_trackers.erase(address);
      }
@@ -1570,24 +1565,24 @@ struct DistanceMeasurementManager::impl : bluetooth::hal::RangingHalCallback {
    auto complete_view = LeSetTransmitPowerReportingEnableCompleteView::Create(view);
    if (!complete_view.IsValid()) {
      log::warn("Invalid LeSetTransmitPowerReportingEnableComplete event");
      distance_measurement_callbacks_->OnDistanceMeasurementStartFail(
              address, REASON_INTERNAL_ERROR, METHOD_RSSI);
      distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR,
                                                                    METHOD_RSSI);
      rssi_trackers.erase(address);
      return;
    } else if (complete_view.GetStatus() != ErrorCode::SUCCESS) {
      std::string error_code = ErrorCodeText(complete_view.GetStatus());
      log::warn("Received LeSetTransmitPowerReportingEnableComplete with error code {}",
                error_code);
      distance_measurement_callbacks_->OnDistanceMeasurementStartFail(
              address, REASON_INTERNAL_ERROR, METHOD_RSSI);
      distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR,
                                                                    METHOD_RSSI);
      rssi_trackers.erase(address);
      return;
    }

    if (rssi_trackers.find(address) == rssi_trackers.end()) {
      log::warn("Can't find rssi tracker for {}", address);
      distance_measurement_callbacks_->OnDistanceMeasurementStartFail(
              address, REASON_INTERNAL_ERROR, METHOD_RSSI);
      distance_measurement_callbacks_->OnDistanceMeasurementStopped(address, REASON_INTERNAL_ERROR,
                                                                    METHOD_RSSI);
      rssi_trackers.erase(address);
    } else {
      log::info("Track rssi for address {}", address);
Loading