package io.github.mthli.Tweetin.Task.TweetList;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.support.v4.widget.SwipeRefreshLayout;
import android.widget.Toast;
import io.github.mthli.Tweetin.Activity.MainActivity;
import io.github.mthli.Tweetin.Data.DataAction;
import io.github.mthli.Tweetin.Data.DataRecord;
import io.github.mthli.Tweetin.Data.DataUnit;
import io.github.mthli.Tweetin.Flag.FlagUnit;
import io.github.mthli.Tweetin.Fragment.TweetList.TimelineFragment;
import io.github.mthli.Tweetin.R;
import io.github.mthli.Tweetin.Tweet.Tweet;
import io.github.mthli.Tweetin.Tweet.TweetAdapter;
import io.github.mthli.Tweetin.Tweet.TweetUnit;
import io.github.mthli.Tweetin.Twitter.TwitterUnit;
import twitter4j.Paging;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import java.util.ArrayList;
import java.util.List;
public class TimelineFirstTask extends AsyncTask<Void, Void, Boolean> {
private TimelineFragment timelineFragment;
private Context context;
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
private SwipeRefreshLayout swipeRefreshLayout;
private boolean swipeRefresh;
private TweetAdapter tweetAdapter;
private List<Tweet> tweetList;
private List<DataRecord> recordList;
private TweetUnit tweetUnit;
private twitter4j.Status latestMention;
private String error;
public TimelineFirstTask(TimelineFragment timelineFragment, boolean swipeRefresh) {
this.timelineFragment = timelineFragment;
this.context = timelineFragment.getContext();
this.sharedPreferences = context.getSharedPreferences(context.getString(R.string.sp_tweetin), Context.MODE_PRIVATE);
this.editor = sharedPreferences.edit();
this.swipeRefreshLayout = timelineFragment.getSwipeRefreshLayout();
this.swipeRefresh = swipeRefresh;
this.tweetAdapter = timelineFragment.getTweetAdapter();
this.tweetList = timelineFragment.getTweetList();
this.recordList = new ArrayList<DataRecord>();
this.tweetUnit = new TweetUnit(timelineFragment.getActivity());
this.error = context.getString(R.string.fragment_error_get_timeline_data_failed);
}
private boolean isFirstLoad() {
return sharedPreferences.getBoolean(context.getString(R.string.sp_is_timeline_first), false);
}
@Override
protected void onPreExecute() {
timelineFragment.setLoadTaskStatus(FlagUnit.TASK_RUNNING);
if (TwitterUnit.getUseScreenNameFromSharedPreferences(context) == null) {
timelineFragment.setContentEmpty(true);
timelineFragment.setEmptyText(R.string.fragment_error_get_authorization_failed);
timelineFragment.setContentShown(false);
cancel(true);
return;
}
timelineFragment.setPreviousPosition(0);
timelineFragment.setNextPage(2);
if (isFirstLoad()) {
timelineFragment.setContentShown(false);
} else if (!swipeRefreshLayout.isRefreshing()) {
swipeRefreshLayout.setRefreshing(true);
}
if (!swipeRefresh) {
DataAction action = new DataAction(context);
action.openDatabase(false);
recordList = action.getDataRecordList(DataUnit.TIMELINE_TABLE);
action.closeDatabase();
tweetList.clear();
for (DataRecord record : recordList) {
Tweet tweet = tweetUnit.getTweetFromDataRecord(record);
tweetList.add(tweet);
}
tweetAdapter.notifyDataSetChanged();
}
}
@Override
protected Boolean doInBackground(Void... params) {
if (isCancelled()) {
return false;
}
List<twitter4j.Status> statusList;
try {
Twitter twitter = TwitterUnit.getTwitterFromSharedPreferences(context);
Paging paging = new Paging(1, 40);
statusList = twitter.getHomeTimeline(paging);
paging = new Paging(1, 1);
latestMention = twitter.getMentionsTimeline(paging).get(0);
} catch (TwitterException t) {
error = t.getMessage();
return false;
}
if (isCancelled()) {
return false;
}
DataAction action = new DataAction(context);
action.openDatabase(true);
action.deleteAll(DataUnit.TIMELINE_TABLE);
recordList.clear();
for (twitter4j.Status status : statusList) {
DataRecord record = tweetUnit.getDataRecordFromStatus(status);
action.addDataRecord(record, DataUnit.TIMELINE_TABLE);
recordList.add(record);
}
action.closeDatabase();
if (isCancelled()) {
return false;
}
return true;
}
@Override
protected void onCancelled() {}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
tweetList.clear();
for (DataRecord record : recordList) {
tweetList.add(tweetUnit.getTweetFromDataRecord(record));
}
if (tweetList.size() <= 0) {
timelineFragment.setContentEmpty(true);
timelineFragment.setEmptyText(R.string.fragment_list_empty);
timelineFragment.setContentShown(true);
timelineFragment.setLoadTaskStatus(FlagUnit.TASK_IDLE);
return;
}
if (isFirstLoad()) {
editor.putBoolean(context.getString(R.string.sp_is_timeline_first), false).commit();
timelineFragment.setContentEmpty(false);
tweetAdapter.notifyDataSetChanged();
timelineFragment.setContentShown(true);
} else {
tweetAdapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(false);
}
long spLatestMentionId = sharedPreferences.getLong(context.getString(R.string.sp_latest_mention_id), -1);
if (latestMention != null && latestMention.getId() > spLatestMentionId) {
((MainActivity) timelineFragment.getActivity()).showBadge(true);
editor.putLong(context.getString(R.string.sp_latest_mention_id), latestMention.getId()).commit();
}
} else {
if (isFirstLoad()) {
editor.putBoolean(context.getString(R.string.sp_is_timeline_first), true).commit();
timelineFragment.setContentEmpty(true);
timelineFragment.setEmptyText(error);
timelineFragment.setContentShown(true);
} else {
Toast.makeText(context, error, Toast.LENGTH_SHORT).show();
swipeRefreshLayout.setRefreshing(false);
}
}
timelineFragment.setLoadTaskStatus(FlagUnit.TASK_IDLE);
}
}