aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
authorAlex Ning <chineseperson5@gmail.com>2018-08-28 15:59:03 +0000
committerAlex Ning <chineseperson5@gmail.com>2018-08-28 15:59:03 +0000
commit2a57e4d5b4d1ea8dc33ce64d659e886a840ca435 (patch)
tree5fb890c38e5f3bc6ae5807724b09d4f0ef364e9c /app/src/main/java
parenta6a951732d311d1355b8145fca3525d66aad7686 (diff)
downloadinfinity-for-reddit-2a57e4d5b4d1ea8dc33ce64d659e886a840ca435.tar
infinity-for-reddit-2a57e4d5b4d1ea8dc33ce64d659e886a840ca435.tar.gz
infinity-for-reddit-2a57e4d5b4d1ea8dc33ce64d659e886a840ca435.tar.bz2
infinity-for-reddit-2a57e4d5b4d1ea8dc33ce64d659e886a840ca435.tar.lz
infinity-for-reddit-2a57e4d5b4d1ea8dc33ce64d659e886a840ca435.tar.xz
infinity-for-reddit-2a57e4d5b4d1ea8dc33ce64d659e886a840ca435.tar.zst
infinity-for-reddit-2a57e4d5b4d1ea8dc33ce64d659e886a840ca435.zip
Use Retrofit to send API requests. Rename some methods. Changing the type of some methods related to fetching data to static.
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/AcquireAccessToken.java94
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/CommentRecyclerViewAdapter.java17
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java10
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java46
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java129
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java81
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java36
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java44
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostPaginationScrollListener.java16
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java14
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java24
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java12
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/RefreshAccessToken.java82
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java4
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java72
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java17
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/VoteThing.java166
17 files changed, 390 insertions, 474 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/AcquireAccessToken.java b/app/src/main/java/ml/docilealligator/infinityforreddit/AcquireAccessToken.java
deleted file mode 100644
index 0a9861fd..00000000
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/AcquireAccessToken.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package ml.docilealligator.infinityforreddit;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.util.Log;
-import android.widget.Toast;
-
-import com.android.volley.Request;
-import com.android.volley.RequestQueue;
-import com.android.volley.Response;
-import com.android.volley.VolleyError;
-import com.android.volley.toolbox.StringRequest;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Created by alex on 3/13/18.
- */
-
-class AcquireAccessToken {
-
- interface AcquireAccessTokenListener {
- void onAcquireAccessTokenSuccess();
- void onAcquireAccessTokenFail();
- }
-
- private Context mContext;
- private AcquireAccessTokenListener mAcquireAccessTokenListener;
-
- AcquireAccessToken(Context context) {
- mContext = context;
- }
-
- void refreshAccessToken(RequestQueue refreshQueue, AcquireAccessTokenListener acquireAccessTokenListener) {
- if(mContext != null) {
- mAcquireAccessTokenListener = acquireAccessTokenListener;
- final String refreshToken = mContext.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE).getString(SharedPreferencesUtils.REFRESH_TOKEN_KEY, "");
- final SharedPreferences.Editor editor = mContext.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE).edit();
- StringRequest newTokenRequest = new StringRequest(Request.Method.POST, RedditUtils.ACQUIRE_ACCESS_TOKEN_URL, new Response.Listener<String>() {
- @Override
- public void onResponse(String response) {
- try {
- JSONObject jsonObject = new JSONObject(response);
- String newAccessToken = jsonObject.getString(RedditUtils.ACCESS_TOKEN_KEY);
- int expireIn = jsonObject.getInt(RedditUtils.EXPIRES_IN_KEY);
- editor.putString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, newAccessToken);
- editor.putInt(SharedPreferencesUtils.ACCESS_TOKEN_EXPIRE_INTERVAL_KEY, expireIn);
- editor.apply();
-
- Log.i("access token", newAccessToken);
- mAcquireAccessTokenListener.onAcquireAccessTokenSuccess();
- } catch (JSONException e) {
- e.printStackTrace();
- mAcquireAccessTokenListener.onAcquireAccessTokenFail();
- Toast.makeText(mContext, "Error parsing JSON object when getting the access token", Toast.LENGTH_SHORT).show();
- Log.i("main activity", "Error parsing JSON object when getting the access token");
- }
- }
- }, new Response.ErrorListener() {
- @Override
- public void onErrorResponse(VolleyError error) {
- Toast.makeText(mContext, "Error getting the new access token", Toast.LENGTH_SHORT).show();
- mAcquireAccessTokenListener.onAcquireAccessTokenFail();
- Log.i("Error", "getting access token");
- }
- }) {
- @Override
- protected Map<String, String> getParams() {
- Map<String, String> params = new HashMap<>();
- params.put(RedditUtils.GRANT_TYPE_KEY, RedditUtils.GRANT_TYPE_REFRESH_TOKEN);
- params.put(RedditUtils.REFRESH_TOKEN_KEY, refreshToken);
- return params;
- }
-
- @Override
- public Map<String, String> getHeaders() {
- return RedditUtils.getHttpBasicAuthHeader();
- }
- };
- newTokenRequest.setTag(AcquireAccessToken.class);
-
- long queryAccessTokenTime = Calendar.getInstance().getTimeInMillis();
- editor.putLong(SharedPreferencesUtils.QUERY_ACCESS_TOKEN_TIME_KEY, queryAccessTokenTime);
- editor.apply();
-
- refreshQueue.add(newTokenRequest);
- }
- }
-}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/CommentRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/CommentRecyclerViewAdapter.java
index 8af5a765..5d876dc7 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/CommentRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/CommentRecyclerViewAdapter.java
@@ -12,8 +12,6 @@ import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
-import com.android.volley.RequestQueue;
-
import org.sufficientlysecure.htmltextview.HtmlTextView;
import java.util.ArrayList;
@@ -21,15 +19,10 @@ import java.util.ArrayList;
class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context mContext;
private ArrayList<CommentData> mCommentData;
- private RequestQueue mVoteThingRequestQueue;
- private RequestQueue mAcquireAccessTokenRequestQueue;
- CommentRecyclerViewAdapter(Context context, ArrayList<CommentData> commentData,
- RequestQueue voteThingRequestQueue, RequestQueue acquireAccessTokenRequestQueue) {
+ CommentRecyclerViewAdapter(Context context, ArrayList<CommentData> commentData) {
mContext = context;
mCommentData = commentData;
- mVoteThingRequestQueue = voteThingRequestQueue;
- mAcquireAccessTokenRequestQueue = acquireAccessTokenRequestQueue;
}
@NonNull
@@ -71,7 +64,7 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore() + 1));
}
- new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
+ VoteThing.voteThing(mContext, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess(int position) {
mCommentData.get(position).setVoteType(1);
@@ -95,7 +88,7 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
((CommentViewHolder) holder).upvoteButton.clearColorFilter();
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore() - 1));
- new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
+ VoteThing.voteThing(mContext, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess(int position) {
mCommentData.get(position).setVoteType(0);
@@ -130,7 +123,7 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore() - 1));
}
- new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
+ VoteThing.voteThing(mContext, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess(int position) {
mCommentData.get(position).setVoteType(-1);
@@ -154,7 +147,7 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
((CommentViewHolder) holder).downvoteButton.clearColorFilter();
((CommentViewHolder) holder).scoreTextView.setText(Integer.toString(mCommentData.get(position).getScore() + 1));
- new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
+ VoteThing.voteThing(mContext, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess(int position) {
mCommentData.get(position).setVoteType(0);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java
index e0fb82e8..20a0d444 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java
@@ -15,15 +15,7 @@ class FetchComment {
void onFetchCommentFail();
}
- private String subredditNamePrefixed;
- private String article;
-
- FetchComment(String subredditNamePrefixed, String article) {
- this.subredditNamePrefixed = subredditNamePrefixed;
- this.article = article;
- }
-
- void queryComment(final FetchCommentListener fetchCommentListener) {
+ static void queryComment(String subredditNamePrefixed, String article, final FetchCommentListener fetchCommentListener) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(RedditUtils.API_BASE_URI)
.addConverterFactory(ScalarsConverterFactory.create())
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java
index af7b6029..5baaede9 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java
@@ -1,10 +1,13 @@
package ml.docilealligator.infinityforreddit;
-import com.android.volley.Request;
-import com.android.volley.RequestQueue;
-import com.android.volley.Response;
-import com.android.volley.VolleyError;
-import com.android.volley.toolbox.StringRequest;
+import android.support.annotation.NonNull;
+import android.util.Log;
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+import retrofit2.Retrofit;
+import retrofit2.converter.scalars.ScalarsConverterFactory;
class FetchSubredditData {
interface FetchSubredditDataListener {
@@ -12,29 +15,26 @@ class FetchSubredditData {
void onFetchSubredditDataFail();
}
- private RequestQueue requestQueue;
- private String subredditName;
- private FetchSubredditDataListener mFetchSubredditDataListener;
+ static void fetchSubredditData(String subredditName, final FetchSubredditDataListener fetchSubredditDataListener) {
+ Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl(RedditUtils.API_BASE_URI)
+ .addConverterFactory(ScalarsConverterFactory.create())
+ .build();
- FetchSubredditData(RequestQueue requestQueue, String subredditName) {
- this.requestQueue = requestQueue;
- this.subredditName = subredditName;
- }
+ RedditAPI api = retrofit.create(RedditAPI.class);
- void querySubredditData(FetchSubredditDataListener fetchSubredditDataListener) {
- mFetchSubredditDataListener = fetchSubredditDataListener;
- StringRequest commentRequest = new StringRequest(Request.Method.GET, RedditUtils.getQuerySubredditDataUrl(subredditName), new Response.Listener<String>() {
+ Call<String> subredditData = api.getSubredditData(subredditName);
+ subredditData.enqueue(new Callback<String>() {
@Override
- public void onResponse(String response) {
- mFetchSubredditDataListener.onFetchSubredditDataSuccess(response);
+ public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
+ fetchSubredditDataListener.onFetchSubredditDataSuccess(response.body());
}
- }, new Response.ErrorListener() {
+
@Override
- public void onErrorResponse(VolleyError error) {
- mFetchSubredditDataListener.onFetchSubredditDataFail();
+ public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
+ Log.i("call failed", t.getMessage());
+ fetchSubredditDataListener.onFetchSubredditDataFail();
}
- }) {};
- commentRequest.setTag(FetchSubredditData.class);
- requestQueue.add(commentRequest);
+ });
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java
index 37719bfc..03e30f5e 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java
@@ -1,62 +1,51 @@
package ml.docilealligator.infinityforreddit;
import android.content.Context;
-import android.net.Uri;
-
-import com.android.volley.AuthFailureError;
-import com.android.volley.Request;
-import com.android.volley.RequestQueue;
-import com.android.volley.Response;
-import com.android.volley.VolleyError;
-import com.android.volley.toolbox.StringRequest;
+import android.support.annotation.NonNull;
+import android.util.Log;
import java.util.ArrayList;
-import java.util.Map;
-
-class FetchSubscribedThing {
- interface FetchSubscribedSubredditsListener {
- void onFetchSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
- ArrayList<SubscribedUserData> subscribedUserData,
- ArrayList<SubredditData> subredditData);
- void onFetchSubscribedSubredditsFail();
- }
-
- private Context context;
- private RequestQueue requestQueue;
- private FetchSubscribedSubredditsListener mFetchSubscribedSubredditsListener;
- private ArrayList<SubscribedSubredditData> mSubscribedSubredditData;
- private ArrayList<SubscribedUserData> mSubscribedUserData;
- private ArrayList<SubredditData> mSubredditData;
- private String mLastItem;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+import retrofit2.Retrofit;
+import retrofit2.converter.scalars.ScalarsConverterFactory;
- FetchSubscribedThing(Context context, RequestQueue requestQueue,
- ArrayList<SubscribedSubredditData> subscribedSubredditData,
- ArrayList<SubscribedUserData> subscribedUserData,
- ArrayList<SubredditData> subredditData) {
- this.context = context;
- this.requestQueue = requestQueue;
- mSubscribedSubredditData = subscribedSubredditData;
- mSubscribedUserData = subscribedUserData;
- mSubredditData = subredditData;
+class FetchSubscribedThing {
+ interface FetchSubscribedThingListener {
+ void onFetchSubscribedThingSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
+ ArrayList<SubscribedUserData> subscribedUserData,
+ ArrayList<SubredditData> subredditData);
+ void onFetchSubscribedThingFail();
}
- void fetchSubscribedSubreddits(FetchSubscribedSubredditsListener fetchUserInfoListener, final int refreshTime) {
+ static void fetchSubscribedThing(final Context context, final String lastItem,
+ final ArrayList<SubscribedSubredditData> subscribedSubredditData,
+ final ArrayList<SubscribedUserData> subscribedUserData,
+ final ArrayList<SubredditData> subredditData,
+ final FetchSubscribedThingListener fetchSubscribedThingListener, final int refreshTime) {
if(refreshTime < 0) {
- mFetchSubscribedSubredditsListener.onFetchSubscribedSubredditsFail();
+ fetchSubscribedThingListener.onFetchSubscribedThingFail();
return;
}
- Uri uri = Uri.parse(RedditUtils.OAUTH_API_BASE_URI + RedditUtils.SUBSCRIBED_SUBREDDITS)
- .buildUpon().appendQueryParameter(RedditUtils.AFTER_KEY, mLastItem)
- .appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE).build();
+ Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl(RedditUtils.OAUTH_API_BASE_URI)
+ .addConverterFactory(ScalarsConverterFactory.create())
+ .build();
- mFetchSubscribedSubredditsListener = fetchUserInfoListener;
- StringRequest commentRequest = new StringRequest(Request.Method.GET, uri.toString(), new Response.Listener<String>() {
+ RedditAPI api = retrofit.create(RedditAPI.class);
+
+ String accessToken = context.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE)
+ .getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, "");
+
+ Call<String> subredditDataCall = api.getSubscribedThing(lastItem, RedditUtils.getOAuthHeader(accessToken));
+ subredditDataCall.enqueue(new Callback<String>() {
@Override
- public void onResponse(String response) {
- ParseSubscribedThing.parseSubscribedSubreddits(response, mSubscribedSubredditData,
- mSubscribedUserData, mSubredditData,
+ public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
+ ParseSubscribedThing.parseSubscribedSubreddits(response.body(), subscribedSubredditData,
+ subscribedUserData, subredditData,
new ParseSubscribedThing.ParseSubscribedSubredditsListener() {
@Override
@@ -64,49 +53,37 @@ class FetchSubscribedThing {
ArrayList<SubscribedUserData> subscribedUserData,
ArrayList<SubredditData> subredditData,
String lastItem) {
- mSubscribedSubredditData = subscribedSubredditData;
- mSubscribedUserData = subscribedUserData;
- mSubredditData = subredditData;
- mLastItem = lastItem;
- if(mLastItem.equals("null")) {
- mFetchSubscribedSubredditsListener.onFetchSubscribedSubredditsSuccess(mSubscribedSubredditData,
- mSubscribedUserData, mSubredditData);
+ if(lastItem.equals("null")) {
+ fetchSubscribedThingListener.onFetchSubscribedThingSuccess(
+ subscribedSubredditData, subscribedUserData, subredditData);
} else {
- fetchSubscribedSubreddits(mFetchSubscribedSubredditsListener, refreshTime);
+ fetchSubscribedThing(context, lastItem, subscribedSubredditData,
+ subscribedUserData, subredditData,
+ fetchSubscribedThingListener, refreshTime);
}
}
@Override
public void onParseSubscribedSubredditsFail() {
-
+ fetchSubscribedThingListener.onFetchSubscribedThingFail();
}
});
}
- }, new Response.ErrorListener() {
- @Override
- public void onErrorResponse(VolleyError error) {
- if(error instanceof AuthFailureError) {
- new AcquireAccessToken(context).refreshAccessToken(requestQueue, new AcquireAccessToken.AcquireAccessTokenListener() {
- @Override
- public void onAcquireAccessTokenSuccess() {
- fetchSubscribedSubreddits(mFetchSubscribedSubredditsListener, refreshTime - 1);
- }
- @Override
- public void onAcquireAccessTokenFail() {}
- });
- } else {
- mFetchSubscribedSubredditsListener.onFetchSubscribedSubredditsFail();
- }
- }
- }) {
@Override
- public Map<String, String> getHeaders() {
- String accessToken = context.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE).getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, "");
- return RedditUtils.getOAuthHeader(accessToken);
+ public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
+ Log.i("call failed", t.getMessage());
+ RefreshAccessToken.refreshAccessToken(context, new RefreshAccessToken.RefreshAccessTokenListener() {
+ @Override
+ public void onRefreshAccessTokenSuccess() {
+ fetchSubscribedThing(context, lastItem, subscribedSubredditData,
+ subscribedUserData, subredditData, fetchSubscribedThingListener, refreshTime);
+ }
+
+ @Override
+ public void onRefreshAccessTokenFail() {}
+ });
}
- };
- commentRequest.setTag(FetchComment.class);
- requestQueue.add(commentRequest);
+ });
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java
index 274c667e..45957308 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java
@@ -1,16 +1,13 @@
package ml.docilealligator.infinityforreddit;
import android.content.Context;
-import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.util.Log;
-import com.android.volley.AuthFailureError;
-import com.android.volley.Request;
-import com.android.volley.RequestQueue;
-import com.android.volley.Response;
-import com.android.volley.VolleyError;
-import com.android.volley.toolbox.StringRequest;
-
-import java.util.Map;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Retrofit;
+import retrofit2.converter.scalars.ScalarsConverterFactory;
class FetchUserInfo {
interface FetchUserInfoListener {
@@ -18,57 +15,41 @@ class FetchUserInfo {
void onFetchUserInfoFail();
}
- private Context context;
- private RequestQueue requestQueue;
- private FetchUserInfoListener mFetchUserInfoListener;
-
- FetchUserInfo(Context context, RequestQueue requestQueue) {
- this.context = context;
- this.requestQueue = requestQueue;
- }
-
- void queryUserInfo(FetchUserInfoListener fetchUserInfoListener, final int refreshTime) {
+ static void fetchUserInfo(final Context context, final FetchUserInfoListener fetchUserInfoListener, final int refreshTime) {
if(refreshTime < 0) {
- mFetchUserInfoListener.onFetchUserInfoFail();
+ fetchUserInfoListener.onFetchUserInfoFail();
return;
}
- mFetchUserInfoListener = fetchUserInfoListener;
-
- Uri uri = Uri.parse(RedditUtils.OAUTH_API_BASE_URI + RedditUtils.USER_INFO_SUFFIX)
- .buildUpon().appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE)
+ Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl(RedditUtils.OAUTH_API_BASE_URI)
+ .addConverterFactory(ScalarsConverterFactory.create())
.build();
- StringRequest commentRequest = new StringRequest(Request.Method.GET, uri.toString(), new Response.Listener<String>() {
+ RedditAPI api = retrofit.create(RedditAPI.class);
+
+ String accessToken = context.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE)
+ .getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, "");
+ Call<String> userInfo = api.getUserInfo(RedditUtils.getOAuthHeader(accessToken));
+ userInfo.enqueue(new Callback<String>() {
@Override
- public void onResponse(String response) {
- mFetchUserInfoListener.onFetchUserInfoSuccess(response);
+ public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
+ fetchUserInfoListener.onFetchUserInfoSuccess(response.body());
}
- }, new Response.ErrorListener() {
- @Override
- public void onErrorResponse(VolleyError error) {
- if(error instanceof AuthFailureError) {
- new AcquireAccessToken(context).refreshAccessToken(requestQueue, new AcquireAccessToken.AcquireAccessTokenListener() {
- @Override
- public void onAcquireAccessTokenSuccess() {
- queryUserInfo(mFetchUserInfoListener, refreshTime - 1);
- }
- @Override
- public void onAcquireAccessTokenFail() {}
- });
- } else {
- mFetchUserInfoListener.onFetchUserInfoFail();
- }
- }
- }) {
@Override
- public Map<String, String> getHeaders() {
- String accessToken = context.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE).getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, "");
- return RedditUtils.getOAuthHeader(accessToken);
+ public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
+ Log.i("call failed", t.getMessage());
+ RefreshAccessToken.refreshAccessToken(context, new RefreshAccessToken.RefreshAccessTokenListener() {
+ @Override
+ public void onRefreshAccessTokenSuccess() {
+ fetchUserInfo(context, fetchUserInfoListener, refreshTime - 1);
+ }
+
+ @Override
+ public void onRefreshAccessTokenFail() {}
+ });
}
- };
- commentRequest.setTag(FetchComment.class);
- requestQueue.add(commentRequest);
+ });
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java
index d8bcdf08..181602e5 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java
@@ -21,7 +21,6 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
-import com.android.volley.toolbox.Volley;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
@@ -100,15 +99,15 @@ public class MainActivity extends AppCompatActivity {
queryAccessTokenTime.add(Calendar.SECOND, interval - 300);
if(now.after(queryAccessTokenTime)) {
- new AcquireAccessToken(this).refreshAccessToken(Volley.newRequestQueue(this),
- new AcquireAccessToken.AcquireAccessTokenListener() {
+ RefreshAccessToken.refreshAccessToken(this,
+ new RefreshAccessToken.RefreshAccessTokenListener() {
@Override
- public void onAcquireAccessTokenSuccess() {
+ public void onRefreshAccessTokenSuccess() {
loadUserData(savedInstanceState);
}
@Override
- public void onAcquireAccessTokenFail() {}
+ public void onRefreshAccessTokenFail() {}
});
} else {
loadUserData(savedInstanceState);
@@ -179,19 +178,19 @@ public class MainActivity extends AppCompatActivity {
}
private void loadUserData(Bundle savedInstanceState) {
- if(savedInstanceState == null) {
- if(!mFetchUserInfoSuccess) {
- new FetchUserInfo(this, Volley.newRequestQueue(this)).queryUserInfo(new FetchUserInfo.FetchUserInfoListener() {
+ if (savedInstanceState == null) {
+ if (!mFetchUserInfoSuccess) {
+ FetchUserInfo.fetchUserInfo(this, new FetchUserInfo.FetchUserInfoListener() {
@Override
public void onFetchUserInfoSuccess(String response) {
ParseUserInfo.parseUserInfo(response, new ParseUserInfo.ParseUserInfoListener() {
@Override
public void onParseUserInfoSuccess(String name, String profileImageUrl, String bannerImageUrl, int karma) {
mNameTextView.setText(name);
- if(!mProfileImageUrl.equals("")) {
+ if (!mProfileImageUrl.equals("")) {
glide.load(profileImageUrl).into(mProfileImageView);
}
- if(!mBannerImageUrl.equals("")) {
+ if (!mBannerImageUrl.equals("")) {
glide.load(bannerImageUrl).into(mBannerImageView);
}
@@ -225,14 +224,15 @@ public class MainActivity extends AppCompatActivity {
}, 1);
}
- if(!mInsertSuccess) {
- new FetchSubscribedThing(this, Volley.newRequestQueue(this), new ArrayList<SubscribedSubredditData>(),
- new ArrayList<SubscribedUserData>(), new ArrayList<SubredditData>())
- .fetchSubscribedSubreddits(new FetchSubscribedThing.FetchSubscribedSubredditsListener() {
+ if (!mInsertSuccess) {
+ FetchSubscribedThing.fetchSubscribedThing(this, null,
+ new ArrayList<SubscribedSubredditData>(), new ArrayList<SubscribedUserData>(),
+ new ArrayList<SubredditData>(),
+ new FetchSubscribedThing.FetchSubscribedThingListener() {
@Override
- public void onFetchSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
- ArrayList<SubscribedUserData> subscribedUserData,
- ArrayList<SubredditData> subredditData) {
+ public void onFetchSubscribedThingSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
+ ArrayList<SubscribedUserData> subscribedUserData,
+ ArrayList<SubredditData> subredditData) {
new InsertSubscribedThingsAsyncTask(
SubscribedSubredditRoomDatabase.getDatabase(MainActivity.this),
SubscribedUserRoomDatabase.getDatabase(MainActivity.this),
@@ -249,7 +249,7 @@ public class MainActivity extends AppCompatActivity {
}
@Override
- public void onFetchSubscribedSubredditsFail() {
+ public void onFetchSubscribedThingFail() {
mInsertSuccess = false;
}
}, 1);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java
index 7c90c488..585bd85f 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java
@@ -71,7 +71,7 @@ public class PostFragment extends Fragment {
if(savedInstanceState.containsKey(PostDataParcelableState)) {
mPostData = savedInstanceState.getParcelableArrayList(PostDataParcelableState);
mLastItem = savedInstanceState.getString(lastItemState);
- mAdapter = new PostRecyclerViewAdapter(getActivity(), mPostData, mPaginationSynchronizer, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
+ mAdapter = new PostRecyclerViewAdapter(getActivity(), mPostData, mPaginationSynchronizer, mVoteThingRequestQueue);
mPostRecyclerView.setAdapter(mAdapter);
mPostRecyclerView.addOnScrollListener(new PostPaginationScrollListener(
getActivity(), mLinearLayoutManager, mAdapter, mLastItem, mPostData,
@@ -82,9 +82,9 @@ public class PostFragment extends Fragment {
mProgressBar.setVisibility(View.GONE);
} else {
if(mIsBestPost) {
- queryBestPost(mQueryPostUrl, 1);
+ queryBestPost(1);
} else {
- queryPost(mQueryPostUrl, 1);
+ fetchPost(mQueryPostUrl, 1);
}
}
}
@@ -99,7 +99,7 @@ public class PostFragment extends Fragment {
}
if(mAcquireAccessTokenRequestQueue != null) {
- mAcquireAccessTokenRequestQueue.cancelAll(AcquireAccessToken.class);
+ mAcquireAccessTokenRequestQueue.cancelAll(RefreshAccessToken.class);
}
if(mVoteThingRequestQueue != null) {
@@ -156,9 +156,9 @@ public class PostFragment extends Fragment {
} else {
mPaginationSynchronizer = new PaginationSynchronizer();
if(mIsBestPost) {
- queryBestPost(mQueryPostUrl, 1);
+ queryBestPost(1);
} else {
- queryPost(mQueryPostUrl, 1);
+ fetchPost(mQueryPostUrl, 1);
}
}
@@ -181,7 +181,7 @@ public class PostFragment extends Fragment {
return rootView;
}
- private void queryBestPost(final String queryPostUrl, final int refreshTime) {
+ private void queryBestPost(final int refreshTime) {
if(refreshTime < 0) {
showErrorSnackbar();
return;
@@ -203,7 +203,7 @@ public class PostFragment extends Fragment {
public void onParsePostSuccess(ArrayList<PostData> postData, String lastItem) {
mPostData = postData;
mLastItem = lastItem;
- mAdapter = new PostRecyclerViewAdapter(getActivity(), postData, mPaginationSynchronizer, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
+ mAdapter = new PostRecyclerViewAdapter(getActivity(), postData, mPaginationSynchronizer, mVoteThingRequestQueue);
mPostRecyclerView.setAdapter(mAdapter);
mPostRecyclerView.addOnScrollListener(new PostPaginationScrollListener(
@@ -230,15 +230,15 @@ public class PostFragment extends Fragment {
if (error instanceof AuthFailureError) {
// Error indicating that there was an Authentication Failure while performing the request
// Access token expired
- new AcquireAccessToken(getActivity()).refreshAccessToken(mAcquireAccessTokenRequestQueue,
- new AcquireAccessToken.AcquireAccessTokenListener() {
+ RefreshAccessToken.refreshAccessToken(getActivity(),
+ new RefreshAccessToken.RefreshAccessTokenListener() {
@Override
- public void onAcquireAccessTokenSuccess() {
- queryBestPost(queryPostUrl, refreshTime - 1);
+ public void onRefreshAccessTokenSuccess() {
+ queryBestPost(refreshTime - 1);
}
@Override
- public void onAcquireAccessTokenFail() {}
+ public void onRefreshAccessTokenFail() {}
});
} else {
Log.i("Post fetch error", error.toString());
@@ -256,7 +256,7 @@ public class PostFragment extends Fragment {
mRequestQueue.add(postRequest);
}
- private void queryPost(final String queryPostUrl, final int refreshTime) {
+ private void fetchPost(final String queryPostUrl, final int refreshTime) {
if(refreshTime < 0) {
showErrorSnackbar();
return;
@@ -282,7 +282,7 @@ public class PostFragment extends Fragment {
public void onParsePostSuccess(ArrayList<PostData> postData, String lastItem) {
mPostData = postData;
mLastItem = lastItem;
- mAdapter = new PostRecyclerViewAdapter(getActivity(), postData, mPaginationSynchronizer, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
+ mAdapter = new PostRecyclerViewAdapter(getActivity(), postData, mPaginationSynchronizer, mVoteThingRequestQueue);
mPostRecyclerView.setAdapter(mAdapter);
mPostRecyclerView.addOnScrollListener(new PostPaginationScrollListener(
@@ -309,15 +309,15 @@ public class PostFragment extends Fragment {
if (error instanceof AuthFailureError) {
// Error indicating that there was an Authentication Failure while performing the request
// Access token expired
- new AcquireAccessToken(getActivity()).refreshAccessToken(mAcquireAccessTokenRequestQueue,
- new AcquireAccessToken.AcquireAccessTokenListener() {
+ RefreshAccessToken.refreshAccessToken(getActivity(),
+ new RefreshAccessToken.RefreshAccessTokenListener() {
@Override
- public void onAcquireAccessTokenSuccess() {
- queryPost(queryPostUrl, refreshTime - 1);
+ public void onRefreshAccessTokenSuccess() {
+ fetchPost(queryPostUrl, refreshTime - 1);
}
@Override
- public void onAcquireAccessTokenFail() {}
+ public void onRefreshAccessTokenFail() {}
});
} else {
Log.i("Post fetch error", error.toString());
@@ -336,9 +336,9 @@ public class PostFragment extends Fragment {
@Override
public void onClick(View view) {
if(mIsBestPost) {
- queryBestPost(mQueryPostUrl, 1);
+ queryBestPost(1);
} else {
- queryPost(mQueryPostUrl, 1);
+ fetchPost(mQueryPostUrl, 1);
}
}
});
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostPaginationScrollListener.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostPaginationScrollListener.java
index 6aa01cf4..57712c6c 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostPaginationScrollListener.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostPaginationScrollListener.java
@@ -146,15 +146,15 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
public void onErrorResponse(VolleyError error) {
if (error instanceof AuthFailureError) {
//Access token expired
- new AcquireAccessToken(mContext).refreshAccessToken(mAcquireAccessTokenRequestQueue,
- new AcquireAccessToken.AcquireAccessTokenListener() {
+ RefreshAccessToken.refreshAccessToken(mContext,
+ new RefreshAccessToken.RefreshAccessTokenListener() {
@Override
- public void onAcquireAccessTokenSuccess() {
+ public void onRefreshAccessTokenSuccess() {
fetchBestPost(queryPostUrl, refreshTime - 1);
}
@Override
- public void onAcquireAccessTokenFail() {
+ public void onRefreshAccessTokenFail() {
}
});
} else {
@@ -219,15 +219,15 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
public void onErrorResponse(VolleyError error) {
if (error instanceof AuthFailureError) {
//Access token expired
- new AcquireAccessToken(mContext).refreshAccessToken(mAcquireAccessTokenRequestQueue,
- new AcquireAccessToken.AcquireAccessTokenListener() {
+ RefreshAccessToken.refreshAccessToken(mContext,
+ new RefreshAccessToken.RefreshAccessTokenListener() {
@Override
- public void onAcquireAccessTokenSuccess() {
+ public void onRefreshAccessTokenSuccess() {
fetchPost(queryPostUrl, refreshTime - 1);
}
@Override
- public void onAcquireAccessTokenFail() {
+ public void onRefreshAccessTokenFail() {
}
});
} else {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java
index 7dc95034..e1efc0e6 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java
@@ -44,7 +44,6 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
private Context mContext;
private PaginationSynchronizer mPaginationSynchronizer;
private RequestQueue mVoteThingRequestQueue;
- private RequestQueue mAcquireAccessTokenRequestQueue;
private RequestManager glide;
private SubredditDao subredditDao;
private boolean isLoadingMorePostSuccess;
@@ -55,13 +54,12 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
PostRecyclerViewAdapter(Context context, ArrayList<PostData> postData, PaginationSynchronizer paginationSynchronizer,
- RequestQueue voteThingRequestQueue, RequestQueue acquireAccessTokenRequestQueue) {
+ RequestQueue voteThingRequestQueue) {
if(context != null) {
mContext = context;
mPostData = postData;
mPaginationSynchronizer = paginationSynchronizer;
mVoteThingRequestQueue = voteThingRequestQueue;
- mAcquireAccessTokenRequestQueue = acquireAccessTokenRequestQueue;
isLoadingMorePostSuccess = true;
canStartActivity = true;
glide = Glide.with(mContext);
@@ -139,7 +137,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
@Override
public void onClick(View view) {
Intent intent = new Intent(mContext, ViewSubredditDetailActivity.class);
- intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME,
+ intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY,
mPostData.get(holder.getAdapterPosition()).getSubredditNamePrefixed().substring(2));
}
});
@@ -348,7 +346,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(holder.getAdapterPosition()).getScore() + 1));
}
- new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
+ VoteThing.voteThing(mContext, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess(int position) {
mPostData.get(position).setVoteType(1);
@@ -372,7 +370,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
((DataViewHolder) holder).upvoteButton.clearColorFilter();
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(holder.getAdapterPosition()).getScore() - 1));
- new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
+ VoteThing.voteThing(mContext, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess(int position) {
mPostData.get(position).setVoteType(0);
@@ -406,7 +404,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(holder.getAdapterPosition()).getScore() - 1));
}
- new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
+ VoteThing.voteThing(mContext, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess(int position) {
mPostData.get(position).setVoteType(-1);
@@ -430,7 +428,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
((DataViewHolder) holder).downvoteButton.clearColorFilter();
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(holder.getAdapterPosition()).getScore() + 1));
- new VoteThing(mContext, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingListener() {
+ VoteThing.voteThing(mContext, new VoteThing.VoteThingListener() {
@Override
public void onVoteThingSuccess(int position) {
mPostData.get(position).setVoteType(0);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java
index 5e4c5558..a0985428 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java
@@ -1,10 +1,34 @@
package ml.docilealligator.infinityforreddit;
+import java.util.Map;
+
import retrofit2.Call;
+import retrofit2.http.FieldMap;
+import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
+import retrofit2.http.HeaderMap;
+import retrofit2.http.POST;
import retrofit2.http.Path;
+import retrofit2.http.Query;
public interface RedditAPI {
+ @FormUrlEncoded
+ @POST("api/v1/access_token")
+ Call<String> getAccessToken(@HeaderMap Map<String, String> headers, @FieldMap Map<String, String> params);
+
@GET("{subredditNamePrefixed}/comments/{article}.json?raw_json=1")
Call<String> getComments(@Path("subredditNamePrefixed") String subredditNamePrefixed, @Path("article") String article);
+
+ @GET("r/{subredditName}/about.json?raw_json=1")
+ Call<String> getSubredditData(@Path("subredditName") String subredditName);
+
+ @GET("subreddits/mine/subscriber?raw_json=1")
+ Call<String> getSubscribedThing(@Query("after") String lastItem, @HeaderMap Map<String, String> headers);
+
+ @GET("api/v1/me?raw_json=1")
+ Call<String> getUserInfo(@HeaderMap Map<String, String> headers);
+
+ @FormUrlEncoded
+ @POST("api/vote")
+ Call<String> voteThing(@HeaderMap Map<String, String> headers, @FieldMap Map<String, String> params);
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java
index c5a13ec3..f6833ee8 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java
@@ -11,15 +11,11 @@ import java.util.Map;
class RedditUtils {
static final String OAUTH_URL ="https://www.reddit.com/api/v1/authorize.compact";
- static final String ACQUIRE_ACCESS_TOKEN_URL = "https://www.reddit.com/api/v1/access_token";
static final String OAUTH_API_BASE_URI = "https://oauth.reddit.com";
static final String API_BASE_URI = "https://www.reddit.com";
static final String RAW_JSON_KEY ="raw_json";
static final String RAW_JSON_VALUE = "1";
static final String BEST_POST_SUFFIX = "/best";
- static final String VOTE_SUFFIX = "/api/vote";
- static final String USER_INFO_SUFFIX = "/api/v1/me";
- static final String SUBSCRIBED_SUBREDDITS = "/subreddits/mine/subscriber";
static final String CLIENT_ID_KEY = "client_id";
static final String CLIENT_ID = "";
@@ -70,14 +66,6 @@ class RedditUtils {
return params;
}
- static String getQueryCommentUrl(String subredditName, String article) {
- return API_BASE_URI + "/" + subredditName + "/comments/" + article + ".json";
- }
-
- static String getQuerySubredditDataUrl(String subredditName) {
- return API_BASE_URI + "/r/" + subredditName + "/about.json";
- }
-
static String getQuerySubredditPostUrl(String subredditName) {
return API_BASE_URI + "/r/" + subredditName + ".json";
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RefreshAccessToken.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RefreshAccessToken.java
new file mode 100644
index 00000000..ac664ef7
--- /dev/null
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/RefreshAccessToken.java
@@ -0,0 +1,82 @@
+package ml.docilealligator.infinityforreddit;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.support.annotation.NonNull;
+import android.util.Log;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Retrofit;
+import retrofit2.converter.scalars.ScalarsConverterFactory;
+
+/**
+ * Created by alex on 3/13/18.
+ */
+
+class RefreshAccessToken {
+
+ interface RefreshAccessTokenListener {
+ void onRefreshAccessTokenSuccess();
+ void onRefreshAccessTokenFail();
+ }
+
+ static void refreshAccessToken(final Context context, final RefreshAccessTokenListener refreshAccessTokenListener) {
+ if(context != null) {
+ String refreshToken = context.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE).getString(SharedPreferencesUtils.REFRESH_TOKEN_KEY, "");
+
+ final Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl(RedditUtils.API_BASE_URI)
+ .addConverterFactory(ScalarsConverterFactory.create())
+ .build();
+
+ RedditAPI api = retrofit.create(RedditAPI.class);
+
+ Map<String, String> params = new HashMap<>();
+ params.put(RedditUtils.GRANT_TYPE_KEY, RedditUtils.GRANT_TYPE_REFRESH_TOKEN);
+ params.put(RedditUtils.REFRESH_TOKEN_KEY, refreshToken);
+
+ Call<String> accessTokenCall = api.getAccessToken(RedditUtils.getHttpBasicAuthHeader(), params);
+ accessTokenCall.enqueue(new Callback<String>() {
+ @Override
+ public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
+ try {
+ JSONObject jsonObject = new JSONObject(response.body());
+ String newAccessToken = jsonObject.getString(RedditUtils.ACCESS_TOKEN_KEY);
+ int expireIn = jsonObject.getInt(RedditUtils.EXPIRES_IN_KEY);
+
+ SharedPreferences.Editor editor = context.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE).edit();
+ editor.putString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, newAccessToken);
+ editor.putInt(SharedPreferencesUtils.ACCESS_TOKEN_EXPIRE_INTERVAL_KEY, expireIn);
+ editor.apply();
+
+ long queryAccessTokenTime = Calendar.getInstance().getTimeInMillis();
+ editor.putLong(SharedPreferencesUtils.QUERY_ACCESS_TOKEN_TIME_KEY, queryAccessTokenTime);
+ editor.apply();
+
+ Log.i("access token", newAccessToken);
+ refreshAccessTokenListener.onRefreshAccessTokenSuccess();
+ } catch (JSONException e) {
+ e.printStackTrace();
+ refreshAccessTokenListener.onRefreshAccessTokenFail();
+ Log.i("main activity", "Error parsing JSON object when getting the access token");
+ }
+ refreshAccessTokenListener.onRefreshAccessTokenSuccess();
+ }
+
+ @Override
+ public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
+ Log.i("call failed", t.getMessage());
+ refreshAccessTokenListener.onRefreshAccessTokenFail();
+ }
+ });
+ }
+ }
+}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java
index 141a3fef..ebc316e5 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java
@@ -38,8 +38,8 @@ class SubscribedSubredditRecyclerViewAdapter extends RecyclerView.Adapter<Recycl
@Override
public void onClick(View view) {
Intent intent = new Intent(mContext, ViewSubredditDetailActivity.class);
- intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME, mSubscribedSubredditData.get(viewHolder.getAdapterPosition()).getName());
- intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_ID, mSubscribedSubredditData.get(viewHolder.getAdapterPosition()).getId());
+ intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, mSubscribedSubredditData.get(viewHolder.getAdapterPosition()).getName());
+ intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_ID_KEY, mSubscribedSubredditData.get(viewHolder.getAdapterPosition()).getId());
mContext.startActivity(intent);
}
});
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java
index 052e675e..10591902 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java
@@ -24,8 +24,6 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
-import com.android.volley.RequestQueue;
-import com.android.volley.toolbox.Volley;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
@@ -59,9 +57,6 @@ public class ViewPostDetailActivity extends AppCompatActivity {
private LoadSubredditIconAsyncTask mLoadSubredditIconAsyncTask;
- private RequestQueue mVoteThingRequestQueue;
- private RequestQueue mAcquireAccessTokenRequestQueue;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -140,8 +135,6 @@ public class ViewPostDetailActivity extends AppCompatActivity {
mRecyclerView.setNestedScrollingEnabled(false);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
- mVoteThingRequestQueue = Volley.newRequestQueue(this);
- mAcquireAccessTokenRequestQueue = Volley.newRequestQueue(this);
subredditTextView.setText(mPostData.getSubredditNamePrefixed());
postTimeTextView.setText(mPostData.getPostTime());
@@ -385,7 +378,7 @@ public class ViewPostDetailActivity extends AppCompatActivity {
scoreTextView.setText(Integer.toString(mPostData.getScore() + 1));
}
- new VoteThing(ViewPostDetailActivity.this, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingWithoutPositionListener() {
+ VoteThing.voteThing(ViewPostDetailActivity.this, new VoteThing.VoteThingWithoutPositionListener() {
@Override
public void onVoteThingSuccess() {
mPostData.setVoteType(1);
@@ -409,7 +402,7 @@ public class ViewPostDetailActivity extends AppCompatActivity {
upvoteButton.clearColorFilter();
scoreTextView.setText(Integer.toString(mPostData.getScore() - 1));
- new VoteThing(ViewPostDetailActivity.this, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingWithoutPositionListener() {
+ VoteThing.voteThing(ViewPostDetailActivity.this, new VoteThing.VoteThingWithoutPositionListener() {
@Override
public void onVoteThingSuccess() {
mPostData.setVoteType(0);
@@ -445,7 +438,7 @@ public class ViewPostDetailActivity extends AppCompatActivity {
scoreTextView.setText(Integer.toString(mPostData.getScore() - 1));
}
- new VoteThing(ViewPostDetailActivity.this, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingWithoutPositionListener() {
+ VoteThing.voteThing(ViewPostDetailActivity.this, new VoteThing.VoteThingWithoutPositionListener() {
@Override
public void onVoteThingSuccess() {
mPostData.setVoteType(-1);
@@ -469,7 +462,7 @@ public class ViewPostDetailActivity extends AppCompatActivity {
downvoteButton.clearColorFilter();
scoreTextView.setText(Integer.toString(mPostData.getScore() + 1));
- new VoteThing(ViewPostDetailActivity.this, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue).votePost(new VoteThing.VoteThingWithoutPositionListener() {
+ VoteThing.voteThing(ViewPostDetailActivity.this, new VoteThing.VoteThingWithoutPositionListener() {
@Override
public void onVoteThingSuccess() {
mPostData.setVoteType(0);
@@ -492,40 +485,41 @@ public class ViewPostDetailActivity extends AppCompatActivity {
private void queryComment() {
mCommentProgressbar.setVisibility(View.VISIBLE);
mNoCommentWrapperLinearLayout.setVisibility(View.GONE);
- new FetchComment(mPostData.getSubredditNamePrefixed(), mPostData.getId()).queryComment(new FetchComment.FetchCommentListener() {
- @Override
- public void onFetchCommentSuccess(String response) {
- ParseComment.parseComment(response, new ArrayList<CommentData>(),
- getResources().getConfiguration().locale, new ParseComment.ParseCommentListener() {
- @Override
- public void onParseCommentSuccess(ArrayList<CommentData> commentData, int moreCommentCount) {
- mCommentProgressbar.setVisibility(View.GONE);
- mMoreCommentCount = moreCommentCount;
- if (commentData.size() > 0) {
- CommentRecyclerViewAdapter adapter = new CommentRecyclerViewAdapter(
- ViewPostDetailActivity.this, commentData, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
- mRecyclerView.setAdapter(adapter);
- mCommentCardView.setVisibility(View.VISIBLE);
- } else {
- mNoCommentWrapperLinearLayout.setVisibility(View.VISIBLE);
- Glide.with(ViewPostDetailActivity.this).load(R.drawable.no_comment_indicator).into(mNoCommentImageView);
- }
- }
+ FetchComment.queryComment(mPostData.getSubredditNamePrefixed(), mPostData.getId(),
+ new FetchComment.FetchCommentListener() {
+ @Override
+ public void onFetchCommentSuccess(String response) {
+ ParseComment.parseComment(response, new ArrayList<CommentData>(),
+ getResources().getConfiguration().locale, new ParseComment.ParseCommentListener() {
+ @Override
+ public void onParseCommentSuccess(ArrayList<CommentData> commentData, int moreCommentCount) {
+ mCommentProgressbar.setVisibility(View.GONE);
+ mMoreCommentCount = moreCommentCount;
+ if (commentData.size() > 0) {
+ CommentRecyclerViewAdapter adapter = new CommentRecyclerViewAdapter(
+ ViewPostDetailActivity.this, commentData);
+ mRecyclerView.setAdapter(adapter);
+ mCommentCardView.setVisibility(View.VISIBLE);
+ } else {
+ mNoCommentWrapperLinearLayout.setVisibility(View.VISIBLE);
+ Glide.with(ViewPostDetailActivity.this).load(R.drawable.no_comment_indicator).into(mNoCommentImageView);
+ }
+ }
+
+ @Override
+ public void onParseCommentFail() {
+ mCommentProgressbar.setVisibility(View.GONE);
+ showRetrySnackbar();
+ }
+ });
+ }
@Override
- public void onParseCommentFail() {
+ public void onFetchCommentFail() {
mCommentProgressbar.setVisibility(View.GONE);
showRetrySnackbar();
}
});
- }
-
- @Override
- public void onFetchCommentFail() {
- mCommentProgressbar.setVisibility(View.GONE);
- showRetrySnackbar();
- }
- });
}
private void showRetrySnackbar() {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java
index 66fd16f8..f169ad8b 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java
@@ -18,7 +18,6 @@ import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
-import com.android.volley.toolbox.Volley;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
@@ -26,8 +25,10 @@ import de.hdodenhof.circleimageview.CircleImageView;
public class ViewSubredditDetailActivity extends AppCompatActivity {
- static final String EXTRA_SUBREDDIT_NAME = "ESN";
- static final String EXTRA_SUBREDDIT_ID = "ESI";
+ static final String EXTRA_SUBREDDIT_NAME_KEY = "ESN";
+ static final String EXTRA_SUBREDDIT_ID_KEY = "ESI";
+
+ private static final String FRAGMENT_OUT_STATE_KEY = "FOSK";
private Fragment mFragment;
@@ -40,7 +41,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
- final String subredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME);
+ final String subredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME_KEY);
final String title = "r/" + subredditName;
setTitle(title);
@@ -74,7 +75,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
final TextView descriptionTextView = findViewById(R.id.description_text_view_view_subreddit_detail_activity);
final RequestManager glide = Glide.with(ViewSubredditDetailActivity.this);
- String id = getIntent().getExtras().getString(EXTRA_SUBREDDIT_ID);
+ String id = getIntent().getExtras().getString(EXTRA_SUBREDDIT_ID_KEY);
SubredditViewModel.Factory factory = new SubredditViewModel.Factory(getApplication(), id);
mSubredditViewModel = ViewModelProviders.of(this, factory).get(SubredditViewModel.class);
mSubredditViewModel.getSubredditLiveData().observe(this, new Observer<SubredditData>() {
@@ -137,7 +138,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
}
});
- new FetchSubredditData(Volley.newRequestQueue(this), subredditName).querySubredditData(new FetchSubredditData.FetchSubredditDataListener() {
+ FetchSubredditData.fetchSubredditData(subredditName, new FetchSubredditData.FetchSubredditDataListener() {
@Override
public void onFetchSubredditDataSuccess(String response) {
ParseSubredditData.parseComment(response, new ParseSubredditData.ParseSubredditDataListener() {
@@ -173,7 +174,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
mFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit();
} else {
- mFragment = getSupportFragmentManager().getFragment(savedInstanceState, "outStateFragment");
+ mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE_KEY);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit();
}
}
@@ -192,7 +193,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if(mFragment != null) {
- getSupportFragmentManager().putFragment(outState, "outStateFragment", mFragment);
+ getSupportFragmentManager().putFragment(outState, FRAGMENT_OUT_STATE_KEY, mFragment);
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/VoteThing.java b/app/src/main/java/ml/docilealligator/infinityforreddit/VoteThing.java
index 0b6ef4e1..c159de08 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/VoteThing.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/VoteThing.java
@@ -1,17 +1,17 @@
package ml.docilealligator.infinityforreddit;
import android.content.Context;
-
-import com.android.volley.AuthFailureError;
-import com.android.volley.Request;
-import com.android.volley.RequestQueue;
-import com.android.volley.Response;
-import com.android.volley.VolleyError;
-import com.android.volley.toolbox.StringRequest;
+import android.support.annotation.NonNull;
+import android.util.Log;
import java.util.HashMap;
import java.util.Map;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Retrofit;
+import retrofit2.converter.scalars.ScalarsConverterFactory;
+
/**
* Created by alex on 3/14/18.
*/
@@ -28,116 +28,96 @@ class VoteThing {
void onVoteThingFail();
}
- private Context mContext;
- private RequestQueue mQueue;
- private RequestQueue mAcquireAccessTokenRequestQueue;
-
- VoteThing(Context context, RequestQueue queue, RequestQueue acquireAccessTokenRequestQueue) {
- mContext = context;
- mQueue = queue;
- mAcquireAccessTokenRequestQueue = acquireAccessTokenRequestQueue;
- }
-
- void votePost(final VoteThingListener voteThingListener, final String fullName, final String point, final int position, final int refreshTime) {
- if(mContext != null) {
+ static void voteThing(final Context context, final VoteThingListener voteThingListener, final String fullName, final String point, final int position, final int refreshTime) {
+ if(context != null) {
if(refreshTime < 0) {
voteThingListener.onVoteThingFail(position);
return;
}
- StringRequest voteRequest = new StringRequest(Request.Method.POST, RedditUtils.OAUTH_API_BASE_URI + RedditUtils.VOTE_SUFFIX, new Response.Listener<String>() {
+ Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl(RedditUtils.OAUTH_API_BASE_URI)
+ .addConverterFactory(ScalarsConverterFactory.create())
+ .build();
+
+ RedditAPI api = retrofit.create(RedditAPI.class);
+
+ String accessToken = context.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE)
+ .getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, "");
+ Map<String, String> params = new HashMap<>();
+ params.put(RedditUtils.DIR_KEY, point);
+ params.put(RedditUtils.ID_KEY, fullName);
+ params.put(RedditUtils.RANK_KEY, RedditUtils.RANK);
+
+ Call<String> voteThingCall = api.voteThing(RedditUtils.getOAuthHeader(accessToken), params);
+ voteThingCall.enqueue(new Callback<String>() {
@Override
- public void onResponse(String response) {
+ public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
voteThingListener.onVoteThingSuccess(position);
}
- }, new Response.ErrorListener() {
- @Override
- public void onErrorResponse(VolleyError error) {
- if (error instanceof AuthFailureError) {
- //Access token expired
- new AcquireAccessToken(mContext).refreshAccessToken(mAcquireAccessTokenRequestQueue,
- new AcquireAccessToken.AcquireAccessTokenListener() {
- @Override
- public void onAcquireAccessTokenSuccess() {
- votePost(voteThingListener, fullName, point, position, refreshTime - 1);
- }
-
- @Override
- public void onAcquireAccessTokenFail() {}
- });
- } else {
- voteThingListener.onVoteThingFail(position);
- }
- }
- }) {
- @Override
- protected Map<String, String> getParams() {
- HashMap<String, String> params = new HashMap<>();
- params.put(RedditUtils.DIR_KEY, point);
- params.put(RedditUtils.ID_KEY, fullName);
- params.put(RedditUtils.RANK_KEY, RedditUtils.RANK);
- return params;
- }
@Override
- public Map<String, String> getHeaders() {
- String accessToken = mContext.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE).getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, "");
- return RedditUtils.getOAuthHeader(accessToken);
+ public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
+ Log.i("call failed", t.getMessage());
+ RefreshAccessToken.refreshAccessToken(context,
+ new RefreshAccessToken.RefreshAccessTokenListener() {
+ @Override
+ public void onRefreshAccessTokenSuccess() {
+ voteThing(context, voteThingListener, fullName, point, position, refreshTime - 1);
+ }
+
+ @Override
+ public void onRefreshAccessTokenFail() {
+ }
+ });
}
- };
- voteRequest.setTag(VoteThing.class);
- mQueue.add(voteRequest);
+ });
}
}
- void votePost(final VoteThingWithoutPositionListener voteThingWithoutPositionListener, final String fullName, final String point, final int refreshTime) {
- if(mContext != null) {
+ static void voteThing(final Context context, final VoteThingWithoutPositionListener voteThingWithoutPositionListener, final String fullName, final String point, final int refreshTime) {
+ if(context != null) {
if(refreshTime < 0) {
voteThingWithoutPositionListener.onVoteThingFail();
return;
}
- StringRequest voteRequest = new StringRequest(Request.Method.POST, RedditUtils.OAUTH_API_BASE_URI + RedditUtils.VOTE_SUFFIX, new Response.Listener<String>() {
+
+ Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl(RedditUtils.OAUTH_API_BASE_URI)
+ .addConverterFactory(ScalarsConverterFactory.create())
+ .build();
+
+ RedditAPI api = retrofit.create(RedditAPI.class);
+
+ String accessToken = context.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE)
+ .getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, "");
+ Map<String, String> params = new HashMap<>();
+ params.put(RedditUtils.DIR_KEY, point);
+ params.put(RedditUtils.ID_KEY, fullName);
+ params.put(RedditUtils.RANK_KEY, RedditUtils.RANK);
+
+ Call<String> voteThingCall = api.voteThing(RedditUtils.getOAuthHeader(accessToken), params);
+ voteThingCall.enqueue(new Callback<String>() {
@Override
- public void onResponse(String response) {
+ public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
voteThingWithoutPositionListener.onVoteThingSuccess();
}
- }, new Response.ErrorListener() {
- @Override
- public void onErrorResponse(VolleyError error) {
- if (error instanceof AuthFailureError) {
- //Access token expired
- new AcquireAccessToken(mContext).refreshAccessToken(mAcquireAccessTokenRequestQueue,
- new AcquireAccessToken.AcquireAccessTokenListener() {
- @Override
- public void onAcquireAccessTokenSuccess() {
- votePost(voteThingWithoutPositionListener, fullName, point, refreshTime - 1);
- }
-
- @Override
- public void onAcquireAccessTokenFail() {}
- });
- } else {
- voteThingWithoutPositionListener.onVoteThingFail();
- }
- }
- }) {
- @Override
- protected Map<String, String> getParams() {
- HashMap<String, String> params = new HashMap<>();
- params.put(RedditUtils.DIR_KEY, point);
- params.put(RedditUtils.ID_KEY, fullName);
- params.put(RedditUtils.RANK_KEY, RedditUtils.RANK);
- return params;
- }
@Override
- public Map<String, String> getHeaders() {
- String accessToken = mContext.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE).getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, "");
- return RedditUtils.getOAuthHeader(accessToken);
+ public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
+ Log.i("call failed", t.getMessage());
+ RefreshAccessToken.refreshAccessToken(context,
+ new RefreshAccessToken.RefreshAccessTokenListener() {
+ @Override
+ public void onRefreshAccessTokenSuccess() {
+ voteThing(context, voteThingWithoutPositionListener, fullName, point, refreshTime - 1);
+ }
+
+ @Override
+ public void onRefreshAccessTokenFail() {}
+ });
}
- };
- voteRequest.setTag(VoteThing.class);
- mQueue.add(voteRequest);
+ });
}
}
}