aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubscribedThingListingActivity.java132
1 files changed, 106 insertions, 26 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubscribedThingListingActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubscribedThingListingActivity.java
index decf7d7d..a00aa2b1 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubscribedThingListingActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubscribedThingListingActivity.java
@@ -20,6 +20,7 @@ import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.view.inputmethod.EditorInfoCompat;
import androidx.fragment.app.Fragment;
@@ -33,6 +34,7 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.Executor;
import javax.inject.Inject;
@@ -71,6 +73,10 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
public static final String EXTRA_SHOW_MULTIREDDITS = "ESM";
public static final String EXTRA_THING_SELECTION_MODE = "ETSM";
+ public static final String EXTRA_THING_SELECTION_TYPE = "ETST";
+ public static final int EXTRA_THING_SELECTION_TYPE_ALL = 0;
+ public static final int EXTRA_THING_SELECTION_TYPE_SUBREDDIT = 1;
+ public static final int EXTRA_THING_SELECTION_TYPE_USER = 2;
private static final String INSERT_SUBSCRIBED_SUBREDDIT_STATE = "ISSS";
private static final String INSERT_MULTIREDDIT_STATE = "IMS";
@@ -93,6 +99,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
private boolean mInsertMultiredditSuccess;
private boolean showMultiReddits;
private boolean isThingSelectionMode;
+ private int thingSelectionType;
private SectionsPagerAdapter sectionsPagerAdapter;
private Menu mMenu;
private ActivityResultLauncher<Intent> requestSearchThingLauncher;
@@ -151,6 +158,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
}
isThingSelectionMode = getIntent().getBooleanExtra(EXTRA_THING_SELECTION_MODE, false);
+ thingSelectionType = getIntent().getIntExtra(EXTRA_THING_SELECTION_TYPE, EXTRA_THING_SELECTION_TYPE_ALL);
if (accountName.equals(Account.ANONYMOUS_ACCOUNT) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
binding.searchEditTextSubscribedThingListingActivity.setImeOptions(binding.searchEditTextSubscribedThingListingActivity.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
@@ -256,7 +264,13 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
if (item.getItemId() == R.id.action_search_subscribed_thing_listing_activity) {
if (isThingSelectionMode) {
Intent intent = new Intent(this, SearchActivity.class);
- intent.putExtra(SearchActivity.EXTRA_SEARCH_SUBREDDITS_AND_USERS, true);
+ if (thingSelectionType == EXTRA_THING_SELECTION_TYPE_SUBREDDIT) {
+ intent.putExtra(SearchActivity.EXTRA_SEARCH_ONLY_SUBREDDITS, true);
+ } else if (thingSelectionType == EXTRA_THING_SELECTION_TYPE_USER) {
+ intent.putExtra(SearchActivity.EXTRA_SEARCH_ONLY_USERS, true);
+ } else {
+ intent.putExtra(SearchActivity.EXTRA_SEARCH_SUBREDDITS_AND_USERS, true);
+ }
requestSearchThingLauncher.launch(intent);
return true;
}
@@ -469,27 +483,56 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
@NonNull
@Override
public Fragment getItem(int position) {
- switch (position) {
- case 0: {
- SubscribedSubredditsListingFragment fragment = new SubscribedSubredditsListingFragment();
- Bundle bundle = new Bundle();
- bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_IS_SUBREDDIT_SELECTION, false);
- bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_IS_SUBREDDIT_SELECTION, isThingSelectionMode);
- bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_EXTRA_CLEAR_SELECTION, isThingSelectionMode);
- bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_PROFILE_IMAGE_URL,
- mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, null));
- fragment.setArguments(bundle);
- return fragment;
- }
- case 1: {
- FollowedUsersListingFragment fragment = new FollowedUsersListingFragment();
- Bundle bundle = new Bundle();
- bundle.putBoolean(FollowedUsersListingFragment.EXTRA_IS_USER_SELECTION, isThingSelectionMode);
- fragment.setArguments(bundle);
- return fragment;
+ if (isThingSelectionMode) {
+ switch (thingSelectionType) {
+ case EXTRA_THING_SELECTION_TYPE_SUBREDDIT:
+ return getSubscribedSubredditListingFragment();
+ case EXTRA_THING_SELECTION_TYPE_USER:
+ return getFollowedUserFragment();
+ default:
+ switch (position) {
+ case 0:
+ return getSubscribedSubredditListingFragment();
+ case 1:
+ return getFollowedUserFragment();
+ default:
+ return getMultiRedditListingFragment();
+ }
}
}
+ switch (position) {
+ case 0:
+ return getSubscribedSubredditListingFragment();
+ case 1:
+ return getFollowedUserFragment();
+ default:
+ return getMultiRedditListingFragment();
+ }
+ }
+ @NonNull
+ private Fragment getSubscribedSubredditListingFragment() {
+ SubscribedSubredditsListingFragment fragment = new SubscribedSubredditsListingFragment();
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_IS_SUBREDDIT_SELECTION, isThingSelectionMode);
+ bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_EXTRA_CLEAR_SELECTION, isThingSelectionMode);
+ bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_PROFILE_IMAGE_URL,
+ mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, null));
+ fragment.setArguments(bundle);
+ return fragment;
+ }
+
+ @NonNull
+ private Fragment getFollowedUserFragment() {
+ FollowedUsersListingFragment fragment = new FollowedUsersListingFragment();
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(FollowedUsersListingFragment.EXTRA_IS_USER_SELECTION, isThingSelectionMode);
+ fragment.setArguments(bundle);
+ return fragment;
+ }
+
+ @NonNull
+ private Fragment getMultiRedditListingFragment() {
MultiRedditListingFragment fragment = new MultiRedditListingFragment();
Bundle bundle = new Bundle();
bundle.putBoolean(MultiRedditListingFragment.EXTRA_IS_GETTING_MULTIREDDIT_INFO, isThingSelectionMode);
@@ -499,11 +542,37 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
@Override
public int getCount() {
- return isThingSelectionMode && Account.ANONYMOUS_ACCOUNT.equals(accountName) ? 2 : 3;
+ if (isThingSelectionMode) {
+ switch (thingSelectionType) {
+ case EXTRA_THING_SELECTION_TYPE_ALL:
+ return Account.ANONYMOUS_ACCOUNT.equals(accountName) ? 2 : 3;
+ case EXTRA_THING_SELECTION_TYPE_SUBREDDIT:
+ case EXTRA_THING_SELECTION_TYPE_USER:
+ return 1;
+ }
+ }
+ return 3;
}
@Override
public CharSequence getPageTitle(int position) {
+ if (isThingSelectionMode) {
+ switch (thingSelectionType) {
+ case EXTRA_THING_SELECTION_TYPE_ALL:
+ switch (position) {
+ case 0:
+ return Utils.getTabTextWithCustomFont(typeface, getString(R.string.subreddits));
+ case 1:
+ return Utils.getTabTextWithCustomFont(typeface, getString(R.string.users));
+ case 2:
+ return Utils.getTabTextWithCustomFont(typeface, getString(R.string.multi_reddits));
+ }
+ case EXTRA_THING_SELECTION_TYPE_SUBREDDIT:
+ return Utils.getTabTextWithCustomFont(typeface, getString(R.string.subreddits));
+ case EXTRA_THING_SELECTION_TYPE_USER:
+ return Utils.getTabTextWithCustomFont(typeface, getString(R.string.users));
+ }
+ }
switch (position) {
case 0:
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.subreddits));
@@ -546,13 +615,24 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
}
}
+ @Nullable
+ Fragment getCurrentFragment() {
+ List<Fragment> fragments = getSupportFragmentManager().getFragments();
+ if (binding.viewPagerSubscribedThingListingActivity.getCurrentItem() < fragments.size()) {
+ return fragments.get(binding.viewPagerSubscribedThingListingActivity.getCurrentItem());
+ }
+
+ return null;
+ }
+
void goBackToTop() {
- if (binding.viewPagerSubscribedThingListingActivity.getCurrentItem() == 0) {
- subscribedSubredditsListingFragment.goBackToTop();
- } else if (binding.viewPagerSubscribedThingListingActivity.getCurrentItem() == 1) {
- followedUsersListingFragment.goBackToTop();
- } else {
- multiRedditListingFragment.goBackToTop();
+ Fragment fragment = getCurrentFragment();
+ if (fragment instanceof SubscribedSubredditsListingFragment) {
+ ((SubscribedSubredditsListingFragment) fragment).goBackToTop();
+ } else if (fragment instanceof FollowedUsersListingFragment) {
+ ((FollowedUsersListingFragment) fragment).goBackToTop();
+ } else if (fragment instanceof MultiRedditListingFragment) {
+ ((MultiRedditListingFragment) fragment).goBackToTop();
}
}