package de.bsd.zwitscher;
import android.app.ListFragment;
import android.app.LoaderManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.Loader;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import de.bsd.zwitscher.account.Account;
import de.bsd.zwitscher.helper.StatusListLoader;
import twitter4j.Status;
import java.util.ArrayList;
import java.util.List;
/**
* Show the list of tweets.
* To unify things a bit, we introduce pseudo list ids for timelines that are not lists:
* <ul>
* <li>0 : home/friends timeline</li>
* <li>-1 : mentions </li>
* <li>-2 : direct </li>
* <li>>0 : saved search</li>
* </ul>
*
* @author Heiko W. Rupp
*/
public class TweetListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<List<Status>> {
private static final String LOAD_DONE = "zwitscher.LoadDone";
private TweetDB tweetDb;
private String tag;
private int listId;
private Account account;
private UpdateFinishReceiver receiver;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tweet_list_layout, container,false);
return view;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tweetDb = TweetDB.getInstance(getActivity());
}
@Override
public void onActivityCreated(Bundle savedState) {
super.onActivityCreated(savedState);
IntentFilter filter = new IntentFilter(LOAD_DONE);
receiver = new UpdateFinishReceiver();
getActivity().registerReceiver(receiver,filter);
// Prepare the loader. Either re-connect with an existing one,
// or start a new one.
Bundle loaderArgs = new Bundle();
loaderArgs.putInt("listId", listId);
getLoaderManager().initLoader(0, loaderArgs, this);
getListView().setOverscrollHeader(getResources().getDrawable(R.drawable.ic_menu_top)); // TODO what icon?
getListView().setOverscrollFooter(getResources().getDrawable(R.drawable.ic_menu_share)); // TODO what icon?
}
@Override
public void onDestroyView() {
super.onDestroyView();
getActivity().unregisterReceiver(receiver);
}
@Override
public Loader<List<Status>> onCreateLoader(int id, Bundle args) {
return new StatusListLoader(getActivity(), account, listId);
}
@Override
public void onLoadFinished(Loader<List<Status>> loader, List<Status> data) {
setListAdapter(new StatusAdapter<Status>(getActivity(), account,R.layout.tweet_list_item,data,-1,new ArrayList<Long>()));
}
@Override
public void onLoaderReset(Loader<List<Status>> loader) {
// TODO: Customise this generated block
}
public void setAccount(Account account) {
this.account = account;
}
void setListId(int listId) {
this.listId = listId;
}
private class UpdateFinishReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int intentListId = intent.getIntExtra("listId",0);
if (intentListId == listId ) {
Bundle loaderArgs = new Bundle();
loaderArgs.putInt("listId", listId);
getLoaderManager().restartLoader(0, loaderArgs, TweetListFragment.this);
}
}
}
}