/** * Copyright 2009 Joe LaPenna */ package com.joelapenna.foursquared; import com.joelapenna.foursquare.types.Group; import com.joelapenna.foursquare.types.Tip; import com.joelapenna.foursquare.types.Venue; import com.joelapenna.foursquared.app.LoadableListActivity; import com.joelapenna.foursquared.util.Comparators; import com.joelapenna.foursquared.widget.SeparatedListAdapter; import com.joelapenna.foursquared.widget.TipListAdapter; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import java.util.Collections; import java.util.Observable; import java.util.Observer; /** * @author Joe LaPenna (joe@joelapenna.com) * @author Mark Wyszomierski (markww@gmail.com) * -modified to start TipActivity on tip click (2010-03-25) * -added photos for tips (2010-03-25) */ public class VenueTipsActivity extends LoadableListActivity { public static final String TAG = "VenueTipsActivity"; public static final boolean DEBUG = FoursquaredSettings.DEBUG; private static final String STATE_CLICKED_TIP = "com.joelapenna.foursquared.VenueTipsActivity.CLICKED_TIP"; private static final String STATE_CLICKED_TIP_AUTHOR = "com.joelapenna.foursquared.VenueTipsActivity.CLICKED_TIP_AUTHOR"; private Observer mVenueObserver = new VenueObserver(); private String mClickedTip = null; private String mClickedTipAuthor = null; private SeparatedListAdapter mListAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { mClickedTip = savedInstanceState.getString(STATE_CLICKED_TIP); mClickedTipAuthor = savedInstanceState.getString(STATE_CLICKED_TIP_AUTHOR); } setListAdapter(new SeparatedListAdapter(this)); getListView().setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { VenueActivity parent = (VenueActivity)getParent(); Tip tip = (Tip)adapter.getItemAtPosition(position); Intent intent = new Intent(VenueTipsActivity.this, TipActivity.class); intent.putExtra(TipActivity.EXTRA_TIP_PARCEL, tip); if (parent.venueObservable.getVenue() != null) { intent.putExtra(TipActivity.EXTRA_VENUE_NAME, parent.venueObservable.getVenue().getName()); } startActivity(intent); } }); VenueActivity parent = (VenueActivity)getParent(); if (parent.venueObservable.getVenue() != null) { mVenueObserver.update(parent.venueObservable, parent.venueObservable.getVenue()); } else { parent.venueObservable.addObserver(mVenueObserver); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(STATE_CLICKED_TIP, mClickedTip); outState.putString(STATE_CLICKED_TIP_AUTHOR, mClickedTipAuthor); } @Override protected void onResume() { super.onResume(); } @Override public void onPause() { super.onPause(); if (isFinishing() && mListAdapter != null) { mListAdapter.removeObserver(); } } @Override public int getNoSearchResultsStringId() { return R.string.no_tips_be_the_first; } private Group<Group<Tip>> getVenueTipsAndTodos(Venue venue) { Group<Group<Tip>> tipsAndTodos = new Group<Group<Tip>>(); Group<Tip> tips = venue.getTips(); if (tips != null && tips.size() > 0) { Collections.sort(tips, Comparators.getTipRecencyComparator()); tips.setType("Tips"); tipsAndTodos.add(tips); } tips = venue.getTodos(); if (tips != null && tips.size() > 0) { Collections.sort(tips, Comparators.getTipRecencyComparator()); tips.setType("Todos"); tipsAndTodos.add(tips); } return tipsAndTodos; } private void putGroupsInAdapter(Group<Group<Tip>> groups) { mListAdapter = (SeparatedListAdapter)getListAdapter(); mListAdapter.removeObserver(); mListAdapter.clear(); setEmptyView(); int groupCount = groups.size(); for (int groupsIndex = 0; groupsIndex < groupCount; groupsIndex++) { Group<Tip> group = groups.get(groupsIndex); TipListAdapter groupAdapter = new TipListAdapter( this, ((Foursquared)getApplication()).getRemoteResourceManager(), ((Foursquared)getApplication()).getSync()); groupAdapter.setGroup(group); mListAdapter.addSection(group.getType(), groupAdapter); } mListAdapter.notifyDataSetInvalidated(); getListView().setAdapter(mListAdapter); } private final class VenueObserver implements Observer { @Override public void update(Observable observable, Object data) { putGroupsInAdapter(getVenueTipsAndTodos((Venue)data)); } } }