package info.justaway.fragment.main.tab;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.util.LongSparseArray;
import android.view.View;
import info.justaway.model.Row;
import info.justaway.model.TwitterManager;
import info.justaway.settings.BasicSettings;
import twitter4j.Paging;
import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.User;
public class UserListFragment extends BaseFragment {
/**
* このタブを表す固有のID
*/
private long mUserListId = 0L;
private LongSparseArray<Boolean> mMembers = new LongSparseArray<Boolean>();
public long getTabId() {
return mUserListId;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
if (mUserListId == 0L) {
mUserListId = getArguments().getLong("userListId");
}
super.onActivityCreated(savedInstanceState);
}
@Override
protected boolean isSkip(Row row) {
return mMembers.get(row.getStatus().getUser().getId()) == null;
}
@Override
protected void taskExecute() {
new UserListStatusesTask().execute();
}
private class UserListStatusesTask extends AsyncTask<Void, Void, ResponseList<Status>> {
@Override
protected ResponseList<twitter4j.Status> doInBackground(Void... params) {
try {
Twitter twitter = TwitterManager.getTwitter();
Paging paging = new Paging();
if (mMaxId > 0 && !mReloading) {
paging.setMaxId(mMaxId - 1);
paging.setCount(BasicSettings.getPageCount());
} else {
ResponseList<User> members = twitter.getUserListMembers(mUserListId, 0);
for (User user : members) {
mMembers.append(user.getId(), true);
}
}
return twitter.getUserListStatuses(mUserListId, paging);
} catch (OutOfMemoryError e) {
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(ResponseList<twitter4j.Status> statuses) {
mFooter.setVisibility(View.GONE);
if (statuses == null || statuses.size() == 0) {
mReloading = false;
mPullToRefreshLayout.setRefreshComplete();
mListView.setVisibility(View.VISIBLE);
return;
}
if (mReloading) {
clear();
for (twitter4j.Status status : statuses) {
if (mMaxId <= 0L || mMaxId > status.getId()) {
mMaxId = status.getId();
}
mAdapter.add(Row.newStatus(status));
}
mReloading = false;
mPullToRefreshLayout.setRefreshComplete();
} else {
for (twitter4j.Status status : statuses) {
if (mMaxId <= 0L || mMaxId > status.getId()) {
mMaxId = status.getId();
}
// 最初のツイートに登場ユーザーをStreaming APIからの取り込み対象にすることでAPI節約!!!
mMembers.append(status.getUser().getId(), true);
mAdapter.extensionAdd(Row.newStatus(status));
}
mAutoLoader = true;
mListView.setVisibility(View.VISIBLE);
}
}
}
}