aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorAlex Ning <chineseperson5@gmail.com>2021-03-04 14:45:41 +0000
committerAlex Ning <chineseperson5@gmail.com>2021-03-04 14:45:41 +0000
commit2ef72bc79833f1b9224f9c4b8a1f2208f919da18 (patch)
tree081c319b596fb3fe2ad3d64a39f920ccd41e4dab /app
parente8cb0d329cd358e4ac2e8ee8c4e808e0d0389e50 (diff)
downloadinfinity-for-reddit-2ef72bc79833f1b9224f9c4b8a1f2208f919da18.tar
infinity-for-reddit-2ef72bc79833f1b9224f9c4b8a1f2208f919da18.tar.gz
infinity-for-reddit-2ef72bc79833f1b9224f9c4b8a1f2208f919da18.tar.bz2
infinity-for-reddit-2ef72bc79833f1b9224f9c4b8a1f2208f919da18.tar.lz
infinity-for-reddit-2ef72bc79833f1b9224f9c4b8a1f2208f919da18.tar.xz
infinity-for-reddit-2ef72bc79833f1b9224f9c4b8a1f2208f919da18.tar.zst
infinity-for-reddit-2ef72bc79833f1b9224f9c4b8a1f2208f919da18.zip
Anonymous subreddit subscription is available.
Diffstat (limited to '')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewSubredditDetailActivity.java122
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/adapters/SubredditListingRecyclerViewAdapter.java5
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/subreddit/SubredditSubscription.java124
-rw-r--r--app/src/main/res/layout/fragment_post.xml27
4 files changed, 170 insertions, 108 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewSubredditDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewSubredditDetailActivity.java
index e076a293..15c0071d 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewSubredditDetailActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewSubredditDetailActivity.java
@@ -817,48 +817,86 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
subscribeSubredditChip.setOnClickListener(view -> {
if (mAccessToken == null) {
- Toast.makeText(ViewSubredditDetailActivity.this, R.string.login_first, Toast.LENGTH_SHORT).show();
- return;
- }
-
- if (subscriptionReady) {
- subscriptionReady = false;
- if (getResources().getString(R.string.subscribe).contentEquals(subscribeSubredditChip.getText())) {
- SubredditSubscription.subscribeToSubreddit(mOauthRetrofit, mRetrofit, mAccessToken,
- subredditName, mAccountName, mRedditDataRoomDatabase,
- new SubredditSubscription.SubredditSubscriptionListener() {
- @Override
- public void onSubredditSubscriptionSuccess() {
- subscribeSubredditChip.setText(R.string.unsubscribe);
- subscribeSubredditChip.setChipBackgroundColor(ColorStateList.valueOf(subscribedColor));
- makeSnackbar(R.string.subscribed, false);
- subscriptionReady = true;
- }
-
- @Override
- public void onSubredditSubscriptionFail() {
- makeSnackbar(R.string.subscribe_failed, false);
- subscriptionReady = true;
- }
- });
- } else {
- SubredditSubscription.unsubscribeToSubreddit(mOauthRetrofit, mAccessToken,
- subredditName, mAccountName, mRedditDataRoomDatabase,
- new SubredditSubscription.SubredditSubscriptionListener() {
- @Override
- public void onSubredditSubscriptionSuccess() {
- subscribeSubredditChip.setText(R.string.subscribe);
- subscribeSubredditChip.setChipBackgroundColor(ColorStateList.valueOf(unsubscribedColor));
- makeSnackbar(R.string.unsubscribed, false);
- subscriptionReady = true;
- }
-
- @Override
- public void onSubredditSubscriptionFail() {
- makeSnackbar(R.string.unsubscribe_failed, false);
- subscriptionReady = true;
- }
- });
+ if (subscriptionReady) {
+ subscriptionReady = false;
+ if (getResources().getString(R.string.subscribe).contentEquals(subscribeSubredditChip.getText())) {
+ SubredditSubscription.anonymousSubscribeToSubreddit(mExecutor, new Handler(),
+ mRetrofit, mRedditDataRoomDatabase, subredditName,
+ new SubredditSubscription.SubredditSubscriptionListener() {
+ @Override
+ public void onSubredditSubscriptionSuccess() {
+ subscribeSubredditChip.setText(R.string.unsubscribe);
+ subscribeSubredditChip.setChipBackgroundColor(ColorStateList.valueOf(subscribedColor));
+ makeSnackbar(R.string.subscribed, false);
+ subscriptionReady = true;
+ }
+
+ @Override
+ public void onSubredditSubscriptionFail() {
+ makeSnackbar(R.string.subscribe_failed, false);
+ subscriptionReady = true;
+ }
+ });
+ } else {
+ SubredditSubscription.anonymousUnsubscribeToSubreddit(mExecutor, new Handler(),
+ mRedditDataRoomDatabase, subredditName,
+ new SubredditSubscription.SubredditSubscriptionListener() {
+ @Override
+ public void onSubredditSubscriptionSuccess() {
+ subscribeSubredditChip.setText(R.string.subscribe);
+ subscribeSubredditChip.setChipBackgroundColor(ColorStateList.valueOf(unsubscribedColor));
+ makeSnackbar(R.string.unsubscribed, false);
+ subscriptionReady = true;
+ }
+
+ @Override
+ public void onSubredditSubscriptionFail() {
+ makeSnackbar(R.string.unsubscribe_failed, false);
+ subscriptionReady = true;
+ }
+ });
+ }
+ }
+ } else {
+ if (subscriptionReady) {
+ subscriptionReady = false;
+ if (getResources().getString(R.string.subscribe).contentEquals(subscribeSubredditChip.getText())) {
+ SubredditSubscription.subscribeToSubreddit(mExecutor, new Handler(), mOauthRetrofit,
+ mRetrofit, mAccessToken, subredditName, mAccountName, mRedditDataRoomDatabase,
+ new SubredditSubscription.SubredditSubscriptionListener() {
+ @Override
+ public void onSubredditSubscriptionSuccess() {
+ subscribeSubredditChip.setText(R.string.unsubscribe);
+ subscribeSubredditChip.setChipBackgroundColor(ColorStateList.valueOf(subscribedColor));
+ makeSnackbar(R.string.subscribed, false);
+ subscriptionReady = true;
+ }
+
+ @Override
+ public void onSubredditSubscriptionFail() {
+ makeSnackbar(R.string.subscribe_failed, false);
+ subscriptionReady = true;
+ }
+ });
+ } else {
+ SubredditSubscription.unsubscribeToSubreddit(mExecutor, new Handler(), mOauthRetrofit,
+ mAccessToken, subredditName, mAccountName, mRedditDataRoomDatabase,
+ new SubredditSubscription.SubredditSubscriptionListener() {
+ @Override
+ public void onSubredditSubscriptionSuccess() {
+ subscribeSubredditChip.setText(R.string.subscribe);
+ subscribeSubredditChip.setChipBackgroundColor(ColorStateList.valueOf(unsubscribedColor));
+ makeSnackbar(R.string.unsubscribed, false);
+ subscriptionReady = true;
+ }
+
+ @Override
+ public void onSubredditSubscriptionFail() {
+ makeSnackbar(R.string.unsubscribe_failed, false);
+ subscriptionReady = true;
+ }
+ });
+ }
}
}
});
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/SubredditListingRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/SubredditListingRecyclerViewAdapter.java
index 69fd6091..9e515c8b 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/SubredditListingRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/SubredditListingRecyclerViewAdapter.java
@@ -155,8 +155,9 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
public void isNotSubscribed() {
((DataViewHolder) holder).subscribeButton.setVisibility(View.VISIBLE);
((DataViewHolder) holder).subscribeButton.setOnClickListener(view -> {
- SubredditSubscription.subscribeToSubreddit(oauthRetrofit, retrofit,
- accessToken, subredditData.getName(), accountName, redditDataRoomDatabase,
+ SubredditSubscription.subscribeToSubreddit(executor, new Handler(),
+ oauthRetrofit, retrofit, accessToken, subredditData.getName(),
+ accountName, redditDataRoomDatabase,
new SubredditSubscription.SubredditSubscriptionListener() {
@Override
public void onSubredditSubscriptionSuccess() {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/subreddit/SubredditSubscription.java b/app/src/main/java/ml/docilealligator/infinityforreddit/subreddit/SubredditSubscription.java
index 31615903..eab9957d 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/subreddit/SubredditSubscription.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/subreddit/SubredditSubscription.java
@@ -1,39 +1,77 @@
package ml.docilealligator.infinityforreddit.subreddit;
-import android.os.AsyncTask;
+import android.os.Handler;
import androidx.annotation.NonNull;
import java.util.HashMap;
import java.util.Map;
+import java.util.concurrent.Executor;
-import ml.docilealligator.infinityforreddit.apis.RedditAPI;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
+import ml.docilealligator.infinityforreddit.apis.RedditAPI;
import ml.docilealligator.infinityforreddit.subscribedsubreddit.SubscribedSubredditData;
import ml.docilealligator.infinityforreddit.utils.APIUtils;
import retrofit2.Call;
import retrofit2.Callback;
+import retrofit2.Response;
import retrofit2.Retrofit;
public class SubredditSubscription {
- public static void subscribeToSubreddit(Retrofit oauthRetrofit, Retrofit retrofit,
- String accessToken, String subredditName, String accountName,
- RedditDataRoomDatabase redditDataRoomDatabase,
+ public static void subscribeToSubreddit(Executor executor, Handler handler, Retrofit oauthRetrofit,
+ Retrofit retrofit, String accessToken, String subredditName,
+ String accountName, RedditDataRoomDatabase redditDataRoomDatabase,
SubredditSubscriptionListener subredditSubscriptionListener) {
- subredditSubscription(oauthRetrofit, retrofit, accessToken, subredditName, accountName, "sub",
- redditDataRoomDatabase, subredditSubscriptionListener);
+ subredditSubscription(executor, handler, oauthRetrofit, retrofit, accessToken, subredditName,
+ accountName, "sub", redditDataRoomDatabase, subredditSubscriptionListener);
}
- public static void unsubscribeToSubreddit(Retrofit oauthRetrofit, String accessToken,
- String subredditName, String accountName,
+ public static void anonymousSubscribeToSubreddit(Executor executor, Handler handler, Retrofit retrofit,
+ RedditDataRoomDatabase redditDataRoomDatabase,
+ String subredditName,
+ SubredditSubscriptionListener subredditSubscriptionListener) {
+ retrofit.create(RedditAPI.class).getSubredditData(subredditName).enqueue(new Callback<String>() {
+ @Override
+ public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
+ FetchSubredditData.fetchSubredditData(retrofit, subredditName, new FetchSubredditData.FetchSubredditDataListener() {
+ @Override
+ public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
+ insertSubscription(executor, handler, redditDataRoomDatabase,
+ subredditData, "-", subredditSubscriptionListener);
+ }
+
+ @Override
+ public void onFetchSubredditDataFail(boolean isQuarantined) {
+
+ }
+ });
+ }
+
+ @Override
+ public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
+ subredditSubscriptionListener.onSubredditSubscriptionFail();
+ }
+ });
+ }
+
+ public static void unsubscribeToSubreddit(Executor executor, Handler handler, Retrofit oauthRetrofit,
+ String accessToken, String subredditName, String accountName,
RedditDataRoomDatabase redditDataRoomDatabase,
SubredditSubscriptionListener subredditSubscriptionListener) {
- subredditSubscription(oauthRetrofit, null, accessToken, subredditName, accountName, "unsub",
- redditDataRoomDatabase, subredditSubscriptionListener);
+ subredditSubscription(executor, handler, oauthRetrofit, null, accessToken, subredditName,
+ accountName, "unsub", redditDataRoomDatabase, subredditSubscriptionListener);
+ }
+
+ public static void anonymousUnsubscribeToSubreddit(Executor executor, Handler handler,
+ RedditDataRoomDatabase redditDataRoomDatabase,
+ String subredditName,
+ SubredditSubscriptionListener subredditSubscriptionListener) {
+ removeSubscription(executor, handler, redditDataRoomDatabase, subredditName, "-", subredditSubscriptionListener);
}
- private static void subredditSubscription(Retrofit oauthRetrofit, Retrofit retrofit, String accessToken,
- String subredditName, String accountName, String action,
+ private static void subredditSubscription(Executor executor, Handler handler, Retrofit oauthRetrofit,
+ Retrofit retrofit, String accessToken, String subredditName,
+ String accountName, String action,
RedditDataRoomDatabase redditDataRoomDatabase,
SubredditSubscriptionListener subredditSubscriptionListener) {
RedditAPI api = oauthRetrofit.create(RedditAPI.class);
@@ -51,8 +89,8 @@ public class SubredditSubscription {
FetchSubredditData.fetchSubredditData(retrofit, subredditName, new FetchSubredditData.FetchSubredditDataListener() {
@Override
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
- new UpdateSubscriptionAsyncTask(redditDataRoomDatabase,
- subredditData, accountName, true).execute();
+ insertSubscription(executor, handler, redditDataRoomDatabase,
+ subredditData, accountName, subredditSubscriptionListener);
}
@Override
@@ -61,9 +99,9 @@ public class SubredditSubscription {
}
});
} else {
- new UpdateSubscriptionAsyncTask(redditDataRoomDatabase, subredditName, accountName, false).execute();
+ removeSubscription(executor, handler, redditDataRoomDatabase, subredditName,
+ accountName, subredditSubscriptionListener);
}
- subredditSubscriptionListener.onSubredditSubscriptionSuccess();
} else {
subredditSubscriptionListener.onSubredditSubscriptionFail();
}
@@ -82,39 +120,25 @@ public class SubredditSubscription {
void onSubredditSubscriptionFail();
}
- private static class UpdateSubscriptionAsyncTask extends AsyncTask<Void, Void, Void> {
-
- private RedditDataRoomDatabase redditDataRoomDatabase;
- private String subredditName;
- private String accountName;
- private SubscribedSubredditData subscribedSubredditData;
- private boolean isSubscribing;
-
- UpdateSubscriptionAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, String subredditName,
- String accountName, boolean isSubscribing) {
- this.redditDataRoomDatabase = redditDataRoomDatabase;
- this.subredditName = subredditName;
- this.accountName = accountName;
- this.isSubscribing = isSubscribing;
- }
-
- UpdateSubscriptionAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, SubredditData subredditData,
- String accountName, boolean isSubscribing) {
- this.redditDataRoomDatabase = redditDataRoomDatabase;
- this.subscribedSubredditData = new SubscribedSubredditData(subredditData.getId(), subredditData.getName(),
+ private static void insertSubscription(Executor executor, Handler handler,
+ RedditDataRoomDatabase redditDataRoomDatabase,
+ SubredditData subredditData, String accountName,
+ SubredditSubscriptionListener subredditSubscriptionListener) {
+ executor.execute(() -> {
+ SubscribedSubredditData subscribedSubredditData = new SubscribedSubredditData(subredditData.getId(), subredditData.getName(),
subredditData.getIconUrl(), accountName, false);
- this.accountName = accountName;
- this.isSubscribing = isSubscribing;
- }
-
- @Override
- protected Void doInBackground(Void... voids) {
- if (isSubscribing) {
- redditDataRoomDatabase.subscribedSubredditDao().insert(subscribedSubredditData);
- } else {
- redditDataRoomDatabase.subscribedSubredditDao().deleteSubscribedSubreddit(subredditName, accountName);
- }
- return null;
- }
+ redditDataRoomDatabase.subscribedSubredditDao().insert(subscribedSubredditData);
+ handler.post(subredditSubscriptionListener::onSubredditSubscriptionSuccess);
+ });
+ }
+
+ private static void removeSubscription(Executor executor, Handler handler,
+ RedditDataRoomDatabase redditDataRoomDatabase,
+ String subredditName, String accountName,
+ SubredditSubscriptionListener subredditSubscriptionListener) {
+ executor.execute(() -> {
+ redditDataRoomDatabase.subscribedSubredditDao().deleteSubscribedSubreddit(subredditName, accountName);
+ handler.post(subredditSubscriptionListener::onSubredditSubscriptionSuccess);
+ });
}
}
diff --git a/app/src/main/res/layout/fragment_post.xml b/app/src/main/res/layout/fragment_post.xml
index 46a36ce1..22a662c2 100644
--- a/app/src/main/res/layout/fragment_post.xml
+++ b/app/src/main/res/layout/fragment_post.xml
@@ -1,23 +1,9 @@
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
- xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:application="ml.docilealligator.infinityforreddit.fragments.PostFragment">
- <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
- android:id="@+id/swipe_refresh_layout_post_fragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <ml.docilealligator.infinityforreddit.customviews.CustomToroContainer
- android:id="@+id/recycler_view_post_fragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clipToPadding="false" />
-
- </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
-
<LinearLayout
android:id="@+id/fetch_post_info_linear_layout_post_fragment"
android:layout_width="match_parent"
@@ -44,4 +30,17 @@
</LinearLayout>
+ <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+ android:id="@+id/swipe_refresh_layout_post_fragment"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <ml.docilealligator.infinityforreddit.customviews.CustomToroContainer
+ android:id="@+id/recycler_view_post_fragment"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipToPadding="false" />
+
+ </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
+
</androidx.coordinatorlayout.widget.CoordinatorLayout>