package com.vladstoick.fragments;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.fortysevendeg.android.swipelistview.BaseSwipeListViewListener;
import com.fortysevendeg.android.swipelistview.SwipeListView;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.vladstoick.arrayadapter.AparitiiCinemaAdapter;
import com.vladstoick.gotocinema.MainActivity;
import com.vladstoick.gotocinema.OnFragmentInteractionListener;
import com.vladstoick.gotocinema.R;
import com.vladstoick.objects.AparitiiCinema;
import com.vladstoick.utility.CinemaRestClient;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class FilmListFragment extends SherlockFragment {
private static final String ARG_MOVIES = "movies";
private OnFragmentInteractionListener mListener;
private ArrayList <AparitiiCinema> allMovies;
private ArrayList <AparitiiCinema> moviesToBeShown;
private SwipeListView slv;
private int sortingTypeUsed = 1;
private AparitiiCinemaAdapter adapter;
private static Context mContext;
private class ArrayComparatorByDistance implements Comparator<AparitiiCinema> {
@Override
public int compare(AparitiiCinema o1, AparitiiCinema o2) {
double km1 = Double.parseDouble(o1.distanta.substring(0, o1.distanta.length()-2));
double km2 = Double.parseDouble(o2.distanta.substring(0, o2.distanta.length()-2));
return Double.compare(km1, km2) ;
}
}
private class ArrayComparatorByName implements Comparator<AparitiiCinema> {
@Override
public int compare(AparitiiCinema o1, AparitiiCinema o2)
{
return (o1.enTitle).compareTo(o2.enTitle);
}
}
private class ArrayComparatorByTime implements Comparator<AparitiiCinema> {
@Override
public int compare(AparitiiCinema o1, AparitiiCinema o2) {
return (o1.ora).compareTo(o2.ora);
}
}
public static FilmListFragment newInstance(ArrayList<AparitiiCinema> param2) {
FilmListFragment fragment = new FilmListFragment();
Bundle args = new Bundle();
args.putParcelableArrayList(ARG_MOVIES, param2);
fragment.setArguments(args);
return fragment;
}
private FilmListFragment() {
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnFragmentInteractionListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
View view = inflater.inflate(R.layout.fragment_film_list, container, false);
if (getArguments() != null) {
allMovies = getArguments().getParcelableArrayList(ARG_MOVIES);
moviesToBeShown = new ArrayList<AparitiiCinema>(allMovies);
Log.w("lungime",moviesToBeShown.size()+"lungime");
Collections.sort(moviesToBeShown, new ArrayComparatorByTime());
adapter = new AparitiiCinemaAdapter(getActivity(), moviesToBeShown);
slv = (SwipeListView) view.findViewById(R.id.swipelistview);
slv.setAdapter(adapter);
slv.setSwipeListViewListener(new BaseSwipeListViewListener() {
@Override
public void onClickFrontView(int position) {
mListener.openFilmViewWithData(moviesToBeShown.get(position));
}
});
}
mContext=getActivity();
final EditText searchInput = (EditText) view.findViewById(R.id.searchInput);
searchInput.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
InputMethodManager inputManager = (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput(0, 0);
return false;
}
});
searchInput.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
String text = searchInput.getText().toString();
System.out.println(text);
moviesToBeShown.clear();
for(int i=0;i<allMovies.size();i++)
if(allMovies.get(i).enTitle.toLowerCase().startsWith(text.toLowerCase()) || allMovies.get(i).roTitle.toLowerCase().startsWith(text.toLowerCase()))
moviesToBeShown.add(allMovies.get(i));
switch (sortingTypeUsed)
{
case 1 :sortByTime();
case 2 :sortByDistance();
case 3: sortByTime();
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
return view;
}
public static void clickedFavorite(int position,AparitiiCinema data)
{
String url = "user/" + MainActivity.userID + "/favorites/?movie_id=" + data.id + "&token=" + MainActivity.userAPI;
System.out.println(url);
CinemaRestClient.post(url, null , new AsyncHttpResponseHandler(){
@Override
public void onSuccess(String result)
{
Toast.makeText(mContext, "Adăugat cu succes", Toast.LENGTH_LONG).show();
System.out.println(result);
}
@Override
public void onFailure(Throwable e, String response) {
e.printStackTrace();
}
});
}
public static void clickedLike(int position,AparitiiCinema data)
{
//TODO implement function
}
public static void clickedDislike(int position,AparitiiCinema data)
{
//TODO implement function
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
getSherlockActivity().getSupportMenuInflater().inflate(R.menu.menu_list, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.sort_by_time:
{
sortByTime();
return true;
}
case R.id.sort_by_distance:{
sortByDistance();
return true;
}
case R.id.sort_by_name:{
sortByName();
return true;
}
default:
return super.onOptionsItemSelected(item);
}
}
private void sortByDistance()
{
Collections.sort(moviesToBeShown,new ArrayComparatorByDistance());
adapter.notifyDataSetChanged();
slv.setSelectionAfterHeaderView();
sortingTypeUsed=1;
}
private void sortByName() {
Collections.sort(moviesToBeShown, new ArrayComparatorByName());
adapter.notifyDataSetChanged();
slv.setSelectionAfterHeaderView();
sortingTypeUsed=2;
}
private void sortByTime() {
Collections.sort(moviesToBeShown, new ArrayComparatorByTime());
slv.setSelectionAfterHeaderView();
adapter.notifyDataSetChanged();
sortingTypeUsed=3;
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
}