package net.dev123.yibo.service.listener;
import net.dev123.entity.GeoLocation;
import net.dev123.yibo.EditMicroBlogActivity;
import net.dev123.yibo.R;
import net.dev123.yibo.YiBoApplication;
import net.dev123.yibo.common.Constants;
import net.dev123.yibo.common.theme.Theme;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class EditMicroBlogLocationClickListener implements OnClickListener {
private EditMicroBlogActivity context;
private LocationManager locationManager;
private GeoLocation geoLocation;
private boolean isAutoLocate = false;
private boolean isFineLocation = false;
private boolean isCoarseLocation = false;
private Button btnLocation;
public EditMicroBlogLocationClickListener(EditMicroBlogActivity context) {
this.context = context;
YiBoApplication yibo = (YiBoApplication)context.getApplicationContext();
locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
if (yibo.isAutoLocate()) {
registerListener();
isAutoLocate = true;
}
btnLocation = (Button)context.findViewById(R.id.btnLocation);
}
@Override
public void onClick(View v) {
isAutoLocate = false;
if (isCoarseLocation || isFineLocation) {
context.setGeoLocation(null);
Theme theme = context.getSkinTheme();
btnLocation.setBackgroundDrawable(theme.getDrawable("selector_btn_location"));
removeListener();
isCoarseLocation = false;
isFineLocation = false;
} else {
registerListener();
}
}
public void registerListener() {
String provider;
if (isFineLocation) {
Toast.makeText(context, R.string.msg_fine_location, Toast.LENGTH_SHORT).show();
return;
}
locationManager.removeUpdates(listener);
if (isCoarseLocation) {
provider = LocationManager.GPS_PROVIDER;
} else {
provider = LocationManager.NETWORK_PROVIDER;
}
try {
locationManager.requestLocationUpdates(provider, 2000, 0, listener);
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
geoLocation = new GeoLocation(location.getLatitude(), location.getLongitude());
context.setGeoLocation(geoLocation);
if (Constants.DEBUG) {
Toast.makeText(context, location.getProvider() + " last known-->" + location.getLatitude() + ":" + location.getLongitude(), Toast.LENGTH_LONG).show();
}
}
} catch(Exception e) {
if (provider.equalsIgnoreCase(LocationManager.NETWORK_PROVIDER)) {
isCoarseLocation = true;
registerListener();
}
}
}
public void removeListener() {
locationManager.removeUpdates(listener);
}
private LocationListener listener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
if (location == null) {
return;
}
geoLocation = new GeoLocation(location.getLatitude(), location.getLongitude());
context.setGeoLocation(geoLocation);
if (location.getProvider().equalsIgnoreCase(LocationManager.GPS_PROVIDER)) {
isFineLocation = true;
Toast.makeText(context, R.string.msg_fine_location, Toast.LENGTH_SHORT).show();
removeListener();
} else {
isCoarseLocation = true;
Toast.makeText(context, R.string.msg_coarse_location, Toast.LENGTH_LONG).show();
removeListener();
registerListener();
}
if (Constants.DEBUG) {
Toast.makeText(context, location.getProvider() + "-->" + location.getLatitude() + ":" + location.getLongitude(), Toast.LENGTH_LONG).show();
System.out.println("location: " + location.getProvider() + location);
}
if (isCoarseLocation || isFineLocation) {
Theme theme = context.getSkinTheme();
btnLocation.setBackgroundDrawable(theme.getDrawable("selector_btn_location_success"));
}
}
@Override
public void onProviderDisabled(String provider) {
if (provider.equalsIgnoreCase(LocationManager.GPS_PROVIDER)) {
Toast.makeText(context, R.string.msg_gps_not_turn_on, Toast.LENGTH_SHORT).show();
} else if (provider.equalsIgnoreCase(LocationManager.NETWORK_PROVIDER)) {
//无线网络定位未开启
Toast.makeText(context, R.string.msg_network_not_turn_on, Toast.LENGTH_SHORT).show();
isCoarseLocation = true;
registerListener();
}
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
};
public boolean isAutoLocate() {
return isAutoLocate;
}
public void setAutoLocate(boolean isAutoLocate) {
this.isAutoLocate = isAutoLocate;
}
}