aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorAlex Ning <chineseperson5@gmail.com>2019-08-09 02:38:25 +0000
committerAlex Ning <chineseperson5@gmail.com>2019-08-09 02:38:25 +0000
commitd408a47dba6e1fa867fb7353fd70044bc7cac777 (patch)
tree5316800c8b16c4c8d1a26cfc054f738ed9ae788b /app
parent85597a82d065374955153c0481663fac2b0c3264 (diff)
downloadinfinity-for-reddit-d408a47dba6e1fa867fb7353fd70044bc7cac777.tar
infinity-for-reddit-d408a47dba6e1fa867fb7353fd70044bc7cac777.tar.gz
infinity-for-reddit-d408a47dba6e1fa867fb7353fd70044bc7cac777.tar.bz2
infinity-for-reddit-d408a47dba6e1fa867fb7353fd70044bc7cac777.tar.lz
infinity-for-reddit-d408a47dba6e1fa867fb7353fd70044bc7cac777.tar.xz
infinity-for-reddit-d408a47dba6e1fa867fb7353fd70044bc7cac777.tar.zst
infinity-for-reddit-d408a47dba6e1fa867fb7353fd70044bc7cac777.zip
Fixed no posts, no comments, no users and no subreddits message cannot be retained after orientation change in PostFragment, CommentsListingFragment, UserListingFragment and SubredditListingFragment respectively. Minor bugs fixed.
Diffstat (limited to '')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/CheckIsSubscribedToSubredditAsyncTask.java9
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/CommentDataSource.java26
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/CommentDataSourceFactory.java6
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/CommentViewModel.java24
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/CommentsListingFragment.java29
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java1
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java62
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSourceFactory.java24
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java69
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostViewModel.java67
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSource.java30
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSourceFactory.java8
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingFragment.java31
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingRecyclerViewAdapter.java11
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingViewModel.java24
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SubredditSubscription.java29
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSource.java27
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSourceFactory.java8
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/UserListingFragment.java29
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/UserListingViewModel.java40
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java9
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java1
-rw-r--r--app/src/main/res/layout/fragment_followed_users_listing.xml3
-rw-r--r--app/src/main/res/layout/fragment_subscribed_subreddits_listing.xml2
-rw-r--r--app/src/main/res/values/strings.xml7
25 files changed, 255 insertions, 321 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/CheckIsSubscribedToSubredditAsyncTask.java b/app/src/main/java/ml/docilealligator/infinityforreddit/CheckIsSubscribedToSubredditAsyncTask.java
index ee78c566..a1936ae0 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/CheckIsSubscribedToSubredditAsyncTask.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/CheckIsSubscribedToSubredditAsyncTask.java
@@ -2,12 +2,11 @@ package ml.docilealligator.infinityforreddit;
import android.os.AsyncTask;
-import SubscribedSubredditDatabase.SubscribedSubredditDao;
import SubscribedSubredditDatabase.SubscribedSubredditData;
class CheckIsSubscribedToSubredditAsyncTask extends AsyncTask<Void, Void, Void> {
- private SubscribedSubredditDao subscribedSubredditDao;
+ private RedditDataRoomDatabase redditDataRoomDatabase;
private String subredditName;
private String accountName;
private SubscribedSubredditData subscribedSubredditData;
@@ -18,10 +17,10 @@ class CheckIsSubscribedToSubredditAsyncTask extends AsyncTask<Void, Void, Void>
void isNotSubscribed();
}
- CheckIsSubscribedToSubredditAsyncTask(SubscribedSubredditDao subscribedSubredditDao,
+ CheckIsSubscribedToSubredditAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
String subredditName, String accountName,
CheckIsSubscribedToSubredditListener checkIsSubscribedToSubredditListener) {
- this.subscribedSubredditDao = subscribedSubredditDao;
+ this.redditDataRoomDatabase = redditDataRoomDatabase;
this.subredditName =subredditName;
this.accountName = accountName;
this.checkIsSubscribedToSubredditListener = checkIsSubscribedToSubredditListener;
@@ -29,7 +28,7 @@ class CheckIsSubscribedToSubredditAsyncTask extends AsyncTask<Void, Void, Void>
@Override
protected Void doInBackground(Void... voids) {
- subscribedSubredditData = subscribedSubredditDao.getSubscribedSubreddit(subredditName, accountName);
+ subscribedSubredditData = redditDataRoomDatabase.subscribedSubredditDao().getSubscribedSubreddit(subredditName, accountName);
return null;
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/CommentDataSource.java b/app/src/main/java/ml/docilealligator/infinityforreddit/CommentDataSource.java
index cef80dc5..1d759440 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/CommentDataSource.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/CommentDataSource.java
@@ -20,41 +20,41 @@ import retrofit2.Response;
import retrofit2.Retrofit;
public class CommentDataSource extends PageKeyedDataSource<String, CommentData> {
- interface OnCommentFetchedCallback {
- void hasComment();
- void noComment();
- }
private Retrofit retrofit;
private Locale locale;
private String username;
- private OnCommentFetchedCallback onCommentFetchedCallback;
private MutableLiveData<NetworkState> paginationNetworkStateLiveData;
private MutableLiveData<NetworkState> initialLoadStateLiveData;
+ private MutableLiveData<Boolean> hasPostLiveData;
private LoadInitialParams<String> initialParams;
private LoadInitialCallback<String, CommentData> initialCallback;
private LoadParams<String> params;
private LoadCallback<String, CommentData> callback;
- CommentDataSource(Retrofit retrofit, Locale locale, String username, OnCommentFetchedCallback onCommentFetchedCallback) {
+ CommentDataSource(Retrofit retrofit, Locale locale, String username) {
this.retrofit = retrofit;
this.locale = locale;
this.username = username;
- paginationNetworkStateLiveData = new MutableLiveData();
- initialLoadStateLiveData = new MutableLiveData();
- this.onCommentFetchedCallback = onCommentFetchedCallback;
+ paginationNetworkStateLiveData = new MutableLiveData<>();
+ initialLoadStateLiveData = new MutableLiveData<>();
+ hasPostLiveData = new MutableLiveData<>();
}
- MutableLiveData getPaginationNetworkStateLiveData() {
+ MutableLiveData<NetworkState> getPaginationNetworkStateLiveData() {
return paginationNetworkStateLiveData;
}
- MutableLiveData getInitialLoadStateLiveData() {
+ MutableLiveData<NetworkState> getInitialLoadStateLiveData() {
return initialLoadStateLiveData;
}
+ MutableLiveData<Boolean> hasPostLiveData() {
+ return hasPostLiveData;
+ }
+
void retry() {
loadInitial(initialParams, initialCallback);
}
@@ -80,9 +80,9 @@ public class CommentDataSource extends PageKeyedDataSource<String, CommentData>
@Override
public void parseSuccessful(ArrayList<CommentData> comments, String after) {
if(comments.size() == 0) {
- onCommentFetchedCallback.noComment();
+ hasPostLiveData.postValue(false);
} else {
- onCommentFetchedCallback.hasComment();
+ hasPostLiveData.postValue(true);
}
callback.onResult(comments, null, after);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/CommentDataSourceFactory.java b/app/src/main/java/ml/docilealligator/infinityforreddit/CommentDataSourceFactory.java
index ac43a9c2..914af4a4 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/CommentDataSourceFactory.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/CommentDataSourceFactory.java
@@ -12,23 +12,21 @@ class CommentDataSourceFactory extends DataSource.Factory {
private Retrofit retrofit;
private Locale locale;
private String username;
- private CommentDataSource.OnCommentFetchedCallback onCommentFetchedCallback;
private CommentDataSource commentDataSource;
private MutableLiveData<CommentDataSource> commentDataSourceLiveData;
- CommentDataSourceFactory(Retrofit retrofit, Locale locale, String username, CommentDataSource.OnCommentFetchedCallback onCommentFetchedCallback) {
+ CommentDataSourceFactory(Retrofit retrofit, Locale locale, String username) {
this.retrofit = retrofit;
this.locale = locale;
this.username = username;
commentDataSourceLiveData = new MutableLiveData<>();
- this.onCommentFetchedCallback = onCommentFetchedCallback;
}
@NonNull
@Override
public DataSource create() {
- commentDataSource = new CommentDataSource(retrofit, locale, username, onCommentFetchedCallback);
+ commentDataSource = new CommentDataSource(retrofit, locale, username);
commentDataSourceLiveData.postValue(commentDataSource);
return commentDataSource;
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/CommentViewModel.java b/app/src/main/java/ml/docilealligator/infinityforreddit/CommentViewModel.java
index 87fca11d..b1fd421d 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/CommentViewModel.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/CommentViewModel.java
@@ -1,7 +1,6 @@
package ml.docilealligator.infinityforreddit;
import androidx.annotation.NonNull;
-import androidx.arch.core.util.Function;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.Transformations;
import androidx.lifecycle.ViewModel;
@@ -17,16 +16,18 @@ public class CommentViewModel extends ViewModel {
private CommentDataSourceFactory commentDataSourceFactory;
private LiveData<NetworkState> paginationNetworkState;
private LiveData<NetworkState> initialLoadingState;
+ private LiveData<Boolean> hasCommentLiveData;
private LiveData<PagedList<CommentData>> comments;
- public CommentViewModel(Retrofit retrofit, Locale locale, String username,
- CommentDataSource.OnCommentFetchedCallback onCommentFetchedCallback) {
- commentDataSourceFactory = new CommentDataSourceFactory(retrofit, locale, username, onCommentFetchedCallback);
+ public CommentViewModel(Retrofit retrofit, Locale locale, String username) {
+ commentDataSourceFactory = new CommentDataSourceFactory(retrofit, locale, username);
initialLoadingState = Transformations.switchMap(commentDataSourceFactory.getCommentDataSourceLiveData(),
- (Function<CommentDataSource, LiveData<NetworkState>>) CommentDataSource::getInitialLoadStateLiveData);
+ CommentDataSource::getInitialLoadStateLiveData);
paginationNetworkState = Transformations.switchMap(commentDataSourceFactory.getCommentDataSourceLiveData(),
- (Function<CommentDataSource, LiveData<NetworkState>>) CommentDataSource::getPaginationNetworkStateLiveData);
+ CommentDataSource::getPaginationNetworkStateLiveData);
+ hasCommentLiveData = Transformations.switchMap(commentDataSourceFactory.getCommentDataSourceLiveData(),
+ CommentDataSource::hasPostLiveData);
PagedList.Config pagedListConfig =
(new PagedList.Config.Builder())
.setEnablePlaceholders(false)
@@ -48,6 +49,10 @@ public class CommentViewModel extends ViewModel {
return initialLoadingState;
}
+ LiveData<Boolean> hasComment() {
+ return hasCommentLiveData;
+ }
+
void refresh() {
commentDataSourceFactory.getCommentDataSource().invalidate();
}
@@ -64,20 +69,17 @@ public class CommentViewModel extends ViewModel {
private Retrofit retrofit;
private Locale locale;
private String username;
- private CommentDataSource.OnCommentFetchedCallback onCommentFetchedCallback;
- public Factory(Retrofit retrofit, Locale locale, String username,
- CommentDataSource.OnCommentFetchedCallback onCommentFetchedCallback) {
+ public Factory(Retrofit retrofit, Locale locale, String username) {
this.retrofit = retrofit;
this.locale = locale;
this.username = username;
- this.onCommentFetchedCallback = onCommentFetchedCallback;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
- return (T) new CommentViewModel(retrofit, locale, username, onCommentFetchedCallback);
+ return (T) new CommentViewModel(retrofit, locale, username);
}
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/CommentsListingFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/CommentsListingFragment.java
index d093158e..dc584f00 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/CommentsListingFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/CommentsListingFragment.java
@@ -78,30 +78,14 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
mCommentRecyclerView.setLayoutManager(new LinearLayoutManager(activity));
- CommentViewModel.Factory factory;
mAdapter = new CommentsListingRecyclerViewAdapter(activity, mOauthRetrofit,
getArguments().getString(EXTRA_ACCESS_TOKEN), () -> mCommentViewModel.retryLoadingMore());
String username = getArguments().getString(EXTRA_USERNAME_KEY);
- factory = new CommentViewModel.Factory(mRetrofit, getResources().getConfiguration().locale,
- username, new CommentDataSource.OnCommentFetchedCallback() {
- @Override
- public void hasComment() {
- mFetchCommentInfoLinearLayout.setVisibility(View.GONE);
- }
-
- @Override
- public void noComment() {
- mFetchCommentInfoLinearLayout.setOnClickListener(view -> {
- //Do nothing
- });
- showErrorView(R.string.no_posts);
- }
- });
-
mCommentRecyclerView.setAdapter(mAdapter);
+ CommentViewModel.Factory factory = new CommentViewModel.Factory(mRetrofit, getResources().getConfiguration().locale, username);
mCommentViewModel = ViewModelProviders.of(this, factory).get(CommentViewModel.class);
mCommentViewModel.getComments().observe(this, comments -> mAdapter.submitList(comments));
@@ -117,6 +101,17 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
}
});
+ mCommentViewModel.hasComment().observe(this, hasComment -> {
+ if(hasComment) {
+ mFetchCommentInfoLinearLayout.setVisibility(View.GONE);
+ } else {
+ mFetchCommentInfoLinearLayout.setOnClickListener(view -> {
+ //Do nothing
+ });
+ showErrorView(R.string.no_comments);
+ }
+ });
+
mCommentViewModel.getPaginationNetworkState().observe(this, networkState -> {
mAdapter.setNetworkState(networkState);
});
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java
index 5f5272f7..29a89500 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java
@@ -150,6 +150,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
mProfileImageUrl = savedInstanceState.getString(ACCOUNT_PROFILE_IMAGE_URL_STATE);
mBannerImageUrl = savedInstanceState.getString(ACCOUNT_BANNER_IMAGE_URL_STATE);
mKarma = savedInstanceState.getInt(ACCOUNT_KARMA_STATE);
+
if(!mNullAccessToken && mAccessToken == null) {
getCurrentAccountAndBindView();
} else {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java
index 6cd6730c..a0f42bbb 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java
@@ -14,10 +14,6 @@ import retrofit2.Callback;
import retrofit2.Retrofit;
class PostDataSource extends PageKeyedDataSource<String, Post> {
- interface OnPostFetchedCallback {
- void hasPost();
- void noPost();
- }
static final int TYPE_FRONT_PAGE = 0;
static final int TYPE_SUBREDDIT = 1;
@@ -42,10 +38,10 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
private int postType;
private String sortType;
private int filter;
- private OnPostFetchedCallback onPostFetchedCallback;
private MutableLiveData<NetworkState> paginationNetworkStateLiveData;
private MutableLiveData<NetworkState> initialLoadStateLiveData;
+ private MutableLiveData<Boolean> hasPostLiveData;
private LoadInitialParams<String> initialParams;
private LoadInitialCallback<String, Post> initialCallback;
@@ -53,68 +49,72 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
private LoadCallback<String, Post> callback;
PostDataSource(Retrofit retrofit, String accessToken, Locale locale, int postType, String sortType,
- int filter, OnPostFetchedCallback onPostFetchedCallback) {
+ int filter) {
this.retrofit = retrofit;
this.accessToken = accessToken;
this.locale = locale;
paginationNetworkStateLiveData = new MutableLiveData();
initialLoadStateLiveData = new MutableLiveData();
+ hasPostLiveData = new MutableLiveData<>();
this.postType = postType;
this.sortType = sortType;
this.filter = filter;
- this.onPostFetchedCallback = onPostFetchedCallback;
}
PostDataSource(Retrofit retrofit, String accessToken, Locale locale, String subredditOrUserName, int postType,
- String sortType, int filter, OnPostFetchedCallback onPostFetchedCallback) {
+ String sortType, int filter) {
this.retrofit = retrofit;
this.accessToken = accessToken;
this.locale = locale;
this.subredditOrUserName = subredditOrUserName;
- paginationNetworkStateLiveData = new MutableLiveData();
- initialLoadStateLiveData = new MutableLiveData();
+ paginationNetworkStateLiveData = new MutableLiveData<>();
+ initialLoadStateLiveData = new MutableLiveData<>();
+ hasPostLiveData = new MutableLiveData<>();
this.postType = postType;
this.sortType = sortType;
this.filter = filter;
- this.onPostFetchedCallback = onPostFetchedCallback;
}
PostDataSource(Retrofit retrofit, String accessToken, Locale locale, String subredditOrUserName, int postType,
- int filter, OnPostFetchedCallback onPostFetchedCallback) {
+ int filter) {
this.retrofit = retrofit;
this.accessToken = accessToken;
this.locale = locale;
this.subredditOrUserName = subredditOrUserName;
- paginationNetworkStateLiveData = new MutableLiveData();
- initialLoadStateLiveData = new MutableLiveData();
+ paginationNetworkStateLiveData = new MutableLiveData<>();
+ initialLoadStateLiveData = new MutableLiveData<>();
+ hasPostLiveData = new MutableLiveData<>();
this.postType = postType;
this.filter = filter;
- this.onPostFetchedCallback = onPostFetchedCallback;
}
PostDataSource(Retrofit retrofit, String accessToken, Locale locale, String subredditOrUserName, String query,
- int postType, String sortType, int filter, OnPostFetchedCallback onPostFetchedCallback) {
+ int postType, String sortType, int filter) {
this.retrofit = retrofit;
this.accessToken = accessToken;
this.locale = locale;
this.subredditOrUserName = subredditOrUserName;
this.query = query;
- paginationNetworkStateLiveData = new MutableLiveData();
- initialLoadStateLiveData = new MutableLiveData();
+ paginationNetworkStateLiveData = new MutableLiveData<>();
+ initialLoadStateLiveData = new MutableLiveData<>();
+ hasPostLiveData = new MutableLiveData<>();
this.postType = postType;
this.sortType = sortType;
this.filter = filter;
- this.onPostFetchedCallback = onPostFetchedCallback;
}
- MutableLiveData getPaginationNetworkStateLiveData() {
+ MutableLiveData<NetworkState> getPaginationNetworkStateLiveData() {
return paginationNetworkStateLiveData;
}
- MutableLiveData getInitialLoadStateLiveData() {
+ MutableLiveData<NetworkState> getInitialLoadStateLiveData() {
return initialLoadStateLiveData;
}
+ MutableLiveData<Boolean> hasPostLiveData() {
+ return hasPostLiveData;
+ }
+
@Override
public void loadInitial(@NonNull LoadInitialParams<String> params, @NonNull final LoadInitialCallback<String, Post> callback) {
initialParams = params;
@@ -184,7 +184,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
public void onParsePostSuccess(Post post) {
ArrayList<Post> singlePostList = new ArrayList<>();
singlePostList.add(post);
- onPostFetchedCallback.hasPost();
+ hasPostLiveData.postValue(true);
callback.onResult(singlePostList, null, null);
initialLoadStateLiveData.postValue(NetworkState.LOADED);
}
@@ -208,12 +208,12 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
}
if(newPosts.size() != 0) {
- onPostFetchedCallback.hasPost();
+ hasPostLiveData.postValue(true);
} else if(nextPageKey != null) {
loadBestPostsInitial(callback, nextPageKey);
return;
} else {
- onPostFetchedCallback.noPost();
+ hasPostLiveData.postValue(false);
}
callback.onResult(newPosts, null, nextPageKey);
@@ -295,7 +295,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
public void onParsePostSuccess(Post post) {
ArrayList<Post> singlePostList = new ArrayList<>();
singlePostList.add(post);
- onPostFetchedCallback.hasPost();
+ hasPostLiveData.postValue(true);
callback.onResult(singlePostList, null, null);
initialLoadStateLiveData.postValue(NetworkState.LOADED);
}
@@ -319,12 +319,12 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
}
if(newPosts.size() != 0) {
- onPostFetchedCallback.hasPost();
+ hasPostLiveData.postValue(true);
} else if(nextPageKey != null) {
loadSubredditPostsInitial(callback, nextPageKey);
return;
} else {
- onPostFetchedCallback.noPost();
+ hasPostLiveData.postValue(false);
}
callback.onResult(newPosts, null, nextPageKey);
@@ -411,12 +411,12 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
}
if(newPosts.size() != 0) {
- onPostFetchedCallback.hasPost();
+ hasPostLiveData.postValue(true);
} else if(nextPageKey != null) {
loadUserPostsInitial(callback, nextPageKey);
return;
} else {
- onPostFetchedCallback.noPost();
+ hasPostLiveData.postValue(false);
}
callback.onResult(newPosts, null, nextPageKey);
@@ -509,12 +509,12 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
}
if(newPosts.size() != 0) {
- onPostFetchedCallback.hasPost();
+ hasPostLiveData.postValue(true);
} else if(nextPageKey != null) {
loadSearchPostsInitial(callback, nextPageKey);
return;
} else {
- onPostFetchedCallback.noPost();
+ hasPostLiveData.postValue(false);
}
callback.onResult(newPosts, null, nextPageKey);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSourceFactory.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSourceFactory.java
index 67350b7b..8eb98be4 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSourceFactory.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSourceFactory.java
@@ -16,13 +16,12 @@ class PostDataSourceFactory extends DataSource.Factory {
private int postType;
private String sortType;
private int filter;
- private PostDataSource.OnPostFetchedCallback onPostFetchedCallback;
private PostDataSource postDataSource;
private MutableLiveData<PostDataSource> postDataSourceLiveData;
PostDataSourceFactory(Retrofit retrofit, String accessToken, Locale locale, int postType, String sortType,
- int filter, PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
+ int filter) {
this.retrofit = retrofit;
this.accessToken = accessToken;
this.locale = locale;
@@ -30,12 +29,10 @@ class PostDataSourceFactory extends DataSource.Factory {
this.postType = postType;
this.sortType = sortType;
this.filter = filter;
- this.onPostFetchedCallback = onPostFetchedCallback;
}
PostDataSourceFactory(Retrofit retrofit, String accessToken, Locale locale, String subredditName,
- int postType, String sortType, int filter,
- PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
+ int postType, String sortType, int filter) {
this.retrofit = retrofit;
this.accessToken = accessToken;
this.locale = locale;
@@ -44,12 +41,10 @@ class PostDataSourceFactory extends DataSource.Factory {
this.postType = postType;
this.sortType = sortType;
this.filter = filter;
- this.onPostFetchedCallback = onPostFetchedCallback;
}
PostDataSourceFactory(Retrofit retrofit, String accessToken, Locale locale, String subredditName,
- int postType, int filter,
- PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
+ int postType, int filter) {
this.retrofit = retrofit;
this.accessToken = accessToken;
this.locale = locale;
@@ -57,12 +52,10 @@ class PostDataSourceFactory extends DataSource.Factory {
postDataSourceLiveData = new MutableLiveData<>();
this.postType = postType;
this.filter = filter;
- this.onPostFetchedCallback = onPostFetchedCallback;
}
PostDataSourceFactory(Retrofit retrofit, String accessToken, Locale locale, String subredditName,
- String query, int postType, String sortType, int filter,
- PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
+ String query, int postType, String sortType, int filter) {
this.retrofit = retrofit;
this.accessToken = accessToken;
this.locale = locale;
@@ -72,23 +65,22 @@ class PostDataSourceFactory extends DataSource.Factory {
this.postType = postType;
this.sortType = sortType;
this.filter = filter;
- this.onPostFetchedCallback = onPostFetchedCallback;
}
@Override
public DataSource create() {
if(postType == PostDataSource.TYPE_FRONT_PAGE) {
postDataSource = new PostDataSource(retrofit, accessToken, locale, postType, sortType,
- filter, onPostFetchedCallback);
+ filter);
} else if(postType == PostDataSource.TYPE_SEARCH) {
postDataSource = new PostDataSource(retrofit, accessToken, locale, subredditName, query,
- postType, sortType, filter, onPostFetchedCallback);
+ postType, sortType, filter);
} else if(postType == PostDataSource.TYPE_SUBREDDIT) {
postDataSource = new PostDataSource(retrofit, accessToken, locale, subredditName, postType,
- sortType, filter, onPostFetchedCallback);
+ sortType, filter);
} else {
postDataSource = new PostDataSource(retrofit, accessToken, locale, subredditName, postType,
- filter, onPostFetchedCallback);
+ filter);
}
postDataSourceLiveData.postValue(postDataSource);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java
index 231a846a..811c318b 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java
@@ -201,20 +201,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
});
factory = new PostViewModel.Factory(mOauthRetrofit, accessToken,
- getResources().getConfiguration().locale, subredditName, query, postType, sortType, filter, new PostDataSource.OnPostFetchedCallback() {
- @Override
- public void hasPost() {
- mFetchPostInfoLinearLayout.setVisibility(View.GONE);
- }
-
- @Override
- public void noPost() {
- mFetchPostInfoLinearLayout.setOnClickListener(view -> {
- //Do nothing
- });
- showErrorView(R.string.no_posts);
- }
- });
+ getResources().getConfiguration().locale, subredditName, query, postType, sortType, filter);
} else if(postType == PostDataSource.TYPE_SUBREDDIT) {
String subredditName = getArguments().getString(EXTRA_NAME);
@@ -238,20 +225,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
});
factory = new PostViewModel.Factory(mOauthRetrofit, accessToken,
- getResources().getConfiguration().locale, subredditName, postType, sortType, filter, new PostDataSource.OnPostFetchedCallback() {
- @Override
- public void hasPost() {
- mFetchPostInfoLinearLayout.setVisibility(View.GONE);
- }
-
- @Override
- public void noPost() {
- mFetchPostInfoLinearLayout.setOnClickListener(view -> {
- //Do nothing
- });
- showErrorView(R.string.no_posts);
- }
- });
+ getResources().getConfiguration().locale, subredditName, postType, sortType, filter);
} else if(postType == PostDataSource.TYPE_USER) {
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mFetchPostInfoLinearLayout.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
@@ -278,21 +252,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
});
factory = new PostViewModel.Factory(mOauthRetrofit, accessToken,
- getResources().getConfiguration().locale, username, postType, sortType, filter,
- new PostDataSource.OnPostFetchedCallback() {
- @Override
- public void hasPost() {
- mFetchPostInfoLinearLayout.setVisibility(View.GONE);
- }
-
- @Override
- public void noPost() {
- mFetchPostInfoLinearLayout.setOnClickListener(view -> {
- //Do nothing
- });
- showErrorView(R.string.no_posts);
- }
- });
+ getResources().getConfiguration().locale, username, postType, sortType, filter);
} else {
mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, redditDataRoomDatabase,
accessToken, postType, true, new PostRecyclerViewAdapter.Callback() {
@@ -313,20 +273,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
});
factory = new PostViewModel.Factory(mOauthRetrofit, accessToken,
- getResources().getConfiguration().locale, postType, sortType, filter, new PostDataSource.OnPostFetchedCallback() {
- @Override
- public void hasPost() {
- mFetchPostInfoLinearLayout.setVisibility(View.GONE);
- }
-
- @Override
- public void noPost() {
- mFetchPostInfoLinearLayout.setOnClickListener(view -> {
- //Do nothing
- });
- showErrorView(R.string.no_posts);
- }
- });
+ getResources().getConfiguration().locale, postType, sortType, filter);
}
mPostRecyclerView.setAdapter(mAdapter);
@@ -346,6 +293,14 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
}
});
+ mPostViewModel.hasPost().observe(this, hasPost -> {
+ if(hasPost) {
+ mFetchPostInfoLinearLayout.setVisibility(View.GONE);
+ } else {
+ showErrorView(R.string.no_posts);
+ }
+ });
+
mPostViewModel.getPaginationNetworkState().observe(this, networkState -> {
mAdapter.setNetworkState(networkState);
});
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostViewModel.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostViewModel.java
index 7986d459..4a464f08 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostViewModel.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostViewModel.java
@@ -1,7 +1,6 @@
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;
@@ -18,17 +17,20 @@ public class PostViewModel extends ViewModel {
private PostDataSourceFactory postDataSourceFactory;
private LiveData<NetworkState> paginationNetworkState;
private LiveData<NetworkState> initialLoadingState;
+ private LiveData<Boolean> hasPostLiveData;
private LiveData<PagedList<Post>> posts;
private MutableLiveData<String> sortTypeLiveData;
public PostViewModel(Retrofit retrofit, String accessToken, Locale locale, int postType, String sortType,
- int filter, PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
- postDataSourceFactory = new PostDataSourceFactory(retrofit, accessToken, locale, postType, sortType, filter, onPostFetchedCallback);
+ int filter) {
+ postDataSourceFactory = new PostDataSourceFactory(retrofit, accessToken, locale, postType, sortType, filter);
initialLoadingState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
- (Function<PostDataSource, LiveData<NetworkState>>) PostDataSource::getInitialLoadStateLiveData);
+ PostDataSource::getInitialLoadStateLiveData);
paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
- (Function<PostDataSource, LiveData<NetworkState>>) PostDataSource::getPaginationNetworkStateLiveData);
+ PostDataSource::getPaginationNetworkStateLiveData);
+ hasPostLiveData = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
+ PostDataSource::hasPostLiveData);
sortTypeLiveData = new MutableLiveData<>();
sortTypeLiveData.postValue(sortType);
@@ -46,14 +48,16 @@ public class PostViewModel extends ViewModel {
}
public PostViewModel(Retrofit retrofit, String accessToken, Locale locale, String subredditName, int postType,
- String sortType, int filter, PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
+ String sortType, int filter) {
postDataSourceFactory = new PostDataSourceFactory(retrofit, accessToken, locale, subredditName,
- postType, sortType, filter, onPostFetchedCallback);
+ postType, sortType, filter);
initialLoadingState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
- (Function<PostDataSource, LiveData<NetworkState>>) PostDataSource::getInitialLoadStateLiveData);
+ PostDataSource::getInitialLoadStateLiveData);
paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
- (Function<PostDataSource, LiveData<NetworkState>>) PostDataSource::getPaginationNetworkStateLiveData);
+ PostDataSource::getPaginationNetworkStateLiveData);
+ hasPostLiveData = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
+ PostDataSource::hasPostLiveData);
sortTypeLiveData = new MutableLiveData<>();
sortTypeLiveData.postValue(sortType);
@@ -71,14 +75,16 @@ public class PostViewModel extends ViewModel {
}
public PostViewModel(Retrofit retrofit, String accessToken, Locale locale, String subredditName, int postType,
- int filter, PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
+ int filter) {
postDataSourceFactory = new PostDataSourceFactory(retrofit, accessToken, locale, subredditName,
- postType, filter, onPostFetchedCallback);
+ postType, filter);
initialLoadingState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
- dataSource -> dataSource.getInitialLoadStateLiveData());
+ PostDataSource::getInitialLoadStateLiveData);
paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
- (Function<PostDataSource, LiveData<NetworkState>>) PostDataSource::getPaginationNetworkStateLiveData);
+ PostDataSource::getPaginationNetworkStateLiveData);
+ hasPostLiveData = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
+ PostDataSource::hasPostLiveData);
PagedList.Config pagedListConfig =
(new PagedList.Config.Builder())
@@ -90,14 +96,16 @@ public class PostViewModel extends ViewModel {
}
public PostViewModel(Retrofit retrofit, String accessToken, Locale locale, String subredditName, String query,
- int postType, String sortType, int filter, PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
+ int postType, String sortType, int filter) {
postDataSourceFactory = new PostDataSourceFactory(retrofit, accessToken, locale, subredditName,
- query, postType, sortType, filter, onPostFetchedCallback);
+ query, postType, sortType, filter);
initialLoadingState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
- dataSource -> dataSource.getInitialLoadStateLiveData());
+ PostDataSource::getInitialLoadStateLiveData);
paginationNetworkState = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
- dataSource -> dataSource.getPaginationNetworkStateLiveData());
+ PostDataSource::getPaginationNetworkStateLiveData);
+ hasPostLiveData = Transformations.switchMap(postDataSourceFactory.getPostDataSourceLiveData(),
+ PostDataSource::hasPostLiveData);
sortTypeLiveData = new MutableLiveData<>();
sortTypeLiveData.postValue(sortType);
@@ -126,6 +134,10 @@ public class PostViewModel extends ViewModel {
return initialLoadingState;
}
+ LiveData<Boolean> hasPost() {
+ return hasPostLiveData;
+ }
+
void refresh() {
postDataSourceFactory.getPostDataSource().invalidate();
}
@@ -151,21 +163,19 @@ public class PostViewModel extends ViewModel {
private int postType;
private String sortType;
private int filter;
- private PostDataSource.OnPostFetchedCallback onPostFetchedCallback;
public Factory(Retrofit retrofit, String accessToken, Locale locale, int postType, String sortType,
- int filter, PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
+ int filter) {
this.retrofit = retrofit;
this.accessToken = accessToken;
this.locale = locale;
this.postType = postType;
this.sortType = sortType;
this.filter = filter;
- this.onPostFetchedCallback = onPostFetchedCallback;
}
public Factory(Retrofit retrofit, String accessToken, Locale locale, String subredditName, int postType,
- String sortType, int filter, PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
+ String sortType, int filter) {
this.retrofit = retrofit;
this.accessToken = accessToken;
this.locale = locale;
@@ -173,22 +183,20 @@ public class PostViewModel extends ViewModel {
this.postType = postType;
this.sortType = sortType;
this.filter = filter;
- this.onPostFetchedCallback = onPostFetchedCallback;
}
public Factory(Retrofit retrofit, String accessToken, Locale locale, String subredditName, int postType,
- int filter, PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
+ int filter) {
this.retrofit = retrofit;
this.accessToken = accessToken;
this.locale = locale;
this.subredditName = subredditName;
this.postType = postType;
this.filter = filter;
- this.onPostFetchedCallback = onPostFetchedCallback;
}
public Factory(Retrofit retrofit, String accessToken, Locale locale, String subredditName, String query,
- int postType, String sortType, int filter, PostDataSource.OnPostFetchedCallback onPostFetchedCallback) {
+ int postType, String sortType, int filter) {
this.retrofit = retrofit;
this.accessToken = accessToken;
this.locale = locale;
@@ -197,20 +205,19 @@ public class PostViewModel extends ViewModel {
this.postType = postType;
this.sortType = sortType;
this.filter = filter;
- this.onPostFetchedCallback = onPostFetchedCallback;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
if(postType == PostDataSource.TYPE_FRONT_PAGE) {
- return (T) new PostViewModel(retrofit, accessToken, locale, postType, sortType, filter, onPostFetchedCallback);
+ return (T) new PostViewModel(retrofit, accessToken, locale, postType, sortType, filter);
} else if(postType == PostDataSource.TYPE_SEARCH){
- return (T) new PostViewModel(retrofit, accessToken, locale, subredditName, query, postType, sortType, filter, onPostFetchedCallback);
+ return (T) new PostViewModel(retrofit, accessToken, locale, subredditName, query, postType, sortType, filter);
} else if(postType == PostDataSource.TYPE_SUBREDDIT) {
- return (T) new PostViewModel(retrofit, accessToken, locale, subredditName, postType, sortType, filter, onPostFetchedCallback);
+ return (T) new PostViewModel(retrofit, accessToken, locale, subredditName, postType, sortType, filter);
} else {
- return (T) new PostViewModel(retrofit, accessToken, locale, subredditName, postType, filter, onPostFetchedCallback);
+ return (T) new PostViewModel(retrofit, accessToken, locale, subredditName, postType, filter);
}
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSource.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSource.java
index 261c390b..759381ec 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSource.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSource.java
@@ -10,41 +10,41 @@ import SubredditDatabase.SubredditData;
import retrofit2.Retrofit;
public class SubredditListingDataSource extends PageKeyedDataSource<String, SubredditData> {
- interface OnSubredditListingDataFetchedCallback {
- void hasSubreddit();
- void noSubreddit();
- }
+
private Retrofit retrofit;
private String query;
private String sortType;
- private OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback;
private MutableLiveData<NetworkState> paginationNetworkStateLiveData;
private MutableLiveData<NetworkState> initialLoadStateLiveData;
+ private MutableLiveData<Boolean> hasSubredditLiveData;
private LoadInitialParams<String> initialParams;
private LoadInitialCallback<String, SubredditData> initialCallback;
private LoadParams<String> params;
private LoadCallback<String, SubredditData> callback;
- SubredditListingDataSource(Retrofit retrofit, String query, String sortType,
- OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) {
+ SubredditListingDataSource(Retrofit retrofit, String query, String sortType) {
this.retrofit = retrofit;
this.query = query;
this.sortType = sortType;
- this.onSubredditListingDataFetchedCallback = onSubredditListingDataFetchedCallback;
- paginationNetworkStateLiveData = new MutableLiveData();
- initialLoadStateLiveData = new MutableLiveData();
+ paginationNetworkStateLiveData = new MutableLiveData<>();
+ initialLoadStateLiveData = new MutableLiveData<>();
+ hasSubredditLiveData = new MutableLiveData<>();
}
- MutableLiveData getPaginationNetworkStateLiveData() {
+ MutableLiveData<NetworkState> getPaginationNetworkStateLiveData() {
return paginationNetworkStateLiveData;
}
- MutableLiveData getInitialLoadStateLiveData() {
+ MutableLiveData<NetworkState> getInitialLoadStateLiveData() {
return initialLoadStateLiveData;
}
+ MutableLiveData<Boolean> hasSubredditLiveData() {
+ return hasSubredditLiveData;
+ }
+
@Override
public void loadInitial(@NonNull LoadInitialParams<String> params, @NonNull LoadInitialCallback<String, SubredditData> callback) {
initialParams = params;
@@ -56,9 +56,9 @@ public class SubredditListingDataSource extends PageKeyedDataSource<String, Subr
@Override
public void onFetchSubredditListingDataSuccess(ArrayList<SubredditData> subredditData, String after) {
if(subredditData.size() == 0) {
- onSubredditListingDataFetchedCallback.noSubreddit();
+ hasSubredditLiveData.postValue(false);
} else {
- onSubredditListingDataFetchedCallback.hasSubreddit();
+ hasSubredditLiveData.postValue(true);
}
callback.onResult(subredditData, null, after);
@@ -82,7 +82,7 @@ public class SubredditListingDataSource extends PageKeyedDataSource<String, Subr
this.params = params;
this.callback = callback;
- if(params.key.equals("null")) {
+ if(params.key.equals("") || params.key.equals("null")) {
return;
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSourceFactory.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSourceFactory.java
index f31cff7a..8577c374 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSourceFactory.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingDataSourceFactory.java
@@ -9,25 +9,21 @@ public class SubredditListingDataSourceFactory extends DataSource.Factory {
private Retrofit retrofit;
private String query;
private String sortType;
- private SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback;
private SubredditListingDataSource subredditListingDataSource;
private MutableLiveData<SubredditListingDataSource> subredditListingDataSourceMutableLiveData;
- SubredditListingDataSourceFactory(Retrofit retrofit, String query, String sortType,
- SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) {
+ SubredditListingDataSourceFactory(Retrofit retrofit, String query, String sortType) {
this.retrofit = retrofit;
this.query = query;
this.sortType = sortType;
- this.onSubredditListingDataFetchedCallback = onSubredditListingDataFetchedCallback;
subredditListingDataSourceMutableLiveData = new MutableLiveData<>();
}
@NonNull
@Override
public DataSource create() {
- subredditListingDataSource = new SubredditListingDataSource(retrofit,
- query, sortType, onSubredditListingDataFetchedCallback);
+ subredditListingDataSource = new SubredditListingDataSource(retrofit, query, sortType);
subredditListingDataSourceMutableLiveData.postValue(subredditListingDataSource);
return subredditListingDataSource;
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingFragment.java
index 61399f2b..058143bb 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingFragment.java
@@ -86,24 +86,8 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
String accessToken = getArguments().getString(EXTRA_ACCESS_TOKEN);
String accountName = getArguments().getString(EXTRA_ACCOUNT_NAME);
- SubredditListingViewModel.Factory factory = new SubredditListingViewModel.Factory(mRetrofit, query,
- PostDataSource.SORT_TYPE_RELEVANCE, new SubredditListingDataSource.OnSubredditListingDataFetchedCallback() {
- @Override
- public void hasSubreddit() {
- mFetchSubredditListingInfoLinearLayout.setVisibility(View.GONE);
- }
-
- @Override
- public void noSubreddit() {
- mFetchSubredditListingInfoLinearLayout.setOnClickListener(view -> {
- //Do nothing
- });
- showErrorView(R.string.no_subreddits);
- }
- });
-
mAdapter = new SubredditListingRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit,
- accessToken, accountName, redditDataRoomDatabase.subscribedSubredditDao(),
+ accessToken, accountName, redditDataRoomDatabase,
new SubredditListingRecyclerViewAdapter.Callback() {
@Override
public void retryLoadingMore() {
@@ -124,6 +108,8 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
mSubredditListingRecyclerView.setAdapter(mAdapter);
+ SubredditListingViewModel.Factory factory = new SubredditListingViewModel.Factory(mRetrofit, query,
+ PostDataSource.SORT_TYPE_RELEVANCE);
mSubredditListingViewModel = ViewModelProviders.of(this, factory).get(SubredditListingViewModel.class);
mSubredditListingViewModel.getSubreddits().observe(this, subredditData -> mAdapter.submitList(subredditData));
@@ -139,6 +125,17 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
}
});
+ mSubredditListingViewModel.hasSubredditLiveData().observe(this, hasSubreddit -> {
+ if(hasSubreddit) {
+ mFetchSubredditListingInfoLinearLayout.setVisibility(View.GONE);
+ } else {
+ mFetchSubredditListingInfoLinearLayout.setOnClickListener(view -> {
+ //Do nothing
+ });
+ showErrorView(R.string.no_subreddits);
+ }
+ });
+
mSubredditListingViewModel.getPaginationNetworkState().observe(this, networkState -> {
mAdapter.setNetworkState(networkState);
});
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingRecyclerViewAdapter.java
index 853ae296..b5eb208c 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingRecyclerViewAdapter.java
@@ -21,7 +21,6 @@ import com.bumptech.glide.RequestManager;
import com.bumptech.glide.request.RequestOptions;
import SubredditDatabase.SubredditData;
-import SubscribedSubredditDatabase.SubscribedSubredditDao;
import butterknife.BindView;
import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
@@ -45,14 +44,14 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
private Retrofit retrofit;
private String accessToken;
private String accountName;
- private SubscribedSubredditDao subscribedSubredditDao;
+ private RedditDataRoomDatabase redditDataRoomDatabase;
private NetworkState networkState;
private Callback callback;
SubredditListingRecyclerViewAdapter(Context context, Retrofit oauthRetrofit, Retrofit retrofit,
String accessToken, String accountName,
- SubscribedSubredditDao subscribedSubredditDao,
+ RedditDataRoomDatabase redditDataRoomDatabase,
Callback callback) {
super(DIFF_CALLBACK);
this.context = context;
@@ -60,7 +59,7 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
this.retrofit = retrofit;
this.accessToken = accessToken;
this.accountName = accountName;
- this.subscribedSubredditDao = subscribedSubredditDao;
+ this.redditDataRoomDatabase = redditDataRoomDatabase;
this.callback = callback;
glide = Glide.with(context.getApplicationContext());
}
@@ -113,7 +112,7 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
((DataViewHolder) holder).subredditNameTextView.setText(subredditData.getName());
- new CheckIsSubscribedToSubredditAsyncTask(subscribedSubredditDao, subredditData.getName(), accountName,
+ new CheckIsSubscribedToSubredditAsyncTask(redditDataRoomDatabase, subredditData.getName(), accountName,
new CheckIsSubscribedToSubredditAsyncTask.CheckIsSubscribedToSubredditListener() {
@Override
public void isSubscribed() {
@@ -125,7 +124,7 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
((DataViewHolder) holder).subscribeButton.setVisibility(View.VISIBLE);
((DataViewHolder) holder).subscribeButton.setOnClickListener(view -> {
SubredditSubscription.subscribeToSubreddit(oauthRetrofit, retrofit,
- accessToken, accountName, subredditData.getName(), subscribedSubredditDao,
+ accessToken, accountName, subredditData.getName(), redditDataRoomDatabase,
new SubredditSubscription.SubredditSubscriptionListener() {
@Override
public void onSubredditSubscriptionSuccess() {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingViewModel.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingViewModel.java
index 3c304b90..3dcd6870 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingViewModel.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditListingViewModel.java
@@ -1,7 +1,6 @@
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;
@@ -17,17 +16,19 @@ public class SubredditListingViewModel extends ViewModel {
private SubredditListingDataSourceFactory subredditListingDataSourceFactory;
private LiveData<NetworkState> paginationNetworkState;
private LiveData<NetworkState> initialLoadingState;
+ private LiveData<Boolean> hasSubredditLiveData;
private LiveData<PagedList<SubredditData>> subreddits;
private MutableLiveData<String> sortTypeLiveData;
- SubredditListingViewModel(Retrofit retrofit, String query, String sortType,
- SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) {
- subredditListingDataSourceFactory = new SubredditListingDataSourceFactory(retrofit, query, sortType, onSubredditListingDataFetchedCallback);
+ SubredditListingViewModel(Retrofit retrofit, String query, String sortType) {
+ subredditListingDataSourceFactory = new SubredditListingDataSourceFactory(retrofit, query, sortType);
initialLoadingState = Transformations.switchMap(subredditListingDataSourceFactory.getSubredditListingDataSourceMutableLiveData(),
- (Function<SubredditListingDataSource, LiveData<NetworkState>>) SubredditListingDataSource::getInitialLoadStateLiveData);
+ SubredditListingDataSource::getInitialLoadStateLiveData);
paginationNetworkState = Transformations.switchMap(subredditListingDataSourceFactory.getSubredditListingDataSourceMutableLiveData(),
- (Function<SubredditListingDataSource, LiveData<NetworkState>>) SubredditListingDataSource::getPaginationNetworkStateLiveData);
+ SubredditListingDataSource::getPaginationNetworkStateLiveData);
+ hasSubredditLiveData = Transformations.switchMap(subredditListingDataSourceFactory.getSubredditListingDataSourceMutableLiveData(),
+ SubredditListingDataSource::hasSubredditLiveData);
sortTypeLiveData = new MutableLiveData<>();
sortTypeLiveData.postValue(sortType);
@@ -56,6 +57,10 @@ public class SubredditListingViewModel extends ViewModel {
return initialLoadingState;
}
+ LiveData<Boolean> hasSubredditLiveData() {
+ return hasSubredditLiveData;
+ }
+
void refresh() {
subredditListingDataSourceFactory.getSubredditListingDataSource().invalidate();
}
@@ -76,20 +81,17 @@ public class SubredditListingViewModel extends ViewModel {
private Retrofit retrofit;
private String query;
private String sortType;
- private SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback;
- public Factory(Retrofit retrofit, String query, String sortType,
- SubredditListingDataSource.OnSubredditListingDataFetchedCallback onSubredditListingDataFetchedCallback) {
+ public Factory(Retrofit retrofit, String query, String sortType) {
this.retrofit = retrofit;
this.query = query;
this.sortType = sortType;
- this.onSubredditListingDataFetchedCallback = onSubredditListingDataFetchedCallback;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
- return (T) new SubredditListingViewModel(retrofit, query, sortType, onSubredditListingDataFetchedCallback);
+ return (T) new SubredditListingViewModel(retrofit, query, sortType);
}
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditSubscription.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditSubscription.java
index c8517154..232386ec 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditSubscription.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditSubscription.java
@@ -9,7 +9,6 @@ import java.util.HashMap;
import java.util.Map;
import SubredditDatabase.SubredditData;
-import SubscribedSubredditDatabase.SubscribedSubredditDao;
import SubscribedSubredditDatabase.SubscribedSubredditData;
import retrofit2.Call;
import retrofit2.Callback;
@@ -23,23 +22,23 @@ class SubredditSubscription {
static void subscribeToSubreddit(Retrofit oauthRetrofit, Retrofit retrofit,
String accessToken, String subredditName, String accountName,
- SubscribedSubredditDao subscribedSubredditDao,
+ RedditDataRoomDatabase redditDataRoomDatabase,
SubredditSubscriptionListener subredditSubscriptionListener) {
subredditSubscription(oauthRetrofit, retrofit, accessToken, subredditName, accountName, "sub",
- subscribedSubredditDao, subredditSubscriptionListener);
+ redditDataRoomDatabase, subredditSubscriptionListener);
}
static void unsubscribeToSubreddit(Retrofit oauthRetrofit, String accessToken,
String subredditName, String accountName,
- SubscribedSubredditDao subscribedSubredditDao,
+ RedditDataRoomDatabase redditDataRoomDatabase,
SubredditSubscriptionListener subredditSubscriptionListener) {
subredditSubscription(oauthRetrofit, null, accessToken, subredditName, accountName, "unsub",
- subscribedSubredditDao,subredditSubscriptionListener);
+ redditDataRoomDatabase,subredditSubscriptionListener);
}
private static void subredditSubscription(Retrofit oauthRetrofit, Retrofit retrofit, String accessToken,
String subredditName, String accountName, String action,
- SubscribedSubredditDao subscribedSubredditDao,
+ RedditDataRoomDatabase redditDataRoomDatabase,
SubredditSubscriptionListener subredditSubscriptionListener) {
RedditAPI api = oauthRetrofit.create(RedditAPI.class);
@@ -56,7 +55,7 @@ class SubredditSubscription {
FetchSubredditData.fetchSubredditData(retrofit, subredditName, new FetchSubredditData.FetchSubredditDataListener() {
@Override
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
- new UpdateSubscriptionAsyncTask(subscribedSubredditDao,
+ new UpdateSubscriptionAsyncTask(redditDataRoomDatabase,
subredditData, accountName, true).execute();
}
@@ -66,7 +65,7 @@ class SubredditSubscription {
}
});
} else {
- new UpdateSubscriptionAsyncTask(subscribedSubredditDao, subredditName, accountName, false).execute();
+ new UpdateSubscriptionAsyncTask(redditDataRoomDatabase, subredditName, accountName, false).execute();
}
subredditSubscriptionListener.onSubredditSubscriptionSuccess();
} else {
@@ -85,23 +84,23 @@ class SubredditSubscription {
private static class UpdateSubscriptionAsyncTask extends AsyncTask<Void, Void, Void> {
- private SubscribedSubredditDao subscribedSubredditDao;
+ private RedditDataRoomDatabase redditDataRoomDatabase;
private String subredditName;
private String accountName;
private SubscribedSubredditData subscribedSubredditData;
private boolean isSubscribing;
- UpdateSubscriptionAsyncTask(SubscribedSubredditDao subscribedSubredditDao, String subredditName,
+ UpdateSubscriptionAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, String subredditName,
String accountName, boolean isSubscribing) {
- this.subscribedSubredditDao = subscribedSubredditDao;
+ this.redditDataRoomDatabase = redditDataRoomDatabase;
this.subredditName = subredditName;
this.accountName = accountName;
this.isSubscribing = isSubscribing;
}
- UpdateSubscriptionAsyncTask(SubscribedSubredditDao subscribedSubredditDao, SubredditData subredditData,
+ UpdateSubscriptionAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, SubredditData subredditData,
String accountName, boolean isSubscribing) {
- this.subscribedSubredditDao = subscribedSubredditDao;
+ this.redditDataRoomDatabase = redditDataRoomDatabase;
this.subscribedSubredditData = new SubscribedSubredditData(subredditData.getId(), subredditData.getName(),
subredditData.getIconUrl(), accountName);
this.accountName = accountName;
@@ -111,9 +110,9 @@ class SubredditSubscription {
@Override
protected Void doInBackground(Void... voids) {
if(isSubscribing) {
- subscribedSubredditDao.insert(subscribedSubredditData);
+ redditDataRoomDatabase.subscribedSubredditDao().insert(subscribedSubredditData);
} else {
- subscribedSubredditDao.deleteSubscribedSubreddit(subredditName, accountName);
+ redditDataRoomDatabase.subscribedSubredditDao().deleteSubscribedSubreddit(subredditName, accountName);
}
return null;
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSource.java b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSource.java
index e2873052..9a6dc3c6 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSource.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSource.java
@@ -10,42 +10,41 @@ import User.UserData;
import retrofit2.Retrofit;
public class UserListingDataSource extends PageKeyedDataSource<String, UserData> {
- interface OnUserListingDataFetchedCallback {
- void hasUser();
- void noUser();
- }
private Retrofit retrofit;
private String query;
private String sortType;
- private UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback;
private MutableLiveData<NetworkState> paginationNetworkStateLiveData;
private MutableLiveData<NetworkState> initialLoadStateLiveData;
+ private MutableLiveData<Boolean> hasUserLiveData;
private PageKeyedDataSource.LoadInitialParams<String> initialParams;
private PageKeyedDataSource.LoadInitialCallback<String, UserData> initialCallback;
private PageKeyedDataSource.LoadParams<String> params;
private PageKeyedDataSource.LoadCallback<String, UserData> callback;
- UserListingDataSource(Retrofit retrofit, String query, String sortType,
- UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) {
+ UserListingDataSource(Retrofit retrofit, String query, String sortType) {
this.retrofit = retrofit;
this.query = query;
this.sortType = sortType;
- this.onUserListingDataFetchedCallback = onUserListingDataFetchedCallback;
- paginationNetworkStateLiveData = new MutableLiveData();
- initialLoadStateLiveData = new MutableLiveData();
+ paginationNetworkStateLiveData = new MutableLiveData<>();
+ initialLoadStateLiveData = new MutableLiveData<>();
+ hasUserLiveData = new MutableLiveData<>();
}
- MutableLiveData getPaginationNetworkStateLiveData() {
+ MutableLiveData<NetworkState> getPaginationNetworkStateLiveData() {
return paginationNetworkStateLiveData;
}
- MutableLiveData getInitialLoadStateLiveData() {
+ MutableLiveData<NetworkState> getInitialLoadStateLiveData() {
return initialLoadStateLiveData;
}
+ MutableLiveData<Boolean> hasUserLiveData() {
+ return hasUserLiveData;
+ }
+
@Override
public void loadInitial(@NonNull PageKeyedDataSource.LoadInitialParams<String> params, @NonNull PageKeyedDataSource.LoadInitialCallback<String, UserData> callback) {
initialParams = params;
@@ -57,9 +56,9 @@ public class UserListingDataSource extends PageKeyedDataSource<String, UserData>
@Override
public void onFetchUserListingDataSuccess(ArrayList<UserData> UserData, String after) {
if(UserData.size() == 0) {
- onUserListingDataFetchedCallback.noUser();
+ hasUserLiveData.postValue(false);
} else {
- onUserListingDataFetchedCallback.hasUser();
+ hasUserLiveData.postValue(true);
}
callback.onResult(UserData, null, after);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSourceFactory.java b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSourceFactory.java
index c014687c..702ce8c6 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSourceFactory.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingDataSourceFactory.java
@@ -9,25 +9,21 @@ public class UserListingDataSourceFactory extends DataSource.Factory {
private Retrofit retrofit;
private String query;
private String sortType;
- private UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback;
private UserListingDataSource userListingDataSource;
private MutableLiveData<UserListingDataSource> userListingDataSourceMutableLiveData;
- UserListingDataSourceFactory(Retrofit retrofit, String query, String sortType,
- UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) {
+ UserListingDataSourceFactory(Retrofit retrofit, String query, String sortType) {
this.retrofit = retrofit;
this.query = query;
this.sortType = sortType;
- this.onUserListingDataFetchedCallback = onUserListingDataFetchedCallback;
userListingDataSourceMutableLiveData = new MutableLiveData<>();
}
@NonNull
@Override
public DataSource create() {
- userListingDataSource = new UserListingDataSource(retrofit,
- query, sortType, onUserListingDataFetchedCallback);
+ userListingDataSource = new UserListingDataSource(retrofit, query, sortType);
userListingDataSourceMutableLiveData.postValue(userListingDataSource);
return userListingDataSource;
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingFragment.java
index 94b6bdd4..04fe267d 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingFragment.java
@@ -81,28 +81,14 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
String accessToken = getArguments().getString(EXTRA_ACCESS_TOKEN);
String accountName = getArguments().getString(EXTRA_ACCOUNT_NAME);
- UserListingViewModel.Factory factory = new UserListingViewModel.Factory(mRetrofit, mQuery,
- PostDataSource.SORT_TYPE_RELEVANCE, new UserListingDataSource.OnUserListingDataFetchedCallback() {
- @Override
- public void hasUser() {
- mFetchUserListingInfoLinearLayout.setVisibility(View.GONE);
- }
-
- @Override
- public void noUser() {
- mFetchUserListingInfoLinearLayout.setOnClickListener(view -> {
- //Do nothing
- });
- showErrorView(R.string.no_users);
- }
- });
-
mAdapter = new UserListingRecyclerViewAdapter(getActivity(), mOauthRetrofit, mRetrofit,
accessToken, accountName, redditDataRoomDatabase.subscribedUserDao(),
() -> mUserListingViewModel.retryLoadingMore());
mUserListingRecyclerView.setAdapter(mAdapter);
+ UserListingViewModel.Factory factory = new UserListingViewModel.Factory(mRetrofit, mQuery,
+ PostDataSource.SORT_TYPE_RELEVANCE);
mUserListingViewModel = ViewModelProviders.of(this, factory).get(UserListingViewModel.class);
mUserListingViewModel.getUsers().observe(this, UserData -> mAdapter.submitList(UserData));
@@ -118,6 +104,17 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
}
});
+ mUserListingViewModel.hasUser().observe(this, hasUser -> {
+ if(hasUser) {
+ mFetchUserListingInfoLinearLayout.setVisibility(View.GONE);
+ } else {
+ mFetchUserListingInfoLinearLayout.setOnClickListener(view -> {
+ //Do nothing
+ });
+ showErrorView(R.string.no_users);
+ }
+ });
+
mUserListingViewModel.getPaginationNetworkState().observe(this, networkState -> {
mAdapter.setNetworkState(networkState);
});
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingViewModel.java b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingViewModel.java
index 45317ccf..de4ab542 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingViewModel.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/UserListingViewModel.java
@@ -1,7 +1,6 @@
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;
@@ -14,20 +13,22 @@ import User.UserData;
import retrofit2.Retrofit;
public class UserListingViewModel extends ViewModel {
- private UserListingDataSourceFactory UserListingDataSourceFactory;
+ private UserListingDataSourceFactory userListingDataSourceFactory;
private LiveData<NetworkState> paginationNetworkState;
private LiveData<NetworkState> initialLoadingState;
+ private LiveData<Boolean> hasUserLiveData;
private LiveData<PagedList<UserData>> users;
private MutableLiveData<String> sortTypeLiveData;
- UserListingViewModel(Retrofit retrofit, String query, String sortType,
- UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) {
- UserListingDataSourceFactory = new UserListingDataSourceFactory(retrofit, query, sortType, onUserListingDataFetchedCallback);
+ UserListingViewModel(Retrofit retrofit, String query, String sortType) {
+ userListingDataSourceFactory = new UserListingDataSourceFactory(retrofit, query, sortType);
- initialLoadingState = Transformations.switchMap(UserListingDataSourceFactory.getUserListingDataSourceMutableLiveData(),
- (Function<UserListingDataSource, LiveData<NetworkState>>) UserListingDataSource::getInitialLoadStateLiveData);
- paginationNetworkState = Transformations.switchMap(UserListingDataSourceFactory.getUserListingDataSourceMutableLiveData(),
- (Function<UserListingDataSource, LiveData<NetworkState>>) UserListingDataSource::getPaginationNetworkStateLiveData);
+ initialLoadingState = Transformations.switchMap(userListingDataSourceFactory.getUserListingDataSourceMutableLiveData(),
+ UserListingDataSource::getInitialLoadStateLiveData);
+ paginationNetworkState = Transformations.switchMap(userListingDataSourceFactory.getUserListingDataSourceMutableLiveData(),
+ UserListingDataSource::getPaginationNetworkStateLiveData);
+ hasUserLiveData = Transformations.switchMap(userListingDataSourceFactory.getUserListingDataSourceMutableLiveData(),
+ UserListingDataSource::hasUserLiveData);
sortTypeLiveData = new MutableLiveData<>();
sortTypeLiveData.postValue(sortType);
@@ -39,8 +40,8 @@ public class UserListingViewModel extends ViewModel {
.build();
users = Transformations.switchMap(sortTypeLiveData, sort -> {
- UserListingDataSourceFactory.changeSortType(sortTypeLiveData.getValue());
- return (new LivePagedListBuilder(UserListingDataSourceFactory, pagedListConfig)).build();
+ userListingDataSourceFactory.changeSortType(sortTypeLiveData.getValue());
+ return (new LivePagedListBuilder(userListingDataSourceFactory, pagedListConfig)).build();
});
}
@@ -56,16 +57,20 @@ public class UserListingViewModel extends ViewModel {
return initialLoadingState;
}
+ LiveData<Boolean> hasUser() {
+ return hasUserLiveData;
+ }
+
void refresh() {
- UserListingDataSourceFactory.getUserListingDataSource().invalidate();
+ userListingDataSourceFactory.getUserListingDataSource().invalidate();
}
void retry() {
- UserListingDataSourceFactory.getUserListingDataSource().retry();
+ userListingDataSourceFactory.getUserListingDataSource().retry();
}
void retryLoadingMore() {
- UserListingDataSourceFactory.getUserListingDataSource().retryLoadingMore();
+ userListingDataSourceFactory.getUserListingDataSource().retryLoadingMore();
}
void changeSortType(String sortType) {
@@ -76,20 +81,17 @@ public class UserListingViewModel extends ViewModel {
private Retrofit retrofit;
private String query;
private String sortType;
- private UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback;
- public Factory(Retrofit retrofit, String query, String sortType,
- UserListingDataSource.OnUserListingDataFetchedCallback onUserListingDataFetchedCallback) {
+ public Factory(Retrofit retrofit, String query, String sortType) {
this.retrofit = retrofit;
this.query = query;
this.sortType = sortType;
- this.onUserListingDataFetchedCallback = onUserListingDataFetchedCallback;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
- return (T) new UserListingViewModel(retrofit, query, sortType, onUserListingDataFetchedCallback);
+ return (T) new UserListingViewModel(retrofit, query, sortType);
}
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java
index 925ec500..c0bb4513 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java
@@ -31,7 +31,6 @@ import javax.inject.Named;
import SubredditDatabase.SubredditDao;
import SubredditDatabase.SubredditData;
import SubredditDatabase.SubredditViewModel;
-import SubscribedSubredditDatabase.SubscribedSubredditDao;
import butterknife.BindView;
import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
@@ -76,7 +75,6 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
private PostTypeBottomSheetFragment postTypeBottomSheetFragment;
private SortTypeBottomSheetFragment sortTypeBottomSheetFragment;
- private SubscribedSubredditDao subscribedSubredditDao;
private SubredditViewModel mSubredditViewModel;
@Inject
@@ -142,7 +140,6 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) toolbar.getLayoutParams();
params.topMargin = statusBarHeight;
- subscribedSubredditDao = mRedditDataRoomDatabase.subscribedSubredditDao();
glide = Glide.with(this);
mSubredditViewModel = ViewModelProviders.of(this,
@@ -239,7 +236,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
subscriptionReady = false;
if(subscribeSubredditChip.getText().equals(getResources().getString(R.string.subscribe))) {
SubredditSubscription.subscribeToSubreddit(mOauthRetrofit, mRetrofit, mAccessToken,
- subredditName, mAccountName, subscribedSubredditDao,
+ subredditName, mAccountName, mRedditDataRoomDatabase,
new SubredditSubscription.SubredditSubscriptionListener() {
@Override
public void onSubredditSubscriptionSuccess() {
@@ -257,7 +254,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
});
} else {
SubredditSubscription.unsubscribeToSubreddit(mOauthRetrofit, mAccessToken,
- subredditName, mAccountName, subscribedSubredditDao,
+ subredditName, mAccountName, mRedditDataRoomDatabase,
new SubredditSubscription.SubredditSubscriptionListener() {
@Override
public void onSubredditSubscriptionSuccess() {
@@ -277,7 +274,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
}
});
- new CheckIsSubscribedToSubredditAsyncTask(subscribedSubredditDao, subredditName, mAccountName,
+ new CheckIsSubscribedToSubredditAsyncTask(mRedditDataRoomDatabase, subredditName, mAccountName,
new CheckIsSubscribedToSubredditAsyncTask.CheckIsSubscribedToSubredditListener() {
@Override
public void isSubscribed() {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java
index 47e8c265..d8f983c9 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java
@@ -489,7 +489,6 @@ public class ViewUserDetailActivity extends AppCompatActivity {
break;
case 1:
commentsListingFragment = (CommentsListingFragment) fragment;
- break;
}
return fragment;
}
diff --git a/app/src/main/res/layout/fragment_followed_users_listing.xml b/app/src/main/res/layout/fragment_followed_users_listing.xml
index be07b5e7..c7e33729 100644
--- a/app/src/main/res/layout/fragment_followed_users_listing.xml
+++ b/app/src/main/res/layout/fragment_followed_users_listing.xml
@@ -27,7 +27,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
- android:gravity="center" />
+ android:gravity="center"
+ android:text="@string/no_users" />
</LinearLayout>
diff --git a/app/src/main/res/layout/fragment_subscribed_subreddits_listing.xml b/app/src/main/res/layout/fragment_subscribed_subreddits_listing.xml
index ccf44e0b..2263dd7c 100644
--- a/app/src/main/res/layout/fragment_subscribed_subreddits_listing.xml
+++ b/app/src/main/res/layout/fragment_subscribed_subreddits_listing.xml
@@ -28,7 +28,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center"
- android:text="@string/no_subreddits"/>
+ android:text="@string/no_subreddits" />
</LinearLayout>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 062c13fc..1234b405 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -35,9 +35,10 @@
<string name="load_posts_error">Error loading posts.\nTap to retry.</string>
<string name="search_subreddits_error">Error searching subreddits.\nTap to retry.</string>
<string name="search_users_error">Error searching users.\nTap to retry.</string>
- <string name="no_posts">No posts found.</string>
- <string name="no_subreddits">No subreddits found.</string>
- <string name="no_users">No users found.</string>
+ <string name="no_posts">No posts found</string>
+ <string name="no_comments">No comments found</string>
+ <string name="no_subreddits">No subreddits found</string>
+ <string name="no_users">No users found</string>
<string name="no_storage_permission">No storage permission to save this file</string>
<string name="load_comments_failed">Error loading comments.</string>