package com.ved.musicmapapp.fragments; import java.util.ArrayList; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.graphics.Typeface; import android.location.Location; import android.location.LocationManager; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.TextView; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesClient; import com.google.android.gms.location.LocationClient; import com.google.android.gms.location.LocationListener; import com.google.android.gms.location.LocationRequest; import com.ved.musicmapapp.MainActivity; import com.ved.musicmapapp.R; import com.ved.musicmapapp.Objects.User; import com.ved.musicmapapp.adapters.UserAdapter; import com.ved.musicmapapp.providers.GetAroundMeTask; import com.ved.musicmapapp.providers.UpdateLocationTask; import com.ved.musicmapapp.services.UpdateLocationService; import com.ved.musicmapapp.utils.Statics; import com.ved.musicmapapp.utils.Utils; public class AroundUserFragment extends Fragment implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener, LocationListener { private ListView list; private UserAdapter uAdapter; public static final int UPDATE_DURATION = 30 * 1000; // 30 second private ArrayList<User> aroundMeUsers; private TextView mTvGPSNotify; // private Editor edt; private GetAroundMeTask task; private View loadingLayout, resultLayout; LocationClient mLocationClient; LocationRequest mLocationRequest; private Pair<Double, Double> lastLocation; private SharedPreferences mPrefs; private UpdateLocationTask mTask; private Activity mContext; @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); this.mContext = activity; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLocationClient = new LocationClient(mContext, this, this); mLocationRequest = LocationRequest.create(); // Use high accuracy mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationRequest.setInterval(UPDATE_DURATION); mLocationRequest.setFastestInterval(UPDATE_DURATION); mPrefs = mContext.getSharedPreferences("MUSIC_MAP", Context.MODE_PRIVATE); lastLocation = UpdateLocationService.getLastLocation(mContext); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View v = inflater.inflate(R.layout.activity_you_follow, container, false); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (null == mContext) return; loadingLayout = getView().findViewById(R.id.loadingLayout); resultLayout = getView().findViewById(R.id.resultLayout); list = (ListView) getView().findViewById(R.id.list_you_follow); // prefs = mContext.getSharedPreferences("MUSIC_MAP", // Context.MODE_PRIVATE); // edt = prefs.edit(); // app = (MusicMapApplication) mContext.getApplication(); // group_loadmore = (LinearLayout) v.findViewById(R.id.group_loadmore); // group_find = (LinearLayout) v.findViewById(R.id.group_find); aroundMeUsers = new ArrayList<User>(); uAdapter = new UserAdapter(mContext, aroundMeUsers); list.setAdapter(uAdapter); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) { if(Statics.hashUsers != null){ User user = Statics.hashUsers.get(aroundMeUsers.get(pos).getFbid()); UserDetailsFragment fragment = new UserDetailsFragment(); fragment.setUser(user); FragmentTransaction fragmentTransaction = getActivity() .getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.frame_content, fragment); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); /* UserDetailFragment fragment = new UserDetailFragment(); fragment.setUser(user); FragmentTransaction fragmentTransaction = getFragmentManager() .beginTransaction(); fragmentTransaction.replace(R.id.frame_content, fragment); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit();*/ } } }); mTvGPSNotify = (TextView) getView().findViewById(R.id.tv_gps_notify); Typeface tf = Typeface.createFromAsset(getActivity().getAssets(), "open_sans_regular.ttf"); mTvGPSNotify.setTypeface(tf); mTvGPSNotify.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mContext, UpdateLocationService.class); intent.putExtra("PROVIDER", LocationManager.GPS_PROVIDER); mContext.startService(intent); } }); if(((TextView) getView().findViewById(R.id.textView1)) != null) ((TextView) getView().findViewById(R.id.textView1)).setText(R.string.arround_nodata_msg); } @Override public void onResume() { LocationManager locationManager = (LocationManager) mContext .getSystemService(Context.LOCATION_SERVICE); ((MainActivity)mContext).hideShareAction(); if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { mTvGPSNotify.setVisibility(View.GONE); } else { mTvGPSNotify.setVisibility(View.VISIBLE); } if (mLocationClient.isConnected()) { mLocationClient.requestLocationUpdates(mLocationRequest, this); } else { mLocationClient.connect(); } if (null != task) task.cancel(true); task = new GetAroundMeTask(mContext, GetAroundMeTask.ALL_USER, false) { @Override protected void onPreExecute() { super.onPreExecute(); loadingLayout.setVisibility(View.VISIBLE); resultLayout.setVisibility(View.GONE); } @Override public void onSuccess(ArrayList<User> users) { super.onSuccess(users); loadingLayout.setVisibility(View.GONE); aroundMeUsers = users; if (null != mContext) { uAdapter = new UserAdapter(mContext, aroundMeUsers); list.setAdapter(uAdapter); list.setVisibility(View.VISIBLE); } if (uAdapter == null || uAdapter.getCount() == 0) { resultLayout.setVisibility(View.VISIBLE); list.setVisibility(View.GONE); } else { resultLayout.setVisibility(View.GONE); list.setVisibility(View.VISIBLE); } } }; task.execute(); super.onResume(); } @Override public void onDestroy() { if (mLocationClient.isConnected()) mLocationClient.disconnect(); if (null != task) task.cancel(true); super.onDestroy(); } private void buildAlertMessageNoGps() { new AlertDialog.Builder(mContext) .setMessage( "Your GPS seems to be disabled, do you want to enable it?") .setCancelable(false) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { startActivity(new Intent( android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { if (null != mContext) { MainActivity m = (MainActivity) mContext; m.onYouFollow(null); } } }).show(); } @Override public void onDestroyView() { if (getView() != null) { ((ViewGroup) getView().getParent()).removeView(getView()); } super.onDestroyView(); } @Override public void onPause() { try { if (mLocationClient.isConnected()) mLocationClient.removeLocationUpdates(this); } catch (Exception ex) { } super.onPause(); } @Override public void onLocationChanged(final Location location) { double distance = UpdateLocationService.MIN_DISTANCE; if (lastLocation != null) { distance = Utils.distance(lastLocation.first, lastLocation.second, location.getLatitude(), location.getLongitude()); } lastLocation = new Pair<Double, Double>(location.getLatitude(), location.getLongitude()); if (distance >= UpdateLocationService.MIN_DISTANCE) { if (mTask != null) { mTask.cancel(true); mTask = null; } Editor edt = mPrefs.edit(); edt.putBoolean("location_committed", false); edt.putString("LAST_LONGITUDE", location.getLongitude() + ""); edt.putString("LAST_LATITUDE", location.getLatitude() + ""); edt.commit(); mTask = new UpdateLocationTask(mContext, location.getLatitude(), location.getLongitude(), new UpdateLocationTask.UpdateLocationListener() { @Override public void onUpdateComplete(boolean isSuccess) { if (isSuccess) { Editor edt = mPrefs.edit(); edt.putBoolean("location_committed", true); edt.commit(); } } }); mTask.execute(); } } @Override public void onConnectionFailed(ConnectionResult result) { // TODO Auto-generated method stub } @Override public void onConnected(Bundle connectionHint) { mLocationClient.requestLocationUpdates(mLocationRequest, this); } @Override public void onDisconnected() { // TODO Auto-generated method stub } }