package de.bsd.zwitscher;
import android.app.ActionBar;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import de.bsd.zwitscher.account.Account;
import de.bsd.zwitscher.account.AccountHolder;
import twitter4j.Status;
import java.util.ArrayList;
import java.util.List;
/**
* Just display a Conversation ..
*
* @author Heiko W. Rupp
*/
public class ThreadListActivity extends ListActivity {
private ProgressBar pg;
private TextView titleTextBox;
private Context thisActivity;
private List<Status> statuses;
private Account account;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
thisActivity = this;
setContentView(R.layout.tweet_list_layout);
account = AccountHolder.getInstance(this).getAccount();
// Pull the start id ( = id of the calling s
Intent i = getIntent();
Bundle b = i.getExtras();
long startId = 0;
if (b!=null)
startId = b.getLong("startId");
new GetConversationTask().execute(startId);
}
@Override
protected void onPause() {
super.onPause();
if (getListAdapter() instanceof StatusAdapter) {
StatusAdapter adapter = (StatusAdapter) getListAdapter();
TwitterHelper th = new TwitterHelper(this,account);
th.markStatusesAsOld(adapter.newOlds);
}
}
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.thread_activity_menu,menu);
pg = (ProgressBar) menu.findItem(R.id.ProgressBar).getActionView();
ActionBar actionBar = this.getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
case R.id.to_top:
getListView().setSelection(0);
break;
default:
Log.e("ThreadListActivity", "Unknown item " + item.getItemId());
}
return super.onOptionsItemSelected(item);
}
/**
* Handle click on a list item which triggers the detail view of that item
* @param l Parent view
* @param v Clicked view
* @param position Position in the list that was clicked
* @param id Id of the item clicked
*/
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
if (statuses!=null) {
Intent i = new Intent(this,OneTweetActivity.class);
i.putExtra(getString(R.string.status), statuses.get(position));
startActivity(i);
}
}
/**
* Called from the Back button
* @param v Button that was clicked
*/
@SuppressWarnings("unused")
public void done(View v) {
finish();
}
/**
* Scrolls to top, called from the ToTop button
* @param v Button that was clicked
*/
@SuppressWarnings("unused")
public void scrollToTop(View v) {
getListView().setSelection(0);
}
/**
* Called from the post button
* @param v Button that was clicked
*/
@SuppressWarnings("unused")
public void post(View v) {
Intent i = new Intent(this, NewTweetActivity.class);
startActivity(i);
}
/**
* Task to get the conversation in the background
*/
private class GetConversationTask extends AsyncTask<Long,Void,List<twitter4j.Status>> {
@Override
protected List<twitter4j.Status> doInBackground(Long... params) {
Long i = params[0];
List<twitter4j.Status> result ;
TwitterHelper th = new TwitterHelper(ThreadListActivity.this, account);
result = th.getThreadForStatus(i);
return result;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
if (pg!=null)
pg.setVisibility(ProgressBar.VISIBLE);
if (titleTextBox!=null) {
String s = getString(R.string.getting_conversation)+ "...";
titleTextBox.setText(s);
}
}
@Override
protected void onPostExecute(List<twitter4j.Status> statusList) {
if (pg!=null)
pg.setVisibility(ProgressBar.INVISIBLE);
if (titleTextBox!=null)
titleTextBox.setText("");
List<Long> readIds = obtainReadIds(statusList);
setListAdapter(new StatusAdapter<twitter4j.Status>(thisActivity, account, R.layout.tweet_list_item, statusList,0, readIds));
statuses = statusList;
ListView lv = getListView();
lv.requestLayout();
}
}
// TODO move to common helper, as this is copied from TweetListActivity
private List<Long> obtainReadIds(List<Status> statusList) {
TwitterHelper th = new TwitterHelper(ThreadListActivity.this, account);
List<Long> idsToCheck = new ArrayList<Long>(statusList.size());
for ( Status status: statusList) {
idsToCheck.add(status.getId());
}
return th.getReadIds(idsToCheck);
}
}