/** * */ package com.gmail.charleszq.picorner.ui.command.ig; 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.util.Log; import android.widget.Toast; import com.gmail.charleszq.picorner.R; import com.gmail.charleszq.picorner.service.IPhotoService; import com.gmail.charleszq.picorner.service.ig.InstagramSearchNearbyPhotosService; /** * @author charles(charleszq@gmail.com) * */ public class InstagramSearchNearPhotosCommand extends AbstractInstagramPhotoListCommand { private static final String TAG = InstagramSearchNearPhotosCommand.class .getSimpleName(); /** * the current state * <ul> * <li>0: find the current location;</li> * <li>1: current location found;</li> * <li>other: can not find the current location.</li> * </ul> */ private int mCurrentState = 0; /** * The current location */ private Location mCurrentLocation = null; /** * Location manager. */ private LocationManager mLocationManager; /** * Location listener to receive the location update. */ private LocationListener mLocationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { if (location != null) { mLocationManager.removeUpdates(this); InstagramSearchNearPhotosCommand.this.mCurrentState = 1; mCurrentLocation = location; Log.d(TAG, "lat = " + location.getAltitude() + ", lng = " //$NON-NLS-1$//$NON-NLS-2$ + location.getLongitude()); InstagramSearchNearPhotosCommand.this.execute(); } } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } }; /** * @param context */ public InstagramSearchNearPhotosCommand(Context context) { super(context); } /* * (non-Javadoc) * * @see com.gmail.charleszq.picorner.ui.command.ICommand#getIconResourceId() */ @Override public int getIconResourceId() { return android.R.drawable.ic_menu_myplaces; } /* * (non-Javadoc) * * @see com.gmail.charleszq.picorner.ui.command.ICommand#getLabel() */ @Override public String getLabel() { return mContext.getString(R.string.cmd_name_ig_loc_search); } @Override public boolean execute(Object... params) { if (mCurrentState != 1) { findCurrentLocation(); return false; } else { // restore the current state mCurrentState = 0; return super.execute(params); } } @Override public Object getAdapter(Class<?> adapterClass) { if (adapterClass == IPhotoService.class) { if (mCurrentPhotoService == null) { mCurrentPhotoService = new InstagramSearchNearbyPhotosService( mCurrentLocation); } return mCurrentPhotoService; } return super.getAdapter(adapterClass); } @Override public String getDescription() { return mContext.getString(R.string.cd_ig_photos_nearby); } private void findCurrentLocation() { mLocationManager = (LocationManager) mContext .getSystemService(Context.LOCATION_SERVICE); Location loc = mLocationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (loc == null) { Toast.makeText(mContext, mContext.getString(R.string.msg_pls_turn_on_location), Toast.LENGTH_SHORT).show(); Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); mContext.startActivity(i); } else { mLocationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, 3000L, 10, mLocationListener); } } }