package aceim.app.utils;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import aceim.api.dataentity.Buddy;
import aceim.app.R;
import aceim.app.service.CoreService;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.widget.Toast;
public class LocationSender {
private final CoreService mCoreService;
private LocationManager lm = null;
private final Map<Buddy, LocationLoader> mLoaders = Collections.synchronizedMap(new HashMap<Buddy, LocationLoader>());
public LocationSender(CoreService service) {
this.mCoreService = service;
}
public void requestLocationForBuddy(Buddy buddy){
if (mLoaders.containsKey(buddy)) {
return;
}
if (lm == null) {
lm = (LocationManager) mCoreService.getSystemService(Context.LOCATION_SERVICE);
}
if (lm != null) {
LocationLoader loader = new LocationLoader(buddy);
if (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
mCoreService.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
} else {
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, loader);
}
} else {
Toast.makeText(mCoreService, "Sorry, your device does not support location resolving", Toast.LENGTH_LONG).show();
}
}
public void cancelLocationRequest(String buddyUid) {
mLoaders.remove(buddyUid);
}
private class LocationLoader implements LocationListener {
private final Buddy buddy;
LocationLoader(Buddy buddy) {
this.buddy = buddy;
}
@Override
public void onLocationChanged(Location location) {
String url = mCoreService.getBaseContext().getString(R.string.im_here, "http://maps.google.com/maps?q=" + location.getLatitude() + "," + location.getLongitude() + "&z=16");
mCoreService.sendLocation(buddy, url);
lm.removeUpdates(this);
mLoaders.remove(buddy);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
if (mLoaders.containsKey(buddy)) {
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
}
@Override
public void onProviderDisabled(String provider) {
}
}
}