From 111ba8e5fc95c3fb5dbbff472e1a8dbbb52a28af Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Mon, 29 Jul 2019 00:52:08 +0800 Subject: [PATCH] Sorting in SearchResultActivity is available. Switch DataSource instead of replacing fragments when changing sorting types. Minor bugs fixed. --- .idea/caches/build_file_checksums.ser | Bin 533 -> 533 bytes .idea/caches/gradle_models.ser | Bin 257686 -> 257686 bytes .../infinityforreddit/FetchSubredditData.java | 7 +- .../infinityforreddit/FetchUserData.java | 7 +- .../infinityforreddit/MainActivity.java | 18 ++-- .../infinityforreddit/PostDataSource.java | 8 +- .../PostDataSourceFactory.java | 4 + .../infinityforreddit/PostFragment.java | 4 + .../infinityforreddit/PostViewModel.java | 37 +++++++-- .../infinityforreddit/RedditAPI.java | 6 +- ...SearchPostSortTypeBottomSheetFragment.java | 77 ++++++++++++++++++ .../SearchResultActivity.java | 58 ++++++++++++- ...dSubredditSortTypeBottomSheetFragment.java | 61 ++++++++++++++ .../SortTypeBottomSheetFragment.java | 2 +- .../SubredditListingDataSource.java | 15 ++-- .../SubredditListingDataSourceFactory.java | 10 ++- .../SubredditListingFragment.java | 24 +++--- .../SubredditListingViewModel.java | 28 +++++-- .../UserListingDataSource.java | 16 ++-- .../UserListingDataSourceFactory.java | 10 ++- .../UserListingFragment.java | 28 +++---- .../UserListingViewModel.java | 32 ++++++-- .../ViewSubredditDetailActivity.java | 20 ++--- .../fragment_post_type_bottom_sheet.xml | 35 ++++---- ...ent_search_post_sort_type_bottom_sheet.xml | 77 ++++++++++++++++++ ...r_and_subreddit_sort_type_bottom_sheet.xml | 36 ++++++++ .../fragment_sort_type_bottom_sheet.xml | 18 ++-- .../main/res/menu/search_result_activity.xml | 11 ++- app/src/main/res/values-night/colors.xml | 4 + app/src/main/res/values/colors.xml | 2 + app/src/main/res/values/dimens.xml | 1 - app/src/main/res/values/strings.xml | 6 +- 32 files changed, 524 insertions(+), 138 deletions(-) create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/SearchPostSortTypeBottomSheetFragment.java create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/SearchUserAndSubredditSortTypeBottomSheetFragment.java create mode 100644 app/src/main/res/layout/fragment_search_post_sort_type_bottom_sheet.xml create mode 100644 app/src/main/res/layout/fragment_search_user_and_subreddit_sort_type_bottom_sheet.xml diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 94e2cf6ffb930ad71d07963ca0f4466eb651123d..bdcebe1b2afbe0c35ea2869295db4e0184807962 100644 GIT binary patch delta 15 XcmbQrGL>b*3>HhrX_6b~R5AhpDk23> delta 15 XcmbQrGL>b*3>Lj*d2So$R5AhpEPe&9 diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index 058c966fe94d7fe1f0eccb469adb49949a855f65..ad8ece8814c1f21c75a4c2323c4f9526ef9fea31 100644 GIT binary patch literal 257686 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%0DPRhd)FPH7`j_#rm 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 X{I#_;(;}3XZIq)@(z>VqWc>dC8V$CG diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java index b7c5a73e..9b96e087 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java @@ -2,10 +2,11 @@ package ml.docilealligator.infinityforreddit; import android.util.Log; +import androidx.annotation.NonNull; + import java.util.ArrayList; import SubredditDatabase.SubredditData; -import androidx.annotation.NonNull; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -56,10 +57,10 @@ class FetchSubredditData { }); } - static void fetchSubredditListingData(Retrofit retrofit, String query, String after, final FetchSubredditListingDataListener fetchSubredditListingDataListener) { + static void fetchSubredditListingData(Retrofit retrofit, String query, String after, String sortType, final FetchSubredditListingDataListener fetchSubredditListingDataListener) { RedditAPI api = retrofit.create(RedditAPI.class); - Call subredditDataCall = api.searchSubreddits(query, after); + Call subredditDataCall = api.searchSubreddits(query, after, sortType); subredditDataCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserData.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserData.java index 7f2e2528..8eadcd89 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserData.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserData.java @@ -2,10 +2,11 @@ package ml.docilealligator.infinityforreddit; import android.util.Log; +import androidx.annotation.NonNull; + import java.util.ArrayList; import User.UserData; -import androidx.annotation.NonNull; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Retrofit; @@ -55,11 +56,11 @@ public class FetchUserData { }); } - public static void fetchUserListingData(Retrofit retrofit, String query, String after, + public static void fetchUserListingData(Retrofit retrofit, String query, String after, String sortType, FetchUserListingDataListener fetchUserListingDataListener) { RedditAPI api = retrofit.create(RedditAPI.class); - Call userInfo = api.searchUsers(query, after); + Call userInfo = api.searchUsers(query, after, sortType); userInfo.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java index 08dba87e..f32613f4 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java @@ -114,7 +114,12 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe startActivityForResult(loginIntent, LOGIN_ACTIVITY_REQUEST_CODE); } else { if (savedInstanceState == null) { - replaceFragment(PostDataSource.SORT_TYPE_BEST); + mFragment = new PostFragment(); + Bundle bundle = new Bundle(); + bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostDataSource.TYPE_FRONT_PAGE); + bundle.putString(PostFragment.EXTRA_SORT_TYPE, PostDataSource.SORT_TYPE_BEST); + mFragment.setArguments(bundle); + getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_content_main, mFragment).commit(); } else { mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE); getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_content_main, mFragment).commit(); @@ -176,15 +181,6 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe fab.setOnClickListener(view -> postTypeBottomSheetFragment.show(getSupportFragmentManager(), postTypeBottomSheetFragment.getTag())); } - private void replaceFragment(String sortType) { - mFragment = new PostFragment(); - Bundle bundle = new Bundle(); - bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostDataSource.TYPE_FRONT_PAGE); - bundle.putString(PostFragment.EXTRA_SORT_TYPE, sortType); - mFragment.setArguments(bundle); - getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_content_main, mFragment).commit(); - } - private void loadUserData() { if (!mFetchUserInfoSuccess) { FetchMyInfo.fetchMyInfo(mOauthRetrofit, mAuthInfoSharedPreferences, new FetchMyInfo.FetchUserMyListener() { @@ -330,7 +326,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe @Override public void sortTypeSelected(String sortType) { - replaceFragment(sortType); + ((PostFragment) mFragment).changeSortType(sortType); } @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java index 2a96524e..b596fc75 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java @@ -31,6 +31,8 @@ class PostDataSource extends PageKeyedDataSource { static final String SORT_TYPE_RISING = "rising"; static final String SORT_TYPE_TOP = "top"; static final String SORT_TYPE_CONTROVERSIAL = "controversial"; + static final String SORT_TYPE_RELEVANCE = "relevance"; + static final String SORT_TYPE_COMMENTS = "comments"; private Retrofit retrofit; private String accessToken; @@ -459,7 +461,7 @@ class PostDataSource extends PageKeyedDataSource { Call getPost; if(subredditName == null) { - getPost = api.searchPosts(query, null, RedditUtils.getOAuthHeader(accessToken)); + getPost = api.searchPosts(query, null, sortType, RedditUtils.getOAuthHeader(accessToken)); } else { getPost = api.searchPostsInSpecificSubreddit(subredditName, query, null, RedditUtils.getOAuthHeader(accessToken)); } @@ -467,6 +469,7 @@ class PostDataSource extends PageKeyedDataSource { getPost.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { + Log.i("initial", call.request().url().toString()); if(response.isSuccessful()) { ParsePost.parsePosts(response.body(), locale, -1, new ParsePost.ParsePostsListingListener() { @@ -507,7 +510,7 @@ class PostDataSource extends PageKeyedDataSource { Call getPost; if(subredditName == null) { - getPost = api.searchPosts(subredditName, params.key, RedditUtils.getOAuthHeader(accessToken)); + getPost = api.searchPosts(query, params.key, sortType, RedditUtils.getOAuthHeader(accessToken)); } else { getPost = api.searchPostsInSpecificSubreddit(subredditName, query, params.key, RedditUtils.getOAuthHeader(accessToken)); } @@ -515,6 +518,7 @@ class PostDataSource extends PageKeyedDataSource { getPost.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { + Log.i("after", call.request().url().toString()); if(response.isSuccessful()) { ParsePost.parsePosts(response.body(), locale, -1, new ParsePost.ParsePostsListingListener() { @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSourceFactory.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSourceFactory.java index 31e91c54..79a533e0 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSourceFactory.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSourceFactory.java @@ -90,4 +90,8 @@ class PostDataSourceFactory extends DataSource.Factory { PostDataSource getPostDataSource() { return postDataSource; } + + void changeSortType(String sortType) { + this.sortType = sortType; + } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java index 7196e640..f78d00b6 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java @@ -287,6 +287,10 @@ public class PostFragment extends Fragment implements FragmentCommunicator { return rootView; } + void changeSortType(String sortType) { + mPostViewModel.changeSortType(sortType); + } + @Override public void onAttach(@NonNull Context context) { super.onAttach(context); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostViewModel.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostViewModel.java index 3c5548f8..c824567f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostViewModel.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostViewModel.java @@ -3,6 +3,7 @@ package ml.docilealligator.infinityforreddit; import androidx.annotation.NonNull; import androidx.arch.core.util.Function; import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.Transformations; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; @@ -18,6 +19,7 @@ public class PostViewModel extends ViewModel { private LiveData paginationNetworkState; private LiveData initialLoadingState; private LiveData> posts; + private MutableLiveData sortTypeLiveData; public PostViewModel(Retrofit retrofit, String accessToken, Locale locale, int postType, String sortType, PostDataSource.OnPostFetchedCallback onPostFetchedCallback) { @@ -27,13 +29,20 @@ public class PostViewModel extends ViewModel { (Function>) PostDataSource::getInitialLoadStateLiveData); paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(), (Function>) PostDataSource::getPaginationNetworkStateLiveData); + + sortTypeLiveData = new MutableLiveData<>(); + sortTypeLiveData.postValue(sortType); + PagedList.Config pagedListConfig = (new PagedList.Config.Builder()) .setEnablePlaceholders(false) .setPageSize(25) .build(); - posts = (new LivePagedListBuilder(postDataSourceFactory, pagedListConfig)).build(); + posts = Transformations.switchMap(sortTypeLiveData, sort -> { + postDataSourceFactory.changeSortType(sortTypeLiveData.getValue()); + return (new LivePagedListBuilder(postDataSourceFactory, pagedListConfig)).build(); + }); } public PostViewModel(Retrofit retrofit, String accessToken, Locale locale, String subredditName, int postType, @@ -41,9 +50,12 @@ public class PostViewModel extends ViewModel { postDataSourceFactory = new PostDataSourceFactory(retrofit, accessToken, locale, subredditName, postType, sortType, onPostFetchedCallback); initialLoadingState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(), - dataSource -> dataSource.getInitialLoadStateLiveData()); + (Function>) PostDataSource::getInitialLoadStateLiveData); paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(), - dataSource -> dataSource.getPaginationNetworkStateLiveData()); + (Function>) PostDataSource::getPaginationNetworkStateLiveData); + + sortTypeLiveData = new MutableLiveData<>(); + sortTypeLiveData.postValue(sortType); PagedList.Config pagedListConfig = (new PagedList.Config.Builder()) @@ -51,7 +63,10 @@ public class PostViewModel extends ViewModel { .setPageSize(25) .build(); - posts = (new LivePagedListBuilder(postDataSourceFactory, pagedListConfig)).build(); + posts = Transformations.switchMap(sortTypeLiveData, sort -> { + postDataSourceFactory.changeSortType(sortTypeLiveData.getValue()); + return (new LivePagedListBuilder(postDataSourceFactory, pagedListConfig)).build(); + }); } public PostViewModel(Retrofit retrofit, String accessToken, Locale locale, String subredditName, int postType, @@ -61,7 +76,7 @@ public class PostViewModel extends ViewModel { initialLoadingState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(), dataSource -> dataSource.getInitialLoadStateLiveData()); paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(), - dataSource -> dataSource.getPaginationNetworkStateLiveData()); + (Function>) PostDataSource::getPaginationNetworkStateLiveData); PagedList.Config pagedListConfig = (new PagedList.Config.Builder()) @@ -82,13 +97,19 @@ public class PostViewModel extends ViewModel { paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(), dataSource -> dataSource.getPaginationNetworkStateLiveData()); + sortTypeLiveData = new MutableLiveData<>(); + sortTypeLiveData.postValue(sortType); + PagedList.Config pagedListConfig = (new PagedList.Config.Builder()) .setEnablePlaceholders(false) .setPageSize(25) .build(); - posts = (new LivePagedListBuilder(postDataSourceFactory, pagedListConfig)).build(); + posts = Transformations.switchMap(sortTypeLiveData, sort -> { + postDataSourceFactory.changeSortType(sortTypeLiveData.getValue()); + return (new LivePagedListBuilder(postDataSourceFactory, pagedListConfig)).build(); + }); } LiveData> getPosts() { @@ -115,6 +136,10 @@ public class PostViewModel extends ViewModel { postDataSourceFactory.getPostDataSource().retryLoadingMore(); } + void changeSortType(String sortType) { + sortTypeLiveData.postValue(sortType); + } + public static class Factory extends ViewModelProvider.NewInstanceFactory { private Retrofit retrofit; private String accessToken; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java index 0aba1d50..f0a9ac5b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java @@ -66,13 +66,13 @@ public interface RedditAPI { Call getInfo(@Path("subredditNamePrefixed") String subredditNamePrefixed, @Query("id") String id); @GET("subreddits/search.json?raw_json=1&include_over_18=on") - Call searchSubreddits(@Query("q") String subredditName, @Query("after") String after); + Call searchSubreddits(@Query("q") String subredditName, @Query("after") String after, @Query("sort") String sort); @GET("search.json?raw_json=1&type=user&include_over_18=on") - Call searchUsers(@Query("q") String profileName, @Query("after") String after); + Call searchUsers(@Query("q") String profileName, @Query("after") String after, @Query("sort") String sort); @GET("search.json?raw_json=1&type=link&include_over_18=on") - Call searchPosts(@Query("q") String query, @Query("after") String after, + Call searchPosts(@Query("q") String query, @Query("after") String after, @Query("sort") String sort, @HeaderMap Map headers); @GET("r/{subredditName}/search.json?raw_json=1&type=link&restrict_sr=true&include_over_18=on") diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SearchPostSortTypeBottomSheetFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SearchPostSortTypeBottomSheetFragment.java new file mode 100644 index 00000000..1bc862cc --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SearchPostSortTypeBottomSheetFragment.java @@ -0,0 +1,77 @@ +package ml.docilealligator.infinityforreddit; + + +import android.app.Activity; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import com.deishelon.roundedbottomsheet.RoundedBottomSheetDialogFragment; + +import butterknife.BindView; +import butterknife.ButterKnife; + + +/** + * A simple {@link Fragment} subclass. + */ +public class SearchPostSortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragment { + + interface SearchSortTypeSelectionCallback { + void searchSortTypeSelected(String sortType); + } + + static final String EXTRA_FRAGMENT_POSITION = "EFP"; + + @BindView(R.id.relevance_type_text_view_search_sort_type_bottom_sheet_fragment) TextView relevanceTypeTextView; + @BindView(R.id.hot_type_text_view_search_sort_type_bottom_sheet_fragment) TextView hotTypeTextView; + @BindView(R.id.top_type_text_view_search_sort_type_bottom_sheet_fragment) TextView topTypeTextView; + @BindView(R.id.new_type_text_view_search_sort_type_bottom_sheet_fragment) TextView newTypeTextView; + @BindView(R.id.comments_type_text_view_search_sort_type_bottom_sheet_fragment) TextView commentsTypeTextView; + + public SearchPostSortTypeBottomSheetFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_search_post_sort_type_bottom_sheet, container, false); + ButterKnife.bind(this, rootView); + + Activity activity = getActivity(); + + relevanceTypeTextView.setOnClickListener(view -> { + ((SearchSortTypeSelectionCallback) activity).searchSortTypeSelected(PostDataSource.SORT_TYPE_RELEVANCE); + dismiss(); + }); + + hotTypeTextView.setOnClickListener(view -> { + ((SearchSortTypeSelectionCallback) activity).searchSortTypeSelected(PostDataSource.SORT_TYPE_HOT); + dismiss(); + }); + + topTypeTextView.setOnClickListener(view -> { + ((SearchSortTypeSelectionCallback) activity).searchSortTypeSelected(PostDataSource.SORT_TYPE_TOP); + dismiss(); + }); + + newTypeTextView.setOnClickListener(view -> { + ((SearchSortTypeSelectionCallback) activity).searchSortTypeSelected(PostDataSource.SORT_TYPE_NEW); + dismiss(); + }); + + commentsTypeTextView.setOnClickListener(view -> { + ((SearchSortTypeSelectionCallback) activity).searchSortTypeSelected(PostDataSource.SORT_TYPE_COMMENTS); + dismiss(); + }); + + return rootView; + } + +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SearchResultActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SearchResultActivity.java index b8f304bd..a63f1de2 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SearchResultActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SearchResultActivity.java @@ -19,7 +19,8 @@ import com.google.android.material.tabs.TabLayout; import butterknife.BindView; import butterknife.ButterKnife; -public class SearchResultActivity extends AppCompatActivity { +public class SearchResultActivity extends AppCompatActivity implements SearchPostSortTypeBottomSheetFragment.SearchSortTypeSelectionCallback, + SearchUserAndSubredditSortTypeBottomSheetFragment.SearchUserAndSubredditSortTypeSelectionCallback { static final String EXTRA_QUERY = "QK"; static final String EXTRA_SUBREDDIT_NAME = "ESN"; @@ -32,6 +33,9 @@ public class SearchResultActivity extends AppCompatActivity { private SectionsPagerAdapter sectionsPagerAdapter; + private SearchPostSortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment; + private SearchUserAndSubredditSortTypeBottomSheetFragment searchUserAndSubredditSortTypeBottomSheetFragment; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -45,8 +49,16 @@ public class SearchResultActivity extends AppCompatActivity { sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(sectionsPagerAdapter); viewPager.setOffscreenPageLimit(2); + tabLayout.setupWithViewPager(viewPager); + searchPostSortTypeBottomSheetFragment = new SearchPostSortTypeBottomSheetFragment(); + Bundle bundle = new Bundle(); + bundle.putInt(SearchPostSortTypeBottomSheetFragment.EXTRA_FRAGMENT_POSITION, viewPager.getCurrentItem()); + searchPostSortTypeBottomSheetFragment.setArguments(bundle); + + searchUserAndSubredditSortTypeBottomSheetFragment = new SearchUserAndSubredditSortTypeBottomSheetFragment(); + // Get the intent, verify the action and get the query Intent intent = getIntent(); String query = intent.getExtras().getString(EXTRA_QUERY); @@ -73,6 +85,21 @@ public class SearchResultActivity extends AppCompatActivity { case android.R.id.home: onBackPressed(); return true; + case R.id.action_sort_search_result_activity: + switch (viewPager.getCurrentItem()) { + case 0: { + searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag()); + break; + } + case 1: + case 2: + Bundle bundle = new Bundle(); + bundle.putInt(SearchUserAndSubredditSortTypeBottomSheetFragment.EXTRA_FRAGMENT_POSITION, viewPager.getCurrentItem()); + searchUserAndSubredditSortTypeBottomSheetFragment.setArguments(bundle); + searchUserAndSubredditSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchUserAndSubredditSortTypeBottomSheetFragment.getTag()); + break; + } + return true; case R.id.action_search_search_result_activity: Intent intent = new Intent(this, SearchActivity.class); finish(); @@ -85,7 +112,18 @@ public class SearchResultActivity extends AppCompatActivity { return super.onOptionsItemSelected(item); } + @Override + public void searchSortTypeSelected(String sortType) { + sectionsPagerAdapter.changeSortType(sortType, 0); + } + + @Override + public void searchUserAndSubredditSortTypeSelected(String sortType, int fragmentPosition) { + sectionsPagerAdapter.changeSortType(sortType, fragmentPosition); + } + private class SectionsPagerAdapter extends FragmentPagerAdapter { + private PostFragment postFragment; private SubredditListingFragment subredditListingFragment; private UserListingFragment userListingFragment; @@ -102,7 +140,7 @@ public class SearchResultActivity extends AppCompatActivity { PostFragment mFragment = new PostFragment(); Bundle bundle = new Bundle(); bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostDataSource.TYPE_SEARCH); - bundle.putString(PostFragment.EXTRA_SORT_TYPE, PostDataSource.SORT_TYPE_BEST); + bundle.putString(PostFragment.EXTRA_SORT_TYPE, PostDataSource.SORT_TYPE_RELEVANCE); bundle.putString(PostFragment.EXTRA_SUBREDDIT_NAME, mSubredditName); bundle.putString(PostFragment.EXTRA_QUERY, mQuery); mFragment.setArguments(bundle); @@ -115,8 +153,7 @@ public class SearchResultActivity extends AppCompatActivity { mFragment.setArguments(bundle); return mFragment; } - default: - { + default: { UserListingFragment mFragment = new UserListingFragment(); Bundle bundle = new Bundle(); bundle.putString(UserListingFragment.QUERY_KEY, mQuery); @@ -162,6 +199,19 @@ public class SearchResultActivity extends AppCompatActivity { return fragment; } + void changeSortType(String sortType, int fragmentPosition) { + switch (fragmentPosition) { + case 0: + postFragment.changeSortType(sortType); + break; + case 1: + subredditListingFragment.changeSortType(sortType); + break; + case 2: + userListingFragment.changeSortType(sortType); + } + } + public void refresh() { if(postFragment != null) { ((FragmentCommunicator) postFragment).refresh(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SearchUserAndSubredditSortTypeBottomSheetFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SearchUserAndSubredditSortTypeBottomSheetFragment.java new file mode 100644 index 00000000..ae652fd4 --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SearchUserAndSubredditSortTypeBottomSheetFragment.java @@ -0,0 +1,61 @@ +package ml.docilealligator.infinityforreddit; + + +import android.app.Activity; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import com.deishelon.roundedbottomsheet.RoundedBottomSheetDialogFragment; + +import butterknife.BindView; +import butterknife.ButterKnife; + + +/** + * A simple {@link Fragment} subclass. + */ +public class SearchUserAndSubredditSortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragment { + + interface SearchUserAndSubredditSortTypeSelectionCallback { + void searchUserAndSubredditSortTypeSelected(String sortType, int fragmentPosition); + } + + static final String EXTRA_FRAGMENT_POSITION = "EFP"; + + @BindView(R.id.relevance_type_text_view_search_user_and_subreddit_sort_type_bottom_sheet_fragment) TextView relevanceTypeTextView; + @BindView(R.id.activity_type_text_view_search_user_and_subreddit_sort_type_bottom_sheet_fragment) TextView activityTypeTextView; + + public SearchUserAndSubredditSortTypeBottomSheetFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_search_user_and_subreddit_sort_type_bottom_sheet, container, false); + ButterKnife.bind(this, rootView); + + Activity activity = getActivity(); + + int position = getArguments().getInt(EXTRA_FRAGMENT_POSITION); + + relevanceTypeTextView.setOnClickListener(view -> { + ((SearchUserAndSubredditSortTypeSelectionCallback) activity).searchUserAndSubredditSortTypeSelected(PostDataSource.SORT_TYPE_RELEVANCE, position); + dismiss(); + }); + + activityTypeTextView.setOnClickListener(view -> { + ((SearchUserAndSubredditSortTypeSelectionCallback) activity).searchUserAndSubredditSortTypeSelected(PostDataSource.SORT_TYPE_HOT, position); + dismiss(); + }); + + return rootView; + } + +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SortTypeBottomSheetFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SortTypeBottomSheetFragment.java index 8e25c271..16fbb961 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SortTypeBottomSheetFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SortTypeBottomSheetFragment.java @@ -78,7 +78,7 @@ public class SortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragmen }); controversialTypeTextView.setOnClickListener(view -> { - ((SortTypeSelectionCallback) activity).sortTypeSelected(PostDataSource.SORT_TYPE_BEST); + ((SortTypeSelectionCallback) activity).sortTypeSelected(PostDataSource.SORT_TYPE_CONTROVERSIAL); dismiss(); }); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSource.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSource.java index 80e024d6..261c390b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSource.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSource.java @@ -1,11 +1,12 @@ package ml.docilealligator.infinityforreddit; +import androidx.annotation.NonNull; +import androidx.lifecycle.MutableLiveData; +import androidx.paging.PageKeyedDataSource; + import java.util.ArrayList; import SubredditDatabase.SubredditData; -import androidx.annotation.NonNull; -import androidx.lifecycle.MutableLiveData; -import androidx.paging.PageKeyedDataSource; import retrofit2.Retrofit; public class SubredditListingDataSource extends PageKeyedDataSource { @@ -15,6 +16,7 @@ public class SubredditListingDataSource extends PageKeyedDataSource paginationNetworkStateLiveData; @@ -25,10 +27,11 @@ public class SubredditListingDataSource extends PageKeyedDataSource params; private LoadCallback callback; - SubredditListingDataSource(Retrofit retrofit, String query, + SubredditListingDataSource(Retrofit retrofit, String query, String sortType, OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) { this.retrofit = retrofit; this.query = query; + this.sortType = sortType; this.onSubredditListingDataFetchedCallback = onSubredditListingDataFetchedCallback; paginationNetworkStateLiveData = new MutableLiveData(); initialLoadStateLiveData = new MutableLiveData(); @@ -49,7 +52,7 @@ public class SubredditListingDataSource extends PageKeyedDataSource subredditData, String after) { if(subredditData.size() == 0) { @@ -83,7 +86,7 @@ public class SubredditListingDataSource extends PageKeyedDataSource subredditData, String after) { callback.onResult(subredditData, after); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSourceFactory.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSourceFactory.java index bc64c052..f31cff7a 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSourceFactory.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSourceFactory.java @@ -8,15 +8,17 @@ import retrofit2.Retrofit; public class SubredditListingDataSourceFactory extends DataSource.Factory { private Retrofit retrofit; private String query; + private String sortType; private SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback; private SubredditListingDataSource subredditListingDataSource; private MutableLiveData subredditListingDataSourceMutableLiveData; - SubredditListingDataSourceFactory(Retrofit retrofit, String query, + SubredditListingDataSourceFactory(Retrofit retrofit, String query, String sortType, SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) { this.retrofit = retrofit; this.query = query; + this.sortType = sortType; this.onSubredditListingDataFetchedCallback = onSubredditListingDataFetchedCallback; subredditListingDataSourceMutableLiveData = new MutableLiveData<>(); } @@ -25,7 +27,7 @@ public class SubredditListingDataSourceFactory extends DataSource.Factory { @Override public DataSource create() { subredditListingDataSource = new SubredditListingDataSource(retrofit, - query, onSubredditListingDataFetchedCallback); + query, sortType, onSubredditListingDataFetchedCallback); subredditListingDataSourceMutableLiveData.postValue(subredditListingDataSource); return subredditListingDataSource; } @@ -37,4 +39,8 @@ public class SubredditListingDataSourceFactory extends DataSource.Factory { SubredditListingDataSource getSubredditListingDataSource() { return subredditListingDataSource; } + + void changeSortType(String sortType) { + this.sortType = sortType; + } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingFragment.java index 1972be71..2168bddd 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingFragment.java @@ -10,6 +10,12 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProviders; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.bumptech.glide.Glide; import com.lsjwzh.widget.materialloadingprogressbar.CircleProgressBar; @@ -17,11 +23,6 @@ import javax.inject.Inject; import javax.inject.Named; import SubscribedSubredditDatabase.SubscribedSubredditRoomDatabase; -import androidx.coordinatorlayout.widget.CoordinatorLayout; -import androidx.fragment.app.Fragment; -import androidx.lifecycle.ViewModelProviders; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import butterknife.BindView; import butterknife.ButterKnife; import retrofit2.Retrofit; @@ -79,7 +80,7 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun mQuery = getArguments().getString(QUERY_KEY); SubredditListingViewModel.Factory factory = new SubredditListingViewModel.Factory(mRetrofit, mQuery, - new SubredditListingDataSource.OnSubredditListingDataFetchedCallback() { + PostDataSource.SORT_TYPE_RELEVANCE, new SubredditListingDataSource.OnSubredditListingDataFetchedCallback() { @Override public void hasSubreddit() { mFetchSubredditListingInfoLinearLayout.setVisibility(View.GONE); @@ -87,11 +88,8 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun @Override public void noSubreddit() { - mFetchSubredditListingInfoLinearLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - //Do nothing - } + mFetchSubredditListingInfoLinearLayout.setOnClickListener(view -> { + //Do nothing }); showErrorView(R.string.no_subreddits); } @@ -135,6 +133,10 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun } } + void changeSortType(String sortType) { + mSubredditListingViewModel.changeSortType(sortType); + } + @Override public void refresh() { mSubredditListingViewModel.refresh(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingViewModel.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingViewModel.java index 1ebb2dc3..3c304b90 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingViewModel.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingViewModel.java @@ -1,14 +1,16 @@ package ml.docilealligator.infinityforreddit; -import SubredditDatabase.SubredditData; import androidx.annotation.NonNull; import androidx.arch.core.util.Function; import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.Transformations; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; import androidx.paging.LivePagedListBuilder; import androidx.paging.PagedList; + +import SubredditDatabase.SubredditData; import retrofit2.Retrofit; public class SubredditListingViewModel extends ViewModel { @@ -16,22 +18,30 @@ public class SubredditListingViewModel extends ViewModel { private LiveData paginationNetworkState; private LiveData initialLoadingState; private LiveData> subreddits; + private MutableLiveData sortTypeLiveData; - SubredditListingViewModel(Retrofit retrofit, String query, + SubredditListingViewModel(Retrofit retrofit, String query, String sortType, SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) { - subredditListingDataSourceFactory = new SubredditListingDataSourceFactory(retrofit, query, onSubredditListingDataFetchedCallback); + subredditListingDataSourceFactory = new SubredditListingDataSourceFactory(retrofit, query, sortType, onSubredditListingDataFetchedCallback); initialLoadingState = Transformations.switchMap(subredditListingDataSourceFactory.getSubredditListingDataSourceMutableLiveData(), (Function>) SubredditListingDataSource::getInitialLoadStateLiveData); paginationNetworkState = Transformations.switchMap(subredditListingDataSourceFactory.getSubredditListingDataSourceMutableLiveData(), (Function>) SubredditListingDataSource::getPaginationNetworkStateLiveData); + + sortTypeLiveData = new MutableLiveData<>(); + sortTypeLiveData.postValue(sortType); + PagedList.Config pagedListConfig = (new PagedList.Config.Builder()) .setEnablePlaceholders(false) .setPageSize(25) .build(); - subreddits = (new LivePagedListBuilder(subredditListingDataSourceFactory, pagedListConfig)).build(); + subreddits = Transformations.switchMap(sortTypeLiveData, sort -> { + subredditListingDataSourceFactory.changeSortType(sortTypeLiveData.getValue()); + return new LivePagedListBuilder(subredditListingDataSourceFactory, pagedListConfig).build(); + }); } LiveData> getSubreddits() { @@ -58,22 +68,28 @@ public class SubredditListingViewModel extends ViewModel { subredditListingDataSourceFactory.getSubredditListingDataSource().retryLoadingMore(); } + void changeSortType(String sortType) { + sortTypeLiveData.postValue(sortType); + } + public static class Factory extends ViewModelProvider.NewInstanceFactory { private Retrofit retrofit; private String query; + private String sortType; private SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback; - public Factory(Retrofit retrofit, String query, + public Factory(Retrofit retrofit, String query, String sortType, SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) { this.retrofit = retrofit; this.query = query; + this.sortType = sortType; this.onSubredditListingDataFetchedCallback = onSubredditListingDataFetchedCallback; } @NonNull @Override public T create(@NonNull Class modelClass) { - return (T) new SubredditListingViewModel(retrofit, query, onSubredditListingDataFetchedCallback); + return (T) new SubredditListingViewModel(retrofit, query, sortType, onSubredditListingDataFetchedCallback); } } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSource.java b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSource.java index 9273c32b..e2873052 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSource.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSource.java @@ -1,11 +1,12 @@ package ml.docilealligator.infinityforreddit; +import androidx.annotation.NonNull; +import androidx.lifecycle.MutableLiveData; +import androidx.paging.PageKeyedDataSource; + import java.util.ArrayList; import User.UserData; -import androidx.annotation.NonNull; -import androidx.lifecycle.MutableLiveData; -import androidx.paging.PageKeyedDataSource; import retrofit2.Retrofit; public class UserListingDataSource extends PageKeyedDataSource { @@ -13,8 +14,10 @@ public class UserListingDataSource extends PageKeyedDataSource void hasUser(); void noUser(); } + private Retrofit retrofit; private String query; + private String sortType; private UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback; private MutableLiveData paginationNetworkStateLiveData; @@ -25,10 +28,11 @@ public class UserListingDataSource extends PageKeyedDataSource private PageKeyedDataSource.LoadParams params; private PageKeyedDataSource.LoadCallback callback; - UserListingDataSource(Retrofit retrofit, String query, + UserListingDataSource(Retrofit retrofit, String query, String sortType, UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) { this.retrofit = retrofit; this.query = query; + this.sortType = sortType; this.onUserListingDataFetchedCallback = onUserListingDataFetchedCallback; paginationNetworkStateLiveData = new MutableLiveData(); initialLoadStateLiveData = new MutableLiveData(); @@ -49,7 +53,7 @@ public class UserListingDataSource extends PageKeyedDataSource initialLoadStateLiveData.postValue(NetworkState.LOADING); - FetchUserData.fetchUserListingData(retrofit, query, null, new FetchUserData.FetchUserListingDataListener() { + FetchUserData.fetchUserListingData(retrofit, query, null, sortType, new FetchUserData.FetchUserListingDataListener() { @Override public void onFetchUserListingDataSuccess(ArrayList UserData, String after) { if(UserData.size() == 0) { @@ -83,7 +87,7 @@ public class UserListingDataSource extends PageKeyedDataSource return; } - FetchUserData.fetchUserListingData(retrofit, query, params.key, new FetchUserData.FetchUserListingDataListener() { + FetchUserData.fetchUserListingData(retrofit, query, params.key, sortType, new FetchUserData.FetchUserListingDataListener() { @Override public void onFetchUserListingDataSuccess(ArrayList UserData, String after) { callback.onResult(UserData, after); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSourceFactory.java b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSourceFactory.java index 99e1fcfb..c014687c 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSourceFactory.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSourceFactory.java @@ -8,15 +8,17 @@ import retrofit2.Retrofit; public class UserListingDataSourceFactory extends DataSource.Factory { private Retrofit retrofit; private String query; + private String sortType; private UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback; private UserListingDataSource userListingDataSource; private MutableLiveData userListingDataSourceMutableLiveData; - UserListingDataSourceFactory(Retrofit retrofit, String query, + UserListingDataSourceFactory(Retrofit retrofit, String query, String sortType, UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) { this.retrofit = retrofit; this.query = query; + this.sortType = sortType; this.onUserListingDataFetchedCallback = onUserListingDataFetchedCallback; userListingDataSourceMutableLiveData = new MutableLiveData<>(); } @@ -25,7 +27,7 @@ public class UserListingDataSourceFactory extends DataSource.Factory { @Override public DataSource create() { userListingDataSource = new UserListingDataSource(retrofit, - query, onUserListingDataFetchedCallback); + query, sortType, onUserListingDataFetchedCallback); userListingDataSourceMutableLiveData.postValue(userListingDataSource); return userListingDataSource; } @@ -37,4 +39,8 @@ public class UserListingDataSourceFactory extends DataSource.Factory { UserListingDataSource getUserListingDataSource() { return userListingDataSource; } + + void changeSortType(String sortType) { + this.sortType = sortType; + } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingFragment.java index 78153fdc..4b111a51 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingFragment.java @@ -1,7 +1,6 @@ package ml.docilealligator.infinityforreddit; -import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.view.LayoutInflater; @@ -11,6 +10,12 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProviders; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.bumptech.glide.Glide; import com.lsjwzh.widget.materialloadingprogressbar.CircleProgressBar; @@ -18,11 +23,6 @@ import javax.inject.Inject; import javax.inject.Named; import SubscribedUserDatabase.SubscribedUserRoomDatabase; -import androidx.coordinatorlayout.widget.CoordinatorLayout; -import androidx.fragment.app.Fragment; -import androidx.lifecycle.ViewModelProviders; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import butterknife.BindView; import butterknife.ButterKnife; import retrofit2.Retrofit; @@ -85,11 +85,8 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato mQuery = getArguments().getString(QUERY_KEY); - String accessToken = getActivity().getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE) - .getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, ""); - UserListingViewModel.Factory factory = new UserListingViewModel.Factory(mRetrofit, mQuery, - new UserListingDataSource.OnUserListingDataFetchedCallback() { + PostDataSource.SORT_TYPE_RELEVANCE, new UserListingDataSource.OnUserListingDataFetchedCallback() { @Override public void hasUser() { mFetchUserListingInfoLinearLayout.setVisibility(View.GONE); @@ -97,11 +94,8 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato @Override public void noUser() { - mFetchUserListingInfoLinearLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - //Do nothing - } + mFetchUserListingInfoLinearLayout.setOnClickListener(view -> { + //Do nothing }); showErrorView(R.string.no_users); } @@ -145,6 +139,10 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato } } + void changeSortType(String sortType) { + mUserListingViewModel.changeSortType(sortType); + } + @Override public void refresh() { mUserListingViewModel.refresh(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingViewModel.java b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingViewModel.java index 6a1804db..45317ccf 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingViewModel.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingViewModel.java @@ -1,41 +1,51 @@ package ml.docilealligator.infinityforreddit; -import User.UserData; import androidx.annotation.NonNull; import androidx.arch.core.util.Function; import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.Transformations; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; import androidx.paging.LivePagedListBuilder; import androidx.paging.PagedList; + +import User.UserData; import retrofit2.Retrofit; public class UserListingViewModel extends ViewModel { private UserListingDataSourceFactory UserListingDataSourceFactory; private LiveData paginationNetworkState; private LiveData initialLoadingState; - private LiveData> Users; + private LiveData> users; + private MutableLiveData sortTypeLiveData; - UserListingViewModel(Retrofit retrofit, String query, + UserListingViewModel(Retrofit retrofit, String query, String sortType, UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) { - UserListingDataSourceFactory = new UserListingDataSourceFactory(retrofit, query, onUserListingDataFetchedCallback); + UserListingDataSourceFactory = new UserListingDataSourceFactory(retrofit, query, sortType, onUserListingDataFetchedCallback); initialLoadingState = Transformations.switchMap(UserListingDataSourceFactory.getUserListingDataSourceMutableLiveData(), (Function>) UserListingDataSource::getInitialLoadStateLiveData); paginationNetworkState = Transformations.switchMap(UserListingDataSourceFactory.getUserListingDataSourceMutableLiveData(), (Function>) UserListingDataSource::getPaginationNetworkStateLiveData); + + sortTypeLiveData = new MutableLiveData<>(); + sortTypeLiveData.postValue(sortType); + PagedList.Config pagedListConfig = (new PagedList.Config.Builder()) .setEnablePlaceholders(false) .setPageSize(25) .build(); - Users = (new LivePagedListBuilder(UserListingDataSourceFactory, pagedListConfig)).build(); + users = Transformations.switchMap(sortTypeLiveData, sort -> { + UserListingDataSourceFactory.changeSortType(sortTypeLiveData.getValue()); + return (new LivePagedListBuilder(UserListingDataSourceFactory, pagedListConfig)).build(); + }); } LiveData> getUsers() { - return Users; + return users; } LiveData getPaginationNetworkState() { @@ -58,22 +68,28 @@ public class UserListingViewModel extends ViewModel { UserListingDataSourceFactory.getUserListingDataSource().retryLoadingMore(); } + void changeSortType(String sortType) { + sortTypeLiveData.postValue(sortType); + } + public static class Factory extends ViewModelProvider.NewInstanceFactory { private Retrofit retrofit; private String query; + private String sortType; private UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback; - public Factory(Retrofit retrofit, String query, + public Factory(Retrofit retrofit, String query, String sortType, UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) { this.retrofit = retrofit; this.query = query; + this.sortType = sortType; this.onUserListingDataFetchedCallback = onUserListingDataFetchedCallback; } @NonNull @Override public T create(@NonNull Class modelClass) { - return (T) new UserListingViewModel(retrofit, query, onUserListingDataFetchedCallback); + return (T) new UserListingViewModel(retrofit, query, sortType, onUserListingDataFetchedCallback); } } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java index 9996a4af..ef58c820 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java @@ -253,7 +253,13 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So }); if(savedInstanceState == null) { - replaceFragment(PostDataSource.SORT_TYPE_BEST); + mFragment = new PostFragment(); + Bundle bundle = new Bundle(); + bundle.putString(PostFragment.EXTRA_SUBREDDIT_NAME, subredditName); + bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostDataSource.TYPE_SUBREDDIT); + bundle.putString(PostFragment.EXTRA_SORT_TYPE, PostDataSource.SORT_TYPE_BEST); + mFragment.setArguments(bundle); + getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit(); } else { mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE_KEY); if(mFragment == null) { @@ -330,16 +336,6 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So return false; } - private void replaceFragment(String sortType) { - mFragment = new PostFragment(); - Bundle bundle = new Bundle(); - bundle.putString(PostFragment.EXTRA_SUBREDDIT_NAME, subredditName); - bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostDataSource.TYPE_SUBREDDIT); - bundle.putString(PostFragment.EXTRA_SORT_TYPE, sortType); - mFragment.setArguments(bundle); - getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit(); - } - @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); @@ -353,7 +349,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So @Override public void sortTypeSelected(String sortType) { - replaceFragment(sortType); + ((PostFragment) mFragment).changeSortType(sortType); } @Override diff --git a/app/src/main/res/layout/fragment_post_type_bottom_sheet.xml b/app/src/main/res/layout/fragment_post_type_bottom_sheet.xml index 1e3659d1..81f20963 100644 --- a/app/src/main/res/layout/fragment_post_type_bottom_sheet.xml +++ b/app/src/main/res/layout/fragment_post_type_bottom_sheet.xml @@ -1,18 +1,9 @@ - - + android:paddingBottom="8dp" + android:orientation="vertical"> @@ -38,7 +29,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:text="@string/bottom_sheet_post_text" /> + android:text="@string/bottom_sheet_post_text" + android:textColor="@color/primaryTextColor" /> @@ -58,7 +50,7 @@ android:layout_width="18dp" android:layout_height="18dp" android:layout_gravity="center_vertical" - android:layout_marginEnd="32dp" + android:layout_marginEnd="48dp" android:src="@drawable/ic_link" android:tint="@color/primaryTextColor" /> @@ -66,7 +58,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:text="@string/bottom_sheet_post_link" /> + android:text="@string/bottom_sheet_post_link" + android:textColor="@color/primaryTextColor" /> @@ -86,7 +79,7 @@ android:layout_width="18dp" android:layout_height="18dp" android:layout_gravity="center_vertical" - android:layout_marginEnd="32dp" + android:layout_marginEnd="48dp" android:src="@drawable/ic_menu_gallery" android:tint="@color/primaryTextColor" /> @@ -94,7 +87,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:text="@string/bottom_sheet_post_image" /> + android:text="@string/bottom_sheet_post_image" + android:textColor="@color/primaryTextColor" /> @@ -114,7 +108,7 @@ @@ -123,7 +117,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:text="@string/bottom_sheet_post_video" /> + android:text="@string/bottom_sheet_post_video" + android:textColor="@color/primaryTextColor" /> diff --git a/app/src/main/res/layout/fragment_search_post_sort_type_bottom_sheet.xml b/app/src/main/res/layout/fragment_search_post_sort_type_bottom_sheet.xml new file mode 100644 index 00000000..1db23d62 --- /dev/null +++ b/app/src/main/res/layout/fragment_search_post_sort_type_bottom_sheet.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_search_user_and_subreddit_sort_type_bottom_sheet.xml b/app/src/main/res/layout/fragment_search_user_and_subreddit_sort_type_bottom_sheet.xml new file mode 100644 index 00000000..acc7e65a --- /dev/null +++ b/app/src/main/res/layout/fragment_search_user_and_subreddit_sort_type_bottom_sheet.xml @@ -0,0 +1,36 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_sort_type_bottom_sheet.xml b/app/src/main/res/layout/fragment_sort_type_bottom_sheet.xml index d3977d81..e059a36b 100644 --- a/app/src/main/res/layout/fragment_sort_type_bottom_sheet.xml +++ b/app/src/main/res/layout/fragment_sort_type_bottom_sheet.xml @@ -4,22 +4,12 @@ android:layout_height="match_parent" android:paddingBottom="8dp"> - - + + \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 6b6e8290..a08dfe08 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -23,4 +23,8 @@ #121212 #1565C0 + + #242424 + + #000000 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index a4f27cd2..ff024d93 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -24,5 +24,7 @@ @color/colorPrimaryDark + #FFFFFF + #000000 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index ddc21110..eabd373e 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -7,7 +7,6 @@ 16dp 180dp 16dp - 0dp 0dp 0dp \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 80775602..8be8345e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -142,7 +142,7 @@ Rising Top Controversial - - - Hello blank fragment + Relevance + Comments + Activity