package com.dwdesign.tweetings.loader;
import static com.dwdesign.tweetings.util.Utils.getTwitterInstance;
import java.util.Collections;
import java.util.List;
import com.dwdesign.tweetings.model.ParcelableUserList;
import com.dwdesign.tweetings.util.NoDuplicatesArrayList;
import twitter4j.CursorSupport;
import twitter4j.PagableResponseList;
import twitter4j.ResponseList;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.UserList;
import android.content.Context;
import android.support.v4.content.AsyncTaskLoader;
public abstract class BaseUserListsLoader extends AsyncTaskLoader<List<ParcelableUserList>> {
final NoDuplicatesArrayList<ParcelableUserList> mData = new NoDuplicatesArrayList<ParcelableUserList>();
final Twitter mTwitter;
private final long mAccountId, mCursor;
private int mPosition = -1;
private long mNextCursor, mPrevCursor;
public BaseUserListsLoader(final Context context, final long account_id, final long cursor, final List<ParcelableUserList> data) {
super(context);
if (data != null) {
mData.addAll(data);
}
mTwitter = getTwitterInstance(context, account_id, true);
mCursor = cursor;
mAccountId = account_id;
mPosition = -1;
}
public BaseUserListsLoader(final Context context, final long account_id, final long cursor, final List<ParcelableUserList> data, final int position) {
super(context);
if (data != null) {
mData.addAll(data);
}
mTwitter = getTwitterInstance(context, account_id, true);
mCursor = cursor;
mAccountId = account_id;
mPosition = position;
}
public int getPosition() {
return mPosition;
}
public long getCursor() {
return mCursor;
}
public long getNextCursor() {
return mNextCursor;
}
public long getPrevCursor() {
return mPrevCursor;
}
public Twitter getTwitter() {
return mTwitter;
}
public abstract ResponseList<UserList> getUserLists() throws TwitterException;;
@Override
public List<ParcelableUserList> loadInBackground() {
ResponseList<UserList> list_loaded = null;
try {
list_loaded = getUserLists();
} catch (final TwitterException e) {
e.printStackTrace();
}
if (list_loaded != null) {
final int list_size = list_loaded.size();
if (list_loaded instanceof PagableResponseList) {
mNextCursor = ((CursorSupport) list_loaded).getNextCursor();
mPrevCursor = ((CursorSupport) list_loaded).getPreviousCursor();
for (int i = 0; i < list_size; i++) {
mData.add(new ParcelableUserList(list_loaded.get(i), mAccountId, (mCursor + 1) * 20 + i));
}
} else {
for (int i = 0; i < list_size; i++) {
mData.add(new ParcelableUserList(list_loaded.get(i), mAccountId, i));
}
}
}
Collections.sort(mData);
return mData;
}
@Override
public void onStartLoading() {
forceLoad();
}
}