package com.socioboard.iboardpro.fragments;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.location.Location;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request.Method;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.socioboard.iboardpro.AppController;
import com.socioboard.iboardpro.ConstantTags;
import com.socioboard.iboardpro.ConstantUrl;
import com.socioboard.iboardpro.JSONParser;
import com.socioboard.iboardpro.MainActivity;
import com.socioboard.iboardpro.R;
import com.socioboard.iboardpro.adapter.CustomAdpLocations;
import com.socioboard.iboardpro.adapter.LocationSearchAdapter;
import com.socioboard.iboardpro.database.util.MainSingleTon;
import com.socioboard.iboardpro.models.LocationModel;
import com.socioboard.iboardpro.models.RowItemLocations;
import com.socioboard.iboardpro.ui.WaveDrawable;
import com.socioboard.iboardpro.utils.AppLocationService;
public class NearBySearch_Fragment extends Fragment {
View rootview;
TextView click_here_text;
ImageView searchbtn;
EditText text;
ImageView progressimage, nearby_btn;
ListView list, locationlist;
String location, latitute, longitude;
private WaveDrawable waveDrawable;
private String tag_json_obj = "jobj_req", tag_json_arry = "jarray_req";
String nexturl;
ArrayList<RowItemLocations> locationsList = new ArrayList<RowItemLocations>();
LocationSearchAdapter adapter;
AppLocationService appLocationService;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootview = inflater.inflate(R.layout.nearbysearch, container, false);
InitUI();
return rootview;
}
void InitUI() {
searchbtn = (ImageView) rootview.findViewById(R.id.searchimage);
text = (EditText) rootview.findViewById(R.id.captionText);
progressimage = (ImageView) rootview.findViewById(R.id.image);
locationlist = (ListView) rootview.findViewById(R.id.listview);
click_here_text = (TextView) rootview.findViewById(R.id.clicktext);
nearby_btn = (ImageView) rootview.findViewById(R.id.nearby_btn);
searchbtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
locationsList.clear();
if (!text.getText().toString().trim().isEmpty()) {
String place = text.getText().toString().trim();
OpenLocationChnageDialog();
new ChangeLocAynctask().execute(place);
} else {
Toast.makeText(getActivity(), "Please enter location name",
Toast.LENGTH_SHORT).show();
}
}
});
locationlist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
MainSingleTon.selected_location_id = MainSingleTon.location_arraylist
.get(position).getId();
MainActivity.mainfragmentManager.beginTransaction()
.replace(R.id.main_content, new NearByFeed_Fragment())
.addToBackStack(null).commit();
}
});
waveDrawable = new WaveDrawable(Color.parseColor("#8DD2FA"), 500);
if (Build.VERSION.SDK_INT >= 16) {
progressimage.setBackground(waveDrawable);
} else {
progressimage.setBackgroundDrawable(waveDrawable);
}
Interpolator interpolator = new LinearInterpolator();
waveDrawable.setWaveInterpolator(interpolator);
waveDrawable.startAnimation();
setAdapter();
if (MainSingleTon.location_arraylist.size() > 0) {
nearby_btn.setVisibility(View.INVISIBLE);
click_here_text.setVisibility(View.INVISIBLE);
}
nearby_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
appLocationService = new AppLocationService(getActivity());
// fetch current lat & long from network
Location nwLocation = appLocationService
.getLocation(LocationManager.NETWORK_PROVIDER);
if (nwLocation != null) {
double latitude = nwLocation.getLatitude();
double longitude = nwLocation.getLongitude();
if (MainSingleTon.location_arraylist.size() == 0) {
FetchLocation(latitude + "", longitude + "");
}
} else {
showSettingsAlert("Location");
}
}
});
}
public void OpenLocationChnageDialog() {
final Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT);
dialog.setContentView(R.layout.dialog_changelocation);
list = (ListView) dialog.findViewById(R.id.list);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
location = locationsList.get(position).getdisplayAddres();
latitute = locationsList.get(position).getlatitute();
longitude = locationsList.get(position).getlongitute();
dialog.hide();
System.out.println("lat*******************" + latitute);
FetchLocation(latitute, longitude);
// new ChangeLocation().execute(latitute,longitude);
}
});
dialog.show();
}
class ChangeLocAynctask extends AsyncTask<String, Void, Void> {
String response = null;
@Override
protected Void doInBackground(String... params) {
String place = params[0];
String parametes = "http://maps.google.com/maps/api/geocode/json?address="
+ place.replace(" ", "%20") + "&sensor=false";
JSONParser jParser = new JSONParser();
JSONObject jsonOj = jParser.getJSONFromUrlByGet(parametes);
try {
response = jsonOj.getString("status");
if (response.equalsIgnoreCase("OK")) {
JSONArray jsonArray = jsonOj.getJSONArray("results");
for (int i = 0; i < jsonArray.length(); i++) {
RowItemLocations itemLocations = new RowItemLocations();
itemLocations.setdisplayAddres(jsonArray.getJSONObject(
i).getString("formatted_address"));
itemLocations.setlatitute(jsonArray.getJSONObject(i)
.getJSONObject("geometry")
.getJSONObject("location").getString("lat"));
itemLocations.setlongitute(jsonArray.getJSONObject(i)
.getJSONObject("geometry")
.getJSONObject("location").getString("lng"));
locationsList.add(itemLocations);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
System.out.println("RESULT=" + jsonOj);
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if (locationsList.size()==0) {
Toast.makeText(getActivity(), "No such locations found!!",
Toast.LENGTH_SHORT).show();
}
CustomAdpLocations adpLocations = new CustomAdpLocations(
getActivity(), locationsList);
list.setAdapter(adpLocations);
}
}
/**
* Making json object request
* */
private void FetchLocation(String lat, String longi) {
progressimage.setVisibility(View.VISIBLE);
MainSingleTon.location_arraylist.clear();
nearby_btn.setVisibility(View.INVISIBLE);
click_here_text.setVisibility(View.INVISIBLE);
locationlist.setVisibility(View.INVISIBLE);
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
ConstantUrl.URL_Location_search + "lat=" + lat + "&lng="
+ longi + "&access_token=" + MainSingleTon.accesstoken,
null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject json) {
try {
System.out.println("josn tag data" + json);
if (json.has("pagination")) {
JSONObject jsonObject = json
.getJSONObject("pagination");
if (jsonObject.has("next_url")) {
nexturl = jsonObject.getString("next_url");
}
}
JSONArray data = json
.getJSONArray(ConstantTags.TAG_DATA);
for (int data_i = 0; data_i < data.length(); data_i++) {
JSONObject data_obj = data
.getJSONObject(data_i);
String id = data_obj
.getString(ConstantTags.TAG_ID);
String name = data_obj
.getString(ConstantTags.TAG_NAME);
String lat = data_obj
.getString(ConstantTags.TAG_LATITUDE);
String lng = data_obj
.getString(ConstantTags.TAG_LONGITUDE);
LocationModel model = new LocationModel();
model.setId(id);
model.setName(name);
model.setLat(lat);
model.setLng(lng);
MainSingleTon.location_arraylist.add(model);
}
} catch (Exception e) {
e.printStackTrace();
}
progressimage.setVisibility(View.INVISIBLE);
adapter.notifyDataSetChanged();
locationlist.setVisibility(View.VISIBLE);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressimage.setVisibility(View.INVISIBLE);
}
}) {
/**
* Passing some request headers
* */
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json");
return headers;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
// Cancelling request
// ApplicationController.getInstance().getRequestQueue().cancelAll(tag_json_obj);
}
void setAdapter() {
locationlist.setVisibility(View.VISIBLE);
adapter = new LocationSearchAdapter(getActivity(),
MainSingleTon.location_arraylist);
locationlist.setAdapter(adapter);
}
public void showSettingsAlert(String provider) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
alertDialog.setTitle(provider + " Settings");
alertDialog.setMessage(provider
+ " settings is not enabled! Want to go to settings menu?");
alertDialog.setPositiveButton("Settings",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(
Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
});
alertDialog.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialog.show();
}
}