diff options
author | Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com> | 2024-08-21 16:39:53 +0000 |
---|---|---|
committer | Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com> | 2024-08-21 16:39:53 +0000 |
commit | 6fd0b836a732c529420f0008c381bad40255c6d7 (patch) | |
tree | 878992cf66d11bbc2aff42cf17f50a46451b3d96 | |
parent | 2e96ba22d8b203447c70a58fde07d4dbc9639006 (diff) | |
download | infinity-for-reddit-6fd0b836a732c529420f0008c381bad40255c6d7.tar infinity-for-reddit-6fd0b836a732c529420f0008c381bad40255c6d7.tar.gz infinity-for-reddit-6fd0b836a732c529420f0008c381bad40255c6d7.tar.bz2 infinity-for-reddit-6fd0b836a732c529420f0008c381bad40255c6d7.tar.lz infinity-for-reddit-6fd0b836a732c529420f0008c381bad40255c6d7.tar.xz infinity-for-reddit-6fd0b836a732c529420f0008c381bad40255c6d7.tar.zst infinity-for-reddit-6fd0b836a732c529420f0008c381bad40255c6d7.zip |
Start adding searching in multireddit feature. Start showing subscribed users when clicking "Search In" button in SearchActivity.
13 files changed, 205 insertions, 102 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SelectThingReturnKey.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SelectThingReturnKey.java new file mode 100644 index 00000000..a663f36f --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SelectThingReturnKey.java @@ -0,0 +1,7 @@ +package ml.docilealligator.infinityforreddit; + +public class SelectThingReturnKey { + public static final String RETURN_EXTRA_SUBREDDIT_OR_USER_NAME = "RESOUN"; + public static final String RETURN_EXTRA_SUBREDDIT_OR_USER_ICON = "RESOUI"; + public static final String RETURN_EXTRA_IS_USER = "REIU"; +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchActivity.java index 4505a355..ec18a167 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchActivity.java @@ -16,6 +16,8 @@ import android.view.MenuItem; import android.view.View; import android.view.inputmethod.EditorInfo; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.view.inputmethod.EditorInfoCompat; @@ -39,6 +41,7 @@ import javax.inject.Named; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; +import ml.docilealligator.infinityforreddit.SelectThingReturnKey; import ml.docilealligator.infinityforreddit.account.Account; import ml.docilealligator.infinityforreddit.adapters.SearchActivityRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.adapters.SubredditAutocompleteRecyclerViewAdapter; @@ -66,6 +69,7 @@ public class SearchActivity extends BaseActivity { public static final String EXTRA_SEARCH_IN_SUBREDDIT_IS_USER = "ESISIU"; public static final String EXTRA_SEARCH_ONLY_SUBREDDITS = "ESOS"; public static final String EXTRA_SEARCH_ONLY_USERS = "ESOU"; + public static final String EXTRA_SEARCH_SUBREDDITS_AND_USERS = "ESSAU"; public static final String EXTRA_RETURN_SUBREDDIT_NAME = "ERSN"; public static final String EXTRA_RETURN_SUBREDDIT_ICON_URL = "ERSIU"; public static final String RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES = "RESSN"; @@ -105,12 +109,14 @@ public class SearchActivity extends BaseActivity { private boolean searchInIsUser; private boolean searchOnlySubreddits; private boolean searchOnlyUsers; + private boolean searchSubredditsAndUsers; private SearchActivityRecyclerViewAdapter adapter; private SubredditAutocompleteRecyclerViewAdapter subredditAutocompleteRecyclerViewAdapter; private Handler handler; private Runnable autoCompleteRunnable; private Call<String> subredditAutocompleteCall; RecentSearchQueryViewModel mRecentSearchQueryViewModel; + private ActivityResultLauncher<Intent> requestThingSelectionLauncher; private ActivitySearchBinding binding; @Override @@ -139,18 +145,21 @@ public class SearchActivity extends BaseActivity { searchOnlySubreddits = getIntent().getBooleanExtra(EXTRA_SEARCH_ONLY_SUBREDDITS, false); searchOnlyUsers = getIntent().getBooleanExtra(EXTRA_SEARCH_ONLY_USERS, false); + searchSubredditsAndUsers = getIntent().getBooleanExtra(EXTRA_SEARCH_SUBREDDITS_AND_USERS, false); if (searchOnlySubreddits) { - binding.searchEditTextSearchActivity.setHint(getText(R.string.search_only_subreddits_hint)); + binding.searchEditTextSearchActivity.setHint(R.string.search_only_subreddits_hint); } else if (searchOnlyUsers) { - binding.searchEditTextSearchActivity.setHint(getText(R.string.search_only_users_hint)); + binding.searchEditTextSearchActivity.setHint(R.string.search_only_users_hint); + } else { + binding.searchEditTextSearchActivity.setHint(R.string.search_subreddits_and_users_hint); } boolean nsfw = mNsfwAndSpoilerSharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.NSFW_BASE, false); subredditAutocompleteRecyclerViewAdapter = new SubredditAutocompleteRecyclerViewAdapter(this, mCustomThemeWrapper, subredditData -> { - if (searchOnlySubreddits) { + if (searchOnlySubreddits || searchSubredditsAndUsers) { Intent returnIntent = new Intent(); if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) { ArrayList<String> subredditNameList = new ArrayList<>(); @@ -300,13 +309,29 @@ public class SearchActivity extends BaseActivity { } bindView(); - if (searchOnlySubreddits || searchOnlyUsers) { + requestThingSelectionLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { + Intent returnIntent = result.getData(); + if (returnIntent == null) { + return; + } + + searchInSubredditOrUserName = returnIntent.getStringExtra(SelectThingReturnKey.RETURN_EXTRA_SUBREDDIT_OR_USER_NAME); + searchInIsUser = returnIntent.getBooleanExtra(SelectThingReturnKey.RETURN_EXTRA_IS_USER, false); + + if (searchInSubredditOrUserName == null) { + binding.subredditNameTextViewSearchActivity.setText(R.string.all_subreddits); + } else { + binding.subredditNameTextViewSearchActivity.setText(searchInSubredditOrUserName); + } + }); + + if (searchOnlySubreddits || searchOnlyUsers || searchSubredditsAndUsers) { binding.subredditNameRelativeLayoutSearchActivity.setVisibility(View.GONE); } else { binding.subredditNameRelativeLayoutSearchActivity.setOnClickListener(view -> { - Intent intent = new Intent(this, SubredditSelectionActivity.class); - intent.putExtra(SubredditSelectionActivity.EXTRA_EXTRA_CLEAR_SELECTION, true); - startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE); + Intent intent = new Intent(this, SubscribedThingListingActivity.class); + intent.putExtra(SubscribedThingListingActivity.EXTRA_THING_SELECTION_MODE, true); + requestThingSelectionLauncher.launch(intent); }); } @@ -409,6 +434,11 @@ public class SearchActivity extends BaseActivity { intent.putExtra(SearchUsersResultActivity.EXTRA_QUERY, query); intent.putExtra(SearchUsersResultActivity.EXTRA_IS_MULTI_SELECTION, getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)); startActivityForResult(intent, USER_SEARCH_REQUEST_CODE); + } else if (searchSubredditsAndUsers) { + Intent intent = new Intent(this, SearchResultActivity.class); + intent.putExtra(SearchResultActivity.EXTRA_QUERY, query); + intent.putExtra(SearchResultActivity.EXTRA_SHOULD_RETURN_SUBREDDIT_AND_USER_NAME, true); + startActivity(intent); } else { Intent intent = new Intent(SearchActivity.this, SearchResultActivity.class); intent.putExtra(SearchResultActivity.EXTRA_QUERY, query); @@ -491,8 +521,8 @@ public class SearchActivity extends BaseActivity { if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) { returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, data.getStringArrayListExtra(SearchSubredditsResultActivity.RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES)); } else { - String name = data.getStringExtra(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_NAME); - String iconUrl = data.getStringExtra(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL); + String name = data.getStringExtra(SelectThingReturnKey.RETURN_EXTRA_SUBREDDIT_OR_USER_NAME); + String iconUrl = data.getStringExtra(SelectThingReturnKey.RETURN_EXTRA_SUBREDDIT_OR_USER_ICON); returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, name); returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, iconUrl); } @@ -503,8 +533,8 @@ public class SearchActivity extends BaseActivity { if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) { returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_USERNAMES, data.getStringArrayListExtra(SearchUsersResultActivity.RETURN_EXTRA_SELECTED_USERNAMES)); } else { - String username = data.getStringExtra(SearchUsersResultActivity.EXTRA_RETURN_USER_NAME); - String iconUrl = data.getStringExtra(SearchUsersResultActivity.EXTRA_RETURN_USER_ICON_URL); + String username = data.getStringExtra(SelectThingReturnKey.RETURN_EXTRA_SUBREDDIT_OR_USER_NAME); + String iconUrl = data.getStringExtra(SelectThingReturnKey.RETURN_EXTRA_SUBREDDIT_OR_USER_ICON); returnIntent.putExtra(EXTRA_RETURN_USER_NAME, username); returnIntent.putExtra(EXTRA_RETURN_USER_ICON_URL, iconUrl); } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchResultActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchResultActivity.java index 6e2d9024..62e33ac3 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchResultActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchResultActivity.java @@ -81,9 +81,10 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect FABMoreOptionsBottomSheetFragment.FABOptionSelectionCallback, RandomBottomSheetFragment.RandomOptionSelectionCallback, PostTypeBottomSheetFragment.PostTypeSelectionCallback, RecyclerViewContentScrollingInterface { - static final String EXTRA_QUERY = "EQ"; - static final String EXTRA_TRENDING_SOURCE = "ETS"; - static final String EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME = "ESISOUN"; + public static final String EXTRA_QUERY = "EQ"; + public static final String EXTRA_TRENDING_SOURCE = "ETS"; + public static final String EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME = "ESISOUN"; + public static final String EXTRA_SHOULD_RETURN_SUBREDDIT_AND_USER_NAME = "ESRSAUN"; public static final String EXTRA_SEARCH_IN_SUBREDDIT_IS_USER = "ESISIU"; private static final String INSERT_SEARCH_QUERY_SUCCESS_STATE = "ISQSS"; @@ -121,6 +122,7 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect private String mSearchInSubredditOrUserName; private boolean mSearchInIsUser; private boolean mInsertSearchQuerySuccess; + private boolean mReturnSubredditAndUserName; private FragmentManager fragmentManager; private SectionsPagerAdapter sectionsPagerAdapter; private int fabOption; @@ -178,6 +180,7 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect mSearchInSubredditOrUserName = intent.getStringExtra(EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME); mSearchInIsUser = intent.getBooleanExtra(EXTRA_SEARCH_IN_SUBREDDIT_IS_USER, false); + mReturnSubredditAndUserName = intent.getBooleanExtra(EXTRA_SHOULD_RETURN_SUBREDDIT_AND_USER_NAME, false); if (query != null) { mQuery = query; @@ -241,16 +244,24 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect } }); new TabLayoutMediator(binding.tabLayoutSearchResultActivity, binding.viewPagerSearchResultActivity, (tab, position) -> { - switch (position) { - case 0: - Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.posts)); - break; - case 1: + if (mReturnSubredditAndUserName) { + if (position == 0) { Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.subreddits)); - break; - case 2: + } else { Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.users)); - break; + } + } else { + switch (position) { + case 0: + Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.posts)); + break; + case 1: + Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.subreddits)); + break; + case 2: + Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.users)); + break; + } } }).attach(); fixViewPager2Sensitivity(binding.viewPagerSearchResultActivity); @@ -767,36 +778,55 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect @NonNull @Override public Fragment createFragment(int position) { - switch (position) { - case 0: { - PostFragment mFragment = new PostFragment(); - Bundle bundle = new Bundle(); - bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_SEARCH); - bundle.putString(PostFragment.EXTRA_NAME, mSearchInIsUser ? "u_" + mSearchInSubredditOrUserName : mSearchInSubredditOrUserName); - bundle.putString(PostFragment.EXTRA_QUERY, mQuery); - bundle.putString(PostFragment.EXTRA_TRENDING_SOURCE, getIntent().getStringExtra(EXTRA_TRENDING_SOURCE)); - mFragment.setArguments(bundle); - return mFragment; - } - case 1: { - SubredditListingFragment mFragment = new SubredditListingFragment(); - Bundle bundle = new Bundle(); - bundle.putString(SubredditListingFragment.EXTRA_QUERY, mQuery); - bundle.putBoolean(SubredditListingFragment.EXTRA_IS_GETTING_SUBREDDIT_INFO, false); - mFragment.setArguments(bundle); - return mFragment; + if (mReturnSubredditAndUserName) { + if (position == 0) { + return createSubredditListingFragment(true); } - default: { - UserListingFragment mFragment = new UserListingFragment(); - Bundle bundle = new Bundle(); - bundle.putString(UserListingFragment.EXTRA_QUERY, mQuery); - bundle.putBoolean(UserListingFragment.EXTRA_IS_GETTING_USER_INFO, false); - mFragment.setArguments(bundle); - return mFragment; + return createUserListingFragment(true); + } else { + switch (position) { + case 0: { + return createPostFragment(); + } + case 1: { + return createSubredditListingFragment(false); + } + default: { + return createUserListingFragment(false); + } } } } + private Fragment createPostFragment() { + PostFragment mFragment = new PostFragment(); + Bundle bundle = new Bundle(); + bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_SEARCH); + bundle.putString(PostFragment.EXTRA_NAME, mSearchInIsUser ? "u_" + mSearchInSubredditOrUserName : mSearchInSubredditOrUserName); + bundle.putString(PostFragment.EXTRA_QUERY, mQuery); + bundle.putString(PostFragment.EXTRA_TRENDING_SOURCE, getIntent().getStringExtra(EXTRA_TRENDING_SOURCE)); + mFragment.setArguments(bundle); + return mFragment; + } + + private Fragment createSubredditListingFragment(boolean returnSubredditName) { + SubredditListingFragment mFragment = new SubredditListingFragment(); + Bundle bundle = new Bundle(); + bundle.putString(SubredditListingFragment.EXTRA_QUERY, mQuery); + bundle.putBoolean(SubredditListingFragment.EXTRA_IS_GETTING_SUBREDDIT_INFO, returnSubredditName); + mFragment.setArguments(bundle); + return mFragment; + } + + private Fragment createUserListingFragment(boolean returnUsername) { + UserListingFragment mFragment = new UserListingFragment(); + Bundle bundle = new Bundle(); + bundle.putString(UserListingFragment.EXTRA_QUERY, mQuery); + bundle.putBoolean(UserListingFragment.EXTRA_IS_GETTING_USER_INFO, returnUsername); + mFragment.setArguments(bundle); + return mFragment; + } + @Nullable private Fragment getCurrentFragment() { if (fragmentManager == null) { @@ -896,6 +926,9 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect @Override public int getItemCount() { + if (mReturnSubredditAndUserName) { + return 2; + } return 3; } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchSubredditsResultActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchSubredditsResultActivity.java index 0e75c367..c96de881 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchSubredditsResultActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchSubredditsResultActivity.java @@ -34,8 +34,6 @@ import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; public class SearchSubredditsResultActivity extends BaseActivity implements ActivityToolbarInterface { static final String EXTRA_QUERY = "EQ"; - static final String EXTRA_RETURN_SUBREDDIT_NAME = "ERSN"; - static final String EXTRA_RETURN_SUBREDDIT_ICON_URL = "ERSIU"; static final String EXTRA_IS_MULTI_SELECTION = "EIMS"; static final String RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES = "RESS"; @@ -128,14 +126,6 @@ public class SearchSubredditsResultActivity extends BaseActivity implements Acti applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(binding.appbarLayoutSearchSubredditsResultActivity, null, binding.toolbarSearchSubredditsResultActivity); } - public void getSelectedSubreddit(String name, String iconUrl) { - Intent returnIntent = new Intent(); - returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, name); - returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, iconUrl); - setResult(Activity.RESULT_OK, returnIntent); - finish(); - } - @Override public boolean onCreateOptionsMenu(Menu menu) { if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchUsersResultActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchUsersResultActivity.java index 78c9b003..a24acc0f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchUsersResultActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchUsersResultActivity.java @@ -35,8 +35,6 @@ public class SearchUsersResultActivity extends BaseActivity implements ActivityT static final String EXTRA_QUERY = "EQ"; static final String EXTRA_IS_MULTI_SELECTION = "EIMS"; - static final String EXTRA_RETURN_USER_NAME = "ERUN"; - static final String EXTRA_RETURN_USER_ICON_URL = "ERUIU"; static final String RETURN_EXTRA_SELECTED_USERNAMES = "RESU"; private static final String FRAGMENT_OUT_STATE = "FOS"; @@ -129,14 +127,6 @@ public class SearchUsersResultActivity extends BaseActivity implements ActivityT null, binding.toolbarSearchUsersResultActivity); } - public void getSelectedUser(String name, String iconUrl) { - Intent returnIntent = new Intent(); - returnIntent.putExtra(EXTRA_RETURN_USER_NAME, name); - returnIntent.putExtra(EXTRA_RETURN_USER_ICON_URL, iconUrl); - setResult(Activity.RESULT_OK, returnIntent); - finish(); - } - @Override public boolean onCreateOptionsMenu(Menu menu) { if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubredditSelectionActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubredditSelectionActivity.java index af3c5cde..d1a540f9 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubredditSelectionActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubredditSelectionActivity.java @@ -245,15 +245,6 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity return false; } - public void getSelectedSubreddit(String name, String iconUrl, boolean subredditIsUser) { - Intent returnIntent = new Intent(); - returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, name); - returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, iconUrl); - returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_IS_USER, subredditIsUser); - setResult(Activity.RESULT_OK, returnIntent); - finish(); - } - @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) { 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 4b8d1a93..750f049f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubscribedThingListingActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubscribedThingListingActivity.java @@ -17,6 +17,8 @@ import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.Toast; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.view.inputmethod.EditorInfoCompat; @@ -68,6 +70,7 @@ import retrofit2.Retrofit; public class SubscribedThingListingActivity extends BaseActivity implements ActivityToolbarInterface { public static final String EXTRA_SHOW_MULTIREDDITS = "ESM"; + public static final String EXTRA_THING_SELECTION_MODE = "ETSM"; private static final String INSERT_SUBSCRIBED_SUBREDDIT_STATE = "ISSS"; private static final String INSERT_MULTIREDDIT_STATE = "IMS"; @@ -86,11 +89,13 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti CustomThemeWrapper mCustomThemeWrapper; @Inject Executor mExecutor; - private boolean mInsertSuccess = false; - private boolean mInsertMultiredditSuccess = false; - private boolean showMultiReddits = false; + private boolean mInsertSuccess; + private boolean mInsertMultiredditSuccess; + private boolean showMultiReddits; + private boolean isThingSelectionMode; private SectionsPagerAdapter sectionsPagerAdapter; private Menu mMenu; + private ActivityResultLauncher<Intent> requestSearchThingLauncher; private ActivitySubscribedThingListingBinding binding; @Override @@ -145,6 +150,8 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti showMultiReddits = getIntent().getBooleanExtra(EXTRA_SHOW_MULTIREDDITS, false); } + isThingSelectionMode = getIntent().getBooleanExtra(EXTRA_THING_SELECTION_MODE, false); + 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); } @@ -165,6 +172,12 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti sectionsPagerAdapter.changeSearchQuery(editable.toString()); } }); + + requestSearchThingLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { + setResult(RESULT_OK, result.getData()); + finish(); + }); + initializeViewPagerAndLoadSubscriptions(); } @@ -241,6 +254,13 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { 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); + requestSearchThingLauncher.launch(intent); + return true; + } + item.setVisible(false); binding.searchEditTextSubscribedThingListingActivity.setVisibility(View.VISIBLE); binding.searchEditTextSubscribedThingListingActivity.requestFocus(); @@ -454,27 +474,29 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti 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); fragment.setArguments(bundle); return fragment; } case 1: { FollowedUsersListingFragment fragment = new FollowedUsersListingFragment(); Bundle bundle = new Bundle(); - fragment.setArguments(bundle); - return fragment; - } - default: { - MultiRedditListingFragment fragment = new MultiRedditListingFragment(); - Bundle bundle = new Bundle(); + bundle.putBoolean(FollowedUsersListingFragment.EXTRA_IS_USER_SELECTION, isThingSelectionMode); fragment.setArguments(bundle); return fragment; } } + + MultiRedditListingFragment fragment = new MultiRedditListingFragment(); + Bundle bundle = new Bundle(); + fragment.setArguments(bundle); + return fragment; } @Override public int getCount() { - return 3; + return isThingSelectionMode && Account.ANONYMOUS_ACCOUNT.equals(accountName) ? 2 : 3; } @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/FollowedUsersRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/FollowedUsersRecyclerViewAdapter.java index 008944e2..61e237d1 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/FollowedUsersRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/FollowedUsersRecyclerViewAdapter.java @@ -1,6 +1,5 @@ package ml.docilealligator.infinityforreddit.adapters; -import android.content.Intent; import android.os.Handler; import android.view.LayoutInflater; import android.view.View; @@ -24,7 +23,6 @@ import ml.docilealligator.infinityforreddit.FavoriteThing; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.activities.BaseActivity; -import ml.docilealligator.infinityforreddit.activities.ViewUserDetailActivity; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.databinding.ItemFavoriteThingDividerBinding; import ml.docilealligator.infinityforreddit.databinding.ItemSubscribedThingBinding; @@ -48,11 +46,13 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc private final RequestManager glide; private final int mPrimaryTextColor; private final int mSecondaryTextColor; + private final ItemOnClickListener itemOnClickListener; public FollowedUsersRecyclerViewAdapter(BaseActivity activity, Executor executor, Retrofit oauthRetrofit, RedditDataRoomDatabase redditDataRoomDatabase, CustomThemeWrapper customThemeWrapper, - @Nullable String accessToken, @NonNull String accountName) { + @Nullable String accessToken, @NonNull String accountName, + ItemOnClickListener itemOnClickListener) { mActivity = activity; mExecutor = executor; mOauthRetrofit = oauthRetrofit; @@ -62,6 +62,7 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc glide = Glide.with(activity); mPrimaryTextColor = customThemeWrapper.getPrimaryTextColor(); mSecondaryTextColor = customThemeWrapper.getSecondaryTextColor(); + this.itemOnClickListener = itemOnClickListener; } @Override @@ -205,9 +206,7 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc itemView.setOnClickListener(view -> { int position = getBindingAdapterPosition() - 1; if(position >= 0 && mFavoriteSubscribedUserData.size() > position) { - Intent intent = new Intent(mActivity, ViewUserDetailActivity.class); - intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mFavoriteSubscribedUserData.get(position).getName()); - mActivity.startActivity(intent); + itemOnClickListener.onClick(mFavoriteSubscribedUserData.get(position)); } }); @@ -288,9 +287,7 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc mFavoriteSubscribedUserData.size() + 2 : 0; int position = getBindingAdapterPosition() - offset; if(position >= 0 && mSubscribedUserData.size() > position) { - Intent intent = new Intent(mActivity, ViewUserDetailActivity.class); - intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mSubscribedUserData.get(position).getName()); - mActivity.startActivity(intent); + itemOnClickListener.onClick(mSubscribedUserData.get(position)); } }); @@ -385,4 +382,8 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc binding.dividerTextViewItemFavoriteThingDivider.setTextColor(mSecondaryTextColor); } } + + public interface ItemOnClickListener { + void onClick(SubscribedUserData subscribedUserData); + } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/FollowedUsersListingFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/FollowedUsersListingFragment.java index c1486d2c..3f51bcaf 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/FollowedUsersListingFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/FollowedUsersListingFragment.java @@ -1,7 +1,9 @@ package ml.docilealligator.infinityforreddit.fragments; +import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Resources; import android.os.Build; @@ -27,9 +29,11 @@ import ml.docilealligator.infinityforreddit.FragmentCommunicator; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; +import ml.docilealligator.infinityforreddit.SelectThingReturnKey; import ml.docilealligator.infinityforreddit.account.Account; import ml.docilealligator.infinityforreddit.activities.BaseActivity; import ml.docilealligator.infinityforreddit.activities.SubscribedThingListingActivity; +import ml.docilealligator.infinityforreddit.activities.ViewUserDetailActivity; import ml.docilealligator.infinityforreddit.adapters.FollowedUsersRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; @@ -44,6 +48,8 @@ import retrofit2.Retrofit; */ public class FollowedUsersListingFragment extends Fragment implements FragmentCommunicator { + public static final String EXTRA_IS_USER_SELECTION = "EIUS"; + @Inject @Named("oauth") Retrofit mOauthRetrofit; @@ -95,7 +101,20 @@ public class FollowedUsersListingFragment extends Fragment implements FragmentCo mLinearLayoutManager = new LinearLayoutManagerBugFixed(mActivity); binding.recyclerViewFollowedUsersListingFragment.setLayoutManager(mLinearLayoutManager); FollowedUsersRecyclerViewAdapter adapter = new FollowedUsersRecyclerViewAdapter(mActivity, - mExecutor, mOauthRetrofit, mRedditDataRoomDatabase, mCustomThemeWrapper, mActivity.accessToken, mActivity.accountName); + mExecutor, mOauthRetrofit, mRedditDataRoomDatabase, mCustomThemeWrapper, mActivity.accessToken, + mActivity.accountName, subscribedUserData -> { + if (getArguments().getBoolean(EXTRA_IS_USER_SELECTION)) { + Intent returnIntent = new Intent(); + returnIntent.putExtra(SelectThingReturnKey.RETURN_EXTRA_SUBREDDIT_OR_USER_NAME, subscribedUserData.getName()); + returnIntent.putExtra(SelectThingReturnKey.RETURN_EXTRA_IS_USER, true); + mActivity.setResult(Activity.RESULT_OK, returnIntent); + mActivity.finish(); + } else { + Intent intent = new Intent(mActivity, ViewUserDetailActivity.class); + intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, subscribedUserData.getName()); + mActivity.startActivity(intent); + } + }); binding.recyclerViewFollowedUsersListingFragment.setAdapter(adapter); new FastScrollerBuilder(binding.recyclerViewFollowedUsersListingFragment).useMd2Style().build(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SubredditListingFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SubredditListingFragment.java index ca7255f5..f168cd3d 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SubredditListingFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SubredditListingFragment.java @@ -1,6 +1,7 @@ package ml.docilealligator.infinityforreddit.fragments; +import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; @@ -32,10 +33,10 @@ import ml.docilealligator.infinityforreddit.NetworkState; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.RecyclerViewContentScrollingInterface; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; +import ml.docilealligator.infinityforreddit.SelectThingReturnKey; import ml.docilealligator.infinityforreddit.SortType; import ml.docilealligator.infinityforreddit.account.Account; import ml.docilealligator.infinityforreddit.activities.BaseActivity; -import ml.docilealligator.infinityforreddit.activities.SearchSubredditsResultActivity; import ml.docilealligator.infinityforreddit.activities.ViewSubredditDetailActivity; import ml.docilealligator.infinityforreddit.adapters.SubredditListingRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; @@ -133,7 +134,11 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun @Override public void subredditSelected(String subredditName, String iconUrl) { if (isGettingSubredditInfo) { - ((SearchSubredditsResultActivity) mActivity).getSelectedSubreddit(subredditName, iconUrl); + Intent returnIntent = new Intent(); + returnIntent.putExtra(SelectThingReturnKey.RETURN_EXTRA_SUBREDDIT_OR_USER_NAME, subredditName); + returnIntent.putExtra(SelectThingReturnKey.RETURN_EXTRA_SUBREDDIT_OR_USER_ICON, iconUrl); + mActivity.setResult(Activity.RESULT_OK, returnIntent); + mActivity.finish(); } else { Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class); intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, subredditName); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SubscribedSubredditsListingFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SubscribedSubredditsListingFragment.java index 33f15adc..7eb624f7 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SubscribedSubredditsListingFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SubscribedSubredditsListingFragment.java @@ -1,7 +1,9 @@ package ml.docilealligator.infinityforreddit.fragments; +import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Resources; import android.os.Build; @@ -27,9 +29,9 @@ import ml.docilealligator.infinityforreddit.FragmentCommunicator; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; +import ml.docilealligator.infinityforreddit.SelectThingReturnKey; import ml.docilealligator.infinityforreddit.account.Account; import ml.docilealligator.infinityforreddit.activities.BaseActivity; -import ml.docilealligator.infinityforreddit.activities.SubredditSelectionActivity; import ml.docilealligator.infinityforreddit.activities.SubscribedThingListingActivity; import ml.docilealligator.infinityforreddit.adapters.SubscribedSubredditsRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; @@ -104,7 +106,14 @@ public class SubscribedSubredditsListingFragment extends Fragment implements Fra if (getArguments().getBoolean(EXTRA_IS_SUBREDDIT_SELECTION)) { adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, mExecutor, mOauthRetrofit, mRedditDataRoomDatabase, mCustomThemeWrapper, mActivity.accessToken, mActivity.accountName, getArguments().getBoolean(EXTRA_EXTRA_CLEAR_SELECTION), - (name, iconUrl, subredditIsUser) -> ((SubredditSelectionActivity) mActivity).getSelectedSubreddit(name, iconUrl, subredditIsUser)); + (name, iconUrl, subredditIsUser) -> { + Intent returnIntent = new Intent(); + returnIntent.putExtra(SelectThingReturnKey.RETURN_EXTRA_SUBREDDIT_OR_USER_NAME, name); + returnIntent.putExtra(SelectThingReturnKey.RETURN_EXTRA_SUBREDDIT_OR_USER_ICON, iconUrl); + returnIntent.putExtra(SelectThingReturnKey.RETURN_EXTRA_IS_USER, subredditIsUser); + mActivity.setResult(Activity.RESULT_OK, returnIntent); + mActivity.finish(); + }); } else { adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, mExecutor, mOauthRetrofit, mRedditDataRoomDatabase, mCustomThemeWrapper, mActivity.accessToken, mActivity.accountName); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/UserListingFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/UserListingFragment.java index ba556f84..7fb40b34 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/UserListingFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/UserListingFragment.java @@ -1,6 +1,7 @@ package ml.docilealligator.infinityforreddit.fragments; +import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; @@ -31,10 +32,10 @@ import ml.docilealligator.infinityforreddit.NetworkState; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.RecyclerViewContentScrollingInterface; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; +import ml.docilealligator.infinityforreddit.SelectThingReturnKey; import ml.docilealligator.infinityforreddit.SortType; import ml.docilealligator.infinityforreddit.account.Account; import ml.docilealligator.infinityforreddit.activities.BaseActivity; -import ml.docilealligator.infinityforreddit.activities.SearchUsersResultActivity; import ml.docilealligator.infinityforreddit.activities.ViewUserDetailActivity; import ml.docilealligator.infinityforreddit.adapters.UserListingRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; @@ -132,7 +133,11 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato @Override public void userSelected(String username, String iconUrl) { if (isGettingUserInfo) { - ((SearchUsersResultActivity) mActivity).getSelectedUser(username, iconUrl); + Intent returnIntent = new Intent(); + returnIntent.putExtra(SelectThingReturnKey.RETURN_EXTRA_SUBREDDIT_OR_USER_NAME, username); + returnIntent.putExtra(SelectThingReturnKey.RETURN_EXTRA_SUBREDDIT_OR_USER_ICON, iconUrl); + mActivity.setResult(Activity.RESULT_OK, returnIntent); + mActivity.finish(); } else { Intent intent = new Intent(mActivity, ViewUserDetailActivity.class); intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, username); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1b50d61e..ad3098b7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -172,6 +172,7 @@ <string name="search_hint">Search anything</string> <string name="search_only_subreddits_hint">Search subreddits</string> <string name="search_only_users_hint">Search users</string> + <string name="search_subreddits_and_users_hint">Search subreddits and users</string> <string name="no_posts_no_lazy_mode">No posts available</string> <string name="lazy_mode_start">Lazy Mode starts in %1$.1fs</string> |