package de.tap.easy_xkcd.fragments.whatIf; import android.app.ProgressDialog; import android.content.Context; import android.content.res.Resources; import android.os.AsyncTask; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.content.ContextCompat; import android.support.v4.view.ViewPager; import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.tap.xkcd_reader.R; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.io.File; import java.io.IOException; import java.util.ArrayList; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import de.tap.easy_xkcd.Activities.MainActivity; import de.tap.easy_xkcd.database.DatabaseManager; import de.tap.easy_xkcd.utils.PrefHelper; import de.tap.easy_xkcd.utils.ThemePrefs; public class WhatIfOverviewFragment extends android.support.v4.app.Fragment { @Bind(R.id.pager) ViewPager pager; @Bind(R.id.tab_layout) TabLayout tabLayout; @Bind(R.id.fab) FloatingActionButton fab; private FragmentAdapter adapter; public static Document doc; private static final String OFFLINE_WHATIF_OVERVIEW_PATH = "/easy xkcd/what if/overview"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.whatif_pager, container, false); ButterKnife.bind(this, v); setHasOptionsMenu(true); PrefHelper prefHelper = ((MainActivity) getActivity()).getPrefHelper(); if (savedInstanceState==null) { TypedValue typedValue = new TypedValue(); Resources.Theme theme = getActivity().getTheme(); theme.resolveAttribute(R.attr.colorPrimary, typedValue, true); tabLayout.setBackgroundColor(typedValue.data); theme.resolveAttribute(R.attr.colorAccent, typedValue, true); tabLayout.setSelectedTabIndicatorColor(typedValue.data); } tabLayout.addTab(tabLayout.newTab().setText(getResources().getString(R.string.whatif_overview))); tabLayout.addTab(tabLayout.newTab().setText(getResources().getString(R.string.nv_favorites))); tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); tabLayout.setBackgroundColor(((MainActivity) getActivity()).getThemePrefs().getPrimaryColor(false)); if (doc == null && !prefHelper.fullOfflineWhatIf()) { new GetDoc().execute(); } else { adapter = new FragmentAdapter(getChildFragmentManager()); pager.setAdapter(adapter); } pager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { pager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); return v; } @OnClick(R.id.fab) void onClick() { WhatIfFragment.getInstance().getRandom(); } private class GetDoc extends AsyncTask<Void, Void, Void> { private ProgressDialog progress; @Override protected void onPreExecute() { progress = new ProgressDialog(getActivity()); progress.setMessage(getResources().getString(R.string.loading_articles)); progress.setIndeterminate(true); progress.setCancelable(false); progress.show(); } @Override protected Void doInBackground(Void... dummy) { try { doc = Jsoup.connect("https://what-if.xkcd.com/archive/") .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.19 Safari/537.36") .get(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void dummy) { progress.dismiss(); adapter = new FragmentAdapter(getChildFragmentManager()); pager.setAdapter(adapter); } } public static class FragmentAdapter extends FragmentPagerAdapter { public FragmentAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return 2; } @Override public Fragment getItem(int position) { if (position==0) { return new WhatIfFragment(); } else { return new WhatIfFavoritesFragment(); } } } public abstract static class RVAdapter extends RecyclerView.Adapter<RVAdapter.ComicViewHolder> { public ArrayList<String> titles; private ArrayList<String> imgs; private PrefHelper prefHelper; private DatabaseManager databaseManager; private ThemePrefs themePrefs; private Context context; public RVAdapter(ArrayList<String> t, ArrayList<String> i, MainActivity activity) { this.titles = t; this.imgs = i; this.context = activity; prefHelper = activity.getPrefHelper(); databaseManager = activity.getDatabaseManager(); themePrefs = activity.getThemePrefs(); } @Override public void onBindViewHolder(final ComicViewHolder comicViewHolder, int i) { comicViewHolder.articleTitle.setText(titles.get(i)); String title = titles.get(i); int n = WhatIfFragment.mTitles.size() - WhatIfFragment.mTitles.indexOf(title); comicViewHolder.articleNumber.setText(String.valueOf(n)); int id = databaseManager.getWhatIfMissingThumbnailId(title); if (id != 0) { comicViewHolder.thumbnail.setImageDrawable(ContextCompat.getDrawable(context, id)); return; } if (prefHelper.fullOfflineWhatIf()) { File offlinePath = prefHelper.getOfflinePath(); File dir = new File(offlinePath.getAbsolutePath() + OFFLINE_WHATIF_OVERVIEW_PATH); File file = new File(dir, String.valueOf(n) + ".png"); Glide.with(context) .load(file) .into(comicViewHolder.thumbnail); } else { Glide.with(context) .load(imgs.get(i)) .into(comicViewHolder.thumbnail); } } @Override public int getItemCount() { return titles.size(); } public class ComicViewHolder extends RecyclerView.ViewHolder { CardView cv; TextView articleTitle; TextView articleNumber; ImageView thumbnail; ComicViewHolder(View itemView) { super(itemView); cv = (CardView) itemView.findViewById(R.id.cv); if (themePrefs.nightThemeEnabled()) cv.setCardBackgroundColor(ContextCompat.getColor(context, R.color.background_material_dark)); articleTitle = (TextView) itemView.findViewById(R.id.article_title); articleNumber = (TextView) itemView.findViewById(R.id.article_info); thumbnail = (ImageView) itemView.findViewById(R.id.thumbnail); if (themePrefs.invertColors(false)) thumbnail.setColorFilter(themePrefs.getNegativeColorFilter()); } } } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_what_if_fragment, menu); super.onCreateOptionsMenu(menu, inflater); } }