package me.ccrama.redditslide.Activities; import android.content.DialogInterface; import android.os.AsyncTask; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import com.afollestad.materialdialogs.AlertDialogWrapper; import net.dean.jraw.managers.WikiManager; import java.util.ArrayList; import java.util.List; import me.ccrama.redditslide.Authentication; import me.ccrama.redditslide.ColorPreferences; import me.ccrama.redditslide.Fragments.WikiPage; import me.ccrama.redditslide.R; import me.ccrama.redditslide.Visuals.Palette; import me.ccrama.redditslide.util.LogUtil; /** * Created by ccrama on 9/17/2015. */ public class Wiki extends BaseActivityAnim { public static final String EXTRA_SUBREDDIT = "subreddit"; public static final String EXTRA_PAGE = "page"; private TabLayout tabs; private ViewPager pager; private String subreddit; private Wiki.OverviewPagerAdapter adapter; private List<String> pages; private String page; @Override public void onCreate(Bundle savedInstance) { overrideSwipeFromAnywhere(); super.onCreate(savedInstance); subreddit = getIntent().getExtras().getString(EXTRA_SUBREDDIT, ""); setShareUrl("https://reddit.com/r/" + subreddit + "/wiki/"); applyColorTheme(subreddit); setContentView(R.layout.activity_slidetabs); setupSubredditAppBar(R.id.toolbar, "/r/" + subreddit + " wiki", true, subreddit); if(getIntent().hasExtra(EXTRA_PAGE)) { page = getIntent().getExtras().getString(EXTRA_PAGE); LogUtil.v("Page is " + page); } else { page = "index"; } tabs = (TabLayout) findViewById(R.id.sliding_tabs); tabs.setTabMode(TabLayout.MODE_SCROLLABLE); tabs.setSelectedTabIndicatorColor(new ColorPreferences(Wiki.this).getColor("no sub")); pager = (ViewPager) findViewById(R.id.content_view); findViewById(R.id.header).setBackgroundColor(Palette.getColor(subreddit)); new AsyncGetWiki().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } public WikiManager wiki; private class AsyncGetWiki extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { wiki = new WikiManager(Authentication.reddit); try { pages = wiki.getPages(subreddit); List<String> toRemove = new ArrayList<>(); for (String s : pages) { if (s.startsWith("config")) { toRemove.add(s); } } pages.removeAll(toRemove); adapter = new OverviewPagerAdapter(getSupportFragmentManager()); } catch (Exception e) { runOnUiThread(new Runnable() { @Override public void run() { try { new AlertDialogWrapper.Builder(Wiki.this) .setTitle(R.string.wiki_err) .setMessage(R.string.wiki_err_msg) .setPositiveButton(R.string.btn_close, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); finish(); } }).setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { finish(); } }).show(); } catch(Exception ignored){ } } }); } return null; } @Override public void onPostExecute(Void d) { if (adapter != null) { pager.setAdapter(adapter); tabs.setupWithViewPager(pager); if(pages.contains(page)){ pager.setCurrentItem(pages.indexOf(page)); } } else { try { new AlertDialogWrapper.Builder(Wiki.this).setTitle(R.string.wiki_err) .setMessage(R.string.wiki_err_msg) .setPositiveButton(R.string.btn_close, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); finish(); } }) .setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { finish(); } }) .show(); } catch(Exception e){ } } } } public class OverviewPagerAdapter extends FragmentStatePagerAdapter { public OverviewPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { Fragment f = new WikiPage(); Bundle args = new Bundle(); args.putString("title", pages.get(i)); args.putString("subreddit", subreddit); f.setArguments(args); return f; } @Override public int getCount() { if (pages == null) { return 1; } else { return pages.size(); } } @Override public CharSequence getPageTitle(int position) { return pages.get(position); } } }