package com.oreilly.android.otweet.activities;
import java.util.ArrayList;
import com.oreilly.android.otweet.OTweetApplication;
import com.oreilly.android.otweet.R;
import com.oreilly.android.otweet.adapters.StatusListAdapter;
import com.oreilly.android.otweet.layouts.LoadMoreListItem;
import twitter4j.Paging;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
public class StatusListActivity extends ListActivity {
private OTweetApplication app;
private Twitter twitter;
private LoadMoreListItem headerView;
private StatusListAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = (OTweetApplication) getApplication();
twitter = app.getTwitter();
setContentView(R.layout.main);
}
@Override
protected void onResume() {
super.onResume();
if (!app.isAuthorized()) {
beginAuthorization();
} else {
loadTimelineIfNotLoaded();
}
}
private void loadTimelineIfNotLoaded() {
if (null == getListAdapter()) {
loadHomeTimeline();
}
}
private void beginAuthorization() {
Intent intent = new Intent(this, AuthorizationActivity.class);
startActivity(intent);
}
private void loadHomeTimeline() {
try {
ArrayList<Status> statii = twitter.getHomeTimeline();
adapter = new StatusListAdapter(this, statii);
setLoadMoreViews();
setListAdapter(adapter);
getListView().setSelection(1);
} catch (TwitterException e) {
throw new RuntimeException("Unable to load home timeline",e);
}
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
if (v.equals(headerView)) {
headerView.showProgress();
loadNewerTweets();
}
}
private void loadNewerTweets() {
try {
headerView.hideProgress();
ArrayList<Status> statii = twitter.getHomeTimeline(new Paging().sinceId(adapter.getFirstId()));
adapter.appendNewer(statii);
getListView().setSelection(1);
} catch (TwitterException e) {
throw new RuntimeException("Unable to load home timeline",e);
}
}
private void setLoadMoreViews() {
headerView = (LoadMoreListItem) getLayoutInflater().inflate(R.layout.load_more, null);
headerView.showHeaderText();
getListView().addHeaderView(headerView);
}
}