package net.iubris.ulysses.ui.fragments.list; import javax.inject.Inject; import net.iubris.apollus2.ui.activity._base.Refreshable; import net.iubris.apollus2.ui.fragments._base.Titleable; import net.iubris.apollus2.ui.fragments._base.Updatable; import net.iubris.apollus2.ui.fragments.list._base.Markerable; import net.iubris.apollus2.ui.fragments.map._base.MarkerShowable; import net.iubris.apollus2.ui.fragments.tabspager.selectable.FragmentSelectable; import net.iubris.ulysses.R; import net.iubris.ulysses.model.Place; import net.iubris.ulysses.model.comparators.PlaceComparatorByAscendingDistance; import net.iubris.ulysses.model.comparators.PlaceComparatorByDiscendingRating; import net.iubris.ulysses.search.utils.Buffer; import net.iubris.ulysses.ui.activity._base.UlyssesSearchActivity; import net.iubris.ulysses.ui.icons.sieve.Sieve; import net.iubris.ulysses.ui.intentable.IntentUtils; import net.iubris.ulysses.ui.list.adapter.PlacesListAdapter; import net.iubris.ulysses.ui.tasks._base.SearchType; import net.iubris.ulysses.ui.tasks.populate.list._base.ListTasksMap; import net.iubris.ulysses.ui.tasks.populate.list.aware.PopulateListAwareTask; import net.iubris.ulysses.ui.tasks.populate.list.localized.PopulateListLocalizedTask; import net.iubris.ulysses.ui.toast.utils.UIUtils; import net.iubris.ulysses.ui.utils.menu.MenuUtils; import roboguice.fragment.RoboListFragment; import roboguice.util.Ln; //import roboguice.util.Ln; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.location.Location; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.ListFragment; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ImageView; import android.widget.ListView; import com.google.android.gms.maps.SupportMapFragment; //@ContentView(R.layout.list) public abstract class UlyssesResultListFragment <ListFragmentMarkerable extends ListFragment & Markerable & Updatable, MarkerShowableMapFragment extends SupportMapFragment & MarkerShowable & Updatable> extends RoboListFragment implements Refreshable, /*Searchable,*/ Titleable, /*Clickable,*/ Markerable, Updatable { private static final String TITLE = "List"; protected static final int INDEX = 0; private PlacesListAdapter placesAdapter; private final PlaceComparatorByAscendingDistance placeComparatorByAscendingDistance = new PlaceComparatorByAscendingDistance(); private final PlaceComparatorByDiscendingRating placeComparatorByDiscendingRating = new PlaceComparatorByDiscendingRating(); @Inject private ListTasksMap listTasksMap; @Inject private Sieve sieve; @Inject private Buffer buffer; // private ListMapTabsSearchTypableLocatableActivity<ListFragmentMarkerable, MarkerShowableMapFragment> activity; private UlyssesSearchActivity<ListFragmentMarkerable, MarkerShowableMapFragment> activity; private MarkerShowable markerShowable; private FragmentSelectable fragmentSelectable; @SuppressWarnings("unchecked") @Override public void onAttach(Context context) { super.onAttach(context); this.activity = (UlyssesSearchActivity<ListFragmentMarkerable, MarkerShowableMapFragment>) context; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); setHasOptionsMenu(true); } @SuppressLint("InflateParams") @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // old ratafia setListAdapter(placesAdapter); return inflater.inflate(R.layout.list, null, false); // from streetfoodmapp /*View view = inflater.inflate(R.layout.list, container, false); emptyRecyclerView = (EmptyRecyclerView) view.findViewById(R.id.my_recycler_view); ScaleInAnimator animator = new ScaleInAnimator(); int time = 500; animator.setAddDuration(time); animator.setRemoveDuration(time); animator.setMoveDuration(time); animator.setChangeDuration(time); emptyRecyclerView.setItemAnimator(animator); emptyRecyclerView.addItemDecoration(new DividerItemDecoration( activity, null)); listFragmentRecyclerViewAdapter = new ListFragmentRecyclerViewAdapter(activity, results); listFragmentRecyclerViewAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(View view, int position) { Intent mIntent = new Intent(activity, Details.class); List<Place> sfes = results; mIntent.putExtra(Details.INTENT_TAG, sfes.get(position).getId() ); startActivity(mIntent); } }); listFragmentRecyclerViewAdapter.setMarkerShowable(markerShowable, fragmentSelectable); return view;*/ } @Override public void onActivityCreated(Bundle savedInstanceState) { // if (listener.isDualPane()) { // getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); // } else { // getListView().setChoiceMode(ListView.CHOICE_MODE_NONE); // } super.onActivityCreated(savedInstanceState); placesAdapter = buildPlaceAdapter( getDetailsActivityClass() ); listTasksMap.putTask(SearchType.AWARE, new PopulateListAwareTask(activity, placesAdapter)); listTasksMap.putTask(SearchType.LOCALIZED, new PopulateListLocalizedTask(activity, placesAdapter)); // old ratafia setupListView( getListView() ); } private PlacesListAdapter buildPlaceAdapter(Class<? extends Activity> clazz) { // Ln.d(activity+" "+R.layout.list_row+" "+markerShowable+" "+fragmentSelectable+" "+clazz+" "+buffer); PlacesListAdapter placesListAdapter = new PlacesListAdapter(activity, R.layout.list_row_searchresults, markerShowable, fragmentSelectable, clazz, buffer) { // private boolean isImageSetup; @Override protected void displayImage(Place url, ImageView icon) { // TODO cache sieve search! Bitmap bitmap = sieve.find(url); icon.setImageBitmap( bitmap ); } /*@Override protected void getImage(Place place) { if (!isImageSetup) { Bitmap bitmap = sieve.find(place); isImageSetup = true; } }*/ }; // placesEnhancedListAdapter.setMarkerShowable(markerShowable, fragmentSelectable); placesListAdapter.setNotifyOnChange(true); return placesListAdapter; } @Override public void onStart() { super.onStart(); updateData(); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // MenuUtils.addSearch(menu, this, activity); MenuUtils.addRefresh(menu, this); MenuUtils.List.addSort(menu, activity, placesAdapter, placeComparatorByAscendingDistance, placeComparatorByDiscendingRating ); } @Override public void refresh() { // refreshAsyncTask.execute(); UIUtils.showShortToast("coming soon", activity); } // @Override // public void search(String query) { // UIUtils.showShortToast("coming soon", activity); // } @Override public void updateData(Location... locations) { Location location = null; if (locations!=null && locations.length>0 && locations[0]!=null) { location = locations[0]; } else { Ln.d("getting location..."); location = activity.getLocation(); } Ln.d("using location: "+location); listTasksMap.getTask( activity.getSearchType() ).execute(location); } /* * build zone */ private void setupListView(ListView listView) { listView.setTextFilterEnabled(true); listView.setAdapter(placesAdapter); listView.setItemsCanFocus(false); listView.setOnItemClickListener( buildOnItemClickListener(listView) ); listView.setOnItemLongClickListener( buildOnLongClickListener() ); } private OnItemClickListener buildOnItemClickListener(final ListView listView) { return new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Place place = (Place) listView.getItemAtPosition(position); handleClick(place); } }; } protected void handleClick(Place place) { buffer.set(place); startActivity( new Intent(activity, getDetailsActivityClass()) ); } protected abstract Class<? extends Activity> getDetailsActivityClass(); private OnItemLongClickListener buildOnLongClickListener(){ return new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> adapterView, View arg1, int position, long arg3) { Place place = (Place) adapterView.getItemAtPosition(position); handleLongClick(place); return false; } }; } protected void handleLongClick(Place place) { IntentUtils.call(place.getInternationalPhoneNumber(), activity); } @Override public void setMarkerShowable(MarkerShowable markerShowable, FragmentSelectable fragmentSelectable) { this.markerShowable = markerShowable; this.fragmentSelectable = fragmentSelectable; } @Override public String getTitle() { return TITLE; } public static <extendingUlyssesListFragment extends UlyssesResultListFragment<ListFragmentMarkerable,MarkerShowableMapFragment>, ListFragmentMarkerable extends ListFragment & Markerable & Updatable, MarkerShowableMapFragment extends SupportMapFragment & MarkerShowable & Updatable> extendingUlyssesListFragment getInstance(FragmentManager fragmentManager, Class<extendingUlyssesListFragment> clazz) { @SuppressWarnings("unchecked") extendingUlyssesListFragment extendingUlyssesListFragment = (extendingUlyssesListFragment) fragmentManager.findFragmentByTag("android:switcher:"+R.id.viewpager+":"+getIndex() ); if (extendingUlyssesListFragment==null) { try { extendingUlyssesListFragment = clazz.newInstance(); } catch (java.lang.InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } return extendingUlyssesListFragment; } private static int getIndex() { return INDEX; } }