Rules can now show in private subreddits (#1181)

* Added oauth to fetching rules

* Added getRulesOauth for users that are logged in

Co-authored-by: Abi <u7290897@anu.edu.au>
This commit is contained in:
Abi0711 2022-11-02 23:18:00 +11:00 committed by GitHub
parent 2863fa90be
commit 0cab9663d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 5 deletions

View File

@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.apis.RedditAPI; import ml.docilealligator.infinityforreddit.apis.RedditAPI;
import ml.docilealligator.infinityforreddit.utils.APIUtils;
import ml.docilealligator.infinityforreddit.utils.JSONUtils; import ml.docilealligator.infinityforreddit.utils.JSONUtils;
import ml.docilealligator.infinityforreddit.utils.Utils; import ml.docilealligator.infinityforreddit.utils.Utils;
import retrofit2.Call; import retrofit2.Call;
@ -25,10 +26,10 @@ public class FetchRules {
void failed(); void failed();
} }
public static void fetchRules(Executor executor, Handler handler, Retrofit retrofit, String subredditName, public static void fetchRules(Executor executor, Handler handler, Retrofit retrofit, String accessToken, String subredditName,
FetchRulesListener fetchRulesListener) { FetchRulesListener fetchRulesListener) {
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
Call<String> rulesCall = api.getRules(subredditName); Call<String> rulesCall = accessToken == null ? api.getRules(subredditName) : api.getRulesOauth(APIUtils.getOAuthHeader(accessToken), subredditName);
rulesCall.enqueue(new Callback<String>() { rulesCall.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {

View File

@ -119,7 +119,7 @@ public class ReportActivity extends BaseActivity {
recyclerView.setAdapter(mAdapter); recyclerView.setAdapter(mAdapter);
if (rulesReasons == null) { if (rulesReasons == null) {
FetchRules.fetchRules(mExecutor, new Handler(), mRetrofit, mSubredditName, new FetchRules.FetchRulesListener() { FetchRules.fetchRules(mExecutor, new Handler(), mAccessToken == null ? mRetrofit : mOauthRetrofit, mAccessToken, mSubredditName, new FetchRules.FetchRulesListener() {
@Override @Override
public void success(ArrayList<Rule> rules) { public void success(ArrayList<Rule> rules) {
mAdapter.setRules(ReportReason.convertRulesToReasons(rules)); mAdapter.setRules(ReportReason.convertRulesToReasons(rules));

View File

@ -11,6 +11,7 @@ import android.view.Window;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
@ -64,6 +65,15 @@ public class RulesActivity extends BaseActivity {
@Inject @Inject
@Named("no_oauth") @Named("no_oauth")
Retrofit mRetrofit; Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
private String mAccessToken;
@Inject
@Named("current_account")
SharedPreferences mCurrentAccountSharedPreferences;
@Inject @Inject
@Named("default") @Named("default")
SharedPreferences mSharedPreferences; SharedPreferences mSharedPreferences;
@ -114,6 +124,7 @@ public class RulesActivity extends BaseActivity {
} }
} }
} }
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
appBarLayout.setBackgroundColor(mCustomThemeWrapper.getColorPrimary()); appBarLayout.setBackgroundColor(mCustomThemeWrapper.getColorPrimary());
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
@ -124,7 +135,7 @@ public class RulesActivity extends BaseActivity {
mAdapter = new RulesRecyclerViewAdapter(this, mCustomThemeWrapper, slidrInterface); mAdapter = new RulesRecyclerViewAdapter(this, mCustomThemeWrapper, slidrInterface);
recyclerView.setAdapter(mAdapter); recyclerView.setAdapter(mAdapter);
FetchRules.fetchRules(mExecutor, new Handler(), mRetrofit, mSubredditName, new FetchRules.FetchRulesListener() { FetchRules.fetchRules(mExecutor, new Handler(), mAccessToken == null ? mRetrofit : mOauthRetrofit, mAccessToken, mSubredditName, new FetchRules.FetchRulesListener() {
@Override @Override
public void success(ArrayList<Rule> rules) { public void success(ArrayList<Rule> rules) {
progressBar.setVisibility(View.GONE); progressBar.setVisibility(View.GONE);
@ -142,6 +153,7 @@ public class RulesActivity extends BaseActivity {
displayError(); displayError();
} }
}); });
} }
@Override @Override
@ -172,7 +184,7 @@ public class RulesActivity extends BaseActivity {
errorTextView.setOnClickListener(view -> { errorTextView.setOnClickListener(view -> {
progressBar.setVisibility(View.VISIBLE); progressBar.setVisibility(View.VISIBLE);
errorTextView.setVisibility(View.GONE); errorTextView.setVisibility(View.GONE);
FetchRules.fetchRules(mExecutor, new Handler(), mRetrofit, mSubredditName, new FetchRules.FetchRulesListener() { FetchRules.fetchRules(mExecutor, new Handler(), mAccessToken == null ? mRetrofit : mOauthRetrofit, mAccessToken, mSubredditName, new FetchRules.FetchRulesListener() {
@Override @Override
public void success(ArrayList<Rule> rules) { public void success(ArrayList<Rule> rules) {
progressBar.setVisibility(View.GONE); progressBar.setVisibility(View.GONE);

View File

@ -131,6 +131,9 @@ public interface RedditAPI {
@GET("/r/{subredditName}/about/rules.json?raw_json=1") @GET("/r/{subredditName}/about/rules.json?raw_json=1")
Call<String> getRules(@Path("subredditName") String subredditName); Call<String> getRules(@Path("subredditName") String subredditName);
@GET("/r/{subredditName}/about/rules.json?raw_json=1")
Call<String> getRulesOauth(@HeaderMap Map<String, String> headers, @Path("subredditName") String subredditName);
@GET("/comments/{id}/placeholder/{singleCommentId}.json?raw_json=1") @GET("/comments/{id}/placeholder/{singleCommentId}.json?raw_json=1")
Call<String> getPostAndCommentsSingleThreadByIdOauth(@Path("id") String id, @Path("singleCommentId") String singleCommentId, Call<String> getPostAndCommentsSingleThreadByIdOauth(@Path("id") String id, @Path("singleCommentId") String singleCommentId,
@Query("sort") String sortType, @Query("context") String contextNumber, @Query("sort") String sortType, @Query("context") String contextNumber,