summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Tang <zhikait@codeaurora.org>2017-09-22 17:28:58 -0700
committerKevin Tang <zhikait@codeaurora.org>2017-09-22 17:28:58 -0700
commitc7642dca5f4bc58329341fa40102027ff422be71 (patch)
tree63867c37e2df2ff60f9dd98973a4a727900212a3
parent220b5cb5819185b907f97b68e5a31e8e9011ed5a (diff)
downloadgps-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.cpp44
-rw-r--r--location/LocationAPIClientBase.h8
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;
};