Skip to content

Instantly share code, notes, and snippets.

@ikun03
Created November 30, 2016 11:15
Show Gist options
  • Save ikun03/e9c02541839f27b65b99d2dd5b093910 to your computer and use it in GitHub Desktop.
Save ikun03/e9c02541839f27b65b99d2dd5b093910 to your computer and use it in GitHub Desktop.
IntentService for sending the locations from location bean to snap to roads api and broadcast the response.
package to.done.orderinsights.deliveryboy;
import android.app.IntentService;
import android.content.Intent;
import android.os.Parcelable;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.google.android.gms.maps.model.LatLng;
import java.util.ArrayList;
import to.done.lib.Constants;
import to.done.lib.database.DBManager;
import to.done.lib.exception.NoInternetException;
import to.done.lib.network.RequestService;
import to.done.lib.network.wrapper.RoadsToApiResponse;
/**
* Created by Kunal S on 11/24/2016.
*/
public class SnapLocationRoadsService extends IntentService {
private static final String TAG = SnapLocationRoadsService.class.getSimpleName();
private RoadsToApiResponse mRoadsToApiResponse;
private ArrayList<RoadsToApiResponse> mRoadsToApiResponseList;
private ArrayList<DeliveryBoyFirebaseResponse.LocationsBean> locations;
private int start;
public SnapLocationRoadsService() {
super("SnapLocationRoadsService");
}
@Override
protected void onHandleIntent(Intent intent) {
locations = intent.getParcelableArrayListExtra(Constants.ARRAY_LIST_LOCATIONS);
if (locations.size() < 100) {
sendRoadSnapshotRequest(locations, true, false, false);
} else if (locations.size() >= 100) {
mRoadsToApiResponseList = new ArrayList<>();
start = 0;
sendMultiRequest();
}
}
private void sendMultiRequest() {
if (locations.size() - start >= 100) {
sendRoadSnapshotRequest((ArrayList<DeliveryBoyFirebaseResponse.LocationsBean>) locations.subList(start, start + 100), false, true, false);
start += 99;
} else if (locations.size() - start > 0) {
sendRoadSnapshotRequest((ArrayList<DeliveryBoyFirebaseResponse.LocationsBean>) locations.subList(start, locations.size() - 1), false, true, true);
}
}
private void broadcastRequestResponse(boolean isLessThanHundred) {
ArrayList<LatLng> latLngsFromRoadsApi = new ArrayList<>();
if (isLessThanHundred) {
for (RoadsToApiResponse.SnappedPointsBean spb : mRoadsToApiResponse.getSnappedPoints()) {
LatLng latLng = new LatLng(spb.getLocation().getLatitude(), spb.getLocation().getLongitude());
latLngsFromRoadsApi.add(latLng);
}
} else {
for (RoadsToApiResponse resp : mRoadsToApiResponseList) {
for (RoadsToApiResponse.SnappedPointsBean spb : resp.getSnappedPoints()) {
LatLng latLng = new LatLng(spb.getLocation().getLatitude(), spb.getLocation().getLongitude());
latLngsFromRoadsApi.add(latLng);
}
}
}
Intent locationsIntent = new Intent(Constants.BROADCAST_LOCATION)
.putParcelableArrayListExtra(Constants.LOCATIONS_IN_BROADCAST, latLngsFromRoadsApi);
LocalBroadcastManager.getInstance(this).sendBroadcast(locationsIntent);
}
private void sendRoadSnapshotRequest(ArrayList<DeliveryBoyFirebaseResponse.LocationsBean> locations, final boolean isLessThanHundred, final boolean multiRequests, final boolean isLastInMulti) {
RequestService service = new RequestService(DBManager.getInstance(this), this);
try {
service.snapCoordinatesToRoad(locations, true, new Response.Listener<RoadsToApiResponse>() {
@Override
public void onResponse(RoadsToApiResponse roadsToApiResponse) {
mRoadsToApiResponse = roadsToApiResponse;
if (multiRequests) {
mRoadsToApiResponseList.add(mRoadsToApiResponse);
if (isLastInMulti) {
broadcastRequestResponse(isLessThanHundred);
} else {
sendMultiRequest();
}
} else {
broadcastRequestResponse(isLessThanHundred);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e(TAG, "onErrorResponse: ", volleyError);
}
});
} catch (NoInternetException e) {
Log.e(TAG, "onHandleIntent: ", e);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment