package me.ccrama.redditslide.Activities; import android.content.ActivityNotFoundException; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; import android.graphics.PorterDuff; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; 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 android.support.v4.widget.DrawerLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.PopupMenu; import android.text.Spannable; import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.animation.LinearInterpolator; import android.widget.LinearLayout; import android.widget.TextView; import com.afollestad.materialdialogs.AlertDialogWrapper; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; import net.dean.jraw.models.MultiReddit; import net.dean.jraw.models.MultiSubreddit; import net.dean.jraw.models.Submission; import net.dean.jraw.paginators.Sorting; import net.dean.jraw.paginators.TimePeriod; import java.util.ArrayList; import java.util.List; import java.util.Locale; import me.ccrama.redditslide.Authentication; import me.ccrama.redditslide.CaseInsensitiveArrayList; import me.ccrama.redditslide.ColorPreferences; import me.ccrama.redditslide.Fragments.MultiredditView; import me.ccrama.redditslide.R; import me.ccrama.redditslide.SettingValues; import me.ccrama.redditslide.UserSubscriptions; import me.ccrama.redditslide.Views.CatchStaggeredGridLayoutManager; import me.ccrama.redditslide.Views.PreCachingLayoutManager; import me.ccrama.redditslide.Visuals.Palette; import me.ccrama.redditslide.util.LogUtil; import me.ccrama.redditslide.util.SortingUtil; /** * Created by ccrama on 9/17/2015. */ public class MultiredditOverview extends BaseActivityAnim { public static final String EXTRA_PROFILE = "profile"; public static final String EXTRA_MULTI = "multi"; public static MultiReddit searchMulti; public OverviewPagerAdapter adapter; private ViewPager pager; private String profile; private TabLayout tabs; private List<MultiReddit> usedArray; private String initialMulti; @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_multireddits, menu); if (!profile.isEmpty()) { menu.findItem(R.id.action_edit).setVisible(false); menu.findItem(R.id.create).setVisible(false); } // if (mShowInfoButton) menu.findItem(R.id.action_info).setVisible(true); // else menu.findItem(R.id.action_info).setVisible(false); return true; } @Override public boolean dispatchKeyEvent(KeyEvent event) { /* removed for now int keyCode = event.getKeyCode(); switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_UP: return ((MultiredditView) adapter.getCurrentFragment()).onKeyDown(keyCode); case KeyEvent.KEYCODE_VOLUME_DOWN: return ((MultiredditView) adapter.getCurrentFragment()).onKeyDown(keyCode); default: return super.dispatchKeyEvent(event); }*/ return super.dispatchKeyEvent(event); } public int getCurrentPage() { int position = 0; int currentOrientation = getResources().getConfiguration().orientation; if (((MultiredditView) adapter.getCurrentFragment()).rv.getLayoutManager() instanceof LinearLayoutManager && currentOrientation == Configuration.ORIENTATION_LANDSCAPE) { position = ((LinearLayoutManager) ((MultiredditView) adapter.getCurrentFragment()).rv.getLayoutManager()) .findFirstVisibleItemPosition() - 1; } else if (((MultiredditView) adapter.getCurrentFragment()).rv.getLayoutManager() instanceof CatchStaggeredGridLayoutManager) { int[] firstVisibleItems = null; firstVisibleItems = ((CatchStaggeredGridLayoutManager) ((MultiredditView) adapter.getCurrentFragment()).rv .getLayoutManager()).findFirstVisibleItemPositions(firstVisibleItems); if (firstVisibleItems != null && firstVisibleItems.length > 0) { position = firstVisibleItems[0] - 1; } } else { position = ((PreCachingLayoutManager) ((MultiredditView) adapter.getCurrentFragment()).rv.getLayoutManager()) .findFirstVisibleItemPosition() - 1; } return position; } String term; @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: try { onBackPressed(); } catch (Exception ignored) { } return true; case R.id.action_edit: { if (profile.isEmpty() && (UserSubscriptions.multireddits != null) && !UserSubscriptions.multireddits.isEmpty()) { Intent i = new Intent(MultiredditOverview.this, CreateMulti.class); i.putExtra(CreateMulti.EXTRA_MULTI, UserSubscriptions.multireddits .get(pager.getCurrentItem()) .getDisplayName()); startActivity(i); } } return true; case R.id.search: { UserSubscriptions.MultiCallback m = new UserSubscriptions.MultiCallback() { @Override public void onComplete(List<MultiReddit> multireddits) { if ((multireddits != null) && !multireddits.isEmpty()) { searchMulti = multireddits.get(pager.getCurrentItem()); MaterialDialog.Builder builder = new MaterialDialog.Builder(MultiredditOverview.this).title(R.string.search_title) .alwaysCallInputCallback() .input(getString(R.string.search_msg), "", new MaterialDialog.InputCallback() { @Override public void onInput( MaterialDialog materialDialog, CharSequence charSequence) { term = charSequence.toString(); } }); //Add "search current sub" if it is not frontpage/all/random builder.positiveText(getString(R.string.search_subreddit, "/m/" + searchMulti.getDisplayName())) .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog materialDialog, @NonNull DialogAction dialogAction) { Intent i = new Intent(MultiredditOverview.this, Search.class); i.putExtra(Search.EXTRA_TERM, term); i.putExtra(Search.EXTRA_MULTIREDDIT, searchMulti.getDisplayName()); startActivity(i); } }); builder.show(); } } }; if (profile.isEmpty()) { UserSubscriptions.getMultireddits(m); } else { UserSubscriptions.getPublicMultireddits(m, profile); } } return true; case R.id.create: if (profile.isEmpty()) { Intent i2 = new Intent(MultiredditOverview.this, CreateMulti.class); startActivity(i2); } return true; case R.id.action_sort: openPopup(); return true; case R.id.subs: ((DrawerLayout) findViewById(R.id.drawer_layout)).openDrawer(Gravity.RIGHT); return true; case R.id.gallery: if (SettingValues.isPro) { List<Submission> posts = ((MultiredditView) adapter.getCurrentFragment()).posts.posts; if (posts != null && !posts.isEmpty()) { Intent i2 = new Intent(this, Gallery.class); i2.putExtra(Gallery.EXTRA_PROFILE, profile); i2.putExtra(Gallery.EXTRA_MULTIREDDIT, ((MultiredditView) adapter.getCurrentFragment()).posts.multiReddit.getDisplayName()); startActivity(i2); } } else { AlertDialogWrapper.Builder b = new AlertDialogWrapper.Builder(this).setTitle( R.string.general_gallerymode_ispro) .setMessage(R.string.pro_upgrade_msg) .setPositiveButton(R.string.btn_yes_exclaim, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse( "market://details?id=" + getString( R.string.ui_unlock_package)))); } catch (ActivityNotFoundException e) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse( "http://play.google.com/store/apps/details?id=" + getString( R.string.ui_unlock_package)))); } } }) .setNegativeButton(R.string.btn_no_danks, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); } }); if (SettingValues.previews > 0) { b.setNeutralButton(getString(R.string.pro_previews, SettingValues.previews), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { SettingValues.prefs.edit() .putInt(SettingValues.PREVIEWS_LEFT, SettingValues.previews - 1) .apply(); SettingValues.previews = SettingValues.prefs.getInt( SettingValues.PREVIEWS_LEFT, 10); List<Submission> posts = ((MultiredditView) adapter.getCurrentFragment()).posts.posts; if (posts != null && !posts.isEmpty()) { Intent i2 = new Intent(MultiredditOverview.this, Gallery.class); i2.putExtra(Gallery.EXTRA_PROFILE, profile); i2.putExtra(Gallery.EXTRA_MULTIREDDIT, ((MultiredditView) adapter.getCurrentFragment()).posts.multiReddit .getDisplayName()); startActivity(i2); } } }); } b.show(); } return true; case R.id.action_shadowbox: if (SettingValues.isPro) { List<Submission> posts = ((MultiredditView) adapter.getCurrentFragment()).posts.posts; if (posts != null && !posts.isEmpty()) { Intent i = new Intent(this, Shadowbox.class); i.putExtra(Shadowbox.EXTRA_PAGE, getCurrentPage()); i.putExtra(Shadowbox.EXTRA_PROFILE, profile); i.putExtra(Shadowbox.EXTRA_MULTIREDDIT, ((MultiredditView) adapter.getCurrentFragment()).posts.multiReddit.getDisplayName()); startActivity(i); } } else { AlertDialogWrapper.Builder b = new AlertDialogWrapper.Builder(this).setTitle( R.string.general_shadowbox_ispro) .setMessage(R.string.pro_upgrade_msg) .setPositiveButton(R.string.btn_yes_exclaim, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse( "market://details?id=" + getString( R.string.ui_unlock_package)))); } catch (ActivityNotFoundException e) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse( "http://play.google.com/store/apps/details?id=" + getString( R.string.ui_unlock_package)))); } } }) .setNegativeButton(R.string.btn_no_danks, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); } }); if (SettingValues.previews > 0 && adapter != null && ((MultiredditView) adapter.getCurrentFragment()).posts != null && ((MultiredditView) adapter.getCurrentFragment()).posts.posts != null && !((MultiredditView) adapter.getCurrentFragment()).posts.posts.isEmpty()) { b.setNeutralButton(getString(R.string.pro_previews, SettingValues.previews), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { SettingValues.prefs.edit() .putInt(SettingValues.PREVIEWS_LEFT, SettingValues.previews - 1) .apply(); SettingValues.previews = SettingValues.prefs.getInt( SettingValues.PREVIEWS_LEFT, 10); List<Submission> posts = ((MultiredditView) adapter.getCurrentFragment()).posts.posts; if (posts != null && !posts.isEmpty()) { Intent i = new Intent(MultiredditOverview.this, Shadowbox.class); i.putExtra(Shadowbox.EXTRA_PAGE, getCurrentPage()); i.putExtra(Shadowbox.EXTRA_PROFILE, profile); i.putExtra(Shadowbox.EXTRA_MULTIREDDIT, ((MultiredditView) adapter.getCurrentFragment()).posts.multiReddit .getDisplayName()); startActivity(i); } } }); } b.show(); } return true; default: return false; } } private void buildDialog() { buildDialog(false); } private void buildDialog(boolean wasException) { try { AlertDialogWrapper.Builder b = new AlertDialogWrapper.Builder(MultiredditOverview.this).setCancelable(false) .setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { finish(); } }); if (wasException) { b.setTitle(R.string.err_title) .setMessage(R.string.err_loading_content) .setPositiveButton(R.string.btn_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); } else if (profile.isEmpty()) { b.setTitle(R.string.multireddit_err_title) .setMessage(R.string.multireddit_err_msg) .setPositiveButton(R.string.btn_yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent i = new Intent(MultiredditOverview.this, CreateMulti.class); startActivity(i); } }) .setNegativeButton(R.string.btn_no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); } else { b.setTitle(R.string.public_multireddit_err_title) .setMessage(R.string.public_multireddit_err_msg) .setNegativeButton(R.string.btn_go_back, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); } b.show(); } catch (Exception e) { } } @Override public void onCreate(Bundle savedInstance) { overrideSwipeFromAnywhere(); super.onCreate(savedInstance); applyColorTheme(""); setContentView(R.layout.activity_multireddits); setupAppBar(R.id.toolbar, R.string.title_multireddits, true, false); findViewById(R.id.header).setBackgroundColor(Palette.getDefaultColor()); tabs = (TabLayout) findViewById(R.id.sliding_tabs); tabs.setTabMode(TabLayout.MODE_SCROLLABLE); pager = (ViewPager) findViewById(R.id.content_view); mToolbar.setPopupTheme(new ColorPreferences(this).getFontStyle().getBaseId()); profile = ""; initialMulti = ""; if (getIntent().getExtras() != null) { profile = getIntent().getExtras().getString(EXTRA_PROFILE, ""); initialMulti = getIntent().getExtras().getString(EXTRA_MULTI, ""); } if (profile.equalsIgnoreCase(Authentication.name)) { profile = ""; } UserSubscriptions.MultiCallback callback = new UserSubscriptions.MultiCallback() { @Override public void onComplete(List<MultiReddit> multiReddits) { if (multiReddits != null && !multiReddits.isEmpty()) { setDataSet(multiReddits); } else { buildDialog(); } } }; if (profile.isEmpty()) { UserSubscriptions.getMultireddits(callback); } else { UserSubscriptions.getPublicMultireddits(callback, profile); } } public void openPopup() { PopupMenu popup = new PopupMenu(MultiredditOverview.this, findViewById(R.id.anchor), Gravity.RIGHT); String id = ((MultiredditView) (((OverviewPagerAdapter) pager.getAdapter()).getCurrentFragment())).posts.multiReddit .getDisplayName() .toLowerCase(Locale.ENGLISH); final Spannable[] base = SortingUtil.getSortingSpannables("multi" + id); for (Spannable s : base) { // Do not add option for "Best" in any subreddit except for the frontpage. if (s.toString().equals(getString(R.string.sorting_best))) { continue; } MenuItem m = popup.getMenu().add(s); } popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { int i = 0; for (Spannable s : base) { if (s.equals(item.getTitle())) { break; } i++; } LogUtil.v("Chosen is " + i); if (pager.getAdapter() != null) { switch (i) { case 0: SortingUtil.setSorting("multi" + ((MultiredditView) (((OverviewPagerAdapter) pager.getAdapter()) .getCurrentFragment())).posts.multiReddit.getDisplayName() .toLowerCase(Locale.ENGLISH), Sorting.HOT); reloadSubs(); break; case 1: SortingUtil.setSorting("multi" + ((MultiredditView) (((OverviewPagerAdapter) pager.getAdapter()) .getCurrentFragment())).posts.multiReddit.getDisplayName() .toLowerCase(Locale.ENGLISH), Sorting.NEW); reloadSubs(); break; case 2: SortingUtil.setSorting("multi" + ((MultiredditView) (((OverviewPagerAdapter) pager.getAdapter()) .getCurrentFragment())).posts.multiReddit.getDisplayName() .toLowerCase(Locale.ENGLISH), Sorting.RISING); reloadSubs(); break; case 3: SortingUtil.setSorting("multi" + ((MultiredditView) (((OverviewPagerAdapter) pager.getAdapter()) .getCurrentFragment())).posts.multiReddit.getDisplayName() .toLowerCase(Locale.ENGLISH), Sorting.TOP); openPopupTime(); break; case 4: SortingUtil.setSorting("multi" + ((MultiredditView) (((OverviewPagerAdapter) pager.getAdapter()) .getCurrentFragment())).posts.multiReddit.getDisplayName() .toLowerCase(Locale.ENGLISH), Sorting.CONTROVERSIAL); openPopupTime(); break; } } return true; } }); popup.show(); } public void openPopupTime() { PopupMenu popup = new PopupMenu(MultiredditOverview.this, findViewById(R.id.anchor), Gravity.RIGHT); String id = ((MultiredditView) (((OverviewPagerAdapter) pager.getAdapter()).getCurrentFragment())).posts.multiReddit .getDisplayName() .toLowerCase(Locale.ENGLISH); final Spannable[] base = SortingUtil.getSortingTimesSpannables("multi" + id); for (Spannable s : base) { MenuItem m = popup.getMenu().add(s); } popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { int i = 0; for (Spannable s : base) { if (s.equals(item.getTitle())) { break; } i++; } LogUtil.v("Chosen is " + i); if (pager.getAdapter() != null) { switch (i) { case 0: SortingUtil.setTime("multi" + ((MultiredditView) (((OverviewPagerAdapter) pager.getAdapter()) .getCurrentFragment())).posts.multiReddit.getDisplayName() .toLowerCase(Locale.ENGLISH), TimePeriod.HOUR); reloadSubs(); break; case 1: SortingUtil.setTime("multi" + ((MultiredditView) (((OverviewPagerAdapter) pager.getAdapter()) .getCurrentFragment())).posts.multiReddit.getDisplayName() .toLowerCase(Locale.ENGLISH), TimePeriod.DAY); reloadSubs(); break; case 2: SortingUtil.setTime("multi" + ((MultiredditView) (((OverviewPagerAdapter) pager.getAdapter()) .getCurrentFragment())).posts.multiReddit.getDisplayName() .toLowerCase(Locale.ENGLISH), TimePeriod.WEEK); reloadSubs(); break; case 3: SortingUtil.setTime("multi" + ((MultiredditView) (((OverviewPagerAdapter) pager.getAdapter()) .getCurrentFragment())).posts.multiReddit.getDisplayName() .toLowerCase(Locale.ENGLISH), TimePeriod.MONTH); reloadSubs(); break; case 4: SortingUtil.setTime("multi" + ((MultiredditView) (((OverviewPagerAdapter) pager.getAdapter()) .getCurrentFragment())).posts.multiReddit.getDisplayName() .toLowerCase(Locale.ENGLISH), TimePeriod.YEAR); reloadSubs(); break; case 5: SortingUtil.setTime("multi" + ((MultiredditView) (((OverviewPagerAdapter) pager.getAdapter()) .getCurrentFragment())).posts.multiReddit.getDisplayName() .toLowerCase(Locale.ENGLISH), TimePeriod.ALL); reloadSubs(); break; } } return true; } }); popup.show(); } private void reloadSubs() { int current = pager.getCurrentItem(); adapter = new OverviewPagerAdapter(getSupportFragmentManager()); pager.setAdapter(adapter); pager.setCurrentItem(current); } private void setDataSet(List<MultiReddit> data) { try { usedArray = data; if (usedArray.isEmpty()) { buildDialog(); } else { if (adapter == null) { adapter = new OverviewPagerAdapter(getSupportFragmentManager()); } else { adapter.notifyDataSetChanged(); } pager.setAdapter(adapter); pager.setOffscreenPageLimit(1); tabs.setupWithViewPager(pager); if (!initialMulti.isEmpty()) { for (int i = 0; i < usedArray.size(); i++) { if (usedArray.get(i).getDisplayName().equalsIgnoreCase(initialMulti)) { pager.setCurrentItem(i); break; } } } tabs.setSelectedTabIndicatorColor( new ColorPreferences(MultiredditOverview.this).getColor( usedArray.get(0).getDisplayName())); doDrawerSubs(0); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = this.getWindow(); window.setStatusBarColor( Palette.getDarkerColor(usedArray.get(0).getDisplayName())); } final View header = findViewById(R.id.header); tabs.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager) { @Override public void onTabReselected(TabLayout.Tab tab) { super.onTabReselected(tab); int[] firstVisibleItems; int pastVisiblesItems = 0; firstVisibleItems = ((CatchStaggeredGridLayoutManager) (((MultiredditView) adapter.getCurrentFragment()).rv .getLayoutManager())).findFirstVisibleItemPositions(null); if (firstVisibleItems != null && firstVisibleItems.length > 0) { for (int firstVisibleItem : firstVisibleItems) { pastVisiblesItems = firstVisibleItem; } } if (pastVisiblesItems > 8) { ((MultiredditView) adapter.getCurrentFragment()).rv.scrollToPosition(0); if (header != null) { header.animate() .translationY(header.getHeight()) .setInterpolator(new LinearInterpolator()) .setDuration(0); } } else { ((MultiredditView) adapter.getCurrentFragment()).rv.smoothScrollToPosition( 0); } } }); findViewById(R.id.header).setBackgroundColor( Palette.getColor(usedArray.get(0).getDisplayName())); } } catch (NullPointerException e) { buildDialog(true); Log.e(LogUtil.getTag(), "Cannot load multis:\n" + e); } } public void doDrawerSubs(int position) { MultiReddit current = usedArray.get(position); LinearLayout l = (LinearLayout) findViewById(R.id.sidebar_scroll); l.removeAllViews(); CaseInsensitiveArrayList toSort = new CaseInsensitiveArrayList(); for (MultiSubreddit s : current.getSubreddits()) { toSort.add(s.getDisplayName().toLowerCase(Locale.ENGLISH)); } for (String sub : UserSubscriptions.sortNoExtras(toSort)) { final View convertView = getLayoutInflater().inflate(R.layout.subforsublist, l, false); final String subreddit = sub; final TextView t = convertView.findViewById(R.id.name); t.setText(subreddit); convertView.findViewById(R.id.color).setBackgroundResource(R.drawable.circle); convertView.findViewById(R.id.color) .getBackground() .setColorFilter(Palette.getColor(subreddit), PorterDuff.Mode.MULTIPLY); convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent inte = new Intent(MultiredditOverview.this, SubredditView.class); inte.putExtra(SubredditView.EXTRA_SUBREDDIT, subreddit); MultiredditOverview.this.startActivityForResult(inte, 4); } }); l.addView(convertView); } } public class OverviewPagerAdapter extends FragmentStatePagerAdapter { public OverviewPagerAdapter(FragmentManager fm) { super(fm); pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { findViewById(R.id.header).animate() .translationY(0) .setInterpolator(new LinearInterpolator()) .setDuration(180); findViewById(R.id.header).setBackgroundColor( Palette.getColor(usedArray.get(position).getDisplayName())); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.setStatusBarColor( Palette.getDarkerColor(usedArray.get(position).getDisplayName())); } tabs.setSelectedTabIndicatorColor( new ColorPreferences(MultiredditOverview.this).getColor( usedArray.get(position).getDisplayName())); doDrawerSubs(position); } @Override public void onPageScrollStateChanged(int state) { } }); } @Override public Fragment getItem(int i) { Fragment f = new MultiredditView(); Bundle args = new Bundle(); args.putInt("id", i); args.putString(EXTRA_PROFILE, profile); f.setArguments(args); return f; } private Fragment mCurrentFragment; public Fragment getCurrentFragment() { return mCurrentFragment; } @Override public void setPrimaryItem(ViewGroup container, int position, Object object) { if (getCurrentFragment() != object) { mCurrentFragment = ((Fragment) object); } super.setPrimaryItem(container, position, object); } @Override public int getCount() { if (usedArray == null) { return 1; } else { return usedArray.size(); } } @Override public CharSequence getPageTitle(int position) { return usedArray.get(position).getFullName(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 940 && adapter != null && adapter.getCurrentFragment() != null) { if (resultCode == RESULT_OK) { LogUtil.v("Doing hide posts"); ArrayList<Integer> posts = data.getIntegerArrayListExtra("seen"); ((MultiredditView) adapter.getCurrentFragment()).adapter.refreshView(posts); if (data.hasExtra("lastPage") && data.getIntExtra("lastPage", 0) != 0 && ((MultiredditView) adapter.getCurrentFragment()).rv.getLayoutManager() instanceof LinearLayoutManager) { ((LinearLayoutManager) ((MultiredditView) adapter.getCurrentFragment()).rv.getLayoutManager()) .scrollToPositionWithOffset(data.getIntExtra("lastPage", 0) + 1, mToolbar.getHeight()); } } else { ((MultiredditView) adapter.getCurrentFragment()).adapter.refreshView(); } } } }