mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-07 03:07:26 +01:00
Anonymous subreddit subscription is available.
This commit is contained in:
parent
e8cb0d329c
commit
2ef72bc798
@ -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.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;
|
||||
}
|
||||
|
||||
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.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.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;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} 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.unsubscribe_failed, 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;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -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() {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
private static void subredditSubscription(Retrofit oauthRetrofit, Retrofit retrofit, String accessToken,
|
||||
String subredditName, String accountName, String action,
|
||||
public static void anonymousUnsubscribeToSubreddit(Executor executor, Handler handler,
|
||||
RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
String subredditName,
|
||||
SubredditSubscriptionListener subredditSubscriptionListener) {
|
||||
removeSubscription(executor, handler, redditDataRoomDatabase, subredditName, "-", subredditSubscriptionListener);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
redditDataRoomDatabase.subscribedSubredditDao().insert(subscribedSubredditData);
|
||||
handler.post(subredditSubscriptionListener::onSubredditSubscriptionSuccess);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
if (isSubscribing) {
|
||||
redditDataRoomDatabase.subscribedSubredditDao().insert(subscribedSubredditData);
|
||||
} else {
|
||||
redditDataRoomDatabase.subscribedSubredditDao().deleteSubscribedSubreddit(subredditName, accountName);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user