diff options
author | Kevin Tang <zhikait@codeaurora.org> | 2017-09-22 17:28:58 -0700 |
---|---|---|
committer | Kevin Tang <zhikait@codeaurora.org> | 2017-09-22 17:28:58 -0700 |
commit | c7642dca5f4bc58329341fa40102027ff422be71 (patch) | |
tree | 63867c37e2df2ff60f9dd98973a4a727900212a3 | |
parent | 220b5cb5819185b907f97b68e5a31e8e9011ed5a (diff) | |
download | gps-c7642dca5f4bc58329341fa40102027ff422be71.tar.gz |
locAPIRemoveGeofences now notify the result inmediately
locAPIRemoveGeofences is no longer waiting for the request response,
instead it will always notify his callbacks with LOCATION_ERROR_SUCCESS
if the provided id is found, or LOCATION_ERROR_ID_UNKNOWN if not.
Change-Id: I602ad43bee894e85fde1e80210e6477b628e4a39
CRs-fixed: 2099450
-rw-r--r-- | location/LocationAPIClientBase.cpp | 44 | ||||
-rw-r--r-- | location/LocationAPIClientBase.h | 8 |
2 files changed, 13 insertions, 39 deletions
diff --git a/location/LocationAPIClientBase.cpp b/location/LocationAPIClientBase.cpp index 070c585..4aa1ccb 100644 --- a/location/LocationAPIClientBase.cpp +++ b/location/LocationAPIClientBase.cpp @@ -613,12 +613,22 @@ void LocationAPIClientBase::locAPIRemoveGeofences(size_t count, uint32_t* ids) if (mRequestQueues[REQUEST_GEOFENCE].getSession() == GEOFENCE_SESSION_ID) { size_t j = 0; + uint32_t id_cb; + LocationError err; for (size_t i = 0; i < count; i++) { sessions[j] = mGeofenceBiDict.getSession(ids[i]); + id_cb = ids[i]; if (sessions[j] > 0) { + mGeofenceBiDict.rmBySession(sessions[j]); + err = LOCATION_ERROR_SUCCESS; + onRemoveGeofencesCb(1, &err, &id_cb); j++; + } else { + err = LOCATION_ERROR_ID_UNKNOWN; + onRemoveGeofencesCb(1, &err, &id_cb); } } + if (j > 0) { mRequestQueues[REQUEST_GEOFENCE].push(new RemoveGeofencesRequest(*this)); mLocationAPI->removeGeofences(j, sessions); @@ -743,38 +753,8 @@ void LocationAPIClientBase::locAPIResumeGeofences( void LocationAPIClientBase::locAPIRemoveAllGeofences() { - pthread_mutex_lock(&mMutex); - if (mLocationAPI) { - std::vector<uint32_t> sessionsVec = mGeofenceBiDict.getAllSessions(); - size_t count = sessionsVec.size(); - uint32_t* sessions = (uint32_t*)malloc(sizeof(uint32_t) * count); - if (sessions == NULL) { - LOC_LOGE("%s:%d] Failed to allocate %zu bytes !", - __FUNCTION__, __LINE__, sizeof(uint32_t) * count); - pthread_mutex_unlock(&mMutex); - return; - } - - if (mRequestQueues[REQUEST_GEOFENCE].getSession() == GEOFENCE_SESSION_ID) { - size_t j = 0; - for (size_t i = 0; i < count; i++) { - sessions[j] = sessionsVec[i]; - if (sessions[j] > 0) { - j++; - } - } - if (j > 0) { - mRequestQueues[REQUEST_GEOFENCE].push(new RemoveGeofencesRequest(*this)); - mLocationAPI->removeGeofences(j, sessions); - } - } else { - LOC_LOGE("%s:%d] invalid session: %d.", __FUNCTION__, __LINE__, - mRequestQueues[REQUEST_GEOFENCE].getSession()); - } - - free(sessions); - } - pthread_mutex_unlock(&mMutex); + std::vector<uint32_t> sessionsVec = mGeofenceBiDict.getAllSessions(); + locAPIRemoveGeofences(sessionsVec.size(), &sessionsVec[0]); } void LocationAPIClientBase::locAPIGnssNiResponse(uint32_t id, GnssNiResponse response) diff --git a/location/LocationAPIClientBase.h b/location/LocationAPIClientBase.h index a856054..78c8fa6 100644 --- a/location/LocationAPIClientBase.h +++ b/location/LocationAPIClientBase.h @@ -465,13 +465,7 @@ private: public: RemoveGeofencesRequest(LocationAPIClientBase& API) : mAPI(API) {} inline void onCollectiveResponse(size_t count, LocationError* errors, uint32_t* sessions) { - uint32_t *ids = (uint32_t*)malloc(sizeof(uint32_t) * count); - for (size_t i = 0; i < count; i++) { - ids[i] = mAPI.mGeofenceBiDict.getId(sessions[i]); - mAPI.mGeofenceBiDict.rmBySession(sessions[i]); - } - mAPI.onRemoveGeofencesCb(count, errors, ids); - free(ids); + // No need to handle collectiveResponse, cbs already notified } LocationAPIClientBase& mAPI; }; |