mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-07 11:17:25 +01:00
Sorting in SearchResultActivity is available. Switch DataSource instead of replacing fragments when changing sorting types. Minor bugs fixed.
This commit is contained in:
parent
40fc423b33
commit
111ba8e5fc
Binary file not shown.
Binary file not shown.
@ -2,10 +2,11 @@ package ml.docilealligator.infinityforreddit;
|
|||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import SubredditDatabase.SubredditData;
|
import SubredditDatabase.SubredditData;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
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);
|
RedditAPI api = retrofit.create(RedditAPI.class);
|
||||||
|
|
||||||
Call<String> subredditDataCall = api.searchSubreddits(query, after);
|
Call<String> subredditDataCall = api.searchSubreddits(query, after, sortType);
|
||||||
subredditDataCall.enqueue(new Callback<String>() {
|
subredditDataCall.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
|
@ -2,10 +2,11 @@ package ml.docilealligator.infinityforreddit;
|
|||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import User.UserData;
|
import User.UserData;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Retrofit;
|
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) {
|
FetchUserListingDataListener fetchUserListingDataListener) {
|
||||||
RedditAPI api = retrofit.create(RedditAPI.class);
|
RedditAPI api = retrofit.create(RedditAPI.class);
|
||||||
|
|
||||||
Call<String> userInfo = api.searchUsers(query, after);
|
Call<String> userInfo = api.searchUsers(query, after, sortType);
|
||||||
userInfo.enqueue(new Callback<String>() {
|
userInfo.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
|
@ -114,7 +114,12 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
|
|||||||
startActivityForResult(loginIntent, LOGIN_ACTIVITY_REQUEST_CODE);
|
startActivityForResult(loginIntent, LOGIN_ACTIVITY_REQUEST_CODE);
|
||||||
} else {
|
} else {
|
||||||
if (savedInstanceState == null) {
|
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 {
|
} else {
|
||||||
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE);
|
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE);
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_content_main, mFragment).commit();
|
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()));
|
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() {
|
private void loadUserData() {
|
||||||
if (!mFetchUserInfoSuccess) {
|
if (!mFetchUserInfoSuccess) {
|
||||||
FetchMyInfo.fetchMyInfo(mOauthRetrofit, mAuthInfoSharedPreferences, new FetchMyInfo.FetchUserMyListener() {
|
FetchMyInfo.fetchMyInfo(mOauthRetrofit, mAuthInfoSharedPreferences, new FetchMyInfo.FetchUserMyListener() {
|
||||||
@ -330,7 +326,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sortTypeSelected(String sortType) {
|
public void sortTypeSelected(String sortType) {
|
||||||
replaceFragment(sortType);
|
((PostFragment) mFragment).changeSortType(sortType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -31,6 +31,8 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
static final String SORT_TYPE_RISING = "rising";
|
static final String SORT_TYPE_RISING = "rising";
|
||||||
static final String SORT_TYPE_TOP = "top";
|
static final String SORT_TYPE_TOP = "top";
|
||||||
static final String SORT_TYPE_CONTROVERSIAL = "controversial";
|
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 Retrofit retrofit;
|
||||||
private String accessToken;
|
private String accessToken;
|
||||||
@ -459,7 +461,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
Call<String> getPost;
|
Call<String> getPost;
|
||||||
|
|
||||||
if(subredditName == null) {
|
if(subredditName == null) {
|
||||||
getPost = api.searchPosts(query, null, RedditUtils.getOAuthHeader(accessToken));
|
getPost = api.searchPosts(query, null, sortType, RedditUtils.getOAuthHeader(accessToken));
|
||||||
} else {
|
} else {
|
||||||
getPost = api.searchPostsInSpecificSubreddit(subredditName, query, null, RedditUtils.getOAuthHeader(accessToken));
|
getPost = api.searchPostsInSpecificSubreddit(subredditName, query, null, RedditUtils.getOAuthHeader(accessToken));
|
||||||
}
|
}
|
||||||
@ -467,6 +469,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
getPost.enqueue(new Callback<String>() {
|
getPost.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
|
Log.i("initial", call.request().url().toString());
|
||||||
if(response.isSuccessful()) {
|
if(response.isSuccessful()) {
|
||||||
ParsePost.parsePosts(response.body(), locale, -1,
|
ParsePost.parsePosts(response.body(), locale, -1,
|
||||||
new ParsePost.ParsePostsListingListener() {
|
new ParsePost.ParsePostsListingListener() {
|
||||||
@ -507,7 +510,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
Call<String> getPost;
|
Call<String> getPost;
|
||||||
|
|
||||||
if(subredditName == null) {
|
if(subredditName == null) {
|
||||||
getPost = api.searchPosts(subredditName, params.key, RedditUtils.getOAuthHeader(accessToken));
|
getPost = api.searchPosts(query, params.key, sortType, RedditUtils.getOAuthHeader(accessToken));
|
||||||
} else {
|
} else {
|
||||||
getPost = api.searchPostsInSpecificSubreddit(subredditName, query, params.key, RedditUtils.getOAuthHeader(accessToken));
|
getPost = api.searchPostsInSpecificSubreddit(subredditName, query, params.key, RedditUtils.getOAuthHeader(accessToken));
|
||||||
}
|
}
|
||||||
@ -515,6 +518,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
getPost.enqueue(new Callback<String>() {
|
getPost.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
|
Log.i("after", call.request().url().toString());
|
||||||
if(response.isSuccessful()) {
|
if(response.isSuccessful()) {
|
||||||
ParsePost.parsePosts(response.body(), locale, -1, new ParsePost.ParsePostsListingListener() {
|
ParsePost.parsePosts(response.body(), locale, -1, new ParsePost.ParsePostsListingListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -90,4 +90,8 @@ class PostDataSourceFactory extends DataSource.Factory {
|
|||||||
PostDataSource getPostDataSource() {
|
PostDataSource getPostDataSource() {
|
||||||
return postDataSource;
|
return postDataSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void changeSortType(String sortType) {
|
||||||
|
this.sortType = sortType;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -287,6 +287,10 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
return rootView;
|
return rootView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void changeSortType(String sortType) {
|
||||||
|
mPostViewModel.changeSortType(sortType);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(@NonNull Context context) {
|
public void onAttach(@NonNull Context context) {
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
|
@ -3,6 +3,7 @@ package ml.docilealligator.infinityforreddit;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.arch.core.util.Function;
|
import androidx.arch.core.util.Function;
|
||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
|
import androidx.lifecycle.MutableLiveData;
|
||||||
import androidx.lifecycle.Transformations;
|
import androidx.lifecycle.Transformations;
|
||||||
import androidx.lifecycle.ViewModel;
|
import androidx.lifecycle.ViewModel;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
@ -18,6 +19,7 @@ public class PostViewModel extends ViewModel {
|
|||||||
private LiveData<NetworkState> paginationNetworkState;
|
private LiveData<NetworkState> paginationNetworkState;
|
||||||
private LiveData<NetworkState> initialLoadingState;
|
private LiveData<NetworkState> initialLoadingState;
|
||||||
private LiveData<PagedList<Post>> posts;
|
private LiveData<PagedList<Post>> posts;
|
||||||
|
private MutableLiveData<String> sortTypeLiveData;
|
||||||
|
|
||||||
public PostViewModel(Retrofit retrofit, String accessToken, Locale locale, int postType, String sortType,
|
public PostViewModel(Retrofit retrofit, String accessToken, Locale locale, int postType, String sortType,
|
||||||
PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
|
PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
|
||||||
@ -27,13 +29,20 @@ public class PostViewModel extends ViewModel {
|
|||||||
(Function<PostDataSource, LiveData<NetworkState>>) PostDataSource::getInitialLoadStateLiveData);
|
(Function<PostDataSource, LiveData<NetworkState>>) PostDataSource::getInitialLoadStateLiveData);
|
||||||
paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
||||||
(Function<PostDataSource, LiveData<NetworkState>>) PostDataSource::getPaginationNetworkStateLiveData);
|
(Function<PostDataSource, LiveData<NetworkState>>) PostDataSource::getPaginationNetworkStateLiveData);
|
||||||
|
|
||||||
|
sortTypeLiveData = new MutableLiveData<>();
|
||||||
|
sortTypeLiveData.postValue(sortType);
|
||||||
|
|
||||||
PagedList.Config pagedListConfig =
|
PagedList.Config pagedListConfig =
|
||||||
(new PagedList.Config.Builder())
|
(new PagedList.Config.Builder())
|
||||||
.setEnablePlaceholders(false)
|
.setEnablePlaceholders(false)
|
||||||
.setPageSize(25)
|
.setPageSize(25)
|
||||||
.build();
|
.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,
|
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);
|
postDataSourceFactory = new PostDataSourceFactory(retrofit, accessToken, locale, subredditName, postType, sortType, onPostFetchedCallback);
|
||||||
|
|
||||||
initialLoadingState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
initialLoadingState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
||||||
dataSource -> dataSource.getInitialLoadStateLiveData());
|
(Function<PostDataSource, LiveData<NetworkState>>) PostDataSource::getInitialLoadStateLiveData);
|
||||||
paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
||||||
dataSource -> dataSource.getPaginationNetworkStateLiveData());
|
(Function<PostDataSource, LiveData<NetworkState>>) PostDataSource::getPaginationNetworkStateLiveData);
|
||||||
|
|
||||||
|
sortTypeLiveData = new MutableLiveData<>();
|
||||||
|
sortTypeLiveData.postValue(sortType);
|
||||||
|
|
||||||
PagedList.Config pagedListConfig =
|
PagedList.Config pagedListConfig =
|
||||||
(new PagedList.Config.Builder())
|
(new PagedList.Config.Builder())
|
||||||
@ -51,7 +63,10 @@ public class PostViewModel extends ViewModel {
|
|||||||
.setPageSize(25)
|
.setPageSize(25)
|
||||||
.build();
|
.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,
|
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(),
|
initialLoadingState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
||||||
dataSource -> dataSource.getInitialLoadStateLiveData());
|
dataSource -> dataSource.getInitialLoadStateLiveData());
|
||||||
paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
||||||
dataSource -> dataSource.getPaginationNetworkStateLiveData());
|
(Function<PostDataSource, LiveData<NetworkState>>) PostDataSource::getPaginationNetworkStateLiveData);
|
||||||
|
|
||||||
PagedList.Config pagedListConfig =
|
PagedList.Config pagedListConfig =
|
||||||
(new PagedList.Config.Builder())
|
(new PagedList.Config.Builder())
|
||||||
@ -82,13 +97,19 @@ public class PostViewModel extends ViewModel {
|
|||||||
paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
|
||||||
dataSource -> dataSource.getPaginationNetworkStateLiveData());
|
dataSource -> dataSource.getPaginationNetworkStateLiveData());
|
||||||
|
|
||||||
|
sortTypeLiveData = new MutableLiveData<>();
|
||||||
|
sortTypeLiveData.postValue(sortType);
|
||||||
|
|
||||||
PagedList.Config pagedListConfig =
|
PagedList.Config pagedListConfig =
|
||||||
(new PagedList.Config.Builder())
|
(new PagedList.Config.Builder())
|
||||||
.setEnablePlaceholders(false)
|
.setEnablePlaceholders(false)
|
||||||
.setPageSize(25)
|
.setPageSize(25)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
posts = (new LivePagedListBuilder(postDataSourceFactory, pagedListConfig)).build();
|
posts = Transformations.switchMap(sortTypeLiveData, sort -> {
|
||||||
|
postDataSourceFactory.changeSortType(sortTypeLiveData.getValue());
|
||||||
|
return (new LivePagedListBuilder(postDataSourceFactory, pagedListConfig)).build();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
LiveData<PagedList<Post>> getPosts() {
|
LiveData<PagedList<Post>> getPosts() {
|
||||||
@ -115,6 +136,10 @@ public class PostViewModel extends ViewModel {
|
|||||||
postDataSourceFactory.getPostDataSource().retryLoadingMore();
|
postDataSourceFactory.getPostDataSource().retryLoadingMore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void changeSortType(String sortType) {
|
||||||
|
sortTypeLiveData.postValue(sortType);
|
||||||
|
}
|
||||||
|
|
||||||
public static class Factory extends ViewModelProvider.NewInstanceFactory {
|
public static class Factory extends ViewModelProvider.NewInstanceFactory {
|
||||||
private Retrofit retrofit;
|
private Retrofit retrofit;
|
||||||
private String accessToken;
|
private String accessToken;
|
||||||
|
@ -66,13 +66,13 @@ public interface RedditAPI {
|
|||||||
Call<String> getInfo(@Path("subredditNamePrefixed") String subredditNamePrefixed, @Query("id") String id);
|
Call<String> getInfo(@Path("subredditNamePrefixed") String subredditNamePrefixed, @Query("id") String id);
|
||||||
|
|
||||||
@GET("subreddits/search.json?raw_json=1&include_over_18=on")
|
@GET("subreddits/search.json?raw_json=1&include_over_18=on")
|
||||||
Call<String> searchSubreddits(@Query("q") String subredditName, @Query("after") String after);
|
Call<String> 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")
|
@GET("search.json?raw_json=1&type=user&include_over_18=on")
|
||||||
Call<String> searchUsers(@Query("q") String profileName, @Query("after") String after);
|
Call<String> 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")
|
@GET("search.json?raw_json=1&type=link&include_over_18=on")
|
||||||
Call<String> searchPosts(@Query("q") String query, @Query("after") String after,
|
Call<String> searchPosts(@Query("q") String query, @Query("after") String after, @Query("sort") String sort,
|
||||||
@HeaderMap Map<String, String> headers);
|
@HeaderMap Map<String, String> headers);
|
||||||
|
|
||||||
@GET("r/{subredditName}/search.json?raw_json=1&type=link&restrict_sr=true&include_over_18=on")
|
@GET("r/{subredditName}/search.json?raw_json=1&type=link&restrict_sr=true&include_over_18=on")
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -19,7 +19,8 @@ import com.google.android.material.tabs.TabLayout;
|
|||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
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_QUERY = "QK";
|
||||||
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
||||||
|
|
||||||
@ -32,6 +33,9 @@ public class SearchResultActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
private SectionsPagerAdapter sectionsPagerAdapter;
|
private SectionsPagerAdapter sectionsPagerAdapter;
|
||||||
|
|
||||||
|
private SearchPostSortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment;
|
||||||
|
private SearchUserAndSubredditSortTypeBottomSheetFragment searchUserAndSubredditSortTypeBottomSheetFragment;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@ -45,8 +49,16 @@ public class SearchResultActivity extends AppCompatActivity {
|
|||||||
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
||||||
viewPager.setAdapter(sectionsPagerAdapter);
|
viewPager.setAdapter(sectionsPagerAdapter);
|
||||||
viewPager.setOffscreenPageLimit(2);
|
viewPager.setOffscreenPageLimit(2);
|
||||||
|
|
||||||
tabLayout.setupWithViewPager(viewPager);
|
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
|
// Get the intent, verify the action and get the query
|
||||||
Intent intent = getIntent();
|
Intent intent = getIntent();
|
||||||
String query = intent.getExtras().getString(EXTRA_QUERY);
|
String query = intent.getExtras().getString(EXTRA_QUERY);
|
||||||
@ -73,6 +85,21 @@ public class SearchResultActivity extends AppCompatActivity {
|
|||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
onBackPressed();
|
onBackPressed();
|
||||||
return true;
|
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:
|
case R.id.action_search_search_result_activity:
|
||||||
Intent intent = new Intent(this, SearchActivity.class);
|
Intent intent = new Intent(this, SearchActivity.class);
|
||||||
finish();
|
finish();
|
||||||
@ -85,7 +112,18 @@ public class SearchResultActivity extends AppCompatActivity {
|
|||||||
return super.onOptionsItemSelected(item);
|
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 class SectionsPagerAdapter extends FragmentPagerAdapter {
|
||||||
|
|
||||||
private PostFragment postFragment;
|
private PostFragment postFragment;
|
||||||
private SubredditListingFragment subredditListingFragment;
|
private SubredditListingFragment subredditListingFragment;
|
||||||
private UserListingFragment userListingFragment;
|
private UserListingFragment userListingFragment;
|
||||||
@ -102,7 +140,7 @@ public class SearchResultActivity extends AppCompatActivity {
|
|||||||
PostFragment mFragment = new PostFragment();
|
PostFragment mFragment = new PostFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostDataSource.TYPE_SEARCH);
|
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_SUBREDDIT_NAME, mSubredditName);
|
||||||
bundle.putString(PostFragment.EXTRA_QUERY, mQuery);
|
bundle.putString(PostFragment.EXTRA_QUERY, mQuery);
|
||||||
mFragment.setArguments(bundle);
|
mFragment.setArguments(bundle);
|
||||||
@ -115,8 +153,7 @@ public class SearchResultActivity extends AppCompatActivity {
|
|||||||
mFragment.setArguments(bundle);
|
mFragment.setArguments(bundle);
|
||||||
return mFragment;
|
return mFragment;
|
||||||
}
|
}
|
||||||
default:
|
default: {
|
||||||
{
|
|
||||||
UserListingFragment mFragment = new UserListingFragment();
|
UserListingFragment mFragment = new UserListingFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putString(UserListingFragment.QUERY_KEY, mQuery);
|
bundle.putString(UserListingFragment.QUERY_KEY, mQuery);
|
||||||
@ -162,6 +199,19 @@ public class SearchResultActivity extends AppCompatActivity {
|
|||||||
return fragment;
|
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() {
|
public void refresh() {
|
||||||
if(postFragment != null) {
|
if(postFragment != null) {
|
||||||
((FragmentCommunicator) postFragment).refresh();
|
((FragmentCommunicator) postFragment).refresh();
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -78,7 +78,7 @@ public class SortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragmen
|
|||||||
});
|
});
|
||||||
|
|
||||||
controversialTypeTextView.setOnClickListener(view -> {
|
controversialTypeTextView.setOnClickListener(view -> {
|
||||||
((SortTypeSelectionCallback) activity).sortTypeSelected(PostDataSource.SORT_TYPE_BEST);
|
((SortTypeSelectionCallback) activity).sortTypeSelected(PostDataSource.SORT_TYPE_CONTROVERSIAL);
|
||||||
dismiss();
|
dismiss();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
package ml.docilealligator.infinityforreddit;
|
package ml.docilealligator.infinityforreddit;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
import androidx.paging.PageKeyedDataSource;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import SubredditDatabase.SubredditData;
|
import SubredditDatabase.SubredditData;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.lifecycle.MutableLiveData;
|
|
||||||
import androidx.paging.PageKeyedDataSource;
|
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class SubredditListingDataSource extends PageKeyedDataSource<String, SubredditData> {
|
public class SubredditListingDataSource extends PageKeyedDataSource<String, SubredditData> {
|
||||||
@ -15,6 +16,7 @@ public class SubredditListingDataSource extends PageKeyedDataSource<String, Subr
|
|||||||
}
|
}
|
||||||
private Retrofit retrofit;
|
private Retrofit retrofit;
|
||||||
private String query;
|
private String query;
|
||||||
|
private String sortType;
|
||||||
private OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback;
|
private OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback;
|
||||||
|
|
||||||
private MutableLiveData<NetworkState> paginationNetworkStateLiveData;
|
private MutableLiveData<NetworkState> paginationNetworkStateLiveData;
|
||||||
@ -25,10 +27,11 @@ public class SubredditListingDataSource extends PageKeyedDataSource<String, Subr
|
|||||||
private LoadParams<String> params;
|
private LoadParams<String> params;
|
||||||
private LoadCallback<String, SubredditData> callback;
|
private LoadCallback<String, SubredditData> callback;
|
||||||
|
|
||||||
SubredditListingDataSource(Retrofit retrofit, String query,
|
SubredditListingDataSource(Retrofit retrofit, String query, String sortType,
|
||||||
OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) {
|
OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) {
|
||||||
this.retrofit = retrofit;
|
this.retrofit = retrofit;
|
||||||
this.query = query;
|
this.query = query;
|
||||||
|
this.sortType = sortType;
|
||||||
this.onSubredditListingDataFetchedCallback = onSubredditListingDataFetchedCallback;
|
this.onSubredditListingDataFetchedCallback = onSubredditListingDataFetchedCallback;
|
||||||
paginationNetworkStateLiveData = new MutableLiveData();
|
paginationNetworkStateLiveData = new MutableLiveData();
|
||||||
initialLoadStateLiveData = new MutableLiveData();
|
initialLoadStateLiveData = new MutableLiveData();
|
||||||
@ -49,7 +52,7 @@ public class SubredditListingDataSource extends PageKeyedDataSource<String, Subr
|
|||||||
|
|
||||||
initialLoadStateLiveData.postValue(NetworkState.LOADING);
|
initialLoadStateLiveData.postValue(NetworkState.LOADING);
|
||||||
|
|
||||||
FetchSubredditData.fetchSubredditListingData(retrofit, query, null, new FetchSubredditData.FetchSubredditListingDataListener() {
|
FetchSubredditData.fetchSubredditListingData(retrofit, query, null, sortType, new FetchSubredditData.FetchSubredditListingDataListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onFetchSubredditListingDataSuccess(ArrayList<SubredditData> subredditData, String after) {
|
public void onFetchSubredditListingDataSuccess(ArrayList<SubredditData> subredditData, String after) {
|
||||||
if(subredditData.size() == 0) {
|
if(subredditData.size() == 0) {
|
||||||
@ -83,7 +86,7 @@ public class SubredditListingDataSource extends PageKeyedDataSource<String, Subr
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FetchSubredditData.fetchSubredditListingData(retrofit, query, params.key, new FetchSubredditData.FetchSubredditListingDataListener() {
|
FetchSubredditData.fetchSubredditListingData(retrofit, query, params.key, sortType, new FetchSubredditData.FetchSubredditListingDataListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onFetchSubredditListingDataSuccess(ArrayList<SubredditData> subredditData, String after) {
|
public void onFetchSubredditListingDataSuccess(ArrayList<SubredditData> subredditData, String after) {
|
||||||
callback.onResult(subredditData, after);
|
callback.onResult(subredditData, after);
|
||||||
|
@ -8,15 +8,17 @@ import retrofit2.Retrofit;
|
|||||||
public class SubredditListingDataSourceFactory extends DataSource.Factory {
|
public class SubredditListingDataSourceFactory extends DataSource.Factory {
|
||||||
private Retrofit retrofit;
|
private Retrofit retrofit;
|
||||||
private String query;
|
private String query;
|
||||||
|
private String sortType;
|
||||||
private SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback;
|
private SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback;
|
||||||
|
|
||||||
private SubredditListingDataSource subredditListingDataSource;
|
private SubredditListingDataSource subredditListingDataSource;
|
||||||
private MutableLiveData<SubredditListingDataSource> subredditListingDataSourceMutableLiveData;
|
private MutableLiveData<SubredditListingDataSource> subredditListingDataSourceMutableLiveData;
|
||||||
|
|
||||||
SubredditListingDataSourceFactory(Retrofit retrofit, String query,
|
SubredditListingDataSourceFactory(Retrofit retrofit, String query, String sortType,
|
||||||
SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) {
|
SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) {
|
||||||
this.retrofit = retrofit;
|
this.retrofit = retrofit;
|
||||||
this.query = query;
|
this.query = query;
|
||||||
|
this.sortType = sortType;
|
||||||
this.onSubredditListingDataFetchedCallback = onSubredditListingDataFetchedCallback;
|
this.onSubredditListingDataFetchedCallback = onSubredditListingDataFetchedCallback;
|
||||||
subredditListingDataSourceMutableLiveData = new MutableLiveData<>();
|
subredditListingDataSourceMutableLiveData = new MutableLiveData<>();
|
||||||
}
|
}
|
||||||
@ -25,7 +27,7 @@ public class SubredditListingDataSourceFactory extends DataSource.Factory {
|
|||||||
@Override
|
@Override
|
||||||
public DataSource create() {
|
public DataSource create() {
|
||||||
subredditListingDataSource = new SubredditListingDataSource(retrofit,
|
subredditListingDataSource = new SubredditListingDataSource(retrofit,
|
||||||
query, onSubredditListingDataFetchedCallback);
|
query, sortType, onSubredditListingDataFetchedCallback);
|
||||||
subredditListingDataSourceMutableLiveData.postValue(subredditListingDataSource);
|
subredditListingDataSourceMutableLiveData.postValue(subredditListingDataSource);
|
||||||
return subredditListingDataSource;
|
return subredditListingDataSource;
|
||||||
}
|
}
|
||||||
@ -37,4 +39,8 @@ public class SubredditListingDataSourceFactory extends DataSource.Factory {
|
|||||||
SubredditListingDataSource getSubredditListingDataSource() {
|
SubredditListingDataSource getSubredditListingDataSource() {
|
||||||
return subredditListingDataSource;
|
return subredditListingDataSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void changeSortType(String sortType) {
|
||||||
|
this.sortType = sortType;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,12 @@ import android.widget.ImageView;
|
|||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
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.bumptech.glide.Glide;
|
||||||
import com.lsjwzh.widget.materialloadingprogressbar.CircleProgressBar;
|
import com.lsjwzh.widget.materialloadingprogressbar.CircleProgressBar;
|
||||||
|
|
||||||
@ -17,11 +23,6 @@ import javax.inject.Inject;
|
|||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
import SubscribedSubredditDatabase.SubscribedSubredditRoomDatabase;
|
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.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
@ -79,7 +80,7 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
|
|||||||
mQuery = getArguments().getString(QUERY_KEY);
|
mQuery = getArguments().getString(QUERY_KEY);
|
||||||
|
|
||||||
SubredditListingViewModel.Factory factory = new SubredditListingViewModel.Factory(mRetrofit, mQuery,
|
SubredditListingViewModel.Factory factory = new SubredditListingViewModel.Factory(mRetrofit, mQuery,
|
||||||
new SubredditListingDataSource.OnSubredditListingDataFetchedCallback() {
|
PostDataSource.SORT_TYPE_RELEVANCE, new SubredditListingDataSource.OnSubredditListingDataFetchedCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void hasSubreddit() {
|
public void hasSubreddit() {
|
||||||
mFetchSubredditListingInfoLinearLayout.setVisibility(View.GONE);
|
mFetchSubredditListingInfoLinearLayout.setVisibility(View.GONE);
|
||||||
@ -87,11 +88,8 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void noSubreddit() {
|
public void noSubreddit() {
|
||||||
mFetchSubredditListingInfoLinearLayout.setOnClickListener(new View.OnClickListener() {
|
mFetchSubredditListingInfoLinearLayout.setOnClickListener(view -> {
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
//Do nothing
|
//Do nothing
|
||||||
}
|
|
||||||
});
|
});
|
||||||
showErrorView(R.string.no_subreddits);
|
showErrorView(R.string.no_subreddits);
|
||||||
}
|
}
|
||||||
@ -135,6 +133,10 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void changeSortType(String sortType) {
|
||||||
|
mSubredditListingViewModel.changeSortType(sortType);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void refresh() {
|
public void refresh() {
|
||||||
mSubredditListingViewModel.refresh();
|
mSubredditListingViewModel.refresh();
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
package ml.docilealligator.infinityforreddit;
|
package ml.docilealligator.infinityforreddit;
|
||||||
|
|
||||||
import SubredditDatabase.SubredditData;
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.arch.core.util.Function;
|
import androidx.arch.core.util.Function;
|
||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
|
import androidx.lifecycle.MutableLiveData;
|
||||||
import androidx.lifecycle.Transformations;
|
import androidx.lifecycle.Transformations;
|
||||||
import androidx.lifecycle.ViewModel;
|
import androidx.lifecycle.ViewModel;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.paging.LivePagedListBuilder;
|
import androidx.paging.LivePagedListBuilder;
|
||||||
import androidx.paging.PagedList;
|
import androidx.paging.PagedList;
|
||||||
|
|
||||||
|
import SubredditDatabase.SubredditData;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class SubredditListingViewModel extends ViewModel {
|
public class SubredditListingViewModel extends ViewModel {
|
||||||
@ -16,22 +18,30 @@ public class SubredditListingViewModel extends ViewModel {
|
|||||||
private LiveData<NetworkState> paginationNetworkState;
|
private LiveData<NetworkState> paginationNetworkState;
|
||||||
private LiveData<NetworkState> initialLoadingState;
|
private LiveData<NetworkState> initialLoadingState;
|
||||||
private LiveData<PagedList<SubredditData>> subreddits;
|
private LiveData<PagedList<SubredditData>> subreddits;
|
||||||
|
private MutableLiveData<String> sortTypeLiveData;
|
||||||
|
|
||||||
SubredditListingViewModel(Retrofit retrofit, String query,
|
SubredditListingViewModel(Retrofit retrofit, String query, String sortType,
|
||||||
SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) {
|
SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) {
|
||||||
subredditListingDataSourceFactory = new SubredditListingDataSourceFactory(retrofit, query, onSubredditListingDataFetchedCallback);
|
subredditListingDataSourceFactory = new SubredditListingDataSourceFactory(retrofit, query, sortType, onSubredditListingDataFetchedCallback);
|
||||||
|
|
||||||
initialLoadingState = Transformations.switchMap(subredditListingDataSourceFactory.getSubredditListingDataSourceMutableLiveData(),
|
initialLoadingState = Transformations.switchMap(subredditListingDataSourceFactory.getSubredditListingDataSourceMutableLiveData(),
|
||||||
(Function<SubredditListingDataSource, LiveData<NetworkState>>) SubredditListingDataSource::getInitialLoadStateLiveData);
|
(Function<SubredditListingDataSource, LiveData<NetworkState>>) SubredditListingDataSource::getInitialLoadStateLiveData);
|
||||||
paginationNetworkState = Transformations.switchMap(subredditListingDataSourceFactory.getSubredditListingDataSourceMutableLiveData(),
|
paginationNetworkState = Transformations.switchMap(subredditListingDataSourceFactory.getSubredditListingDataSourceMutableLiveData(),
|
||||||
(Function<SubredditListingDataSource, LiveData<NetworkState>>) SubredditListingDataSource::getPaginationNetworkStateLiveData);
|
(Function<SubredditListingDataSource, LiveData<NetworkState>>) SubredditListingDataSource::getPaginationNetworkStateLiveData);
|
||||||
|
|
||||||
|
sortTypeLiveData = new MutableLiveData<>();
|
||||||
|
sortTypeLiveData.postValue(sortType);
|
||||||
|
|
||||||
PagedList.Config pagedListConfig =
|
PagedList.Config pagedListConfig =
|
||||||
(new PagedList.Config.Builder())
|
(new PagedList.Config.Builder())
|
||||||
.setEnablePlaceholders(false)
|
.setEnablePlaceholders(false)
|
||||||
.setPageSize(25)
|
.setPageSize(25)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
subreddits = (new LivePagedListBuilder(subredditListingDataSourceFactory, pagedListConfig)).build();
|
subreddits = Transformations.switchMap(sortTypeLiveData, sort -> {
|
||||||
|
subredditListingDataSourceFactory.changeSortType(sortTypeLiveData.getValue());
|
||||||
|
return new LivePagedListBuilder(subredditListingDataSourceFactory, pagedListConfig).build();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
LiveData<PagedList<SubredditData>> getSubreddits() {
|
LiveData<PagedList<SubredditData>> getSubreddits() {
|
||||||
@ -58,22 +68,28 @@ public class SubredditListingViewModel extends ViewModel {
|
|||||||
subredditListingDataSourceFactory.getSubredditListingDataSource().retryLoadingMore();
|
subredditListingDataSourceFactory.getSubredditListingDataSource().retryLoadingMore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void changeSortType(String sortType) {
|
||||||
|
sortTypeLiveData.postValue(sortType);
|
||||||
|
}
|
||||||
|
|
||||||
public static class Factory extends ViewModelProvider.NewInstanceFactory {
|
public static class Factory extends ViewModelProvider.NewInstanceFactory {
|
||||||
private Retrofit retrofit;
|
private Retrofit retrofit;
|
||||||
private String query;
|
private String query;
|
||||||
|
private String sortType;
|
||||||
private SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback;
|
private SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback;
|
||||||
|
|
||||||
public Factory(Retrofit retrofit, String query,
|
public Factory(Retrofit retrofit, String query, String sortType,
|
||||||
SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) {
|
SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) {
|
||||||
this.retrofit = retrofit;
|
this.retrofit = retrofit;
|
||||||
this.query = query;
|
this.query = query;
|
||||||
|
this.sortType = sortType;
|
||||||
this.onSubredditListingDataFetchedCallback = onSubredditListingDataFetchedCallback;
|
this.onSubredditListingDataFetchedCallback = onSubredditListingDataFetchedCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
|
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
|
||||||
return (T) new SubredditListingViewModel(retrofit, query, onSubredditListingDataFetchedCallback);
|
return (T) new SubredditListingViewModel(retrofit, query, sortType, onSubredditListingDataFetchedCallback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
package ml.docilealligator.infinityforreddit;
|
package ml.docilealligator.infinityforreddit;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
import androidx.paging.PageKeyedDataSource;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import User.UserData;
|
import User.UserData;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.lifecycle.MutableLiveData;
|
|
||||||
import androidx.paging.PageKeyedDataSource;
|
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class UserListingDataSource extends PageKeyedDataSource<String, UserData> {
|
public class UserListingDataSource extends PageKeyedDataSource<String, UserData> {
|
||||||
@ -13,8 +14,10 @@ public class UserListingDataSource extends PageKeyedDataSource<String, UserData>
|
|||||||
void hasUser();
|
void hasUser();
|
||||||
void noUser();
|
void noUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Retrofit retrofit;
|
private Retrofit retrofit;
|
||||||
private String query;
|
private String query;
|
||||||
|
private String sortType;
|
||||||
private UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback;
|
private UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback;
|
||||||
|
|
||||||
private MutableLiveData<NetworkState> paginationNetworkStateLiveData;
|
private MutableLiveData<NetworkState> paginationNetworkStateLiveData;
|
||||||
@ -25,10 +28,11 @@ public class UserListingDataSource extends PageKeyedDataSource<String, UserData>
|
|||||||
private PageKeyedDataSource.LoadParams<String> params;
|
private PageKeyedDataSource.LoadParams<String> params;
|
||||||
private PageKeyedDataSource.LoadCallback<String, UserData> callback;
|
private PageKeyedDataSource.LoadCallback<String, UserData> callback;
|
||||||
|
|
||||||
UserListingDataSource(Retrofit retrofit, String query,
|
UserListingDataSource(Retrofit retrofit, String query, String sortType,
|
||||||
UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) {
|
UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) {
|
||||||
this.retrofit = retrofit;
|
this.retrofit = retrofit;
|
||||||
this.query = query;
|
this.query = query;
|
||||||
|
this.sortType = sortType;
|
||||||
this.onUserListingDataFetchedCallback = onUserListingDataFetchedCallback;
|
this.onUserListingDataFetchedCallback = onUserListingDataFetchedCallback;
|
||||||
paginationNetworkStateLiveData = new MutableLiveData();
|
paginationNetworkStateLiveData = new MutableLiveData();
|
||||||
initialLoadStateLiveData = new MutableLiveData();
|
initialLoadStateLiveData = new MutableLiveData();
|
||||||
@ -49,7 +53,7 @@ public class UserListingDataSource extends PageKeyedDataSource<String, UserData>
|
|||||||
|
|
||||||
initialLoadStateLiveData.postValue(NetworkState.LOADING);
|
initialLoadStateLiveData.postValue(NetworkState.LOADING);
|
||||||
|
|
||||||
FetchUserData.fetchUserListingData(retrofit, query, null, new FetchUserData.FetchUserListingDataListener() {
|
FetchUserData.fetchUserListingData(retrofit, query, null, sortType, new FetchUserData.FetchUserListingDataListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onFetchUserListingDataSuccess(ArrayList<UserData> UserData, String after) {
|
public void onFetchUserListingDataSuccess(ArrayList<UserData> UserData, String after) {
|
||||||
if(UserData.size() == 0) {
|
if(UserData.size() == 0) {
|
||||||
@ -83,7 +87,7 @@ public class UserListingDataSource extends PageKeyedDataSource<String, UserData>
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FetchUserData.fetchUserListingData(retrofit, query, params.key, new FetchUserData.FetchUserListingDataListener() {
|
FetchUserData.fetchUserListingData(retrofit, query, params.key, sortType, new FetchUserData.FetchUserListingDataListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onFetchUserListingDataSuccess(ArrayList<UserData> UserData, String after) {
|
public void onFetchUserListingDataSuccess(ArrayList<UserData> UserData, String after) {
|
||||||
callback.onResult(UserData, after);
|
callback.onResult(UserData, after);
|
||||||
|
@ -8,15 +8,17 @@ import retrofit2.Retrofit;
|
|||||||
public class UserListingDataSourceFactory extends DataSource.Factory {
|
public class UserListingDataSourceFactory extends DataSource.Factory {
|
||||||
private Retrofit retrofit;
|
private Retrofit retrofit;
|
||||||
private String query;
|
private String query;
|
||||||
|
private String sortType;
|
||||||
private UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback;
|
private UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback;
|
||||||
|
|
||||||
private UserListingDataSource userListingDataSource;
|
private UserListingDataSource userListingDataSource;
|
||||||
private MutableLiveData<UserListingDataSource> userListingDataSourceMutableLiveData;
|
private MutableLiveData<UserListingDataSource> userListingDataSourceMutableLiveData;
|
||||||
|
|
||||||
UserListingDataSourceFactory(Retrofit retrofit, String query,
|
UserListingDataSourceFactory(Retrofit retrofit, String query, String sortType,
|
||||||
UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) {
|
UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) {
|
||||||
this.retrofit = retrofit;
|
this.retrofit = retrofit;
|
||||||
this.query = query;
|
this.query = query;
|
||||||
|
this.sortType = sortType;
|
||||||
this.onUserListingDataFetchedCallback = onUserListingDataFetchedCallback;
|
this.onUserListingDataFetchedCallback = onUserListingDataFetchedCallback;
|
||||||
userListingDataSourceMutableLiveData = new MutableLiveData<>();
|
userListingDataSourceMutableLiveData = new MutableLiveData<>();
|
||||||
}
|
}
|
||||||
@ -25,7 +27,7 @@ public class UserListingDataSourceFactory extends DataSource.Factory {
|
|||||||
@Override
|
@Override
|
||||||
public DataSource create() {
|
public DataSource create() {
|
||||||
userListingDataSource = new UserListingDataSource(retrofit,
|
userListingDataSource = new UserListingDataSource(retrofit,
|
||||||
query, onUserListingDataFetchedCallback);
|
query, sortType, onUserListingDataFetchedCallback);
|
||||||
userListingDataSourceMutableLiveData.postValue(userListingDataSource);
|
userListingDataSourceMutableLiveData.postValue(userListingDataSource);
|
||||||
return userListingDataSource;
|
return userListingDataSource;
|
||||||
}
|
}
|
||||||
@ -37,4 +39,8 @@ public class UserListingDataSourceFactory extends DataSource.Factory {
|
|||||||
UserListingDataSource getUserListingDataSource() {
|
UserListingDataSource getUserListingDataSource() {
|
||||||
return userListingDataSource;
|
return userListingDataSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void changeSortType(String sortType) {
|
||||||
|
this.sortType = sortType;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package ml.docilealligator.infinityforreddit;
|
package ml.docilealligator.infinityforreddit;
|
||||||
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
@ -11,6 +10,12 @@ import android.widget.ImageView;
|
|||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
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.bumptech.glide.Glide;
|
||||||
import com.lsjwzh.widget.materialloadingprogressbar.CircleProgressBar;
|
import com.lsjwzh.widget.materialloadingprogressbar.CircleProgressBar;
|
||||||
|
|
||||||
@ -18,11 +23,6 @@ import javax.inject.Inject;
|
|||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
import SubscribedUserDatabase.SubscribedUserRoomDatabase;
|
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.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
@ -85,11 +85,8 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
|
|||||||
|
|
||||||
mQuery = getArguments().getString(QUERY_KEY);
|
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,
|
UserListingViewModel.Factory factory = new UserListingViewModel.Factory(mRetrofit, mQuery,
|
||||||
new UserListingDataSource.OnUserListingDataFetchedCallback() {
|
PostDataSource.SORT_TYPE_RELEVANCE, new UserListingDataSource.OnUserListingDataFetchedCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void hasUser() {
|
public void hasUser() {
|
||||||
mFetchUserListingInfoLinearLayout.setVisibility(View.GONE);
|
mFetchUserListingInfoLinearLayout.setVisibility(View.GONE);
|
||||||
@ -97,11 +94,8 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void noUser() {
|
public void noUser() {
|
||||||
mFetchUserListingInfoLinearLayout.setOnClickListener(new View.OnClickListener() {
|
mFetchUserListingInfoLinearLayout.setOnClickListener(view -> {
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
//Do nothing
|
//Do nothing
|
||||||
}
|
|
||||||
});
|
});
|
||||||
showErrorView(R.string.no_users);
|
showErrorView(R.string.no_users);
|
||||||
}
|
}
|
||||||
@ -145,6 +139,10 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void changeSortType(String sortType) {
|
||||||
|
mUserListingViewModel.changeSortType(sortType);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void refresh() {
|
public void refresh() {
|
||||||
mUserListingViewModel.refresh();
|
mUserListingViewModel.refresh();
|
||||||
|
@ -1,41 +1,51 @@
|
|||||||
package ml.docilealligator.infinityforreddit;
|
package ml.docilealligator.infinityforreddit;
|
||||||
|
|
||||||
import User.UserData;
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.arch.core.util.Function;
|
import androidx.arch.core.util.Function;
|
||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
|
import androidx.lifecycle.MutableLiveData;
|
||||||
import androidx.lifecycle.Transformations;
|
import androidx.lifecycle.Transformations;
|
||||||
import androidx.lifecycle.ViewModel;
|
import androidx.lifecycle.ViewModel;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.paging.LivePagedListBuilder;
|
import androidx.paging.LivePagedListBuilder;
|
||||||
import androidx.paging.PagedList;
|
import androidx.paging.PagedList;
|
||||||
|
|
||||||
|
import User.UserData;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class UserListingViewModel extends ViewModel {
|
public class UserListingViewModel extends ViewModel {
|
||||||
private UserListingDataSourceFactory UserListingDataSourceFactory;
|
private UserListingDataSourceFactory UserListingDataSourceFactory;
|
||||||
private LiveData<NetworkState> paginationNetworkState;
|
private LiveData<NetworkState> paginationNetworkState;
|
||||||
private LiveData<NetworkState> initialLoadingState;
|
private LiveData<NetworkState> initialLoadingState;
|
||||||
private LiveData<PagedList<UserData>> Users;
|
private LiveData<PagedList<UserData>> users;
|
||||||
|
private MutableLiveData<String> sortTypeLiveData;
|
||||||
|
|
||||||
UserListingViewModel(Retrofit retrofit, String query,
|
UserListingViewModel(Retrofit retrofit, String query, String sortType,
|
||||||
UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) {
|
UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) {
|
||||||
UserListingDataSourceFactory = new UserListingDataSourceFactory(retrofit, query, onUserListingDataFetchedCallback);
|
UserListingDataSourceFactory = new UserListingDataSourceFactory(retrofit, query, sortType, onUserListingDataFetchedCallback);
|
||||||
|
|
||||||
initialLoadingState = Transformations.switchMap(UserListingDataSourceFactory.getUserListingDataSourceMutableLiveData(),
|
initialLoadingState = Transformations.switchMap(UserListingDataSourceFactory.getUserListingDataSourceMutableLiveData(),
|
||||||
(Function<UserListingDataSource, LiveData<NetworkState>>) UserListingDataSource::getInitialLoadStateLiveData);
|
(Function<UserListingDataSource, LiveData<NetworkState>>) UserListingDataSource::getInitialLoadStateLiveData);
|
||||||
paginationNetworkState = Transformations.switchMap(UserListingDataSourceFactory.getUserListingDataSourceMutableLiveData(),
|
paginationNetworkState = Transformations.switchMap(UserListingDataSourceFactory.getUserListingDataSourceMutableLiveData(),
|
||||||
(Function<UserListingDataSource, LiveData<NetworkState>>) UserListingDataSource::getPaginationNetworkStateLiveData);
|
(Function<UserListingDataSource, LiveData<NetworkState>>) UserListingDataSource::getPaginationNetworkStateLiveData);
|
||||||
|
|
||||||
|
sortTypeLiveData = new MutableLiveData<>();
|
||||||
|
sortTypeLiveData.postValue(sortType);
|
||||||
|
|
||||||
PagedList.Config pagedListConfig =
|
PagedList.Config pagedListConfig =
|
||||||
(new PagedList.Config.Builder())
|
(new PagedList.Config.Builder())
|
||||||
.setEnablePlaceholders(false)
|
.setEnablePlaceholders(false)
|
||||||
.setPageSize(25)
|
.setPageSize(25)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
Users = (new LivePagedListBuilder(UserListingDataSourceFactory, pagedListConfig)).build();
|
users = Transformations.switchMap(sortTypeLiveData, sort -> {
|
||||||
|
UserListingDataSourceFactory.changeSortType(sortTypeLiveData.getValue());
|
||||||
|
return (new LivePagedListBuilder(UserListingDataSourceFactory, pagedListConfig)).build();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
LiveData<PagedList<UserData>> getUsers() {
|
LiveData<PagedList<UserData>> getUsers() {
|
||||||
return Users;
|
return users;
|
||||||
}
|
}
|
||||||
|
|
||||||
LiveData<NetworkState> getPaginationNetworkState() {
|
LiveData<NetworkState> getPaginationNetworkState() {
|
||||||
@ -58,22 +68,28 @@ public class UserListingViewModel extends ViewModel {
|
|||||||
UserListingDataSourceFactory.getUserListingDataSource().retryLoadingMore();
|
UserListingDataSourceFactory.getUserListingDataSource().retryLoadingMore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void changeSortType(String sortType) {
|
||||||
|
sortTypeLiveData.postValue(sortType);
|
||||||
|
}
|
||||||
|
|
||||||
public static class Factory extends ViewModelProvider.NewInstanceFactory {
|
public static class Factory extends ViewModelProvider.NewInstanceFactory {
|
||||||
private Retrofit retrofit;
|
private Retrofit retrofit;
|
||||||
private String query;
|
private String query;
|
||||||
|
private String sortType;
|
||||||
private UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback;
|
private UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback;
|
||||||
|
|
||||||
public Factory(Retrofit retrofit, String query,
|
public Factory(Retrofit retrofit, String query, String sortType,
|
||||||
UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) {
|
UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) {
|
||||||
this.retrofit = retrofit;
|
this.retrofit = retrofit;
|
||||||
this.query = query;
|
this.query = query;
|
||||||
|
this.sortType = sortType;
|
||||||
this.onUserListingDataFetchedCallback = onUserListingDataFetchedCallback;
|
this.onUserListingDataFetchedCallback = onUserListingDataFetchedCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
|
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
|
||||||
return (T) new UserListingViewModel(retrofit, query, onUserListingDataFetchedCallback);
|
return (T) new UserListingViewModel(retrofit, query, sortType, onUserListingDataFetchedCallback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -253,7 +253,13 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
|||||||
});
|
});
|
||||||
|
|
||||||
if(savedInstanceState == null) {
|
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 {
|
} else {
|
||||||
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE_KEY);
|
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE_KEY);
|
||||||
if(mFragment == null) {
|
if(mFragment == null) {
|
||||||
@ -330,16 +336,6 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
|||||||
return false;
|
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
|
@Override
|
||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
@ -353,7 +349,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sortTypeSelected(String sortType) {
|
public void sortTypeSelected(String sortType) {
|
||||||
replaceFragment(sortType);
|
((PostFragment) mFragment).changeSortType(sortType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,18 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:orientation="vertical" android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:paddingBottom="8dp">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:paddingTop="24dp"
|
android:paddingBottom="8dp"
|
||||||
android:paddingBottom="16dp"
|
android:orientation="vertical">
|
||||||
android:paddingStart="32dp"
|
|
||||||
android:paddingEnd="32dp"
|
|
||||||
android:text="@string/bottom_sheet_post_type"
|
|
||||||
android:textSize="18sp" />
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/text_type_linear_layout_post_type_bottom_sheet_fragment"
|
android:id="@+id/text_type_linear_layout_post_type_bottom_sheet_fragment"
|
||||||
@ -30,7 +21,7 @@
|
|||||||
android:layout_width="18dp"
|
android:layout_width="18dp"
|
||||||
android:layout_height="18dp"
|
android:layout_height="18dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginEnd="32dp"
|
android:layout_marginEnd="48dp"
|
||||||
android:src="@drawable/ic_outline_text_24px"
|
android:src="@drawable/ic_outline_text_24px"
|
||||||
android:tint="@color/primaryTextColor" />
|
android:tint="@color/primaryTextColor" />
|
||||||
|
|
||||||
@ -38,7 +29,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:text="@string/bottom_sheet_post_text" />
|
android:text="@string/bottom_sheet_post_text"
|
||||||
|
android:textColor="@color/primaryTextColor" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@ -58,7 +50,7 @@
|
|||||||
android:layout_width="18dp"
|
android:layout_width="18dp"
|
||||||
android:layout_height="18dp"
|
android:layout_height="18dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginEnd="32dp"
|
android:layout_marginEnd="48dp"
|
||||||
android:src="@drawable/ic_link"
|
android:src="@drawable/ic_link"
|
||||||
android:tint="@color/primaryTextColor" />
|
android:tint="@color/primaryTextColor" />
|
||||||
|
|
||||||
@ -66,7 +58,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:text="@string/bottom_sheet_post_link" />
|
android:text="@string/bottom_sheet_post_link"
|
||||||
|
android:textColor="@color/primaryTextColor" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@ -86,7 +79,7 @@
|
|||||||
android:layout_width="18dp"
|
android:layout_width="18dp"
|
||||||
android:layout_height="18dp"
|
android:layout_height="18dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginEnd="32dp"
|
android:layout_marginEnd="48dp"
|
||||||
android:src="@drawable/ic_menu_gallery"
|
android:src="@drawable/ic_menu_gallery"
|
||||||
android:tint="@color/primaryTextColor" />
|
android:tint="@color/primaryTextColor" />
|
||||||
|
|
||||||
@ -94,7 +87,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:text="@string/bottom_sheet_post_image" />
|
android:text="@string/bottom_sheet_post_image"
|
||||||
|
android:textColor="@color/primaryTextColor" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@ -114,7 +108,7 @@
|
|||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="18dp"
|
android:layout_width="18dp"
|
||||||
android:layout_height="18dp"
|
android:layout_height="18dp"
|
||||||
android:layout_marginEnd="32dp"
|
android:layout_marginEnd="48dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:src="@drawable/ic_outline_video_label_24px"
|
android:src="@drawable/ic_outline_video_label_24px"
|
||||||
android:tint="@color/primaryTextColor" />
|
android:tint="@color/primaryTextColor" />
|
||||||
@ -123,7 +117,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:text="@string/bottom_sheet_post_video" />
|
android:text="@string/bottom_sheet_post_video"
|
||||||
|
android:textColor="@color/primaryTextColor" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
@ -0,0 +1,77 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical" android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:paddingBottom="8dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/relevance_type_text_view_search_sort_type_bottom_sheet_fragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/sort_relevance"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
|
android:paddingTop="16dp"
|
||||||
|
android:paddingBottom="16dp"
|
||||||
|
android:paddingStart="32dp"
|
||||||
|
android:paddingEnd="32dp"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:background="?attr/selectableItemBackground" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/hot_type_text_view_search_sort_type_bottom_sheet_fragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/sort_hot"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
|
android:paddingTop="16dp"
|
||||||
|
android:paddingBottom="16dp"
|
||||||
|
android:paddingStart="32dp"
|
||||||
|
android:paddingEnd="32dp"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:background="?attr/selectableItemBackground" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/top_type_text_view_search_sort_type_bottom_sheet_fragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/sort_top"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
|
android:paddingTop="16dp"
|
||||||
|
android:paddingBottom="16dp"
|
||||||
|
android:paddingStart="32dp"
|
||||||
|
android:paddingEnd="32dp"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:background="?attr/selectableItemBackground" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/new_type_text_view_search_sort_type_bottom_sheet_fragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/sort_new"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
|
android:paddingTop="16dp"
|
||||||
|
android:paddingBottom="16dp"
|
||||||
|
android:paddingStart="32dp"
|
||||||
|
android:paddingEnd="32dp"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:background="?attr/selectableItemBackground" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/comments_type_text_view_search_sort_type_bottom_sheet_fragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/sort_comments"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
|
android:paddingTop="16dp"
|
||||||
|
android:paddingBottom="16dp"
|
||||||
|
android:paddingStart="32dp"
|
||||||
|
android:paddingEnd="32dp"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:background="?attr/selectableItemBackground" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -0,0 +1,36 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:paddingBottom="8dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/relevance_type_text_view_search_user_and_subreddit_sort_type_bottom_sheet_fragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/sort_relevance"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
|
android:paddingTop="16dp"
|
||||||
|
android:paddingBottom="16dp"
|
||||||
|
android:paddingStart="32dp"
|
||||||
|
android:paddingEnd="32dp"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:background="?attr/selectableItemBackground" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/activity_type_text_view_search_user_and_subreddit_sort_type_bottom_sheet_fragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/sort_activity"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
|
android:paddingTop="16dp"
|
||||||
|
android:paddingBottom="16dp"
|
||||||
|
android:paddingStart="32dp"
|
||||||
|
android:paddingEnd="32dp"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:background="?attr/selectableItemBackground" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -4,22 +4,12 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:paddingBottom="8dp">
|
android:paddingBottom="8dp">
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:paddingTop="24dp"
|
|
||||||
android:paddingBottom="16dp"
|
|
||||||
android:paddingStart="32dp"
|
|
||||||
android:paddingEnd="32dp"
|
|
||||||
android:text="@string/sort"
|
|
||||||
android:textColor="@color/primaryTextColor"
|
|
||||||
android:textSize="18sp" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/best_type_text_view_sort_type_bottom_sheet_fragment"
|
android:id="@+id/best_type_text_view_sort_type_bottom_sheet_fragment"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/sort_best"
|
android:text="@string/sort_best"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
android:paddingTop="16dp"
|
android:paddingTop="16dp"
|
||||||
android:paddingBottom="16dp"
|
android:paddingBottom="16dp"
|
||||||
android:paddingStart="32dp"
|
android:paddingStart="32dp"
|
||||||
@ -33,6 +23,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/sort_hot"
|
android:text="@string/sort_hot"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
android:paddingTop="16dp"
|
android:paddingTop="16dp"
|
||||||
android:paddingBottom="16dp"
|
android:paddingBottom="16dp"
|
||||||
android:paddingStart="32dp"
|
android:paddingStart="32dp"
|
||||||
@ -46,6 +37,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/sort_new"
|
android:text="@string/sort_new"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
android:paddingTop="16dp"
|
android:paddingTop="16dp"
|
||||||
android:paddingBottom="16dp"
|
android:paddingBottom="16dp"
|
||||||
android:paddingStart="32dp"
|
android:paddingStart="32dp"
|
||||||
@ -59,6 +51,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/sort_random"
|
android:text="@string/sort_random"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
android:paddingTop="16dp"
|
android:paddingTop="16dp"
|
||||||
android:paddingBottom="16dp"
|
android:paddingBottom="16dp"
|
||||||
android:paddingStart="32dp"
|
android:paddingStart="32dp"
|
||||||
@ -72,6 +65,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/sort_rising"
|
android:text="@string/sort_rising"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
android:paddingTop="16dp"
|
android:paddingTop="16dp"
|
||||||
android:paddingBottom="16dp"
|
android:paddingBottom="16dp"
|
||||||
android:paddingStart="32dp"
|
android:paddingStart="32dp"
|
||||||
@ -85,6 +79,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/sort_top"
|
android:text="@string/sort_top"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
android:paddingTop="16dp"
|
android:paddingTop="16dp"
|
||||||
android:paddingBottom="16dp"
|
android:paddingBottom="16dp"
|
||||||
android:paddingStart="32dp"
|
android:paddingStart="32dp"
|
||||||
@ -98,6 +93,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/sort_controversial"
|
android:text="@string/sort_controversial"
|
||||||
|
android:textColor="@color/primaryTextColor"
|
||||||
android:paddingTop="16dp"
|
android:paddingTop="16dp"
|
||||||
android:paddingBottom="16dp"
|
android:paddingBottom="16dp"
|
||||||
android:paddingStart="32dp"
|
android:paddingStart="32dp"
|
||||||
|
@ -2,15 +2,22 @@
|
|||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_search_search_result_activity"
|
android:id="@+id/action_sort_search_result_activity"
|
||||||
android:orderInCategory="1"
|
android:orderInCategory="1"
|
||||||
android:title="@string/action_search"
|
android:title="@string/action_search"
|
||||||
|
android:icon="@drawable/ic_outline_sort_24px"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_search_search_result_activity"
|
||||||
|
android:orderInCategory="2"
|
||||||
|
android:title="@string/action_search"
|
||||||
android:icon="@drawable/ic_search_white_24dp"
|
android:icon="@drawable/ic_search_white_24dp"
|
||||||
app:showAsAction="ifRoom" />
|
app:showAsAction="ifRoom" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_refresh_search_result_activity"
|
android:id="@+id/action_refresh_search_result_activity"
|
||||||
android:orderInCategory="2"
|
android:orderInCategory="3"
|
||||||
android:title="@string/action_refresh"
|
android:title="@string/action_refresh"
|
||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
</menu>
|
</menu>
|
@ -23,4 +23,8 @@
|
|||||||
<color name="backgroundColor">#121212</color>
|
<color name="backgroundColor">#121212</color>
|
||||||
|
|
||||||
<color name="backgroundColorPrimaryDark">#1565C0</color>
|
<color name="backgroundColorPrimaryDark">#1565C0</color>
|
||||||
|
|
||||||
|
<color name="roundedBottomSheetPrimaryBackground">#242424</color>
|
||||||
|
|
||||||
|
<color name="roundedBottomSheetPrimaryNavigationBarColor">#000000</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -24,5 +24,7 @@
|
|||||||
|
|
||||||
<color name="backgroundColorPrimaryDark">@color/colorPrimaryDark</color>
|
<color name="backgroundColorPrimaryDark">@color/colorPrimaryDark</color>
|
||||||
|
|
||||||
|
<color name="roundedBottomSheetPrimaryBackground">#FFFFFF</color>
|
||||||
|
|
||||||
<color name="roundedBottomSheetPrimaryNavigationBarColor">#000000</color>
|
<color name="roundedBottomSheetPrimaryNavigationBarColor">#000000</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
<dimen name="fab_margin">16dp</dimen>
|
<dimen name="fab_margin">16dp</dimen>
|
||||||
<dimen name="app_bar_height">180dp</dimen>
|
<dimen name="app_bar_height">180dp</dimen>
|
||||||
<dimen name="text_margin">16dp</dimen>
|
<dimen name="text_margin">16dp</dimen>
|
||||||
<dimen name="roundedBottomSheetCornerRadiusTopPadding">0dp</dimen>
|
|
||||||
<dimen name="roundedBottomSheetCornerRadiusLeftPadding">0dp</dimen>
|
<dimen name="roundedBottomSheetCornerRadiusLeftPadding">0dp</dimen>
|
||||||
<dimen name="roundedBottomSheetCornerRadiusRightPadding">0dp</dimen>
|
<dimen name="roundedBottomSheetCornerRadiusRightPadding">0dp</dimen>
|
||||||
</resources>
|
</resources>
|
@ -142,7 +142,7 @@
|
|||||||
<string name="sort_rising">Rising</string>
|
<string name="sort_rising">Rising</string>
|
||||||
<string name="sort_top">Top</string>
|
<string name="sort_top">Top</string>
|
||||||
<string name="sort_controversial">Controversial</string>
|
<string name="sort_controversial">Controversial</string>
|
||||||
|
<string name="sort_relevance">Relevance</string>
|
||||||
<!-- TODO: Remove or change this placeholder text -->
|
<string name="sort_comments">Comments</string>
|
||||||
<string name="hello_blank_fragment">Hello blank fragment</string>
|
<string name="sort_activity">Activity</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user