package me.ccrama.redditslide.Adapters; import android.os.AsyncTask; import android.support.v4.widget.SwipeRefreshLayout; import net.dean.jraw.models.ModAction; import net.dean.jraw.paginators.ModLogPaginator; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import me.ccrama.redditslide.Authentication; /** * Created by ccrama on 9/17/2015. */ public class ModLogPosts { public ArrayList<ModAction> posts; public boolean loading; private SwipeRefreshLayout refreshLayout; private ModLogAdapter adapter; private ModLogPaginator paginator; public ModLogPosts(ArrayList<ModAction> firstData, ModLogPaginator paginator) { posts = firstData; this.paginator = paginator; } public ModLogPosts() { } public void bindAdapter(ModLogAdapter a, SwipeRefreshLayout layout) { this.adapter = a; this.refreshLayout = layout; loadMore(a); } public void loadMore(ModLogAdapter adapter) { new ModLogPosts.LoadData(true).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } public void addData(List<ModAction> data) { posts.addAll(data); } public class LoadData extends AsyncTask<String, Void, ArrayList<ModAction>> { final boolean reset; public LoadData(boolean reset) { this.reset = reset; } @Override public void onPostExecute(ArrayList<ModAction> subs) { if (subs != null) { if (reset || posts == null) { posts = new ArrayList<>(new LinkedHashSet(subs)); } else { posts.addAll(subs); posts = new ArrayList<>(new LinkedHashSet(posts)); } loading = false; refreshLayout.setRefreshing(false); adapter.dataSet = ModLogPosts.this; adapter.notifyDataSetChanged(); } else { adapter.setError(true); refreshLayout.setRefreshing(false); } } @Override protected ArrayList<ModAction> doInBackground(String... subredditPaginators) { try { if (reset || paginator == null) { paginator = new ModLogPaginator(Authentication.reddit, "mod"); } if (paginator.hasNext()) { ArrayList<ModAction> done = new ArrayList<>(paginator.next()); return done; } return null; } catch (Exception e) { return null; } } } }