Created
November 30, 2016 11:15
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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