Save 'Search in' in RecentSearchQuery.

This commit is contained in:
Docile-Alligator
2024-08-14 20:03:01 -04:00
parent b41e93dac0
commit 25ac920fe5
8 changed files with 98 additions and 50 deletions

View File

@ -43,7 +43,7 @@ import ml.docilealligator.infinityforreddit.user.UserData;
@Database(entities = {Account.class, SubredditData.class, SubscribedSubredditData.class, UserData.class,
SubscribedUserData.class, MultiReddit.class, CustomTheme.class, RecentSearchQuery.class,
ReadPost.class, PostFilter.class, PostFilterUsage.class, AnonymousMultiredditSubreddit.class,
CommentFilter.class, CommentFilterUsage.class}, version = 26)
CommentFilter.class, CommentFilterUsage.class}, version = 27)
public abstract class RedditDataRoomDatabase extends RoomDatabase {
public static RedditDataRoomDatabase create(final Context context) {
@ -55,7 +55,7 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
MIGRATION_13_14, MIGRATION_14_15, MIGRATION_15_16, MIGRATION_16_17,
MIGRATION_17_18, MIGRATION_18_19, MIGRATION_19_20, MIGRATION_20_21,
MIGRATION_21_22, MIGRATION_22_23, MIGRATION_23_24, MIGRATION_24_25,
MIGRATION_25_26)
MIGRATION_25_26, MIGRATION_26_27)
.build();
}
@ -418,4 +418,12 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
database.execSQL("ALTER TABLE comment_filter ADD COLUMN display_mode INTEGER DEFAULT 0 NOT NULL");
}
};
private static final Migration MIGRATION_26_27 = new Migration(26, 27) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE recent_search_queries ADD COLUMN search_in_subreddit_or_user_name TEXT");
database.execSQL("ALTER TABLE recent_search_queries ADD COLUMN search_in_is_user INTEGER DEFAULT 0 NOT NULL");
}
};
}

View File

