Load selected account's subscriptions in SubredditSelectionActivity when submitting posts using another account.

This commit is contained in:
Docile-Alligator
2022-04-24 11:48:41 +08:00
parent be4e73c504
commit d922c67ffc
3 changed files with 38 additions and 8 deletions

View File

@@ -15,12 +15,12 @@ import retrofit2.Response;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class FetchSubscribedThing { public class FetchSubscribedThing {
public static void fetchSubscribedThing(final Retrofit retrofit, String accessToken, String accountName, public static void fetchSubscribedThing(final Retrofit oauthRetrofit, String accessToken, String accountName,
final String lastItem, final ArrayList<SubscribedSubredditData> subscribedSubredditData, final String lastItem, final ArrayList<SubscribedSubredditData> subscribedSubredditData,
final ArrayList<SubscribedUserData> subscribedUserData, final ArrayList<SubscribedUserData> subscribedUserData,
final ArrayList<SubredditData> subredditData, final ArrayList<SubredditData> subredditData,
final FetchSubscribedThingListener fetchSubscribedThingListener) { final FetchSubscribedThingListener fetchSubscribedThingListener) {
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = oauthRetrofit.create(RedditAPI.class);
Call<String> subredditDataCall = api.getSubscribedThing(lastItem, APIUtils.getOAuthHeader(accessToken)); Call<String> subredditDataCall = api.getSubscribedThing(lastItem, APIUtils.getOAuthHeader(accessToken));
subredditDataCall.enqueue(new Callback<String>() { subredditDataCall.enqueue(new Callback<String>() {
@@ -40,7 +40,7 @@ public class FetchSubscribedThing {
fetchSubscribedThingListener.onFetchSubscribedThingSuccess( fetchSubscribedThingListener.onFetchSubscribedThingSuccess(
subscribedSubredditData, subscribedUserData, subredditData); subscribedSubredditData, subscribedUserData, subredditData);
} else { } else {
fetchSubscribedThing(retrofit, accessToken, accountName, lastItem, fetchSubscribedThing(oauthRetrofit, accessToken, accountName, lastItem,
subscribedSubredditData, subscribedUserData, subredditData, subscribedSubredditData, subscribedUserData, subredditData,
fetchSubscribedThingListener); fetchSubscribedThingListener);
} }

View File

@@ -315,12 +315,12 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
}); });
iconGifImageView.setOnClickListener(view -> { iconGifImageView.setOnClickListener(view -> {
Intent intent = new Intent(this, SubredditSelectionActivity.class); subredditNameTextView.performClick();
startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
}); });
subredditNameTextView.setOnClickListener(view -> { subredditNameTextView.setOnClickListener(view -> {
Intent intent = new Intent(this, SubredditSelectionActivity.class); Intent intent = new Intent(this, SubredditSelectionActivity.class);
intent.putExtra(SubredditSelectionActivity.EXTRA_SPECIFIED_ACCOUNT, selectedAccount);
startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE); startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
}); });

View File

@@ -27,6 +27,7 @@ import org.greenrobot.eventbus.Subscribe;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
@@ -34,10 +35,12 @@ import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.ActivityToolbarInterface; import ml.docilealligator.infinityforreddit.ActivityToolbarInterface;
import ml.docilealligator.infinityforreddit.AnyAccountAccessTokenAuthenticator;
import ml.docilealligator.infinityforreddit.FetchSubscribedThing; import ml.docilealligator.infinityforreddit.FetchSubscribedThing;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.account.Account;
import ml.docilealligator.infinityforreddit.asynctasks.InsertSubscribedThings; import ml.docilealligator.infinityforreddit.asynctasks.InsertSubscribedThings;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent; import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent;
@@ -46,10 +49,13 @@ import ml.docilealligator.infinityforreddit.subreddit.SubredditData;
import ml.docilealligator.infinityforreddit.subscribedsubreddit.SubscribedSubredditData; import ml.docilealligator.infinityforreddit.subscribedsubreddit.SubscribedSubredditData;
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserData; import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserData;
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class SubredditSelectionActivity extends BaseActivity implements ActivityToolbarInterface { public class SubredditSelectionActivity extends BaseActivity implements ActivityToolbarInterface {
public static final String EXTRA_SPECIFIED_ACCOUNT = "ESA";
public static final String EXTRA_EXTRA_CLEAR_SELECTION = "EECS"; public static final String EXTRA_EXTRA_CLEAR_SELECTION = "EECS";
public static final String EXTRA_RETURN_SUBREDDIT_NAME = "ERSN"; public static final String EXTRA_RETURN_SUBREDDIT_NAME = "ERSN";
public static final String EXTRA_RETURN_SUBREDDIT_ICON_URL = "ERSIURL"; public static final String EXTRA_RETURN_SUBREDDIT_ICON_URL = "ERSIURL";
@@ -68,6 +74,9 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity
@BindView(R.id.toolbar_subreddit_selection_activity) @BindView(R.id.toolbar_subreddit_selection_activity)
Toolbar toolbar; Toolbar toolbar;
@Inject @Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth") @Named("oauth")
Retrofit mOauthRetrofit; Retrofit mOauthRetrofit;
@Inject @Inject
@@ -128,9 +137,30 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null); if (getIntent().hasExtra(EXTRA_SPECIFIED_ACCOUNT)) {
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null); Account specifiedAccount = getIntent().getParcelableExtra(EXTRA_SPECIFIED_ACCOUNT);
mAccountProfileImageUrl = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, null); if (specifiedAccount != null) {
mAccessToken = specifiedAccount.getAccessToken();
mAccountName = specifiedAccount.getAccountName();
mAccountProfileImageUrl = specifiedAccount.getProfileImageUrl();
mOauthRetrofit = mOauthRetrofit.newBuilder().client(new OkHttpClient.Builder().authenticator(new AnyAccountAccessTokenAuthenticator(mRetrofit, mRedditDataRoomDatabase, specifiedAccount, mCurrentAccountSharedPreferences))
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
.build())
.build();
} else {
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
mAccountProfileImageUrl = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, null);
}
} else {
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
mAccountProfileImageUrl = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, null);
}
if (savedInstanceState == null) { if (savedInstanceState == null) {
bindView(true); bindView(true);