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
}
}