@ -60,8 +60,8 @@ import retrofit2.Retrofit;
public class SearchActivity extends BaseActivity {
public static final String EXTRA_QUERY = "EQ";
public static final String EXTRA_SUBREDDIT_NAME = "ESN";
public static final String EXTRA_SUBREDDIT_IS_USER = "ESIU";
public static final String EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME = "ESISOUN";
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_RETURN_SUBREDDIT_NAME = "ERSN";
@ -99,8 +99,8 @@ public class SearchActivity extends BaseActivity {
@Inject
Executor executor;
private String query;
private String subredditName;
private boolean subredditIsUser;
private String searchInSubredditOrUserName;
private boolean searchInIsUser;
private boolean searchOnlySubreddits;
private boolean searchOnlyUsers;
private SearchActivityRecyclerViewAdapter adapter;
@ -230,7 +230,7 @@ public class SearchActivity extends BaseActivity {
});
binding.searchEditTextSearchActivity.setOnEditorActionListener((v, actionId, event) -> {
if ((actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_SEARCH) || (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN )) {
if ((actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_SEARCH) || (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN)) {
if (!binding.searchEditTextSearchActivity.getText().toString().isEmpty()) {
search(binding.searchEditTextSearchActivity.getText().toString());
return true;
@ -264,13 +264,13 @@ public class SearchActivity extends BaseActivity {
});
if (savedInstanceState != null) {
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
subredditIsUser = savedInstanceState.getBoolean(SUBREDDIT_IS_USER_STATE);
searchInSubredditOrUserName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
searchInIsUser = savedInstanceState.getBoolean(SUBREDDIT_IS_USER_STATE);
if (subredditName == null) {
if (searchInSubredditOrUserName == null) {
binding.subredditNameTextViewSearchActivity.setText(R.string.all_subreddits);
} else {
binding.subredditNameTextViewSearchActivity.setText(subredditName);
binding.subredditNameTextViewSearchActivity.setText(searchInSubredditOrUserName);
}
} else {
query = getIntent().getStringExtra(EXTRA_QUERY);
@ -288,10 +288,10 @@ public class SearchActivity extends BaseActivity {
}
Intent intent = getIntent();
if (intent.hasExtra(EXTRA_SUBREDDIT_NAME)) {
subredditName = intent.getStringExtra(EXTRA_SUBREDDIT_NAME);
binding.subredditNameTextViewSearchActivity.setText(subredditName);
subredditIsUser = intent.getBooleanExtra(EXTRA_SUBREDDIT_IS_USER, false);
if (intent.hasExtra(EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME)) {
searchInSubredditOrUserName = intent.getStringExtra(EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME);
binding.subredditNameTextViewSearchActivity.setText(searchInSubredditOrUserName);
searchInIsUser = intent.getBooleanExtra(EXTRA_SEARCH_IN_SUBREDDIT_IS_USER, false);
}
}
@ -299,8 +299,10 @@ public class SearchActivity extends BaseActivity {
if (!accountName.equals(Account.ANONYMOUS_ACCOUNT)) {
adapter = new SearchActivityRecyclerViewAdapter(this, mCustomThemeWrapper, new SearchActivityRecyclerViewAdapter.ItemOnClickListener() {
@Override
public void onClick(String query) {
search(query);
public void onClick(RecentSearchQuery recentSearchQuery) {
searchInSubredditOrUserName = recentSearchQuery.getSearchInSubredditOrUserName();
searchInIsUser = recentSearchQuery.isSearchInIsUser();
search(recentSearchQuery.getSearchQuery());
}
@Override
@ -374,12 +376,9 @@ public class SearchActivity extends BaseActivity {
} else {
Intent intent = new Intent(SearchActivity.this, SearchResultActivity.class);
intent.putExtra(SearchResultActivity.EXTRA_QUERY, query);
if (subredditName != null) {
if (subredditIsUser) {
intent.putExtra(SearchResultActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
} else {
intent.putExtra(SearchResultActivity.EXTRA_SUBREDDIT_NAME, subredditName);
}
if (searchInSubredditOrUserName != null) {
intent.putExtra(SearchResultActivity.EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME, searchInSubredditOrUserName);
intent.putExtra(SearchResultActivity.EXTRA_SEARCH_IN_SUBREDDIT_IS_USER, searchInIsUser);
}
startActivity(intent);
finish();
@ -443,13 +442,13 @@ public class SearchActivity extends BaseActivity {
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (resultCode == RESULT_OK && data != null) {
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
subredditName = data.getStringExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
subredditIsUser = data.getBooleanExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER, false);
searchInSubredditOrUserName = data.getStringExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
searchInIsUser = data.getBooleanExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER, false);
if (subredditName == null) {
if (searchInSubredditOrUserName == null) {
binding.subredditNameTextViewSearchActivity.setText(R.string.all_subreddits);
} else {
binding.subredditNameTextViewSearchActivity.setText(subredditName);
binding.subredditNameTextViewSearchActivity.setText(searchInSubredditOrUserName);
}
} else if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) {
Intent returnIntent = new Intent();
@ -496,8 +495,8 @@ public class SearchActivity extends BaseActivity {
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
outState.putBoolean(SUBREDDIT_IS_USER_STATE, subredditIsUser);
outState.putString(SUBREDDIT_NAME_STATE, searchInSubredditOrUserName);
outState.putBoolean(SUBREDDIT_IS_USER_STATE, searchInIsUser);
}
@Override

View File

@ -83,7 +83,8 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
static final String EXTRA_QUERY = "EQ";
static final String EXTRA_TRENDING_SOURCE = "ETS";
static final String EXTRA_SUBREDDIT_NAME = "ESN";
static final String EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME = "ESISOUN";
public static final String EXTRA_SEARCH_IN_SUBREDDIT_IS_USER = "ESISIU";
private static final String INSERT_SEARCH_QUERY_SUCCESS_STATE = "ISQSS";
@ -116,7 +117,8 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
Executor executor;
private Call<String> subredditAutocompleteCall;
private String mQuery;
private String mSubredditName;
private String mSearchInSubredditOrUserName;
private boolean mSearchInIsUser;
private boolean mInsertSearchQuerySuccess;
private FragmentManager fragmentManager;
private SectionsPagerAdapter sectionsPagerAdapter;
@ -173,7 +175,8 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
Intent intent = getIntent();
String query = intent.getStringExtra(EXTRA_QUERY);
mSubredditName = intent.getStringExtra(EXTRA_SUBREDDIT_NAME);
mSearchInSubredditOrUserName = intent.getStringExtra(EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME);
mSearchInIsUser = intent.getBooleanExtra(EXTRA_SEARCH_IN_SUBREDDIT_IS_USER, false);
if (query != null) {
mQuery = query;
@ -325,8 +328,9 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
}
case SharedPreferencesUtils.OTHER_ACTIVITIES_BOTTOM_APP_BAR_FAB_SEARCH: {
Intent intent = new Intent(this, SearchActivity.class);
if (mSubredditName != null && !mSubredditName.equals("")) {
intent.putExtra(SearchActivity.EXTRA_SUBREDDIT_NAME, mSubredditName);
if (mSearchInSubredditOrUserName != null && !mSearchInSubredditOrUserName.equals("")) {
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME, mSearchInSubredditOrUserName);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_IS_USER, mSearchInIsUser);
}
startActivity(intent);
break;
@ -372,7 +376,8 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
if (!accountName.equals(Account.ANONYMOUS_ACCOUNT)&& mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_SEARCH_HISTORY, true) && !mInsertSearchQuerySuccess && mQuery != null) {
InsertRecentSearchQuery.insertRecentSearchQueryListener(executor, new Handler(getMainLooper()),
mRedditDataRoomDatabase, accountName, mQuery, () -> mInsertSearchQuerySuccess = true);
mRedditDataRoomDatabase, accountName, mQuery, mSearchInSubredditOrUserName, mSearchInIsUser,
() -> mInsertSearchQuerySuccess = true);
}
}
@ -412,8 +417,9 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
return true;
} else if (itemId == R.id.action_search_search_result_activity) {
Intent intent = new Intent(this, SearchActivity.class);
if (mSubredditName != null && !mSubredditName.equals("")) {
intent.putExtra(SearchActivity.EXTRA_SUBREDDIT_NAME, mSubredditName);
if (mSearchInSubredditOrUserName != null && !mSearchInSubredditOrUserName.equals("")) {
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME, mSearchInSubredditOrUserName);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_IS_USER, mSearchInIsUser);
}
intent.putExtra(SearchActivity.EXTRA_QUERY, mQuery);
finish();
@ -524,8 +530,9 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
break;
case FABMoreOptionsBottomSheetFragment.FAB_OPTION_SEARCH:
Intent intent = new Intent(this, SearchActivity.class);
if (mSubredditName != null && !mSubredditName.equals("")) {
intent.putExtra(SearchActivity.EXTRA_SUBREDDIT_NAME, mSubredditName);
if (mSearchInSubredditOrUserName != null && !mSearchInSubredditOrUserName.equals("")) {
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME, mSearchInSubredditOrUserName);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_IS_USER, mSearchInIsUser);
}
startActivity(intent);
break;
@ -755,7 +762,7 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
PostFragment mFragment = new PostFragment();
Bundle bundle = new Bundle();
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_SEARCH);
bundle.putString(PostFragment.EXTRA_NAME, mSubredditName);
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);

View File

@ -610,7 +610,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
}
case SharedPreferencesUtils.OTHER_ACTIVITIES_BOTTOM_APP_BAR_OPTION_SEARCH: {
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(SearchActivity.EXTRA_SUBREDDIT_NAME, subredditName);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME, subredditName);
startActivity(intent);
break;
}
@ -874,7 +874,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
}
case SharedPreferencesUtils.OTHER_ACTIVITIES_BOTTOM_APP_BAR_FAB_SEARCH: {
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(SearchActivity.EXTRA_SUBREDDIT_NAME, subredditName);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME, subredditName);
startActivity(intent);
break;
}
@ -1087,7 +1087,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
return true;
} else if (itemId == R.id.action_search_view_subreddit_detail_activity) {
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(SearchActivity.EXTRA_SUBREDDIT_NAME, subredditName);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME, subredditName);
startActivity(intent);
return true;
} else if (itemId == R.id.action_refresh_view_subreddit_detail_activity) {
@ -1338,7 +1338,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
break;
case FABMoreOptionsBottomSheetFragment.FAB_OPTION_SEARCH:
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(SearchActivity.EXTRA_SUBREDDIT_NAME, subredditName);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME, subredditName);
startActivity(intent);
break;
case FABMoreOptionsBottomSheetFragment.FAB_OPTION_GO_TO_SUBREDDIT: {

View File

@ -826,6 +826,8 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
}
case SharedPreferencesUtils.OTHER_ACTIVITIES_BOTTOM_APP_BAR_FAB_SEARCH: {
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME, username);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_IS_USER, true);
startActivity(intent);
break;
}
@ -914,6 +916,8 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
}
case SharedPreferencesUtils.OTHER_ACTIVITIES_BOTTOM_APP_BAR_OPTION_SEARCH: {
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME, username);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_IS_USER, true);
startActivity(intent);
break;
}
@ -1091,8 +1095,8 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
return true;
} else if (itemId == R.id.action_search_view_user_detail_activity) {
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(SearchActivity.EXTRA_SUBREDDIT_NAME, username);
intent.putExtra(SearchActivity.EXTRA_SUBREDDIT_IS_USER, true);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME, username);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_IS_USER, true);
startActivity(intent);
return true;
} else if (itemId == R.id.action_refresh_view_user_detail_activity) {
@ -1277,6 +1281,8 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
break;
case FABMoreOptionsBottomSheetFragment.FAB_OPTION_SEARCH:
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_OR_USER_NAME, username);
intent.putExtra(SearchActivity.EXTRA_SEARCH_IN_SUBREDDIT_IS_USER, true);
startActivity(intent);
break;
case FABMoreOptionsBottomSheetFragment.FAB_OPTION_GO_TO_SUBREDDIT: {

View File

@ -23,7 +23,7 @@ public class SearchActivityRecyclerViewAdapter extends RecyclerView.Adapter<Recy
private final ItemOnClickListener itemOnClickListener;
public interface ItemOnClickListener {
void onClick(String query);
void onClick(RecentSearchQuery recentSearchQuery);
void onDelete(RecentSearchQuery recentSearchQuery);
}
@ -92,7 +92,7 @@ public class SearchActivityRecyclerViewAdapter extends RecyclerView.Adapter<Recy
itemView.setOnClickListener(view -> {
if (recentSearchQueries != null && !recentSearchQueries.isEmpty()) {
itemOnClickListener.onClick(recentSearchQueries.get(getBindingAdapterPosition()).getSearchQuery());
itemOnClickListener.onClick(recentSearchQueries.get(getBindingAdapterPosition()));
}
});

View File

@ -16,6 +16,8 @@ public class InsertRecentSearchQuery {
RedditDataRoomDatabase redditDataRoomDatabase,
String username,
String recentSearchQuery,
String searchInSubredditOrUserName,
boolean searchInIsUser,
InsertRecentSearchQueryListener insertRecentSearchQueryListener) {
executor.execute(() -> {
RecentSearchQueryDao recentSearchQueryDao = redditDataRoomDatabase.recentSearchQueryDao();
@ -26,7 +28,7 @@ public class InsertRecentSearchQuery {
}
}
recentSearchQueryDao.insert(new RecentSearchQuery(username, recentSearchQuery));
recentSearchQueryDao.insert(new RecentSearchQuery(username, recentSearchQuery, searchInSubredditOrUserName, searchInIsUser));
handler.post(insertRecentSearchQueryListener::success);
});

View File

@ -1,6 +1,7 @@
package ml.docilealligator.infinityforreddit.recentsearchquery;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.ForeignKey;
@ -17,12 +18,20 @@ public class RecentSearchQuery {
@NonNull
@ColumnInfo(name = "search_query")
private String searchQuery;
@Nullable
@ColumnInfo(name = "search_in_subreddit_or_user_name")
private String searchInSubredditOrUserName;
@ColumnInfo(name = "search_in_is_user")
private boolean searchInIsUser;
@ColumnInfo(name = "time")
private long time;
public RecentSearchQuery(@NonNull String username, @NonNull String searchQuery) {
public RecentSearchQuery(@NonNull String username, @NonNull String searchQuery,
@Nullable String searchInSubredditOrUserName, boolean searchInIsUser) {
this.username = username;
this.searchQuery = searchQuery;
this.searchInSubredditOrUserName = searchInSubredditOrUserName;
this.searchInIsUser = searchInIsUser;
this.time = System.currentTimeMillis();
}
@ -44,6 +53,23 @@ public class RecentSearchQuery {
this.searchQuery = searchQuery;
}
@Nullable
public String getSearchInSubredditOrUserName() {
return searchInSubredditOrUserName;
}
public void setSearchInSubredditOrUserName(@Nullable String searchInSubredditOrUserName) {
this.searchInSubredditOrUserName = searchInSubredditOrUserName;
}
public boolean isSearchInIsUser() {
return searchInIsUser;
}
public void setSearchInIsUser(boolean searchInIsUser) {
this.searchInIsUser = searchInIsUser;
}
public long getTime() {
return time;
}