package net.udrunk;
import java.util.List;
import java.util.Observable;
import net.udrunk.adapters.CheckinAdapter;
import net.udrunk.domain.Checkin;
import net.udrunk.model.Model;
import android.os.Handler;
import android.widget.ListView;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.googlecode.androidannotations.annotations.AfterViews;
import com.googlecode.androidannotations.annotations.Bean;
import com.googlecode.androidannotations.annotations.EFragment;
import com.googlecode.androidannotations.annotations.UiThread;
import com.googlecode.androidannotations.annotations.ViewById;
@EFragment(R.layout.timeline)
public class TimelineFragment extends CommonFragment {
@ViewById
ListView listView;
@Bean
public CheckinAdapter adapter;
public static final int REFRESH_INTERVAL = 10000;
private Handler currenRefreshtHandler;
private Runnable currentRefreshRunnable;
@AfterViews
public void afterViews() {
setRetainInstance(true);
setHasOptionsMenu(true);
updateCheckins();
autoRefresh();
}
@Override
public void onDestroy() {
if (currenRefreshtHandler != null) {
currenRefreshtHandler.removeCallbacks(currentRefreshRunnable);
}
super.onDestroy();
}
public void autoRefresh() {
currenRefreshtHandler = new Handler();
currentRefreshRunnable = new Runnable() {
public void run() {
adapter.notifyDataSetChanged();
autoRefresh();
}
};
currenRefreshtHandler.postDelayed(currentRefreshRunnable, REFRESH_INTERVAL);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.feed_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.refresh_item_menu:
model.retrieveCheckins();
return true;
}
return (super.onOptionsItemSelected(item));
}
@UiThread
public void updateCheckins() {
if (model != null) {
List<Checkin> checkins = model.getCheckins();
adapter.updateItems(checkins);
listView.setAdapter(adapter);
}
}
protected UdrunkActivity getUdrunkActivity() {
return (UdrunkActivity) getActivity();
}
@Override
public void update(Observable observable, Object data) {
if (data.equals(Model.CHECKINS_UPDATED)) {
updateCheckins();
}
}
}