package org.igarape.copcast.utils;
import android.content.Context;
import android.location.Location;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
/**
* Created by bruno on 11/5/14.
*/
public class LocationUtils {
/*
* Define a request code to send to Google Play services
* This code is returned in Activity.onActivityResult
*/
public final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
/*
* Constants for location update parameters
*/
// Milliseconds per second
public static final int MILLISECONDS_PER_SECOND = 1000;
// The update interval
public static final int UPDATE_INTERVAL_IN_SECONDS = 5;
// A fast interval ceiling
public static final int FAST_CEILING_IN_SECONDS = 1;
// Update interval in milliseconds
public static final long UPDATE_INTERVAL_IN_MILLISECONDS =
MILLISECONDS_PER_SECOND * UPDATE_INTERVAL_IN_SECONDS;
// A fast ceiling of update intervals, used when the app is visible
public static final long FAST_INTERVAL_CEILING_IN_MILLISECONDS =
MILLISECONDS_PER_SECOND * FAST_CEILING_IN_SECONDS;
private static final String TAG = LocationUtils.class.getName();
public static void sendLocation(Context context,final String login, final Location location) {
HttpResponseCallback callback = new HttpResponseCallback(){
@Override
public void failure(int statusCode) {
FileUtils.logLocation(login, location);
}
@Override
public void unauthorized() {
FileUtils.logLocation(login, location);
}
@Override
public void noConnection() {
FileUtils.logLocation(login, location);
}
@Override
public void badConnection() {
FileUtils.logLocation(login, location);
}
@Override
public void badRequest() {
FileUtils.logLocation(login, location);
}
@Override
public void badResponse() {
FileUtils.logLocation(login, location);
}
@Override
public void success(JSONObject response) {
Log.i(TAG, "location sent successfully");
}
};
try {
NetworkUtils.post(context, "/locations", buildJson(location), callback);
} catch (JSONException e) {
Log.e(TAG, "json error", e);
}
}
public static JSONObject buildJson(Location location) throws JSONException {
TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat(FileUtils.DATE_FORMAT);
df.setTimeZone(tz);
return buildJson(location.getLatitude(),location.getLongitude(),df.format(new Date()),
location.getAccuracy(), location.getExtras() == null ? null : location.getExtras().get("satellites"), location.getProvider(),
location.getBearing(), location.getSpeed());
}
public static JSONObject buildJson(Double latitude, Double longitude, String date,
Float accuracy, Object satellites, String provider,
Float bearing, Float speed) throws JSONException {
JSONObject json = new JSONObject();
json.put("lat", latitude);
json.put("lng", longitude);
json.put("date", date);
if (accuracy != null) {
json.put("accuracy", accuracy);
}
if (satellites != null) {
json.put("satellites", satellites);
}
if (provider != null) {
json.put("provider", provider);
}
if (bearing != null) {
json.put("bearing", bearing);
}
if (speed != null) {
json.put("speed", speed);
}
return json;
}
}