From 13d64eda146f8fcfe0572274b42db83e4ede7534 Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Wed, 3 Jun 2020 19:02:46 +0800 Subject: Support viewing imgur albums in-app. --- .../infinityforreddit/API/GfycatAPI.java | 10 + .../infinityforreddit/API/ImgurAPI.java | 18 ++ .../infinityforreddit/API/RedditAPI.java | 311 +++++++++++++++++++++ .../AccessTokenAuthenticator.java | 17 +- .../Activity/EditCommentActivity.java | 10 +- .../Activity/EditPostActivity.java | 10 +- .../Activity/LinkResolverActivity.java | 24 ++ .../infinityforreddit/Activity/LoginActivity.java | 30 +- .../Activity/PostLinkActivity.java | 4 +- .../Activity/PostTextActivity.java | 4 +- .../Activity/ViewImgurMediaActivity.java | 307 ++++++++++++++++++++ .../Activity/ViewPostDetailActivity.java | 34 +-- .../Adapter/CommentAndPostRecyclerViewAdapter.java | 26 +- .../CommentsListingRecyclerViewAdapter.java | 14 +- .../Adapter/PostRecyclerViewAdapter.java | 26 +- .../infinityforreddit/AppComponent.java | 6 + .../infinityforreddit/AppModule.java | 24 +- .../infinityforreddit/CommentData.java | 4 +- .../infinityforreddit/CommentDataSource.java | 19 +- .../infinityforreddit/DeleteThing.java | 7 +- .../infinityforreddit/FavoriteThing.java | 27 +- .../infinityforreddit/FetchComment.java | 9 +- .../infinityforreddit/FetchFlairs.java | 5 +- .../infinityforreddit/FetchGfycatVideoLinks.java | 1 + .../infinityforreddit/FetchMessages.java | 5 +- .../infinityforreddit/FetchMyInfo.java | 5 +- .../infinityforreddit/FetchRules.java | 1 + .../infinityforreddit/FetchSubredditData.java | 1 + .../infinityforreddit/FetchSubscribedThing.java | 5 +- .../infinityforreddit/FetchUserData.java | 1 + .../Fragment/ViewImgurGifFragment.java | 112 ++++++++ .../Fragment/ViewImgurImageFragment.java | 108 +++++++ .../Fragment/ViewImgurVideoFragment.java | 238 ++++++++++++++++ .../infinityforreddit/GfycatAPI.java | 10 - .../infinityforreddit/ImgurMedia.java | 79 ++++++ .../MultiReddit/CreateMultiReddit.java | 10 +- .../MultiReddit/DeleteMultiReddit.java | 6 +- .../MultiReddit/EditMultiReddit.java | 10 +- .../MultiReddit/FavoriteMultiReddit.java | 12 +- .../MultiReddit/FetchMultiRedditInfo.java | 6 +- .../MultiReddit/FetchMyMultiReddits.java | 6 +- .../infinityforreddit/Post/FetchPost.java | 6 +- .../infinityforreddit/Post/HidePost.java | 12 +- .../infinityforreddit/Post/Post.java | 8 +- .../infinityforreddit/Post/PostDataSource.java | 52 ++-- .../infinityforreddit/Post/SubmitPost.java | 68 ++--- .../infinityforreddit/PullNotificationWorker.java | 13 +- .../infinityforreddit/ReadMessage.java | 7 +- .../infinityforreddit/RedditAPI.java | 311 --------------------- .../infinityforreddit/ReportThing.java | 17 +- .../infinityforreddit/SaveThing.java | 11 +- .../infinityforreddit/SendComment.java | 13 +- .../infinityforreddit/SubredditSubscription.java | 9 +- .../infinityforreddit/UserFollowing.java | 9 +- .../infinityforreddit/Utils/APIUtils.java | 110 ++++++++ .../infinityforreddit/Utils/JSONUtils.java | 3 +- .../infinityforreddit/Utils/RedditUtils.java | 108 ------- .../infinityforreddit/VoteThing.java | 19 +- 58 files changed, 1632 insertions(+), 706 deletions(-) create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/API/GfycatAPI.java create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/API/ImgurAPI.java create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/API/RedditAPI.java create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewImgurMediaActivity.java create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/ViewImgurGifFragment.java create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/ViewImgurImageFragment.java create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/ViewImgurVideoFragment.java delete mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/GfycatAPI.java create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/ImgurMedia.java delete mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/Utils/APIUtils.java delete mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/Utils/RedditUtils.java (limited to 'app/src/main/java/ml') diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/API/GfycatAPI.java b/app/src/main/java/ml/docilealligator/infinityforreddit/API/GfycatAPI.java new file mode 100644 index 00000000..56eafa4d --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/API/GfycatAPI.java @@ -0,0 +1,10 @@ +package ml.docilealligator.infinityforreddit.API; + +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Path; + +public interface GfycatAPI { + @GET("{gfyid}") + Call getSubredditData(@Path("gfyid") String gfyId); +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/API/ImgurAPI.java b/app/src/main/java/ml/docilealligator/infinityforreddit/API/ImgurAPI.java new file mode 100644 index 00000000..b6534ea5 --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/API/ImgurAPI.java @@ -0,0 +1,18 @@ +package ml.docilealligator.infinityforreddit.API; + +import ml.docilealligator.infinityforreddit.Utils.APIUtils; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Header; +import retrofit2.http.Path; + +public interface ImgurAPI { + @GET("gallery/{id}") + Call getGalleryImages(@Header(APIUtils.AUTHORIZATION_KEY) String clientId, @Path("id") String id); + + @GET("/album/{id}") + Call getAlbumImages(@Header(APIUtils.AUTHORIZATION_KEY) String clientId, @Path("id") String id); + + @GET("/image/{id}") + Call getImage(@Header(APIUtils.AUTHORIZATION_KEY) String clientId, @Path("id") String id); +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/API/RedditAPI.java b/app/src/main/java/ml/docilealligator/infinityforreddit/API/RedditAPI.java new file mode 100644 index 00000000..e7922897 --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/API/RedditAPI.java @@ -0,0 +1,311 @@ +package ml.docilealligator.infinityforreddit.API; + +import java.util.Map; + +import okhttp3.MultipartBody; +import okhttp3.RequestBody; +import retrofit2.Call; +import retrofit2.http.DELETE; +import retrofit2.http.FieldMap; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.GET; +import retrofit2.http.HeaderMap; +import retrofit2.http.Multipart; +import retrofit2.http.POST; +import retrofit2.http.PUT; +import retrofit2.http.Part; +import retrofit2.http.PartMap; +import retrofit2.http.Path; +import retrofit2.http.Query; + +public interface RedditAPI { + @FormUrlEncoded + @POST("api/v1/access_token") + Call getAccessToken(@HeaderMap Map headers, @FieldMap Map params); + + @GET("r/{subredditName}/about.json?raw_json=1") + Call getSubredditData(@Path("subredditName") String subredditName); + + @GET("subreddits/mine/subscriber?raw_json=1") + Call getSubscribedThing(@Query("after") String lastItem, @HeaderMap Map headers); + + @GET("api/v1/me?raw_json=1") + Call getMyInfo(@HeaderMap Map headers); + + @FormUrlEncoded + @POST("api/vote") + Call voteThing(@HeaderMap Map headers, @FieldMap Map params); + + @GET("comments/{id}.json?raw_json=1") + Call getPostOauth(@Path("id") String id, @HeaderMap Map headers); + + @GET("comments/{id}.json?raw_json=1") + Call getPost(@Path("id") String id); + + @GET("{sortType}?raw_json=1") + Call getBestPosts(@Path("sortType") String sortType, @Query("after") String lastItem, @HeaderMap Map headers); + + @GET("{sortType}?raw_json=1") + Call getBestPosts(@Path("sortType") String sortType, @Query("t") String sortTime, + @Query("after") String lastItem, @HeaderMap Map headers); + + @GET("r/{subredditName}/{sortType}.json?raw_json=1&limit=25") + Call getSubredditBestPostsOauth(@Path("subredditName") String subredditName, @Path("sortType") String sortType, + @Query("after") String lastItem, @HeaderMap Map headers); + + @GET("r/{subredditName}/{sortType}.json?raw_json=1&limit=25") + Call getSubredditBestPostsOauth(@Path("subredditName") String subredditName, @Path("sortType") String sortType, + @Query("t") String sortTime, @Query("after") String lastItem, + @HeaderMap Map headers); + + @GET("r/{subredditName}/{sortType}.json?raw_json=1&limit=25") + Call getSubredditBestPosts(@Path("subredditName") String subredditName, @Path("sortType") String sortType, + @Query("after") String lastItem); + + @GET("r/{subredditName}/{sortType}.json?raw_json=1&limit=25") + Call getSubredditBestPosts(@Path("subredditName") String subredditName, @Path("sortType") String sortType, + @Query("t") String sortTime, @Query("after") String lastItem); + + @GET("user/{username}/{where}.json?&type=links&raw_json=1&limit=25") + Call getUserPostsOauth(@Path("username") String username, @Path("where") String where, + @Query("after") String lastItem, @Query("sort") String sortType, @HeaderMap Map headers); + + @GET("user/{username}/{where}.json?&type=links&raw_json=1&limit=25") + Call getUserPostsOauth(@Path("username") String username, @Path("where") String where, + @Query("after") String lastItem, @Query("sort") String sortType, + @Query("t") String sortTime, @HeaderMap Map headers); + + @GET("user/{username}/submitted.json?raw_json=1&limit=25") + Call getUserPosts(@Path("username") String username, @Query("after") String lastItem, + @Query("sort") String sortType); + + @GET("user/{username}/submitted.json?raw_json=1&limit=25") + Call getUserPosts(@Path("username") String username, @Query("after") String lastItem, + @Query("sort") String sortType, @Query("t") String sortTime); + + @GET("user/{username}/about.json?raw_json=1") + Call getUserData(@Path("username") String username); + + @GET("user/{username}/comments.json?raw_json=1") + Call getUserComments(@Path("username") String username, @Query("after") String after, + @Query("sort") String sortType); + + @GET("user/{username}/comments.json?raw_json=1") + Call getUserComments(@Path("username") String username, @Query("after") String after, + @Query("sort") String sortType, @Query("t") String sortTime); + + @GET("user/{username}/comments.json?raw_json=1") + Call getUserCommentsOauth(@HeaderMap Map headers, @Path("username") String username, + @Query("after") String after, @Query("sort") String sortType); + + @GET("user/{username}/comments.json?raw_json=1") + Call getUserCommentsOauth(@HeaderMap Map headers, @Path("username") String username, + @Query("after") String after, @Query("sort") String sortType, + @Query("t") String sortTime); + + @GET("user/{username}/{where}.json?&type=comments&raw_json=1&limit=25") + Call getUserSavedCommentsOauth(@Path("username") String username, @Path("where") String where, + @Query("after") String lastItem, @Query("sort") String sortType, + @HeaderMap Map headers); + + @GET("user/{username}/{where}.json?&type=comments&raw_json=1&limit=25") + Call getUserSavedCommentsOauth(@Path("username") String username, @Path("where") String where, + @Query("after") String lastItem, @Query("sort") String sortType, + @Query("t") String sortTime, @HeaderMap Map headers); + + @FormUrlEncoded + @POST("api/subscribe") + Call subredditSubscription(@HeaderMap Map headers, @FieldMap Map params); + + @GET("/api/info.json?raw_json=1") + Call getInfo(@Query("id") String id); + + @GET("/api/info.json?raw_json=1") + Call getInfoOauth(@Query("id") String id, @HeaderMap Map headers); + + @GET("subreddits/search.json?include_over_18=1&raw_json=1") + Call searchSubreddits(@Query("q") String subredditName, @Query("after") String after, + @Query("sort") String sort); + + @GET("search.json?include_over_18=1&raw_json=1&type=user") + Call searchUsers(@Query("q") String profileName, @Query("after") String after, + @Query("sort") String sort); + + @GET("search.json?include_over_18=1&raw_json=1&type=link") + Call searchPostsOauth(@Query("q") String query, @Query("after") String after, + @Query("sort") String sort, + @HeaderMap Map headers); + + @GET("search.json?include_over_18=1&raw_json=1&type=link") + Call searchPostsOauth(@Query("q") String query, @Query("after") String after, + @Query("sort") String sort, @Query("t") String sortTime, + @HeaderMap Map headers); + + @GET("search.json?include_over_18=1&raw_json=1&type=link") + Call searchPosts(@Query("q") String query, @Query("after") String after, + @Query("sort") String sort); + + @GET("search.json?include_over_18=1&raw_json=1&type=link") + Call searchPosts(@Query("q") String query, @Query("after") String after, + @Query("sort") String sort, @Query("t") String sortTime); + + @GET("r/{subredditName}/search.json?include_over_18=1&raw_json=1&type=link&restrict_sr=true") + Call searchPostsInSpecificSubredditOauth(@Path("subredditName") String subredditName, + @Query("q") String query, @Query("sort") String sort, + @Query("after") String after, + @HeaderMap Map headers); + + @GET("r/{subredditName}/search.json?include_over_18=1&raw_json=1&type=link&restrict_sr=true") + Call searchPostsInSpecificSubredditOauth(@Path("subredditName") String subredditName, + @Query("q") String query, @Query("sort") String sort, + @Query("t") String sortTime, @Query("after") String after, + @HeaderMap Map headers); + + @GET("r/{subredditName}/search.json?include_over_18=1&raw_json=1&type=link&restrict_sr=true") + Call searchPostsInSpecificSubreddit(@Path("subredditName") String subredditName, + @Query("q") String query, @Query("sort") String sort, + @Query("after") String after); + + @GET("r/{subredditName}/search.json?include_over_18=1&raw_json=1&type=link&restrict_sr=true") + Call searchPostsInSpecificSubreddit(@Path("subredditName") String subredditName, + @Query("q") String query, @Query("sort") String sort, + @Query("t") String sortTime, @Query("after") String after); + + @FormUrlEncoded + @POST("api/comment") + Call sendComment(@HeaderMap Map headers, @FieldMap Map params); + + @FormUrlEncoded + @POST("api/del") + Call delete(@HeaderMap Map headers, @FieldMap Map params); + + @FormUrlEncoded + @POST("api/submit") + Call submit(@HeaderMap Map headers, @FieldMap Map params); + + @FormUrlEncoded + @POST("api/media/asset.json?raw_json=1&gilding_detail=1") + Call uploadImage(@HeaderMap Map headers, @FieldMap Map params); + + @GET("r/{subredditName}/api/link_flair.json?raw_json=1") + Call getFlairs(@HeaderMap Map headers, @Path("subredditName") String subredditName); + + @GET("/r/{subredditName}/about/rules.json?raw_json=1") + Call getRules(@Path("subredditName") String subredditName); + + @GET("/comments/{id}/placeholder/{singleCommentId}.json?context=8&raw_json=1") + Call getPostAndCommentsSingleThreadByIdOauth(@Path("id") String id, @Path("singleCommentId") String singleCommentId, + @Query("sort") String sortType, + @HeaderMap Map headers); + + @GET("/comments/{id}.json?raw_json=1") + Call getPostAndCommentsByIdOauth(@Path("id") String id, @Query("sort") String sortType, + @HeaderMap Map headers); + + @GET("/comments/{id}/placeholder/{singleCommentId}.json?context=8&raw_json=1") + Call getPostAndCommentsSingleThreadById(@Path("id") String id, @Path("singleCommentId") String singleCommentId, + @Query("sort") String sortType); + + @GET("/comments/{id}.json?raw_json=1") + Call getPostAndCommentsById(@Path("id") String id, @Query("sort") String sortType); + + @Multipart + @POST(".") + Call uploadMediaToAWS(@PartMap() Map params, @Part() MultipartBody.Part file); + + @FormUrlEncoded + @POST("/api/editusertext") + Call editPostOrComment(@HeaderMap Map headers, @FieldMap Map params); + + @FormUrlEncoded + @POST("/api/marknsfw") + Call markNSFW(@HeaderMap Map headers, @FieldMap Map params); + + @FormUrlEncoded + @POST("/api/unmarknsfw") + Call unmarkNSFW(@HeaderMap Map headers, @FieldMap Map params); + + @FormUrlEncoded + @POST("/api/spoiler") + Call markSpoiler(@HeaderMap Map headers, @FieldMap Map params); + + @FormUrlEncoded + @POST("/api/unspoiler") + Call unmarkSpoiler(@HeaderMap Map headers, @FieldMap Map params); + + @FormUrlEncoded + @POST("{subredditNamePrefixed}/api/selectflair") + Call selectFlair(@Path("subredditNamePrefixed") String subredditName, @HeaderMap Map headers, @FieldMap Map params); + + @GET("/message/{where}.json?raw_json=1") + Call getMessages(@HeaderMap Map headers, @Path("where") String where, @Query("after") String after); + + @FormUrlEncoded + @POST("/api/read_message") + Call readMessage(@HeaderMap Map headers, @FieldMap Map ids); + + @FormUrlEncoded + @POST("/api/save") + Call save(@HeaderMap Map headers, @FieldMap Map params); + + @FormUrlEncoded + @POST("/api/unsave") + Call unsave(@HeaderMap Map headers, @FieldMap Map params); + + @FormUrlEncoded + @POST("/api/hide") + Call hide(@HeaderMap Map headers, @FieldMap Map params); + + @FormUrlEncoded + @POST("/api/unhide") + Call unhide(@HeaderMap Map headers, @FieldMap Map params); + + @FormUrlEncoded + @POST("/api/favorite") + Call favoriteThing(@HeaderMap Map headers, @FieldMap Map params); + + @GET("/api/multi/mine") + Call getMyMultiReddits(@HeaderMap Map headers); + + @FormUrlEncoded + @POST("/api/multi/favorite?raw_json=1&gilding_detail=1") + Call favoriteMultiReddit(@HeaderMap Map headers, @FieldMap Map params); + + @GET("/api/multi/user/{username}") + Call getUserMultiReddits(@Path("username") String username); + + @GET("{multipath}?raw_json=1") + Call getMultiRedditPosts(@Path(value = "multipath", encoded = true) String multiPath, + @Query("after") String after); + + @GET("{multipath}?raw_json=1") + Call getMultiRedditPosts(@Path(value = "multipath", encoded = true) String multiPath, + @Query("after") String after, @Query("t") String sortTime); + + @GET("{multipath}.json?raw_json=1") + Call getMultiRedditPostsOauth(@Path(value = "multipath", encoded = true) String multiPath, + @Query("after") String after, @Query("t") String sortTime, + @HeaderMap Map headers); + + @GET("{multipath}.json?raw_json=1") + Call getMultiRedditPostsOauth(@Path(value = "multipath", encoded = true) String multiPath, + @Query("after") String after, @HeaderMap Map headers); + + @FormUrlEncoded + @POST("/api/multi/multipath") + Call createMultiReddit(@HeaderMap Map headers, @FieldMap Map params); + + @FormUrlEncoded + @PUT("/api/multi/multipath") + Call updateMultiReddit(@HeaderMap Map headers, @FieldMap Map params); + + @DELETE("/api/multi/multipath") + Call deleteMultiReddit(@HeaderMap Map headers, @Query("multipath") String multipath); + + @GET("/api/multi/multipath/") + Call getMultiRedditInfo(@HeaderMap Map headers, @Query("multipath") String multipath); + + @FormUrlEncoded + @POST("/api/report") + Call report(@HeaderMap Map headers, @FieldMap Map params); +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/AccessTokenAuthenticator.java b/app/src/main/java/ml/docilealligator/infinityforreddit/AccessTokenAuthenticator.java index 8440fec7..709a8cd5 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/AccessTokenAuthenticator.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/AccessTokenAuthenticator.java @@ -10,8 +10,9 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.Account.Account; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import okhttp3.Authenticator; import okhttp3.Headers; import okhttp3.Request; @@ -33,7 +34,7 @@ class AccessTokenAuthenticator implements Authenticator { @Override public Request authenticate(Route route, @NonNull Response response) { if (response.code() == 401) { - String accessToken = response.request().header(RedditUtils.AUTHORIZATION_KEY).substring(RedditUtils.AUTHORIZATION_BASE.length()); + String accessToken = response.request().header(APIUtils.AUTHORIZATION_KEY).substring(APIUtils.AUTHORIZATION_BASE.length()); synchronized (this) { Account account = mRedditDataRoomDatabase.accountDao().getCurrentAccount(); if (account == null) { @@ -43,12 +44,12 @@ class AccessTokenAuthenticator implements Authenticator { if (accessToken.equals(accessTokenFromDatabase)) { String newAccessToken = refreshAccessToken(account); if (!newAccessToken.equals("")) { - return response.request().newBuilder().headers(Headers.of(RedditUtils.getOAuthHeader(newAccessToken))).build(); + return response.request().newBuilder().headers(Headers.of(APIUtils.getOAuthHeader(newAccessToken))).build(); } else { return null; } } else { - return response.request().newBuilder().headers(Headers.of(RedditUtils.getOAuthHeader(accessTokenFromDatabase))).build(); + return response.request().newBuilder().headers(Headers.of(APIUtils.getOAuthHeader(accessTokenFromDatabase))).build(); } } } @@ -61,15 +62,15 @@ class AccessTokenAuthenticator implements Authenticator { RedditAPI api = mRetrofit.create(RedditAPI.class); Map params = new HashMap<>(); - params.put(RedditUtils.GRANT_TYPE_KEY, RedditUtils.GRANT_TYPE_REFRESH_TOKEN); - params.put(RedditUtils.REFRESH_TOKEN_KEY, refreshToken); + params.put(APIUtils.GRANT_TYPE_KEY, APIUtils.GRANT_TYPE_REFRESH_TOKEN); + params.put(APIUtils.REFRESH_TOKEN_KEY, refreshToken); - Call accessTokenCall = api.getAccessToken(RedditUtils.getHttpBasicAuthHeader(), params); + Call accessTokenCall = api.getAccessToken(APIUtils.getHttpBasicAuthHeader(), params); try { retrofit2.Response response = accessTokenCall.execute(); if (response.isSuccessful() && response.body() != null) { JSONObject jsonObject = new JSONObject((String) response.body()); - String newAccessToken = jsonObject.getString(RedditUtils.ACCESS_TOKEN_KEY); + String newAccessToken = jsonObject.getString(APIUtils.ACCESS_TOKEN_KEY); mRedditDataRoomDatabase.accountDao().changeAccessToken(account.getUsername(), newAccessToken); return newAccessToken; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditCommentActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditCommentActivity.java index fac5af22..307f5e13 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditCommentActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditCommentActivity.java @@ -34,8 +34,8 @@ import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; -import ml.docilealligator.infinityforreddit.RedditAPI; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import ml.docilealligator.infinityforreddit.Utils.Utils; import retrofit2.Call; import retrofit2.Callback; @@ -150,11 +150,11 @@ public class EditCommentActivity extends BaseActivity { String content = contentEditText.getText().toString(); Map params = new HashMap<>(); - params.put(RedditUtils.THING_ID_KEY, mFullName); - params.put(RedditUtils.TEXT_KEY, content); + params.put(APIUtils.THING_ID_KEY, mFullName); + params.put(APIUtils.TEXT_KEY, content); mOauthRetrofit.create(RedditAPI.class) - .editPostOrComment(RedditUtils.getOAuthHeader(mAccessToken), params) + .editPostOrComment(APIUtils.getOAuthHeader(mAccessToken), params) .enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditPostActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditPostActivity.java index bdc92af4..aaf5d2f5 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditPostActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/EditPostActivity.java @@ -36,8 +36,8 @@ import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; -import ml.docilealligator.infinityforreddit.RedditAPI; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -153,11 +153,11 @@ public class EditPostActivity extends BaseActivity { Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_SHORT).show(); Map params = new HashMap<>(); - params.put(RedditUtils.THING_ID_KEY, mFullName); - params.put(RedditUtils.TEXT_KEY, contentEditText.getText().toString()); + params.put(APIUtils.THING_ID_KEY, mFullName); + params.put(APIUtils.TEXT_KEY, contentEditText.getText().toString()); mOauthRetrofit.create(RedditAPI.class) - .editPostOrComment(RedditUtils.getOAuthHeader(mAccessToken), params) + .editPostOrComment(APIUtils.getOAuthHeader(mAccessToken), params) .enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/LinkResolverActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/LinkResolverActivity.java index 52c6ddc3..1a042e65 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/LinkResolverActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/LinkResolverActivity.java @@ -39,6 +39,9 @@ public class LinkResolverActivity extends AppCompatActivity { private static final String MULTIREDDIT_PATTERN_2 = "/[rR]/(\\w+\\+?)+/?"; private static final String REDD_IT_POST_PATTERN = "/\\w+/?"; private static final String GFYCAT_PATTERN = "/[\\w-]+$"; + private static final String IMGUR_GALLERY_PATTERN = "/gallery/\\w+/?"; + private static final String IMGUR_ALBUM_PATTERN = "/(album|a)/\\w+/?"; + private static final String IMGUR_IMAGE_PATTERN = "/\\w+/?"; @Inject @Named("default") @@ -162,6 +165,27 @@ public class LinkResolverActivity extends AppCompatActivity { } else { deepLinkError(uri); } + } else if (authority.contains("imgur.com")) { + if (path.matches(IMGUR_GALLERY_PATTERN)) { + Intent intent = new Intent(this, ViewImgurMediaActivity.class); + intent.putExtra(ViewImgurMediaActivity.EXTRA_IMGUR_TYPE, ViewImgurMediaActivity.IMGUR_TYPE_GALLERY); + intent.putExtra(ViewImgurMediaActivity.EXTRA_IMGUR_ID, segments.get(1)); + startActivity(intent); + } else if (path.matches(IMGUR_ALBUM_PATTERN)) { + Intent intent = new Intent(this, ViewImgurMediaActivity.class); + intent.putExtra(ViewImgurMediaActivity.EXTRA_IMGUR_TYPE, ViewImgurMediaActivity.IMGUR_TYPE_ALBUM); + intent.putExtra(ViewImgurMediaActivity.EXTRA_IMGUR_ID, segments.get(1)); + startActivity(intent); + } else if (path.matches(IMGUR_IMAGE_PATTERN)) { + Intent intent = new Intent(this, ViewImgurMediaActivity.class); + intent.putExtra(ViewImgurMediaActivity.EXTRA_IMGUR_TYPE, ViewImgurMediaActivity.IMGUR_TYPE_IMAGE); + intent.putExtra(ViewImgurMediaActivity.EXTRA_IMGUR_ID, path.substring(1)); + startActivity(intent); + } else { + deepLinkError(uri); + } + } else { + deepLinkError(uri); } } else { deepLinkError(uri); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/LoginActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/LoginActivity.java index 8ed1df56..7f03f302 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/LoginActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/LoginActivity.java @@ -34,9 +34,9 @@ import ml.docilealligator.infinityforreddit.FetchMyInfo; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.ParseAndSaveAccountInfo; import ml.docilealligator.infinityforreddit.R; -import ml.docilealligator.infinityforreddit.RedditAPI; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -83,14 +83,14 @@ public class LoginActivity extends BaseActivity { webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDomStorageEnabled(true); - Uri baseUri = Uri.parse(RedditUtils.OAUTH_URL); + Uri baseUri = Uri.parse(APIUtils.OAUTH_URL); Uri.Builder uriBuilder = baseUri.buildUpon(); - uriBuilder.appendQueryParameter(RedditUtils.CLIENT_ID_KEY, RedditUtils.CLIENT_ID); - uriBuilder.appendQueryParameter(RedditUtils.RESPONSE_TYPE_KEY, RedditUtils.RESPONSE_TYPE); - uriBuilder.appendQueryParameter(RedditUtils.STATE_KEY, RedditUtils.STATE); - uriBuilder.appendQueryParameter(RedditUtils.REDIRECT_URI_KEY, RedditUtils.REDIRECT_URI); - uriBuilder.appendQueryParameter(RedditUtils.DURATION_KEY, RedditUtils.DURATION); - uriBuilder.appendQueryParameter(RedditUtils.SCOPE_KEY, RedditUtils.SCOPE); + uriBuilder.appendQueryParameter(APIUtils.CLIENT_ID_KEY, APIUtils.CLIENT_ID); + uriBuilder.appendQueryParameter(APIUtils.RESPONSE_TYPE_KEY, APIUtils.RESPONSE_TYPE); + uriBuilder.appendQueryParameter(APIUtils.STATE_KEY, APIUtils.STATE); + uriBuilder.appendQueryParameter(APIUtils.REDIRECT_URI_KEY, APIUtils.REDIRECT_URI); + uriBuilder.appendQueryParameter(APIUtils.DURATION_KEY, APIUtils.DURATION); + uriBuilder.appendQueryParameter(APIUtils.SCOPE_KEY, APIUtils.SCOPE); String url = uriBuilder.toString(); @@ -104,16 +104,16 @@ public class LoginActivity extends BaseActivity { if (url.contains("&code=") || url.contains("?code=")) { Uri uri = Uri.parse(url); String state = uri.getQueryParameter("state"); - if (state.equals(RedditUtils.STATE)) { + if (state.equals(APIUtils.STATE)) { authCode = uri.getQueryParameter("code"); Map params = new HashMap<>(); - params.put(RedditUtils.GRANT_TYPE_KEY, "authorization_code"); + params.put(APIUtils.GRANT_TYPE_KEY, "authorization_code"); params.put("code", authCode); - params.put("redirect_uri", RedditUtils.REDIRECT_URI); + params.put("redirect_uri", APIUtils.REDIRECT_URI); RedditAPI api = mRetrofit.create(RedditAPI.class); - Call accessTokenCall = api.getAccessToken(RedditUtils.getHttpBasicAuthHeader(), params); + Call accessTokenCall = api.getAccessToken(APIUtils.getHttpBasicAuthHeader(), params); accessTokenCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { @@ -126,8 +126,8 @@ public class LoginActivity extends BaseActivity { } JSONObject responseJSON = new JSONObject(accountResponse); - String accessToken = responseJSON.getString(RedditUtils.ACCESS_TOKEN_KEY); - String refreshToken = responseJSON.getString(RedditUtils.REFRESH_TOKEN_KEY); + String accessToken = responseJSON.getString(APIUtils.ACCESS_TOKEN_KEY); + String refreshToken = responseJSON.getString(APIUtils.REFRESH_TOKEN_KEY); FetchMyInfo.fetchAccountInfo(mOauthRetrofit, accessToken, new FetchMyInfo.FetchUserMyListener() { @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/PostLinkActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/PostLinkActivity.java index 133d4f7d..f59e807b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/PostLinkActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/PostLinkActivity.java @@ -46,7 +46,7 @@ import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.Service.SubmitPostService; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import pl.droidsonroids.gif.GifImageView; import retrofit2.Retrofit; @@ -444,7 +444,7 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName); intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString()); intent.putExtra(SubmitPostService.EXTRA_CONTENT, linkEditText.getText().toString()); - intent.putExtra(SubmitPostService.EXTRA_KIND, RedditUtils.KIND_LINK); + intent.putExtra(SubmitPostService.EXTRA_KIND, APIUtils.KIND_LINK); intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair); intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler); intent.putExtra(SubmitPostService.EXTRA_IS_NSFW, isNSFW); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/PostTextActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/PostTextActivity.java index 75debb2c..a448759f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/PostTextActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/PostTextActivity.java @@ -46,7 +46,7 @@ import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.Service.SubmitPostService; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import pl.droidsonroids.gif.GifImageView; import retrofit2.Retrofit; @@ -444,7 +444,7 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName); intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString()); intent.putExtra(SubmitPostService.EXTRA_CONTENT, contentEditText.getText().toString()); - intent.putExtra(SubmitPostService.EXTRA_KIND, RedditUtils.KIND_SELF); + intent.putExtra(SubmitPostService.EXTRA_KIND, APIUtils.KIND_SELF); intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair); intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler); intent.putExtra(SubmitPostService.EXTRA_IS_NSFW, isNSFW); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewImgurMediaActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewImgurMediaActivity.java new file mode 100644 index 00000000..cf335696 --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewImgurMediaActivity.java @@ -0,0 +1,307 @@ +package ml.docilealligator.infinityforreddit.Activity; + +import android.content.SharedPreferences; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.os.AsyncTask; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.ProgressBar; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; + +import javax.inject.Inject; +import javax.inject.Named; + +import butterknife.BindView; +import butterknife.ButterKnife; +import ml.docilealligator.infinityforreddit.API.ImgurAPI; +import ml.docilealligator.infinityforreddit.ContentFontStyle; +import ml.docilealligator.infinityforreddit.FontStyle; +import ml.docilealligator.infinityforreddit.Fragment.ViewImgurGifFragment; +import ml.docilealligator.infinityforreddit.Fragment.ViewImgurImageFragment; +import ml.docilealligator.infinityforreddit.Fragment.ViewImgurVideoFragment; +import ml.docilealligator.infinityforreddit.ImgurMedia; +import ml.docilealligator.infinityforreddit.Infinity; +import ml.docilealligator.infinityforreddit.R; +import ml.docilealligator.infinityforreddit.TitleFontStyle; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; +import ml.docilealligator.infinityforreddit.Utils.JSONUtils; +import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; + +public class ViewImgurMediaActivity extends AppCompatActivity { + + public static final String EXTRA_IMGUR_TYPE = "EIT"; + public static final String EXTRA_IMGUR_ID = "EII"; + public static final int IMGUR_TYPE_GALLERY = 0; + public static final int IMGUR_TYPE_ALBUM = 1; + public static final int IMGUR_TYPE_IMAGE = 2; + private static final String IMGUR_IMAGES_STATE = "IIS"; + + @BindView(R.id.progress_bar_view_imgur_media_activity) + ProgressBar progressBar; + @BindView(R.id.view_pager_view_imgur_media_activity) + ViewPager viewPager; + private SectionsPagerAdapter sectionsPagerAdapter; + private ArrayList images; + @Inject + @Named("imgur") + Retrofit imgurRetrofit; + @Inject + @Named("default") + SharedPreferences sharedPreferences; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + ((Infinity) getApplication()).getAppComponent().inject(this); + + getTheme().applyStyle(R.style.Theme_Normal, true); + + getTheme().applyStyle(FontStyle.valueOf(sharedPreferences + .getString(SharedPreferencesUtils.FONT_SIZE_KEY, FontStyle.Normal.name())).getResId(), true); + + getTheme().applyStyle(TitleFontStyle.valueOf(sharedPreferences + .getString(SharedPreferencesUtils.TITLE_FONT_SIZE_KEY, TitleFontStyle.Normal.name())).getResId(), true); + + getTheme().applyStyle(ContentFontStyle.valueOf(sharedPreferences + .getString(SharedPreferencesUtils.CONTENT_FONT_SIZE_KEY, ContentFontStyle.Normal.name())).getResId(), true); + + setContentView(R.layout.activity_view_imgur_media); + + ButterKnife.bind(this); + + ActionBar actionBar = getSupportActionBar(); + Drawable upArrow = getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp); + actionBar.setHomeAsUpIndicator(upArrow); + actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.transparentActionBarAndExoPlayerControllerColor))); + + setTitle(" "); + + String imgurId = getIntent().getStringExtra(EXTRA_IMGUR_ID); + if (imgurId == null) { + finish(); + return; + } + + if (savedInstanceState != null) { + images = savedInstanceState.getParcelableArrayList(IMGUR_IMAGES_STATE); + } + + if (images == null) { + switch (getIntent().getIntExtra(EXTRA_IMGUR_TYPE, IMGUR_TYPE_IMAGE)) { + case IMGUR_TYPE_GALLERY: + imgurRetrofit.create(ImgurAPI.class).getGalleryImages(APIUtils.IMGUR_CLIENT_ID, imgurId) + .enqueue(new Callback() { + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + if (response.isSuccessful()) { + new ParseImgurImagesAsyncTask(response.body(), new ParseImgurImagesAsyncTask.ParseImgurImagesAsyncTaskListener() { + @Override + public void success(ArrayList images) { + ViewImgurMediaActivity.this.images = images; + progressBar.setVisibility(View.GONE); + setupViewPager(); + } + + @Override + public void failed() { + progressBar.setVisibility(View.GONE); + Toast.makeText(ViewImgurMediaActivity.this, R.string.error_fetching_imgur_media, Toast.LENGTH_SHORT).show(); + } + }).execute(); + } else { + progressBar.setVisibility(View.GONE); + Toast.makeText(ViewImgurMediaActivity.this, R.string.error_fetching_imgur_media, Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + progressBar.setVisibility(View.GONE); + Toast.makeText(ViewImgurMediaActivity.this, R.string.error_fetching_imgur_media, Toast.LENGTH_SHORT).show(); + } + }); + break; + case IMGUR_TYPE_ALBUM: + break; + case IMGUR_TYPE_IMAGE: + break; + } + } else { + progressBar.setVisibility(View.GONE); + setupViewPager(); + } + } + + private void setupViewPager() { + setToolbarTitle(0); + sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); + viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + switch (images.get(position).getType()) { + case ImgurMedia.TYPE_GIF: + setTitle("GIF " + (position + 1) + "/" + images.size()); + break; + case ImgurMedia.TYPE_VIDEO: + setTitle("Video "+ (position + 1) + "/" + images.size()); + break; + default: + setTitle("Image " + (position + 1) + "/" + images.size()); + + } + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + viewPager.setAdapter(sectionsPagerAdapter); + } + + private void setToolbarTitle(int position) { + switch (images.get(position).getType()) { + case ImgurMedia.TYPE_GIF: + setTitle("GIF " + (position + 1) + "/" + images.size()); + break; + case ImgurMedia.TYPE_VIDEO: + setTitle("Video "+ (position + 1) + "/" + images.size()); + break; + default: + setTitle("Image " + (position + 1) + "/" + images.size()); + + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + return true; + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + if (item.getItemId() == android.R.id.home) { + finish(); + return true; + } + + return false; + } + + @Override + protected void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + outState.putParcelableArrayList(IMGUR_IMAGES_STATE, images); + } + + private class SectionsPagerAdapter extends FragmentStatePagerAdapter { + + SectionsPagerAdapter(@NonNull FragmentManager fm) { + super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + } + + @NonNull + @Override + public Fragment getItem(int position) { + ImgurMedia imgurMedia = images.get(position); + if (imgurMedia.getType() == ImgurMedia.TYPE_VIDEO) { + ViewImgurVideoFragment fragment = new ViewImgurVideoFragment(); + Bundle bundle = new Bundle(); + bundle.putParcelable(ViewImgurVideoFragment.EXTRA_IMGUR_VIDEO, imgurMedia); + fragment.setArguments(bundle); + return fragment; + } else if (imgurMedia.getType() == ImgurMedia.TYPE_GIF) { + ViewImgurGifFragment fragment = new ViewImgurGifFragment(); + Bundle bundle = new Bundle(); + bundle.putParcelable(ViewImgurGifFragment.EXTRA_IMGUR_GIF, imgurMedia); + fragment.setArguments(bundle); + return fragment; + } else { + ViewImgurImageFragment fragment = new ViewImgurImageFragment(); + Bundle bundle = new Bundle(); + bundle.putParcelable(ViewImgurImageFragment.EXTRA_IMGUR_IMAGES, imgurMedia); + fragment.setArguments(bundle); + return fragment; + } + } + + @Override + public int getCount() { + return images.size(); + } + } + + private static class ParseImgurImagesAsyncTask extends AsyncTask { + + private String response; + private ArrayList images; + private boolean parseFailed = false; + private ParseImgurImagesAsyncTaskListener parseImgurImagesAsyncTaskListener; + + interface ParseImgurImagesAsyncTaskListener { + void success(ArrayList images); + void failed(); + } + + ParseImgurImagesAsyncTask(String response, ParseImgurImagesAsyncTaskListener parseImgurImagesAsyncTaskListener) { + this.response = response; + this.parseImgurImagesAsyncTaskListener = parseImgurImagesAsyncTaskListener; + } + + @Override + protected Void doInBackground(Void... voids) { + try { + JSONArray jsonArray = new JSONObject(response).getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.IMAGES_KEY); + images = new ArrayList<>(); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject image = jsonArray.getJSONObject(i); + images.add(new ImgurMedia(image.getString(JSONUtils.ID_KEY), + image.getString(JSONUtils.TITLE_KEY), image.getString(JSONUtils.DESCRIPTION_KEY), + image.getString(JSONUtils.TYPE_KEY), image.getString(JSONUtils.LINK_KEY))); + } + } catch (JSONException e) { + e.printStackTrace(); + parseFailed = true; + } + + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + if (parseFailed) { + parseImgurImagesAsyncTaskListener.failed(); + } else { + parseImgurImagesAsyncTaskListener.success(images); + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPostDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPostDetailActivity.java index f7068f0b..e258124b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPostDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Activity/ViewPostDetailActivity.java @@ -80,12 +80,12 @@ import ml.docilealligator.infinityforreddit.Post.ParsePost; import ml.docilealligator.infinityforreddit.Post.Post; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.ReadMessage; -import ml.docilealligator.infinityforreddit.RedditAPI; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.SaveThing; import ml.docilealligator.infinityforreddit.SortType; import ml.docilealligator.infinityforreddit.SortTypeSelectionCallback; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils; import retrofit2.Call; import retrofit2.Callback; @@ -582,10 +582,10 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS } else { if (isSingleCommentThreadMode && mSingleCommentId != null) { postAndComments = mOauthRetrofit.create(RedditAPI.class).getPostAndCommentsSingleThreadByIdOauth(subredditId, - mSingleCommentId, sortType, RedditUtils.getOAuthHeader(mAccessToken)); + mSingleCommentId, sortType, APIUtils.getOAuthHeader(mAccessToken)); } else { postAndComments = mOauthRetrofit.create(RedditAPI.class).getPostAndCommentsByIdOauth(subredditId, - sortType, RedditUtils.getOAuthHeader(mAccessToken)); + sortType, APIUtils.getOAuthHeader(mAccessToken)); } } postAndComments.enqueue(new Callback() { @@ -976,8 +976,8 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS } Map params = new HashMap<>(); - params.put(RedditUtils.ID_KEY, mPost.getFullName()); - mOauthRetrofit.create(RedditAPI.class).markNSFW(RedditUtils.getOAuthHeader(mAccessToken), params) + params.put(APIUtils.ID_KEY, mPost.getFullName()); + mOauthRetrofit.create(RedditAPI.class).markNSFW(APIUtils.getOAuthHeader(mAccessToken), params) .enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { @@ -1014,8 +1014,8 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS } Map params = new HashMap<>(); - params.put(RedditUtils.ID_KEY, mPost.getFullName()); - mOauthRetrofit.create(RedditAPI.class).unmarkNSFW(RedditUtils.getOAuthHeader(mAccessToken), params) + params.put(APIUtils.ID_KEY, mPost.getFullName()); + mOauthRetrofit.create(RedditAPI.class).unmarkNSFW(APIUtils.getOAuthHeader(mAccessToken), params) .enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { @@ -1052,8 +1052,8 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS } Map params = new HashMap<>(); - params.put(RedditUtils.ID_KEY, mPost.getFullName()); - mOauthRetrofit.create(RedditAPI.class).markSpoiler(RedditUtils.getOAuthHeader(mAccessToken), params) + params.put(APIUtils.ID_KEY, mPost.getFullName()); + mOauthRetrofit.create(RedditAPI.class).markSpoiler(APIUtils.getOAuthHeader(mAccessToken), params) .enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { @@ -1090,8 +1090,8 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS } Map params = new HashMap<>(); - params.put(RedditUtils.ID_KEY, mPost.getFullName()); - mOauthRetrofit.create(RedditAPI.class).unmarkSpoiler(RedditUtils.getOAuthHeader(mAccessToken), params) + params.put(APIUtils.ID_KEY, mPost.getFullName()); + mOauthRetrofit.create(RedditAPI.class).unmarkSpoiler(APIUtils.getOAuthHeader(mAccessToken), params) .enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { @@ -1582,13 +1582,13 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS @Override public void flairSelected(Flair flair) { Map params = new HashMap<>(); - params.put(RedditUtils.API_TYPE_KEY, RedditUtils.API_TYPE_JSON); - params.put(RedditUtils.FLAIR_TEMPLATE_ID_KEY, flair.getId()); - params.put(RedditUtils.LINK_KEY, mPost.getFullName()); - params.put(RedditUtils.TEXT_KEY, flair.getText()); + params.put(APIUtils.API_TYPE_KEY, APIUtils.API_TYPE_JSON); + params.put(APIUtils.FLAIR_TEMPLATE_ID_KEY, flair.getId()); + params.put(APIUtils.LINK_KEY, mPost.getFullName()); + params.put(APIUtils.TEXT_KEY, flair.getText()); mOauthRetrofit.create(RedditAPI.class).selectFlair(mPost.getSubredditNamePrefixed(), - RedditUtils.getOAuthHeader(mAccessToken), params).enqueue(new Callback() { + APIUtils.getOAuthHeader(mAccessToken), params).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java index 64ab34ff..4f638d8b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java @@ -103,7 +103,7 @@ import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.SaveThing; import ml.docilealligator.infinityforreddit.Utils.GlideImageGetter; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.Utils.Utils; import ml.docilealligator.infinityforreddit.VoteThing; @@ -1681,13 +1681,13 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter if (sortType.getTime() != null) { commentsCall = api.getUserSavedCommentsOauth(username, PostDataSource.USER_WHERE_SAVED, null, sortType.getType().value, sortType.getTime().value, - RedditUtils.getOAuthHeader(accessToken)); + APIUtils.getOAuthHeader(accessToken)); } else { commentsCall = api.getUserSavedCommentsOauth(username, PostDataSource.USER_WHERE_SAVED, - null, sortType.getType().value, RedditUtils.getOAuthHeader(accessToken)); + null, sortType.getType().value, APIUtils.getOAuthHeader(accessToken)); } } else { if (accessToken == null) { @@ -93,10 +94,10 @@ public class CommentDataSource extends PageKeyedDataSource } } else { if (sortType.getTime() != null) { - commentsCall = api.getUserCommentsOauth(RedditUtils.getOAuthHeader(accessToken), username, + commentsCall = api.getUserCommentsOauth(APIUtils.getOAuthHeader(accessToken), username, null, sortType.getType().value, sortType.getTime().value); } else { - commentsCall = api.getUserCommentsOauth(RedditUtils.getOAuthHeader(accessToken), username, + commentsCall = api.getUserCommentsOauth(APIUtils.getOAuthHeader(accessToken), username, null, sortType.getType().value); } } @@ -156,10 +157,10 @@ public class CommentDataSource extends PageKeyedDataSource if (areSavedComments) { if (sortType.getTime() != null) { commentsCall = api.getUserSavedCommentsOauth(username, PostDataSource.USER_WHERE_SAVED, params.key, - sortType.getType().value, sortType.getTime().value, RedditUtils.getOAuthHeader(accessToken)); + sortType.getType().value, sortType.getTime().value, APIUtils.getOAuthHeader(accessToken)); } else { commentsCall = api.getUserSavedCommentsOauth(username, PostDataSource.USER_WHERE_SAVED, params.key, - sortType.getType().value, RedditUtils.getOAuthHeader(accessToken)); + sortType.getType().value, APIUtils.getOAuthHeader(accessToken)); } } else { if (accessToken == null) { @@ -171,10 +172,10 @@ public class CommentDataSource extends PageKeyedDataSource } } else { if (sortType.getTime() != null) { - commentsCall = api.getUserCommentsOauth(RedditUtils.getOAuthHeader(accessToken), + commentsCall = api.getUserCommentsOauth(APIUtils.getOAuthHeader(accessToken), username, params.key, sortType.getType().value, sortType.getTime().value); } else { - commentsCall = api.getUserCommentsOauth(RedditUtils.getOAuthHeader(accessToken), + commentsCall = api.getUserCommentsOauth(APIUtils.getOAuthHeader(accessToken), username, params.key, sortType.getType().value); } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/DeleteThing.java b/app/src/main/java/ml/docilealligator/infinityforreddit/DeleteThing.java index 7ca89ff9..9e06de80 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/DeleteThing.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/DeleteThing.java @@ -5,7 +5,8 @@ import androidx.annotation.NonNull; import java.util.HashMap; import java.util.Map; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -14,8 +15,8 @@ import retrofit2.Retrofit; public class DeleteThing { public static void delete(Retrofit oauthRetrofit, String fullname, String accessToken, DeleteThingListener deleteThingListener) { Map params = new HashMap<>(); - params.put(RedditUtils.ID_KEY, fullname); - oauthRetrofit.create(RedditAPI.class).delete(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { + params.put(APIUtils.ID_KEY, fullname); + oauthRetrofit.create(RedditAPI.class).delete(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FavoriteThing.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FavoriteThing.java index 4183b276..c0d429f7 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FavoriteThing.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FavoriteThing.java @@ -5,10 +5,11 @@ import androidx.annotation.NonNull; import java.util.HashMap; import java.util.Map; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.AsyncTask.InsertSubscribedThingsAsyncTask; import ml.docilealligator.infinityforreddit.SubscribedSubredditDatabase.SubscribedSubredditData; import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserData; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -19,9 +20,9 @@ public class FavoriteThing { String accessToken, SubscribedSubredditData subscribedSubredditData, FavoriteThingListener favoriteThingListener) { Map params = new HashMap<>(); - params.put(RedditUtils.SR_NAME_KEY, subscribedSubredditData.getName()); - params.put(RedditUtils.MAKE_FAVORITE_KEY, "true"); - oauthRetrofit.create(RedditAPI.class).favoriteThing(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { + params.put(APIUtils.SR_NAME_KEY, subscribedSubredditData.getName()); + params.put(APIUtils.MAKE_FAVORITE_KEY, "true"); + oauthRetrofit.create(RedditAPI.class).favoriteThing(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { @@ -43,9 +44,9 @@ public class FavoriteThing { String accessToken, SubscribedSubredditData subscribedSubredditData, FavoriteThingListener favoriteThingListener) { Map params = new HashMap<>(); - params.put(RedditUtils.SR_NAME_KEY, subscribedSubredditData.getName()); - params.put(RedditUtils.MAKE_FAVORITE_KEY, "false"); - oauthRetrofit.create(RedditAPI.class).favoriteThing(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { + params.put(APIUtils.SR_NAME_KEY, subscribedSubredditData.getName()); + params.put(APIUtils.MAKE_FAVORITE_KEY, "false"); + oauthRetrofit.create(RedditAPI.class).favoriteThing(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { @@ -67,9 +68,9 @@ public class FavoriteThing { String accessToken, SubscribedUserData subscribedUserData, FavoriteThingListener favoriteThingListener) { Map params = new HashMap<>(); - params.put(RedditUtils.SR_NAME_KEY, "u_" + subscribedUserData.getName()); - params.put(RedditUtils.MAKE_FAVORITE_KEY, "true"); - oauthRetrofit.create(RedditAPI.class).favoriteThing(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { + params.put(APIUtils.SR_NAME_KEY, "u_" + subscribedUserData.getName()); + params.put(APIUtils.MAKE_FAVORITE_KEY, "true"); + oauthRetrofit.create(RedditAPI.class).favoriteThing(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { @@ -91,9 +92,9 @@ public class FavoriteThing { String accessToken, SubscribedUserData subscribedUserData, FavoriteThingListener favoriteThingListener) { Map params = new HashMap<>(); - params.put(RedditUtils.SR_NAME_KEY, "u_" + subscribedUserData.getName()); - params.put(RedditUtils.MAKE_FAVORITE_KEY, "false"); - oauthRetrofit.create(RedditAPI.class).favoriteThing(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { + params.put(APIUtils.SR_NAME_KEY, "u_" + subscribedUserData.getName()); + params.put(APIUtils.MAKE_FAVORITE_KEY, "false"); + oauthRetrofit.create(RedditAPI.class).favoriteThing(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java index 2af9275e..b6b16c1b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java @@ -6,7 +6,8 @@ import androidx.annotation.Nullable; import java.util.ArrayList; import java.util.Locale; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -26,10 +27,10 @@ public class FetchComment { } } else { if (commentId == null) { - comments = api.getPostAndCommentsByIdOauth(article, sortType, RedditUtils.getOAuthHeader(accessToken)); + comments = api.getPostAndCommentsByIdOauth(article, sortType, APIUtils.getOAuthHeader(accessToken)); } else { comments = api.getPostAndCommentsSingleThreadByIdOauth(article, commentId, sortType, - RedditUtils.getOAuthHeader(accessToken)); + APIUtils.getOAuthHeader(accessToken)); } } @@ -90,7 +91,7 @@ public class FetchComment { if (accessToken == null) { moreComments = api.getInfo(stringBuilder.toString()); } else { - moreComments = api.getInfoOauth(stringBuilder.toString(), RedditUtils.getOAuthHeader(accessToken)); + moreComments = api.getInfoOauth(stringBuilder.toString(), APIUtils.getOAuthHeader(accessToken)); } moreComments.enqueue(new Callback() { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchFlairs.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchFlairs.java index 28acfeb7..b00d52d3 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchFlairs.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchFlairs.java @@ -9,8 +9,9 @@ import org.json.JSONException; import java.util.ArrayList; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.Utils.JSONUtils; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -20,7 +21,7 @@ public class FetchFlairs { public static void fetchFlairsInSubreddit(Retrofit oauthRetrofit, String accessToken, String subredditName, FetchFlairsInSubredditListener fetchFlairsInSubredditListener) { RedditAPI api = oauthRetrofit.create(RedditAPI.class); - Call flairsCall = api.getFlairs(RedditUtils.getOAuthHeader(accessToken), subredditName); + Call flairsCall = api.getFlairs(APIUtils.getOAuthHeader(accessToken), subredditName); flairsCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchGfycatVideoLinks.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchGfycatVideoLinks.java index 49f823f9..730c050b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchGfycatVideoLinks.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchGfycatVideoLinks.java @@ -7,6 +7,7 @@ import androidx.annotation.NonNull; import org.json.JSONException; import org.json.JSONObject; +import ml.docilealligator.infinityforreddit.API.GfycatAPI; import ml.docilealligator.infinityforreddit.Utils.JSONUtils; import retrofit2.Call; import retrofit2.Callback; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchMessages.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchMessages.java index b2d33e69..e49e21ec 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchMessages.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchMessages.java @@ -14,8 +14,9 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Locale; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.Utils.JSONUtils; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import ml.docilealligator.infinityforreddit.Utils.Utils; import retrofit2.Call; import retrofit2.Callback; @@ -31,7 +32,7 @@ public class FetchMessages { static void fetchMessagesAsync(Retrofit oauthRetrofit, Locale locale, String accessToken, String where, String after, FetchMessagesListener fetchMessagesListener) { - oauthRetrofit.create(RedditAPI.class).getMessages(RedditUtils.getOAuthHeader(accessToken), where, after) + oauthRetrofit.create(RedditAPI.class).getMessages(APIUtils.getOAuthHeader(accessToken), where, after) .enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchMyInfo.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchMyInfo.java index a8430b01..3467599e 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchMyInfo.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchMyInfo.java @@ -2,7 +2,8 @@ package ml.docilealligator.infinityforreddit; import androidx.annotation.NonNull; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Retrofit; @@ -13,7 +14,7 @@ public class FetchMyInfo { final FetchUserMyListener fetchUserMyListener) { RedditAPI api = retrofit.create(RedditAPI.class); - Call userInfo = api.getMyInfo(RedditUtils.getOAuthHeader(accessToken)); + Call userInfo = api.getMyInfo(APIUtils.getOAuthHeader(accessToken)); userInfo.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchRules.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchRules.java index 604fe82f..877c614c 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchRules.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchRules.java @@ -10,6 +10,7 @@ import org.json.JSONObject; import java.util.ArrayList; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.Utils.JSONUtils; import ml.docilealligator.infinityforreddit.Utils.Utils; import retrofit2.Call; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java index 0172939f..b9623b91 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java @@ -4,6 +4,7 @@ import androidx.annotation.NonNull; import java.util.ArrayList; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.SubredditDatabase.SubredditData; import retrofit2.Call; import retrofit2.Callback; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java index de1e1cfe..0fbfd856 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java @@ -4,10 +4,11 @@ import androidx.annotation.NonNull; import java.util.ArrayList; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.SubredditDatabase.SubredditData; import ml.docilealligator.infinityforreddit.SubscribedSubredditDatabase.SubscribedSubredditData; import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserData; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -21,7 +22,7 @@ public class FetchSubscribedThing { final FetchSubscribedThingListener fetchSubscribedThingListener) { RedditAPI api = retrofit.create(RedditAPI.class); - Call subredditDataCall = api.getSubscribedThing(lastItem, RedditUtils.getOAuthHeader(accessToken)); + Call subredditDataCall = api.getSubscribedThing(lastItem, APIUtils.getOAuthHeader(accessToken)); subredditDataCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserData.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserData.java index f3197820..b698d8d1 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserData.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserData.java @@ -4,6 +4,7 @@ import androidx.annotation.NonNull; import java.util.ArrayList; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.User.UserData; import retrofit2.Call; import retrofit2.Callback; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/ViewImgurGifFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/ViewImgurGifFragment.java new file mode 100644 index 00000000..41bd9c1d --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/ViewImgurGifFragment.java @@ -0,0 +1,112 @@ +package ml.docilealligator.infinityforreddit.Fragment; + +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.ProgressBar; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.alexvasilkov.gestures.views.GestureImageView; +import com.bumptech.glide.Glide; +import com.bumptech.glide.RequestManager; +import com.bumptech.glide.load.DataSource; +import com.bumptech.glide.load.engine.GlideException; +import com.bumptech.glide.request.RequestListener; +import com.bumptech.glide.request.target.Target; + +import butterknife.BindView; +import butterknife.ButterKnife; +import ml.docilealligator.infinityforreddit.ImgurMedia; +import ml.docilealligator.infinityforreddit.R; + +/** + * A simple {@link Fragment} subclass. + */ +public class ViewImgurGifFragment extends Fragment { + + public static final String EXTRA_IMGUR_GIF = "EIG"; + + @BindView(R.id.progress_bar_view_imgur_gif_fragment) + ProgressBar progressBar; + @BindView(R.id.image_view_view_imgur_gif_fragment) + GestureImageView imageView; + @BindView(R.id.load_image_error_linear_layout_view_imgur_gif_fragment) + LinearLayout errorLinearLayout; + + private Activity activity; + private RequestManager glide; + private ImgurMedia imgurMedia; + + public ViewImgurGifFragment() { + // Required empty public constructor + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View rootView = inflater.inflate(R.layout.fragment_view_imgur_gif, container, false); + + ButterKnife.bind(this, rootView); + + setHasOptionsMenu(true); + + imgurMedia = getArguments().getParcelable(EXTRA_IMGUR_GIF); + glide = Glide.with(activity); + loadGif(); + + return rootView; + } + + private void loadGif() { + glide.load(imgurMedia.getLink()).listener(new RequestListener() { + @Override + public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { + progressBar.setVisibility(View.GONE); + errorLinearLayout.setVisibility(View.VISIBLE); + return false; + } + + @Override + public boolean onResourceReady(Drawable resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { + progressBar.setVisibility(View.GONE); + return false; + } + }).into(imageView); + } + + @Override + public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { + inflater.inflate(R.menu.view_imgur_image_fragments, menu); + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.action_download_view_imgur_image_fragments: + return true; + case R.id.action_share_view_imgur_image_fragments: + return true; + } + + return false; + } + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); + activity = (Activity) context; + } +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/ViewImgurImageFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/ViewImgurImageFragment.java new file mode 100644 index 00000000..bc30a3f8 --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/ViewImgurImageFragment.java @@ -0,0 +1,108 @@ +package ml.docilealligator.infinityforreddit.Fragment; + +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.ProgressBar; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.alexvasilkov.gestures.views.GestureImageView; +import com.bumptech.glide.Glide; +import com.bumptech.glide.RequestManager; +import com.bumptech.glide.load.DataSource; +import com.bumptech.glide.load.engine.GlideException; +import com.bumptech.glide.request.RequestListener; +import com.bumptech.glide.request.target.Target; + +import butterknife.BindView; +import butterknife.ButterKnife; +import ml.docilealligator.infinityforreddit.ImgurMedia; +import ml.docilealligator.infinityforreddit.R; + +public class ViewImgurImageFragment extends Fragment { + + public static final String EXTRA_IMGUR_IMAGES = "EII"; + + @BindView(R.id.progress_bar_view_imgur_image_fragment) + ProgressBar progressBar; + @BindView(R.id.image_view_view_imgur_image_fragment) + GestureImageView imageView; + @BindView(R.id.load_image_error_linear_layout_view_imgur_image_fragment) + LinearLayout errorLinearLayout; + + private Activity activity; + private RequestManager glide; + private ImgurMedia imgurMedia; + + public ViewImgurImageFragment() { + // Required empty public constructor + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_view_imgur_images, container, false); + + ButterKnife.bind(this, rootView); + + setHasOptionsMenu(true); + + imgurMedia = getArguments().getParcelable(EXTRA_IMGUR_IMAGES); + glide = Glide.with(activity); + loadImage(); + + return rootView; + } + + private void loadImage() { + glide.load(imgurMedia.getLink()).listener(new RequestListener() { + @Override + public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { + progressBar.setVisibility(View.GONE); + errorLinearLayout.setVisibility(View.VISIBLE); + return false; + } + + @Override + public boolean onResourceReady(Drawable resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { + progressBar.setVisibility(View.GONE); + return false; + } + }).into(imageView); + } + + @Override + public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { + inflater.inflate(R.menu.view_imgur_image_fragments, menu); + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.action_download_view_imgur_image_fragments: + return true; + case R.id.action_share_view_imgur_image_fragments: + return true; + } + + return false; + } + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); + activity = (Activity) context; + } +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/ViewImgurVideoFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/ViewImgurVideoFragment.java new file mode 100644 index 00000000..fdda3c51 --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/ViewImgurVideoFragment.java @@ -0,0 +1,238 @@ +package ml.docilealligator.infinityforreddit.Fragment; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.media.AudioManager; +import android.net.Uri; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageButton; +import android.widget.LinearLayout; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; + +import com.google.android.exoplayer2.ExoPlayerFactory; +import com.google.android.exoplayer2.Player; +import com.google.android.exoplayer2.SimpleExoPlayer; +import com.google.android.exoplayer2.source.ProgressiveMediaSource; +import com.google.android.exoplayer2.source.TrackGroupArray; +import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection; +import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; +import com.google.android.exoplayer2.trackselection.TrackSelection; +import com.google.android.exoplayer2.trackselection.TrackSelectionArray; +import com.google.android.exoplayer2.trackselection.TrackSelector; +import com.google.android.exoplayer2.ui.PlayerView; +import com.google.android.exoplayer2.upstream.DataSource; +import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; +import com.google.android.exoplayer2.util.Util; + +import javax.inject.Inject; +import javax.inject.Named; + +import butterknife.BindView; +import butterknife.ButterKnife; +import ml.docilealligator.infinityforreddit.ImgurMedia; +import ml.docilealligator.infinityforreddit.Infinity; +import ml.docilealligator.infinityforreddit.R; +import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils; + +/** + * A simple {@link Fragment} subclass. + */ +public class ViewImgurVideoFragment extends Fragment { + + public static final String EXTRA_IMGUR_VIDEO = "EIV"; + private static final String IS_MUTE_STATE = "IMS"; + private static final String POSITION_STATE = "PS"; + @BindView(R.id.player_view_view_imgur_video_fragment) + PlayerView videoPlayerView; + @BindView(R.id.mute_exo_playback_control_view) + ImageButton muteButton; + private Activity activity; + private ImgurMedia imgurMedia; + private SimpleExoPlayer player; + private DataSource.Factory dataSourceFactory; + private boolean wasPlaying = false; + private boolean isMute = false; + @Inject + @Named("default") + SharedPreferences mSharedPreferences; + + public ViewImgurVideoFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_view_imgur_video, container, false); + + ((Infinity) activity.getApplication()).getAppComponent().inject(this); + + ButterKnife.bind(this, rootView); + + setHasOptionsMenu(true); + + activity.setVolumeControlStream(AudioManager.STREAM_MUSIC); + + imgurMedia = getArguments().getParcelable(EXTRA_IMGUR_VIDEO); + + if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || getResources().getBoolean(R.bool.isTablet)) { + //Set player controller bottom margin in order to display it above the navbar + int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android"); + LinearLayout controllerLinearLayout = rootView.findViewById(R.id.linear_layout_exo_playback_control_view); + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) controllerLinearLayout.getLayoutParams(); + params.bottomMargin = getResources().getDimensionPixelSize(resourceId); + } else { + //Set player controller right margin in order to display it above the navbar + int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android"); + LinearLayout controllerLinearLayout = rootView.findViewById(R.id.linear_layout_exo_playback_control_view); + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) controllerLinearLayout.getLayoutParams(); + params.rightMargin = getResources().getDimensionPixelSize(resourceId); + } + + videoPlayerView.setControllerVisibilityListener(visibility -> { + switch (visibility) { + case View.GONE: + activity.getWindow().getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE); + break; + case View.VISIBLE: + activity.getWindow().getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); + } + }); + + TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(); + TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory); + player = ExoPlayerFactory.newSimpleInstance(activity, trackSelector); + videoPlayerView.setPlayer(player); + dataSourceFactory = new DefaultDataSourceFactory(activity, + Util.getUserAgent(activity, "Infinity")); + player.prepare(new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(imgurMedia.getLink()))); + preparePlayer(savedInstanceState); + + return rootView; + } + + @Override + public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { + inflater.inflate(R.menu.view_imgur_video_fragment, menu); + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.action_download_view_imgur_image_fragments: + return true; + } + return false; + } + + private void preparePlayer(Bundle savedInstanceState) { + player.setRepeatMode(Player.REPEAT_MODE_ALL); + wasPlaying = true; + + boolean muteVideo = mSharedPreferences.getBoolean(SharedPreferencesUtils.MUTE_VIDEO, false); + + if (savedInstanceState != null) { + long position = savedInstanceState.getLong(POSITION_STATE); + if (position > 0) { + player.seekTo(position); + } + isMute = savedInstanceState.getBoolean(IS_MUTE_STATE); + if (isMute) { + player.setVolume(0f); + muteButton.setImageResource(R.drawable.ic_mute_24dp); + } else { + player.setVolume(1f); + muteButton.setImageResource(R.drawable.ic_unmute_24dp); + } + } else if (muteVideo) { + isMute = true; + player.setVolume(0f); + muteButton.setImageResource(R.drawable.ic_mute_24dp); + } else { + muteButton.setImageResource(R.drawable.ic_unmute_24dp); + } + + player.addListener(new Player.EventListener() { + @Override + public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) { + if (!trackGroups.isEmpty()) { + for (int i = 0; i < trackGroups.length; i++) { + String mimeType = trackGroups.get(i).getFormat(0).sampleMimeType; + if (mimeType != null && mimeType.contains("audio")) { + muteButton.setVisibility(View.VISIBLE); + muteButton.setOnClickListener(view -> { + if (isMute) { + isMute = false; + player.setVolume(1f); + muteButton.setImageResource(R.drawable.ic_unmute_24dp); + } else { + isMute = true; + player.setVolume(0f); + muteButton.setImageResource(R.drawable.ic_mute_24dp); + } + }); + break; + } + } + } else { + muteButton.setVisibility(View.GONE); + } + } + }); + } + + @Override + public void onResume() { + super.onResume(); + if (wasPlaying) { + player.setPlayWhenReady(true); + } + } + + @Override + public void onPause() { + super.onPause(); + wasPlaying = player.getPlayWhenReady(); + player.setPlayWhenReady(false); + } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + outState.putBoolean(IS_MUTE_STATE, isMute); + outState.putLong(POSITION_STATE, player.getCurrentPosition()); + } + + @Override + public void onDestroy() { + super.onDestroy(); + player.release(); + } + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); + activity = (Activity) context; + } +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/GfycatAPI.java b/app/src/main/java/ml/docilealligator/infinityforreddit/GfycatAPI.java deleted file mode 100644 index 0ea675e3..00000000 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/GfycatAPI.java +++ /dev/null @@ -1,10 +0,0 @@ -package ml.docilealligator.infinityforreddit; - -import retrofit2.Call; -import retrofit2.http.GET; -import retrofit2.http.Path; - -public interface GfycatAPI { - @GET("{gfyid}") - Call getSubredditData(@Path("gfyid") String gfyId); -} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ImgurMedia.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ImgurMedia.java new file mode 100644 index 00000000..577b6fde --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ImgurMedia.java @@ -0,0 +1,79 @@ +package ml.docilealligator.infinityforreddit; + +import android.os.Parcel; +import android.os.Parcelable; + +public class ImgurMedia implements Parcelable { + public static final int TYPE_IMAGE = 0; + public static final int TYPE_GIF = 1; + public static final int TYPE_VIDEO = 2; + private String id; + private String title; + private String description; + private String link; + private int type; + + public ImgurMedia(String id, String title, String description, String type, String link) { + this.id = id; + this.title = title; + this.description = description; + if (type.contains("mp4")) { + this.type = TYPE_VIDEO; + } else if (type.contains("gif")) { + this.type = TYPE_GIF; + } else { + this.type = TYPE_IMAGE; + } + this.link = link; + } + + protected ImgurMedia(Parcel in) { + title = in.readString(); + description = in.readString(); + link = in.readString(); + } + + public static final Creator CREATOR = new Creator() { + @Override + public ImgurMedia createFromParcel(Parcel in) { + return new ImgurMedia(in); + } + + @Override + public ImgurMedia[] newArray(int size) { + return new ImgurMedia[size]; + } + }; + + public String getId() { + return id; + } + + public String getTitle() { + return title; + } + + public String getDescription() { + return description; + } + + public int getType() { + return type; + } + + public String getLink() { + return link; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel parcel, int i) { + parcel.writeString(title); + parcel.writeString(description); + parcel.writeString(link); + } +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/CreateMultiReddit.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/CreateMultiReddit.java index aa6bf468..67d11d57 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/CreateMultiReddit.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/CreateMultiReddit.java @@ -5,9 +5,9 @@ import androidx.annotation.NonNull; import java.util.HashMap; import java.util.Map; -import ml.docilealligator.infinityforreddit.RedditAPI; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -23,9 +23,9 @@ public class CreateMultiReddit { String accessToken, String multipath, String model, CreateMultiRedditListener createMultiRedditListener) { Map params = new HashMap<>(); - params.put(RedditUtils.MULTIPATH_KEY, multipath); - params.put(RedditUtils.MODEL_KEY, model); - oauthRetrofit.create(RedditAPI.class).createMultiReddit(RedditUtils.getOAuthHeader(accessToken), + params.put(APIUtils.MULTIPATH_KEY, multipath); + params.put(APIUtils.MODEL_KEY, model); + oauthRetrofit.create(RedditAPI.class).createMultiReddit(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/DeleteMultiReddit.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/DeleteMultiReddit.java index 070f6944..39f9f253 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/DeleteMultiReddit.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/DeleteMultiReddit.java @@ -3,9 +3,9 @@ package ml.docilealligator.infinityforreddit.MultiReddit; import androidx.annotation.NonNull; import ml.docilealligator.infinityforreddit.AsyncTask.DeleteMultiredditInDatabaseAsyncTask; -import ml.docilealligator.infinityforreddit.RedditAPI; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -20,7 +20,7 @@ public class DeleteMultiReddit { public static void deleteMultiReddit(Retrofit oauthRetrofit, RedditDataRoomDatabase redditDataRoomDatabase, String accessToken, String accountName, String multipath, DeleteMultiRedditListener deleteMultiRedditListener) { - oauthRetrofit.create(RedditAPI.class).deleteMultiReddit(RedditUtils.getOAuthHeader(accessToken), + oauthRetrofit.create(RedditAPI.class).deleteMultiReddit(APIUtils.getOAuthHeader(accessToken), multipath).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/EditMultiReddit.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/EditMultiReddit.java index 53ffd5f4..8f16398b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/EditMultiReddit.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/EditMultiReddit.java @@ -5,8 +5,8 @@ import androidx.annotation.NonNull; import java.util.HashMap; import java.util.Map; -import ml.docilealligator.infinityforreddit.RedditAPI; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -21,9 +21,9 @@ public class EditMultiReddit { public static void editMultiReddit(Retrofit oauthRetrofit, String accessToken, String multipath, String model, EditMultiRedditListener editMultiRedditListener) { Map params = new HashMap<>(); - params.put(RedditUtils.MULTIPATH_KEY, multipath); - params.put(RedditUtils.MODEL_KEY, model); - oauthRetrofit.create(RedditAPI.class).updateMultiReddit(RedditUtils.getOAuthHeader(accessToken), + params.put(APIUtils.MULTIPATH_KEY, multipath); + params.put(APIUtils.MODEL_KEY, model); + oauthRetrofit.create(RedditAPI.class).updateMultiReddit(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/FavoriteMultiReddit.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/FavoriteMultiReddit.java index 8c7a8947..54142d08 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/FavoriteMultiReddit.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/FavoriteMultiReddit.java @@ -7,9 +7,9 @@ import java.util.HashMap; import java.util.Map; import ml.docilealligator.infinityforreddit.AsyncTask.InsertMultiRedditAsyncTask; -import ml.docilealligator.infinityforreddit.RedditAPI; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -25,10 +25,10 @@ public class FavoriteMultiReddit { String accessToken, String accountName, boolean makeFavorite, MultiReddit multiReddit, FavoriteMultiRedditListener favoriteMultiRedditListener) { Map params = new HashMap<>(); - params.put(RedditUtils.MULTIPATH_KEY, multiReddit.getPath()); - params.put(RedditUtils.MAKE_FAVORITE_KEY, String.valueOf(makeFavorite)); - params.put(RedditUtils.API_TYPE_KEY, RedditUtils.API_TYPE_JSON); - oauthRetrofit.create(RedditAPI.class).favoriteMultiReddit(RedditUtils.getOAuthHeader(accessToken), + params.put(APIUtils.MULTIPATH_KEY, multiReddit.getPath()); + params.put(APIUtils.MAKE_FAVORITE_KEY, String.valueOf(makeFavorite)); + params.put(APIUtils.API_TYPE_KEY, APIUtils.API_TYPE_JSON); + oauthRetrofit.create(RedditAPI.class).favoriteMultiReddit(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/FetchMultiRedditInfo.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/FetchMultiRedditInfo.java index 4c91585d..839f69f8 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/FetchMultiRedditInfo.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/FetchMultiRedditInfo.java @@ -10,9 +10,9 @@ import org.json.JSONObject; import java.util.ArrayList; -import ml.docilealligator.infinityforreddit.RedditAPI; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.Utils.JSONUtils; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -27,7 +27,7 @@ public class FetchMultiRedditInfo { public static void fetchMultiRedditInfo(Retrofit retrofit, String accessToken, String multipath, FetchMultiRedditInfoListener fetchMultiRedditInfoListener) { - retrofit.create(RedditAPI.class).getMultiRedditInfo(RedditUtils.getOAuthHeader(accessToken), multipath).enqueue(new Callback() { + retrofit.create(RedditAPI.class).getMultiRedditInfo(APIUtils.getOAuthHeader(accessToken), multipath).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/FetchMyMultiReddits.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/FetchMyMultiReddits.java index 85d1aa6f..383c8f23 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/FetchMyMultiReddits.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MultiReddit/FetchMyMultiReddits.java @@ -4,8 +4,8 @@ import androidx.annotation.NonNull; import java.util.ArrayList; -import ml.docilealligator.infinityforreddit.RedditAPI; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -19,7 +19,7 @@ public class FetchMyMultiReddits { public static void fetchMyMultiReddits(Retrofit oauthRetrofit, String accessToken, FetchMyMultiRedditsListener fetchMyMultiRedditsListener) { oauthRetrofit.create(RedditAPI.class) - .getMyMultiReddits(RedditUtils.getOAuthHeader(accessToken)).enqueue(new Callback() { + .getMyMultiReddits(APIUtils.getOAuthHeader(accessToken)).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Post/FetchPost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Post/FetchPost.java index ccbec648..9695419e 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Post/FetchPost.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Post/FetchPost.java @@ -4,8 +4,8 @@ import androidx.annotation.NonNull; import java.util.Locale; -import ml.docilealligator.infinityforreddit.RedditAPI; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -17,7 +17,7 @@ public class FetchPost { if (accessToken == null) { postCall = retrofit.create(RedditAPI.class).getPost(id); } else { - postCall = retrofit.create(RedditAPI.class).getPostOauth(id, RedditUtils.getOAuthHeader(accessToken)); + postCall = retrofit.create(RedditAPI.class).getPostOauth(id, APIUtils.getOAuthHeader(accessToken)); } postCall.enqueue(new Callback() { @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Post/HidePost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Post/HidePost.java index ab031fa5..c71fd5a1 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Post/HidePost.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Post/HidePost.java @@ -5,8 +5,8 @@ import androidx.annotation.NonNull; import java.util.HashMap; import java.util.Map; -import ml.docilealligator.infinityforreddit.RedditAPI; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -16,8 +16,8 @@ public class HidePost { public static void hidePost(Retrofit oauthRetrofit, String accessToken, String fullname, HidePostListener hidePostListener) { Map params = new HashMap<>(); - params.put(RedditUtils.ID_KEY, fullname); - oauthRetrofit.create(RedditAPI.class).hide(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { + params.put(APIUtils.ID_KEY, fullname); + oauthRetrofit.create(RedditAPI.class).hide(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { @@ -37,8 +37,8 @@ public class HidePost { public static void unhidePost(Retrofit oauthRetrofit, String accessToken, String fullname, HidePostListener hidePostListener) { Map params = new HashMap<>(); - params.put(RedditUtils.ID_KEY, fullname); - oauthRetrofit.create(RedditAPI.class).unhide(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { + params.put(APIUtils.ID_KEY, fullname); + oauthRetrofit.create(RedditAPI.class).unhide(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Post/Post.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Post/Post.java index b5aa1f1c..9b5417b9 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Post/Post.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Post/Post.java @@ -5,7 +5,7 @@ import android.os.Parcelable; import androidx.annotation.Nullable; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; /** * Created by alex on 3/1/18. @@ -90,7 +90,7 @@ public class Post implements Parcelable { this.title = title; this.previewUrl = previewUrl; this.thumbnailPreviewUrl = thumbnailPreviewUrl; - this.permalink = RedditUtils.API_BASE_URI + permalink; + this.permalink = APIUtils.API_BASE_URI + permalink; this.score = score; this.postType = postType; this.voteType = voteType; @@ -128,7 +128,7 @@ public class Post implements Parcelable { this.previewUrl = previewUrl; this.thumbnailPreviewUrl = thumbnailPreviewUrl; this.url = url; - this.permalink = RedditUtils.API_BASE_URI + permalink; + this.permalink = APIUtils.API_BASE_URI + permalink; this.score = score; this.postType = postType; this.voteType = voteType; @@ -163,7 +163,7 @@ public class Post implements Parcelable { this.postTime = postTime; this.postTimeMillis = postTimeMillis; this.title = title; - this.permalink = RedditUtils.API_BASE_URI + permalink; + this.permalink = APIUtils.API_BASE_URI + permalink; this.score = score; this.postType = postType; this.voteType = voteType; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Post/PostDataSource.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Post/PostDataSource.java index b26eef79..56aff32d 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Post/PostDataSource.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Post/PostDataSource.java @@ -10,9 +10,9 @@ import java.util.List; import java.util.Locale; import ml.docilealligator.infinityforreddit.NetworkState; -import ml.docilealligator.infinityforreddit.RedditAPI; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.SortType; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Retrofit; @@ -212,9 +212,9 @@ public class PostDataSource extends PageKeyedDataSource { Call bestPost; if(sortType.getTime() != null) { bestPost = api.getBestPosts(sortType.getType().value, sortType.getTime().value, lastItem, - RedditUtils.getOAuthHeader(accessToken)); + APIUtils.getOAuthHeader(accessToken)); } else { - bestPost = api.getBestPosts(sortType.getType().value, lastItem, RedditUtils.getOAuthHeader(accessToken)); + bestPost = api.getBestPosts(sortType.getType().value, lastItem, APIUtils.getOAuthHeader(accessToken)); } bestPost.enqueue(new Callback() { @Override @@ -292,9 +292,9 @@ public class PostDataSource extends PageKeyedDataSource { Call bestPost; if(sortType.getTime() != null) { bestPost = api.getBestPosts(sortType.getType().value, sortType.getTime().value, after, - RedditUtils.getOAuthHeader(accessToken)); + APIUtils.getOAuthHeader(accessToken)); } else { - bestPost = api.getBestPosts(sortType.getType().value, after, RedditUtils.getOAuthHeader(accessToken)); + bestPost = api.getBestPosts(sortType.getType().value, after, APIUtils.getOAuthHeader(accessToken)); } bestPost.enqueue(new Callback() { @@ -351,10 +351,10 @@ public class PostDataSource extends PageKeyedDataSource { } else { if (sortType.getTime() != null) { getPost = api.getSubredditBestPostsOauth(subredditOrUserName, sortType.getType().value, - sortType.getTime().value, lastItem, RedditUtils.getOAuthHeader(accessToken)); + sortType.getTime().value, lastItem, APIUtils.getOAuthHeader(accessToken)); } else { getPost = api.getSubredditBestPostsOauth(subredditOrUserName, sortType.getType().value, - lastItem, RedditUtils.getOAuthHeader(accessToken)); + lastItem, APIUtils.getOAuthHeader(accessToken)); } } getPost.enqueue(new Callback() { @@ -442,10 +442,10 @@ public class PostDataSource extends PageKeyedDataSource { } else { if (sortType.getTime() != null) { getPost = api.getSubredditBestPostsOauth(subredditOrUserName, sortType.getType().value, - sortType.getTime().value, after, RedditUtils.getOAuthHeader(accessToken)); + sortType.getTime().value, after, APIUtils.getOAuthHeader(accessToken)); } else { getPost = api.getSubredditBestPostsOauth(subredditOrUserName, sortType.getType().value, - after, RedditUtils.getOAuthHeader(accessToken)); + after, APIUtils.getOAuthHeader(accessToken)); } } @@ -504,10 +504,10 @@ public class PostDataSource extends PageKeyedDataSource { } else { if (sortType.getTime() != null) { getPost = api.getUserPostsOauth(subredditOrUserName, userWhere, lastItem, sortType.getType().value, - sortType.getTime().value, RedditUtils.getOAuthHeader(accessToken)); + sortType.getTime().value, APIUtils.getOAuthHeader(accessToken)); } else { getPost = api.getUserPostsOauth(subredditOrUserName, userWhere, lastItem, sortType.getType().value, - RedditUtils.getOAuthHeader(accessToken)); + APIUtils.getOAuthHeader(accessToken)); } } getPost.enqueue(new Callback() { @@ -575,10 +575,10 @@ public class PostDataSource extends PageKeyedDataSource { } else { if (sortType.getTime() != null) { getPost = api.getUserPostsOauth(subredditOrUserName, userWhere, after, sortType.getType().value, - sortType.getTime().value, RedditUtils.getOAuthHeader(accessToken)); + sortType.getTime().value, APIUtils.getOAuthHeader(accessToken)); } else { getPost = api.getUserPostsOauth(subredditOrUserName, userWhere, after, sortType.getType().value, - RedditUtils.getOAuthHeader(accessToken)); + APIUtils.getOAuthHeader(accessToken)); } } getPost.enqueue(new Callback() { @@ -636,10 +636,10 @@ public class PostDataSource extends PageKeyedDataSource { } else { if(sortType.getTime() != null) { getPost = api.searchPostsOauth(query, lastItem, sortType.getType().value, - sortType.getTime().value, RedditUtils.getOAuthHeader(accessToken)); + sortType.getTime().value, APIUtils.getOAuthHeader(accessToken)); } else { getPost = api.searchPostsOauth(query, lastItem, sortType.getType().value, - RedditUtils.getOAuthHeader(accessToken)); + APIUtils.getOAuthHeader(accessToken)); } } } else { @@ -655,11 +655,11 @@ public class PostDataSource extends PageKeyedDataSource { if (sortType.getTime() != null) { getPost = api.searchPostsInSpecificSubredditOauth(subredditOrUserName, query, sortType.getType().value, sortType.getTime().value, lastItem, - RedditUtils.getOAuthHeader(accessToken)); + APIUtils.getOAuthHeader(accessToken)); } else { getPost = api.searchPostsInSpecificSubredditOauth(subredditOrUserName, query, sortType.getType().value, lastItem, - RedditUtils.getOAuthHeader(accessToken)); + APIUtils.getOAuthHeader(accessToken)); } } } @@ -729,9 +729,9 @@ public class PostDataSource extends PageKeyedDataSource { } else { if (sortType.getTime() != null) { getPost = api.searchPostsOauth(query, after, sortType.getType().value, - sortType.getTime().value, RedditUtils.getOAuthHeader(accessToken)); + sortType.getTime().value, APIUtils.getOAuthHeader(accessToken)); } else { - getPost = api.searchPostsOauth(query, after, sortType.getType().value, RedditUtils.getOAuthHeader(accessToken)); + getPost = api.searchPostsOauth(query, after, sortType.getType().value, APIUtils.getOAuthHeader(accessToken)); } } } else { @@ -747,10 +747,10 @@ public class PostDataSource extends PageKeyedDataSource { if (sortType.getTime() != null) { getPost = api.searchPostsInSpecificSubredditOauth(subredditOrUserName, query, sortType.getType().value, sortType.getTime().value, after, - RedditUtils.getOAuthHeader(accessToken)); + APIUtils.getOAuthHeader(accessToken)); } else { getPost = api.searchPostsInSpecificSubredditOauth(subredditOrUserName, query, - sortType.getType().value, after, RedditUtils.getOAuthHeader(accessToken)); + sortType.getType().value, after, APIUtils.getOAuthHeader(accessToken)); } } } @@ -808,10 +808,10 @@ public class PostDataSource extends PageKeyedDataSource { } else { if (sortType.getTime() != null) { getPost = api.getMultiRedditPostsOauth(multiRedditPath, lastItem, - sortType.getTime().value, RedditUtils.getOAuthHeader(accessToken)); + sortType.getTime().value, APIUtils.getOAuthHeader(accessToken)); } else { getPost = api.getMultiRedditPostsOauth(multiRedditPath, lastItem, - RedditUtils.getOAuthHeader(accessToken)); + APIUtils.getOAuthHeader(accessToken)); } } @@ -880,10 +880,10 @@ public class PostDataSource extends PageKeyedDataSource { } else { if (sortType.getTime() != null) { getPost = api.getMultiRedditPostsOauth(multiRedditPath, after, - sortType.getTime().value, RedditUtils.getOAuthHeader(accessToken)); + sortType.getTime().value, APIUtils.getOAuthHeader(accessToken)); } else { getPost = api.getMultiRedditPostsOauth(multiRedditPath, after, - RedditUtils.getOAuthHeader(accessToken)); + APIUtils.getOAuthHeader(accessToken)); } } getPost.enqueue(new Callback() { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Post/SubmitPost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Post/SubmitPost.java index e7479e36..9e27bce1 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Post/SubmitPost.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Post/SubmitPost.java @@ -20,9 +20,9 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; -import ml.docilealligator.infinityforreddit.RedditAPI; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.Utils.JSONUtils; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.RequestBody; @@ -50,7 +50,7 @@ public class SubmitPost { public void uploaded(String imageUrl) { submitPost(oauthRetrofit, accessToken, locale, subredditName, title, imageUrl, flair, isSpoiler, isNSFW, - RedditUtils.KIND_IMAGE, null, submitPostListener); + APIUtils.KIND_IMAGE, null, submitPostListener); } @Override @@ -70,10 +70,10 @@ public class SubmitPost { String fileType = mimeType.substring(mimeType.indexOf("/") + 1); Map uploadImageParams = new HashMap<>(); - uploadImageParams.put(RedditUtils.FILEPATH_KEY, "post_video." + fileType); - uploadImageParams.put(RedditUtils.MIMETYPE_KEY, mimeType); + uploadImageParams.put(APIUtils.FILEPATH_KEY, "post_video." + fileType); + uploadImageParams.put(APIUtils.MIMETYPE_KEY, mimeType); - Call uploadImageCall = api.uploadImage(RedditUtils.getOAuthHeader(accessToken), uploadImageParams); + Call uploadImageCall = api.uploadImage(APIUtils.getOAuthHeader(accessToken), uploadImageParams); uploadImageCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { @@ -106,11 +106,11 @@ public class SubmitPost { if (fileType.equals("gif")) { submitPost(oauthRetrofit, accessToken, locale, subredditName, title, url, flair, isSpoiler, isNSFW, - RedditUtils.KIND_VIDEOGIF, imageUrl, submitPostListener); + APIUtils.KIND_VIDEOGIF, imageUrl, submitPostListener); } else { submitPost(oauthRetrofit, accessToken, locale, subredditName, title, url, flair, isSpoiler, isNSFW, - RedditUtils.KIND_VIDEO, imageUrl, submitPostListener); + APIUtils.KIND_VIDEO, imageUrl, submitPostListener); } } @@ -162,36 +162,36 @@ public class SubmitPost { RedditAPI api = oauthRetrofit.create(RedditAPI.class); Map params = new HashMap<>(); - params.put(RedditUtils.API_TYPE_KEY, RedditUtils.API_TYPE_JSON); - params.put(RedditUtils.SR_KEY, subredditName); - params.put(RedditUtils.TITLE_KEY, title); - params.put(RedditUtils.KIND_KEY, kind); + params.put(APIUtils.API_TYPE_KEY, APIUtils.API_TYPE_JSON); + params.put(APIUtils.SR_KEY, subredditName); + params.put(APIUtils.TITLE_KEY, title); + params.put(APIUtils.KIND_KEY, kind); switch (kind) { - case RedditUtils.KIND_SELF: - params.put(RedditUtils.TEXT_KEY, content); + case APIUtils.KIND_SELF: + params.put(APIUtils.TEXT_KEY, content); break; - case RedditUtils.KIND_LINK: - case RedditUtils.KIND_IMAGE: - params.put(RedditUtils.URL_KEY, content); + case APIUtils.KIND_LINK: + case APIUtils.KIND_IMAGE: + params.put(APIUtils.URL_KEY, content); break; - case RedditUtils.KIND_VIDEOGIF: - params.put(RedditUtils.KIND_KEY, RedditUtils.KIND_IMAGE); - params.put(RedditUtils.URL_KEY, content); - params.put(RedditUtils.VIDEO_POSTER_URL_KEY, posterUrl); + case APIUtils.KIND_VIDEOGIF: + params.put(APIUtils.KIND_KEY, APIUtils.KIND_IMAGE); + params.put(APIUtils.URL_KEY, content); + params.put(APIUtils.VIDEO_POSTER_URL_KEY, posterUrl); break; - case RedditUtils.KIND_VIDEO: - params.put(RedditUtils.URL_KEY, content); - params.put(RedditUtils.VIDEO_POSTER_URL_KEY, posterUrl); + case APIUtils.KIND_VIDEO: + params.put(APIUtils.URL_KEY, content); + params.put(APIUtils.VIDEO_POSTER_URL_KEY, posterUrl); break; } if (flair != null) { - params.put(RedditUtils.FLAIR_TEXT_KEY, flair); + params.put(APIUtils.FLAIR_TEXT_KEY, flair); } - params.put(RedditUtils.SPOILER_KEY, Boolean.toString(isSpoiler)); - params.put(RedditUtils.NSFW_KEY, Boolean.toString(isNSFW)); + params.put(APIUtils.SPOILER_KEY, Boolean.toString(isSpoiler)); + params.put(APIUtils.NSFW_KEY, Boolean.toString(isNSFW)); - Call submitPostCall = api.submit(RedditUtils.getOAuthHeader(accessToken), params); + Call submitPostCall = api.submit(APIUtils.getOAuthHeader(accessToken), params); submitPostCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { @@ -221,10 +221,10 @@ public class SubmitPost { RedditAPI api = oauthRetrofit.create(RedditAPI.class); Map uploadImageParams = new HashMap<>(); - uploadImageParams.put(RedditUtils.FILEPATH_KEY, "post_image.jpg"); - uploadImageParams.put(RedditUtils.MIMETYPE_KEY, "image/jpeg"); + uploadImageParams.put(APIUtils.FILEPATH_KEY, "post_image.jpg"); + uploadImageParams.put(APIUtils.MIMETYPE_KEY, "image/jpeg"); - Call uploadImageCall = api.uploadImage(RedditUtils.getOAuthHeader(accessToken), uploadImageParams); + Call uploadImageCall = api.uploadImage(APIUtils.getOAuthHeader(accessToken), uploadImageParams); uploadImageCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { @@ -308,12 +308,12 @@ public class SubmitPost { return; } - if (!kind.equals(RedditUtils.KIND_IMAGE) && !kind.equals(RedditUtils.KIND_VIDEO) && !kind.equals(RedditUtils.KIND_VIDEOGIF)) { + if (!kind.equals(APIUtils.KIND_IMAGE) && !kind.equals(APIUtils.KIND_VIDEO) && !kind.equals(APIUtils.KIND_VIDEOGIF)) { String postId = responseObject.getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.ID_KEY); RedditAPI api = oauthRetrofit.create(RedditAPI.class); - Call getPostCall = api.getPostOauth(postId, RedditUtils.getOAuthHeader(accessToken)); + Call getPostCall = api.getPostOauth(postId, APIUtils.getOAuthHeader(accessToken)); getPostCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { @@ -377,7 +377,7 @@ public class SubmitPost { nameValuePairsMap = new HashMap<>(); for (int i = 0; i < nameValuePairs.length(); i++) { nameValuePairsMap.put(nameValuePairs.getJSONObject(i).getString(JSONUtils.NAME_KEY), - RedditUtils.getRequestBody(nameValuePairs.getJSONObject(i).getString(JSONUtils.VALUE_KEY))); + APIUtils.getRequestBody(nameValuePairs.getJSONObject(i).getString(JSONUtils.VALUE_KEY))); } successful = true; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PullNotificationWorker.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PullNotificationWorker.java index 8c0b118e..214a9736 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PullNotificationWorker.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PullNotificationWorker.java @@ -25,11 +25,12 @@ import java.util.Map; import javax.inject.Inject; import javax.inject.Named; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.Account.Account; import ml.docilealligator.infinityforreddit.Activity.LinkResolverActivity; import ml.docilealligator.infinityforreddit.Activity.ViewMessageActivity; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils; import retrofit2.Call; import retrofit2.Response; @@ -204,7 +205,7 @@ public class PullNotificationWorker extends Worker { } Call call = mOauthWithoutAuthenticatorRetrofit.create(RedditAPI.class) - .getMessages(RedditUtils.getOAuthHeader(account.getAccessToken()), + .getMessages(APIUtils.getOAuthHeader(account.getAccessToken()), FetchMessages.WHERE_UNREAD, null); Response response = call.execute(); @@ -230,15 +231,15 @@ public class PullNotificationWorker extends Worker { RedditAPI api = mRetrofit.create(RedditAPI.class); Map params = new HashMap<>(); - params.put(RedditUtils.GRANT_TYPE_KEY, RedditUtils.GRANT_TYPE_REFRESH_TOKEN); - params.put(RedditUtils.REFRESH_TOKEN_KEY, refreshToken); + params.put(APIUtils.GRANT_TYPE_KEY, APIUtils.GRANT_TYPE_REFRESH_TOKEN); + params.put(APIUtils.REFRESH_TOKEN_KEY, refreshToken); - Call accessTokenCall = api.getAccessToken(RedditUtils.getHttpBasicAuthHeader(), params); + Call accessTokenCall = api.getAccessToken(APIUtils.getHttpBasicAuthHeader(), params); try { Response response = accessTokenCall.execute(); if (response.isSuccessful() && response.body() != null) { JSONObject jsonObject = new JSONObject(response.body().toString()); - String newAccessToken = jsonObject.getString(RedditUtils.ACCESS_TOKEN_KEY); + String newAccessToken = jsonObject.getString(APIUtils.ACCESS_TOKEN_KEY); mRedditDataRoomDatabase.accountDao().changeAccessToken(account.getUsername(), newAccessToken); return newAccessToken; } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ReadMessage.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ReadMessage.java index 03479021..1b039178 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ReadMessage.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ReadMessage.java @@ -5,7 +5,8 @@ import androidx.annotation.NonNull; import java.util.HashMap; import java.util.Map; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -15,8 +16,8 @@ public class ReadMessage { public static void readMessage(Retrofit oauthRetrofit, String accessToken, String commaSeparatedFullnames, ReadMessageListener readMessageListener) { Map params = new HashMap<>(); - params.put(RedditUtils.ID_KEY, commaSeparatedFullnames); - oauthRetrofit.create(RedditAPI.class).readMessage(RedditUtils.getOAuthHeader(accessToken), params) + params.put(APIUtils.ID_KEY, commaSeparatedFullnames); + oauthRetrofit.create(RedditAPI.class).readMessage(APIUtils.getOAuthHeader(accessToken), params) .enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java deleted file mode 100644 index 113e1604..00000000 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java +++ /dev/null @@ -1,311 +0,0 @@ -package ml.docilealligator.infinityforreddit; - -import java.util.Map; - -import okhttp3.MultipartBody; -import okhttp3.RequestBody; -import retrofit2.Call; -import retrofit2.http.DELETE; -import retrofit2.http.FieldMap; -import retrofit2.http.FormUrlEncoded; -import retrofit2.http.GET; -import retrofit2.http.HeaderMap; -import retrofit2.http.Multipart; -import retrofit2.http.POST; -import retrofit2.http.PUT; -import retrofit2.http.Part; -import retrofit2.http.PartMap; -import retrofit2.http.Path; -import retrofit2.http.Query; - -public interface RedditAPI { - @FormUrlEncoded - @POST("api/v1/access_token") - Call getAccessToken(@HeaderMap Map headers, @FieldMap Map params); - - @GET("r/{subredditName}/about.json?raw_json=1") - Call getSubredditData(@Path("subredditName") String subredditName); - - @GET("subreddits/mine/subscriber?raw_json=1") - Call getSubscribedThing(@Query("after") String lastItem, @HeaderMap Map headers); - - @GET("api/v1/me?raw_json=1") - Call getMyInfo(@HeaderMap Map headers); - - @FormUrlEncoded - @POST("api/vote") - Call voteThing(@HeaderMap Map headers, @FieldMap Map params); - - @GET("comments/{id}.json?raw_json=1") - Call getPostOauth(@Path("id") String id, @HeaderMap Map headers); - - @GET("comments/{id}.json?raw_json=1") - Call getPost(@Path("id") String id); - - @GET("{sortType}?raw_json=1") - Call getBestPosts(@Path("sortType") String sortType, @Query("after") String lastItem, @HeaderMap Map headers); - - @GET("{sortType}?raw_json=1") - Call getBestPosts(@Path("sortType") String sortType, @Query("t") String sortTime, - @Query("after") String lastItem, @HeaderMap Map headers); - - @GET("r/{subredditName}/{sortType}.json?raw_json=1&limit=25") - Call getSubredditBestPostsOauth(@Path("subredditName") String subredditName, @Path("sortType") String sortType, - @Query("after") String lastItem, @HeaderMap Map headers); - - @GET("r/{subredditName}/{sortType}.json?raw_json=1&limit=25") - Call getSubredditBestPostsOauth(@Path("subredditName") String subredditName, @Path("sortType") String sortType, - @Query("t") String sortTime, @Query("after") String lastItem, - @HeaderMap Map headers); - - @GET("r/{subredditName}/{sortType}.json?raw_json=1&limit=25") - Call getSubredditBestPosts(@Path("subredditName") String subredditName, @Path("sortType") String sortType, - @Query("after") String lastItem); - - @GET("r/{subredditName}/{sortType}.json?raw_json=1&limit=25") - Call getSubredditBestPosts(@Path("subredditName") String subredditName, @Path("sortType") String sortType, - @Query("t") String sortTime, @Query("after") String lastItem); - - @GET("user/{username}/{where}.json?&type=links&raw_json=1&limit=25") - Call getUserPostsOauth(@Path("username") String username, @Path("where") String where, - @Query("after") String lastItem, @Query("sort") String sortType, @HeaderMap Map headers); - - @GET("user/{username}/{where}.json?&type=links&raw_json=1&limit=25") - Call getUserPostsOauth(@Path("username") String username, @Path("where") String where, - @Query("after") String lastItem, @Query("sort") String sortType, - @Query("t") String sortTime, @HeaderMap Map headers); - - @GET("user/{username}/submitted.json?raw_json=1&limit=25") - Call getUserPosts(@Path("username") String username, @Query("after") String lastItem, - @Query("sort") String sortType); - - @GET("user/{username}/submitted.json?raw_json=1&limit=25") - Call getUserPosts(@Path("username") String username, @Query("after") String lastItem, - @Query("sort") String sortType, @Query("t") String sortTime); - - @GET("user/{username}/about.json?raw_json=1") - Call getUserData(@Path("username") String username); - - @GET("user/{username}/comments.json?raw_json=1") - Call getUserComments(@Path("username") String username, @Query("after") String after, - @Query("sort") String sortType); - - @GET("user/{username}/comments.json?raw_json=1") - Call getUserComments(@Path("username") String username, @Query("after") String after, - @Query("sort") String sortType, @Query("t") String sortTime); - - @GET("user/{username}/comments.json?raw_json=1") - Call getUserCommentsOauth(@HeaderMap Map headers, @Path("username") String username, - @Query("after") String after, @Query("sort") String sortType); - - @GET("user/{username}/comments.json?raw_json=1") - Call getUserCommentsOauth(@HeaderMap Map headers, @Path("username") String username, - @Query("after") String after, @Query("sort") String sortType, - @Query("t") String sortTime); - - @GET("user/{username}/{where}.json?&type=comments&raw_json=1&limit=25") - Call getUserSavedCommentsOauth(@Path("username") String username, @Path("where") String where, - @Query("after") String lastItem, @Query("sort") String sortType, - @HeaderMap Map headers); - - @GET("user/{username}/{where}.json?&type=comments&raw_json=1&limit=25") - Call getUserSavedCommentsOauth(@Path("username") String username, @Path("where") String where, - @Query("after") String lastItem, @Query("sort") String sortType, - @Query("t") String sortTime, @HeaderMap Map headers); - - @FormUrlEncoded - @POST("api/subscribe") - Call subredditSubscription(@HeaderMap Map headers, @FieldMap Map params); - - @GET("/api/info.json?raw_json=1") - Call getInfo(@Query("id") String id); - - @GET("/api/info.json?raw_json=1") - Call getInfoOauth(@Query("id") String id, @HeaderMap Map headers); - - @GET("subreddits/search.json?include_over_18=1&raw_json=1") - Call searchSubreddits(@Query("q") String subredditName, @Query("after") String after, - @Query("sort") String sort); - - @GET("search.json?include_over_18=1&raw_json=1&type=user") - Call searchUsers(@Query("q") String profileName, @Query("after") String after, - @Query("sort") String sort); - - @GET("search.json?include_over_18=1&raw_json=1&type=link") - Call searchPostsOauth(@Query("q") String query, @Query("after") String after, - @Query("sort") String sort, - @HeaderMap Map headers); - - @GET("search.json?include_over_18=1&raw_json=1&type=link") - Call searchPostsOauth(@Query("q") String query, @Query("after") String after, - @Query("sort") String sort, @Query("t") String sortTime, - @HeaderMap Map headers); - - @GET("search.json?include_over_18=1&raw_json=1&type=link") - Call searchPosts(@Query("q") String query, @Query("after") String after, - @Query("sort") String sort); - - @GET("search.json?include_over_18=1&raw_json=1&type=link") - Call searchPosts(@Query("q") String query, @Query("after") String after, - @Query("sort") String sort, @Query("t") String sortTime); - - @GET("r/{subredditName}/search.json?include_over_18=1&raw_json=1&type=link&restrict_sr=true") - Call searchPostsInSpecificSubredditOauth(@Path("subredditName") String subredditName, - @Query("q") String query, @Query("sort") String sort, - @Query("after") String after, - @HeaderMap Map headers); - - @GET("r/{subredditName}/search.json?include_over_18=1&raw_json=1&type=link&restrict_sr=true") - Call searchPostsInSpecificSubredditOauth(@Path("subredditName") String subredditName, - @Query("q") String query, @Query("sort") String sort, - @Query("t") String sortTime, @Query("after") String after, - @HeaderMap Map headers); - - @GET("r/{subredditName}/search.json?include_over_18=1&raw_json=1&type=link&restrict_sr=true") - Call searchPostsInSpecificSubreddit(@Path("subredditName") String subredditName, - @Query("q") String query, @Query("sort") String sort, - @Query("after") String after); - - @GET("r/{subredditName}/search.json?include_over_18=1&raw_json=1&type=link&restrict_sr=true") - Call searchPostsInSpecificSubreddit(@Path("subredditName") String subredditName, - @Query("q") String query, @Query("sort") String sort, - @Query("t") String sortTime, @Query("after") String after); - - @FormUrlEncoded - @POST("api/comment") - Call sendComment(@HeaderMap Map headers, @FieldMap Map params); - - @FormUrlEncoded - @POST("api/del") - Call delete(@HeaderMap Map headers, @FieldMap Map params); - - @FormUrlEncoded - @POST("api/submit") - Call submit(@HeaderMap Map headers, @FieldMap Map params); - - @FormUrlEncoded - @POST("api/media/asset.json?raw_json=1&gilding_detail=1") - Call uploadImage(@HeaderMap Map headers, @FieldMap Map params); - - @GET("r/{subredditName}/api/link_flair.json?raw_json=1") - Call getFlairs(@HeaderMap Map headers, @Path("subredditName") String subredditName); - - @GET("/r/{subredditName}/about/rules.json?raw_json=1") - Call getRules(@Path("subredditName") String subredditName); - - @GET("/comments/{id}/placeholder/{singleCommentId}.json?context=8&raw_json=1") - Call getPostAndCommentsSingleThreadByIdOauth(@Path("id") String id, @Path("singleCommentId") String singleCommentId, - @Query("sort") String sortType, - @HeaderMap Map headers); - - @GET("/comments/{id}.json?raw_json=1") - Call getPostAndCommentsByIdOauth(@Path("id") String id, @Query("sort") String sortType, - @HeaderMap Map headers); - - @GET("/comments/{id}/placeholder/{singleCommentId}.json?context=8&raw_json=1") - Call getPostAndCommentsSingleThreadById(@Path("id") String id, @Path("singleCommentId") String singleCommentId, - @Query("sort") String sortType); - - @GET("/comments/{id}.json?raw_json=1") - Call getPostAndCommentsById(@Path("id") String id, @Query("sort") String sortType); - - @Multipart - @POST(".") - Call uploadMediaToAWS(@PartMap() Map params, @Part() MultipartBody.Part file); - - @FormUrlEncoded - @POST("/api/editusertext") - Call editPostOrComment(@HeaderMap Map headers, @FieldMap Map params); - - @FormUrlEncoded - @POST("/api/marknsfw") - Call markNSFW(@HeaderMap Map headers, @FieldMap Map params); - - @FormUrlEncoded - @POST("/api/unmarknsfw") - Call unmarkNSFW(@HeaderMap Map headers, @FieldMap Map params); - - @FormUrlEncoded - @POST("/api/spoiler") - Call markSpoiler(@HeaderMap Map headers, @FieldMap Map params); - - @FormUrlEncoded - @POST("/api/unspoiler") - Call unmarkSpoiler(@HeaderMap Map headers, @FieldMap Map params); - - @FormUrlEncoded - @POST("{subredditNamePrefixed}/api/selectflair") - Call selectFlair(@Path("subredditNamePrefixed") String subredditName, @HeaderMap Map headers, @FieldMap Map params); - - @GET("/message/{where}.json?raw_json=1") - Call getMessages(@HeaderMap Map headers, @Path("where") String where, @Query("after") String after); - - @FormUrlEncoded - @POST("/api/read_message") - Call readMessage(@HeaderMap Map headers, @FieldMap Map ids); - - @FormUrlEncoded - @POST("/api/save") - Call save(@HeaderMap Map headers, @FieldMap Map params); - - @FormUrlEncoded - @POST("/api/unsave") - Call unsave(@HeaderMap Map headers, @FieldMap Map params); - - @FormUrlEncoded - @POST("/api/hide") - Call hide(@HeaderMap Map headers, @FieldMap Map params); - - @FormUrlEncoded - @POST("/api/unhide") - Call unhide(@HeaderMap Map headers, @FieldMap Map params); - - @FormUrlEncoded - @POST("/api/favorite") - Call favoriteThing(@HeaderMap Map headers, @FieldMap Map params); - - @GET("/api/multi/mine") - Call getMyMultiReddits(@HeaderMap Map headers); - - @FormUrlEncoded - @POST("/api/multi/favorite?raw_json=1&gilding_detail=1") - Call favoriteMultiReddit(@HeaderMap Map headers, @FieldMap Map params); - - @GET("/api/multi/user/{username}") - Call getUserMultiReddits(@Path("username") String username); - - @GET("{multipath}?raw_json=1") - Call getMultiRedditPosts(@Path(value = "multipath", encoded = true) String multiPath, - @Query("after") String after); - - @GET("{multipath}?raw_json=1") - Call getMultiRedditPosts(@Path(value = "multipath", encoded = true) String multiPath, - @Query("after") String after, @Query("t") String sortTime); - - @GET("{multipath}.json?raw_json=1") - Call getMultiRedditPostsOauth(@Path(value = "multipath", encoded = true) String multiPath, - @Query("after") String after, @Query("t") String sortTime, - @HeaderMap Map headers); - - @GET("{multipath}.json?raw_json=1") - Call getMultiRedditPostsOauth(@Path(value = "multipath", encoded = true) String multiPath, - @Query("after") String after, @HeaderMap Map headers); - - @FormUrlEncoded - @POST("/api/multi/multipath") - Call createMultiReddit(@HeaderMap Map headers, @FieldMap Map params); - - @FormUrlEncoded - @PUT("/api/multi/multipath") - Call updateMultiReddit(@HeaderMap Map headers, @FieldMap Map params); - - @DELETE("/api/multi/multipath") - Call deleteMultiReddit(@HeaderMap Map headers, @Query("multipath") String multipath); - - @GET("/api/multi/multipath/") - Call getMultiRedditInfo(@HeaderMap Map headers, @Query("multipath") String multipath); - - @FormUrlEncoded - @POST("/api/report") - Call report(@HeaderMap Map headers, @FieldMap Map params); -} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ReportThing.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ReportThing.java index 8a617179..305da882 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ReportThing.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ReportThing.java @@ -5,7 +5,8 @@ import androidx.annotation.NonNull; import java.util.HashMap; import java.util.Map; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -21,19 +22,19 @@ public class ReportThing { public static void reportThing(Retrofit oauthRetrofit, String accessToken, String thingFullname, String subredditName, String reasonType, String reason, ReportThingListener reportThingListener) { - Map header = RedditUtils.getOAuthHeader(accessToken); + Map header = APIUtils.getOAuthHeader(accessToken); Map params = new HashMap<>(); - params.put(RedditUtils.THING_ID_KEY, thingFullname); - params.put(RedditUtils.SR_NAME_KEY, subredditName); + params.put(APIUtils.THING_ID_KEY, thingFullname); + params.put(APIUtils.SR_NAME_KEY, subredditName); params.put(reasonType, reason); if (reasonType.equals(ReportReason.REASON_TYPE_SITE_REASON)) { - params.put(RedditUtils.REASON_KEY, ReportReason.REASON_SITE_REASON_SELECTED); + params.put(APIUtils.REASON_KEY, ReportReason.REASON_SITE_REASON_SELECTED); } else if (reasonType.equals(ReportReason.REASON_TYPE_RULE_REASON)) { - params.put(RedditUtils.REASON_KEY, ReportReason.REASON_RULE_REASON_SELECTED); + params.put(APIUtils.REASON_KEY, ReportReason.REASON_RULE_REASON_SELECTED); } else { - params.put(RedditUtils.REASON_KEY, ReportReason.REASON_OTHER); + params.put(APIUtils.REASON_KEY, ReportReason.REASON_OTHER); } - params.put(RedditUtils.API_TYPE_KEY, RedditUtils.API_TYPE_JSON); + params.put(APIUtils.API_TYPE_KEY, APIUtils.API_TYPE_JSON); oauthRetrofit.create(RedditAPI.class).report(header, params).enqueue(new Callback() { @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SaveThing.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SaveThing.java index 55babf4e..4b510d8c 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SaveThing.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SaveThing.java @@ -5,7 +5,8 @@ import androidx.annotation.NonNull; import java.util.HashMap; import java.util.Map; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -15,8 +16,8 @@ public class SaveThing { public static void saveThing(Retrofit oauthRetrofit, String accessToken, String fullname, SaveThingListener saveThingListener) { Map params = new HashMap<>(); - params.put(RedditUtils.ID_KEY, fullname); - oauthRetrofit.create(RedditAPI.class).save(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { + params.put(APIUtils.ID_KEY, fullname); + oauthRetrofit.create(RedditAPI.class).save(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { @@ -36,8 +37,8 @@ public class SaveThing { public static void unsaveThing(Retrofit oauthRetrofit, String accessToken, String fullname, SaveThingListener saveThingListener) { Map params = new HashMap<>(); - params.put(RedditUtils.ID_KEY, fullname); - oauthRetrofit.create(RedditAPI.class).unsave(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { + params.put(APIUtils.ID_KEY, fullname); + oauthRetrofit.create(RedditAPI.class).unsave(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SendComment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SendComment.java index d2d34471..cb27368e 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SendComment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SendComment.java @@ -7,7 +7,8 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -19,12 +20,12 @@ public class SendComment { Locale locale, Retrofit oauthRetrofit, String accessToken, SendCommentListener sendCommentListener) { RedditAPI api = oauthRetrofit.create(RedditAPI.class); - Map headers = RedditUtils.getOAuthHeader(accessToken); + Map headers = APIUtils.getOAuthHeader(accessToken); Map params = new HashMap<>(); - params.put(RedditUtils.API_TYPE_KEY, "json"); - params.put(RedditUtils.RETURN_RTJSON_KEY, "true"); - params.put(RedditUtils.TEXT_KEY, commentMarkdown); - params.put(RedditUtils.THING_ID_KEY, thingFullname); + params.put(APIUtils.API_TYPE_KEY, "json"); + params.put(APIUtils.RETURN_RTJSON_KEY, "true"); + params.put(APIUtils.TEXT_KEY, commentMarkdown); + params.put(APIUtils.THING_ID_KEY, thingFullname); api.sendComment(headers, params); Call sendCommentCall = api.sendComment(headers, params); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditSubscription.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditSubscription.java index f79ae19b..3f2225e8 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditSubscription.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditSubscription.java @@ -7,9 +7,10 @@ import androidx.annotation.NonNull; import java.util.HashMap; import java.util.Map; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.SubredditDatabase.SubredditData; import ml.docilealligator.infinityforreddit.SubscribedSubredditDatabase.SubscribedSubredditData; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Retrofit; @@ -38,10 +39,10 @@ public class SubredditSubscription { RedditAPI api = oauthRetrofit.create(RedditAPI.class); Map params = new HashMap<>(); - params.put(RedditUtils.ACTION_KEY, action); - params.put(RedditUtils.SR_NAME_KEY, subredditName); + params.put(APIUtils.ACTION_KEY, action); + params.put(APIUtils.SR_NAME_KEY, subredditName); - Call subredditSubscriptionCall = api.subredditSubscription(RedditUtils.getOAuthHeader(accessToken), params); + Call subredditSubscriptionCall = api.subredditSubscription(APIUtils.getOAuthHeader(accessToken), params); subredditSubscriptionCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/UserFollowing.java b/app/src/main/java/ml/docilealligator/infinityforreddit/UserFollowing.java index bb85667a..93ec3bc3 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/UserFollowing.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/UserFollowing.java @@ -7,10 +7,11 @@ import androidx.annotation.NonNull; import java.util.HashMap; import java.util.Map; +import ml.docilealligator.infinityforreddit.API.RedditAPI; import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserDao; import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserData; import ml.docilealligator.infinityforreddit.User.UserData; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Retrofit; @@ -38,10 +39,10 @@ public class UserFollowing { RedditAPI api = oauthRetrofit.create(RedditAPI.class); Map params = new HashMap<>(); - params.put(RedditUtils.ACTION_KEY, action); - params.put(RedditUtils.SR_NAME_KEY, "u_" + username); + params.put(APIUtils.ACTION_KEY, action); + params.put(APIUtils.SR_NAME_KEY, "u_" + username); - Call subredditSubscriptionCall = api.subredditSubscription(RedditUtils.getOAuthHeader(accessToken), params); + Call subredditSubscriptionCall = api.subredditSubscription(APIUtils.getOAuthHeader(accessToken), params); subredditSubscriptionCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/APIUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/APIUtils.java new file mode 100644 index 00000000..a87ce406 --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/APIUtils.java @@ -0,0 +1,110 @@ +package ml.docilealligator.infinityforreddit.Utils; + +import android.util.Base64; + +import java.util.HashMap; +import java.util.Map; + +import okhttp3.MediaType; +import okhttp3.RequestBody; + +/** + * Created by alex on 2/23/18. + */ + +public class APIUtils { + public static final String OAUTH_URL = "https://www.reddit.com/api/v1/authorize.compact"; + public static final String OAUTH_API_BASE_URI = "https://oauth.reddit.com"; + public static final String API_BASE_URI = "https://www.reddit.com"; + public static final String API_UPLOAD_MEDIA_URI = "https://reddit-uploaded-media.s3-accelerate.amazonaws.com"; + public static final String API_UPLOAD_VIDEO_URI = "https://reddit-uploaded-video.s3-accelerate.amazonaws.com"; + public static final String GFYCAT_API_BASE_URI = "https://api.gfycat.com/v1/gfycats/"; + public static final String IMGUR_API_BASE_URI = "https://api.imgur.com/3/"; + + public static final String CLIENT_ID_KEY = "client_id"; + public static final String CLIENT_ID = ""; + public static final String IMGUR_CLIENT_ID = ""; + public static final String RESPONSE_TYPE_KEY = "response_type"; + public static final String RESPONSE_TYPE = "code"; + public static final String STATE_KEY = "state"; + public static final String STATE = ""; + public static final String REDIRECT_URI_KEY = "redirect_uri"; + public static final String REDIRECT_URI = ""; + public static final String DURATION_KEY = "duration"; + public static final String DURATION = "permanent"; + public static final String SCOPE_KEY = "scope"; + public static final String SCOPE = "identity edit flair history modconfig modflair modlog modposts modwiki mysubreddits privatemessages read report save submit subscribe vote wikiedit wikiread"; + public static final String ACCESS_TOKEN_KEY = "access_token"; + + public static final String AUTHORIZATION_KEY = "Authorization"; + public static final String AUTHORIZATION_BASE = "bearer "; + public static final String USER_AGENT_KEY = "User-Agent"; + public static final String USER_AGENT = ""; + + public static final String GRANT_TYPE_KEY = "grant_type"; + public static final String GRANT_TYPE_REFRESH_TOKEN = "refresh_token"; + public static final String REFRESH_TOKEN_KEY = "refresh_token"; + + public static final String DIR_KEY = "dir"; + public static final String ID_KEY = "id"; + public static final String RANK_KEY = "rank"; + public static final String DIR_UPVOTE = "1"; + public static final String DIR_UNVOTE = "0"; + public static final String DIR_DOWNVOTE = "-1"; + public static final String RANK = "10"; + + public static final String ACTION_KEY = "action"; + public static final String SR_NAME_KEY = "sr_name"; + + public static final String API_TYPE_KEY = "api_type"; + public static final String API_TYPE_JSON = "json"; + public static final String RETURN_RTJSON_KEY = "return_rtjson"; + public static final String TEXT_KEY = "text"; + public static final String URL_KEY = "url"; + public static final String VIDEO_POSTER_URL_KEY = "video_poster_url"; + public static final String THING_ID_KEY = "thing_id"; + + public static final String SR_KEY = "sr"; + public static final String TITLE_KEY = "title"; + public static final String FLAIR_TEXT_KEY = "flair_text"; + public static final String SPOILER_KEY = "spoiler"; + public static final String NSFW_KEY = "nsfw"; + public static final String KIND_KEY = "kind"; + public static final String KIND_SELF = "self"; + public static final String KIND_LINK = "link"; + public static final String KIND_IMAGE = "image"; + public static final String KIND_VIDEO = "video"; + public static final String KIND_VIDEOGIF = "videogif"; + + public static final String FILEPATH_KEY = "filepath"; + public static final String MIMETYPE_KEY = "mimetype"; + + public static final String LINK_KEY = "link"; + public static final String FLAIR_TEMPLATE_ID_KEY = "flair_template_id"; + + public static final String MAKE_FAVORITE_KEY = "make_favorite"; + + public static final String MULTIPATH_KEY = "multipath"; + public static final String MODEL_KEY = "model"; + + public static final String REASON_KEY = "reason"; + + public static Map getHttpBasicAuthHeader() { + Map params = new HashMap<>(); + String credentials = String.format("%s:%s", APIUtils.CLIENT_ID, ""); + String auth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP); + params.put(APIUtils.AUTHORIZATION_KEY, auth); + return params; + } + + public static Map getOAuthHeader(String accessToken) { + Map params = new HashMap<>(); + params.put(APIUtils.AUTHORIZATION_KEY, APIUtils.AUTHORIZATION_BASE + accessToken); + params.put(APIUtils.USER_AGENT_KEY, APIUtils.USER_AGENT); + return params; + } + + public static RequestBody getRequestBody(String s) { + return RequestBody.create(MediaType.parse("text/plain"), s); + } +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/JSONUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/JSONUtils.java index 57064f39..10ae166a 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/JSONUtils.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/JSONUtils.java @@ -21,12 +21,12 @@ public class JSONUtils { public static final String E_KEY = "e"; public static final String T_KEY = "t"; public static final String U_KEY = "u"; + public static final String LINK_KEY = "link"; public static final String LINK_AUTHOR_KEY = "link_author"; public static final String LINK_FLAIR_RICHTEXT_KEY = "link_flair_richtext"; public static final String SCORE_KEY = "score"; public static final String LIKES_KEY = "likes"; public static final String NSFW_KEY = "over_18"; - public static final String GILDED_KEY = "gilded"; public static final String PERMALINK_KEY = "permalink"; public static final String CREATED_UTC_KEY = "created_utc"; public static final String PREVIEW_KEY = "preview"; @@ -109,4 +109,5 @@ public class JSONUtils { public static final String GFY_ITEM_KEY = "gfyItem"; public static final String MP4_URL_KEY = "mp4Url"; public static final String WEBM_URL_KEY = "webmUrl"; + public static final String TYPE_KEY = "type"; } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/RedditUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/RedditUtils.java deleted file mode 100644 index 5d901277..00000000 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Utils/RedditUtils.java +++ /dev/null @@ -1,108 +0,0 @@ -package ml.docilealligator.infinityforreddit.Utils; - -import android.util.Base64; - -import java.util.HashMap; -import java.util.Map; - -import okhttp3.MediaType; -import okhttp3.RequestBody; - -/** - * Created by alex on 2/23/18. - */ - -public class RedditUtils { - public static final String OAUTH_URL = "https://www.reddit.com/api/v1/authorize.compact"; - public static final String OAUTH_API_BASE_URI = "https://oauth.reddit.com"; - public static final String API_BASE_URI = "https://www.reddit.com"; - public static final String API_UPLOAD_MEDIA_URI = "https://reddit-uploaded-media.s3-accelerate.amazonaws.com"; - public static final String API_UPLOAD_VIDEO_URI = "https://reddit-uploaded-video.s3-accelerate.amazonaws.com"; - public static final String GFYCAT_API_BASE_URI = "https://api.gfycat.com/v1/gfycats/"; - - public static final String CLIENT_ID_KEY = "client_id"; - public static final String CLIENT_ID = ""; - public static final String RESPONSE_TYPE_KEY = "response_type"; - public static final String RESPONSE_TYPE = "code"; - public static final String STATE_KEY = "state"; - public static final String STATE = ""; - public static final String REDIRECT_URI_KEY = "redirect_uri"; - public static final String REDIRECT_URI = ""; - public static final String DURATION_KEY = "duration"; - public static final String DURATION = "permanent"; - public static final String SCOPE_KEY = "scope"; - public static final String SCOPE = "identity edit flair history modconfig modflair modlog modposts modwiki mysubreddits privatemessages read report save submit subscribe vote wikiedit wikiread"; - public static final String ACCESS_TOKEN_KEY = "access_token"; - - public static final String AUTHORIZATION_KEY = "Authorization"; - public static final String AUTHORIZATION_BASE = "bearer "; - public static final String USER_AGENT_KEY = "User-Agent"; - public static final String USER_AGENT = ""; - - public static final String GRANT_TYPE_KEY = "grant_type"; - public static final String GRANT_TYPE_REFRESH_TOKEN = "refresh_token"; - public static final String REFRESH_TOKEN_KEY = "refresh_token"; - - public static final String DIR_KEY = "dir"; - public static final String ID_KEY = "id"; - public static final String RANK_KEY = "rank"; - public static final String DIR_UPVOTE = "1"; - public static final String DIR_UNVOTE = "0"; - public static final String DIR_DOWNVOTE = "-1"; - public static final String RANK = "10"; - - public static final String ACTION_KEY = "action"; - public static final String SR_NAME_KEY = "sr_name"; - - public static final String API_TYPE_KEY = "api_type"; - public static final String API_TYPE_JSON = "json"; - public static final String RETURN_RTJSON_KEY = "return_rtjson"; - public static final String TEXT_KEY = "text"; - public static final String URL_KEY = "url"; - public static final String VIDEO_POSTER_URL_KEY = "video_poster_url"; - public static final String THING_ID_KEY = "thing_id"; - - public static final String SR_KEY = "sr"; - public static final String TITLE_KEY = "title"; - public static final String FLAIR_TEXT_KEY = "flair_text"; - public static final String SPOILER_KEY = "spoiler"; - public static final String NSFW_KEY = "nsfw"; - public static final String KIND_KEY = "kind"; - public static final String KIND_SELF = "self"; - public static final String KIND_LINK = "link"; - public static final String KIND_IMAGE = "image"; - public static final String KIND_VIDEO = "video"; - public static final String KIND_VIDEOGIF = "videogif"; - - public static final String FILEPATH_KEY = "filepath"; - public static final String MIMETYPE_KEY = "mimetype"; - - public static final String LINK_KEY = "link"; - public static final String FLAIR_TEMPLATE_ID_KEY = "flair_template_id"; - - public static final String MAKE_FAVORITE_KEY = "make_favorite"; - - public static final String MULTIPATH_KEY = "multipath"; - public static final String MODEL_KEY = "model"; - - public static final String REASON_KEY = "reason"; - - public static Map getHttpBasicAuthHeader() { - Map params = new HashMap<>(); - String credentials = String.format("%s:%s", RedditUtils.CLIENT_ID, ""); - String auth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP); - params.put(RedditUtils.AUTHORIZATION_KEY, auth); - return params; - } - - public static Map getOAuthHeader(String accessToken) { - Map params = new HashMap<>(); - params.put(RedditUtils.AUTHORIZATION_KEY, RedditUtils.AUTHORIZATION_BASE + accessToken); - params.put(RedditUtils.USER_AGENT_KEY, RedditUtils.USER_AGENT); - return params; - } - - public static RequestBody getRequestBody(String s) { - return RequestBody.create(MediaType.parse("text/plain"), s); - } -} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/VoteThing.java b/app/src/main/java/ml/docilealligator/infinityforreddit/VoteThing.java index f1e9a3f1..bb0264bf 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/VoteThing.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/VoteThing.java @@ -8,7 +8,8 @@ import androidx.annotation.NonNull; import java.util.HashMap; import java.util.Map; -import ml.docilealligator.infinityforreddit.Utils.RedditUtils; +import ml.docilealligator.infinityforreddit.API.RedditAPI; +import ml.docilealligator.infinityforreddit.Utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Retrofit; @@ -25,11 +26,11 @@ public class VoteThing { RedditAPI api = retrofit.create(RedditAPI.class); Map params = new HashMap<>(); - params.put(RedditUtils.DIR_KEY, point); - params.put(RedditUtils.ID_KEY, fullName); - params.put(RedditUtils.RANK_KEY, RedditUtils.RANK); + params.put(APIUtils.DIR_KEY, point); + params.put(APIUtils.ID_KEY, fullName); + params.put(APIUtils.RANK_KEY, APIUtils.RANK); - Call voteThingCall = api.voteThing(RedditUtils.getOAuthHeader(accessToken), params); + Call voteThingCall = api.voteThing(APIUtils.getOAuthHeader(accessToken), params); voteThingCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { @@ -55,11 +56,11 @@ public class VoteThing { RedditAPI api = retrofit.create(RedditAPI.class); Map params = new HashMap<>(); - params.put(RedditUtils.DIR_KEY, point); - params.put(RedditUtils.ID_KEY, fullName); - params.put(RedditUtils.RANK_KEY, RedditUtils.RANK); + params.put(APIUtils.DIR_KEY, point); + params.put(APIUtils.ID_KEY, fullName); + params.put(APIUtils.RANK_KEY, APIUtils.RANK); - Call voteThingCall = api.voteThing(RedditUtils.getOAuthHeader(accessToken), params); + Call voteThingCall = api.voteThing(APIUtils.getOAuthHeader(accessToken), params); voteThingCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { -- cgit v1.2.3