/** * Copyright 2009 Joe LaPenna */ package com.joelapenna.foursquared; import com.joelapenna.foursquare.types.Checkin; import com.joelapenna.foursquare.types.Group; import com.joelapenna.foursquare.types.Mayor; import com.joelapenna.foursquare.types.User; import com.joelapenna.foursquare.types.Venue; import com.joelapenna.foursquared.app.LoadableListActivity; import com.joelapenna.foursquared.util.Comparators; import com.joelapenna.foursquared.widget.CheckinListAdapter; import com.joelapenna.foursquared.widget.MayorListAdapter; import com.joelapenna.foursquared.widget.SeparatedListAdapter; import android.content.Intent; import android.os.Bundle; import android.util.Log; 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) */ public class VenueCheckinsActivity extends LoadableListActivity { public static final String TAG = "VenueCheckinsActivity"; public static final boolean DEBUG = FoursquaredSettings.DEBUG; private Observer mParentDataObserver = new ParentDataObserver(); private SeparatedListAdapter mListAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mListAdapter = new SeparatedListAdapter(this); getListView().setAdapter(mListAdapter); getListView().setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Object item = parent.getAdapter().getItem(position); if (item instanceof Checkin) { Checkin checkin = (Checkin)item; startItemActivity(checkin.getUser()); } else if (item instanceof Mayor) { Mayor mayor = (Mayor)item; startItemActivity(mayor.getUser()); } } }); VenueActivity parent = (VenueActivity)getParent(); if (parent.venueObservable.getVenue() != null) { mParentDataObserver.update(parent.venueObservable, parent.venueObservable.getVenue()); } else { ((VenueActivity)getParent()).venueObservable.addObserver(mParentDataObserver); } } @Override protected void onResume() { super.onResume(); } @Override public void onPause() { super.onPause(); if (isFinishing()) { mListAdapter.removeObserver(); } } @Override public int getNoSearchResultsStringId() { return R.string.no_checkins_be_the_first; } private void putCheckinsInAdapter(Group<Checkin> checkins) { if (DEBUG) Log.d(TAG, "Setting checkins."); CheckinListAdapter adapter = new CheckinListAdapter(this, // ((Foursquared)getApplication()).getRemoteResourceManager(), ((Foursquared)getApplication()).getSync()); adapter.setGroup(checkins); mListAdapter.addSection(getResources().getString( R.string.venue_checkins_activity_label_recent_checkins), adapter); } private void putMayorInAdapter(final Mayor mayor) { if (DEBUG) Log.d(TAG, "Setting mayor."); Group<Mayor> mayors = new Group<Mayor>(); mayors.add(mayor); MayorListAdapter adapter = new MayorListAdapter(this, // ((Foursquared)getApplication()).getRemoteResourceManager(), ((Foursquared)getApplication()).getSync()); adapter.setGroup(mayors); mListAdapter.addSection(getResources().getString( R.string.venue_checkins_activity_label_mayor), adapter); } private void startItemActivity(User user) { if (DEBUG) Log.d(TAG, "firing venue activity for venue"); Intent intent = new Intent(VenueCheckinsActivity.this, UserDetailsActivity.class); intent.putExtra(UserDetailsActivity.EXTRA_USER_PARCEL, user); intent.putExtra(UserDetailsActivity.EXTRA_SHOW_ADD_FRIEND_OPTIONS, true); startActivity(intent); } private final class ParentDataObserver implements Observer { @Override public void update(Observable observable, Object data) { if (DEBUG) Log.d(TAG, "Received update from: " + observable.toString()); VenueActivity parent = (VenueActivity)getParent(); Venue venue = parent.venueObservable.getVenue(); mListAdapter.removeObserver(); mListAdapter = new SeparatedListAdapter(VenueCheckinsActivity.this); boolean hasMayor = venue.getStats() != null && venue.getStats().getMayor() != null; if (hasMayor) { if (DEBUG) Log.d(TAG, "Found mayor, pushing to adapter."); putMayorInAdapter(venue.getStats().getMayor()); } Group<Checkin> checkins = venue.getCheckins(); boolean hasCheckins = venue.getCheckins() != null && venue.getCheckins().size() > 0; if (hasCheckins) { if (DEBUG) Log.d(TAG, "Found checkins, pushing to adapter."); Collections.sort(checkins, Comparators.getCheckinRecencyComparator()); putCheckinsInAdapter(checkins); } getListView().setAdapter(mListAdapter); if (!hasMayor && !hasCheckins) { if (DEBUG) Log.d(TAG, "No data. Setting empty"); setEmptyView(); } } } }