diff --git a/app/build.gradle b/app/build.gradle index 94cf7c9f..6644ba75 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "ml.docilealligator.infinityforreddit" minSdk 21 targetSdk 33 - versionCode 110 - versionName "5.4.0-beta2" + versionCode 111 + versionName "5.4.0-beta3" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions { annotationProcessorOptions { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewUserDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewUserDetailActivity.java index b1119059..2daef67b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewUserDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewUserDetailActivity.java @@ -111,6 +111,7 @@ import ml.docilealligator.infinityforreddit.post.PostPagingSource; import ml.docilealligator.infinityforreddit.readpost.InsertReadPost; import ml.docilealligator.infinityforreddit.subreddit.ParseSubredditData; import ml.docilealligator.infinityforreddit.subreddit.SubredditData; +import ml.docilealligator.infinityforreddit.user.BlockUser; import ml.docilealligator.infinityforreddit.user.FetchUserData; import ml.docilealligator.infinityforreddit.user.UserDao; import ml.docilealligator.infinityforreddit.user.UserData; @@ -1119,6 +1120,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele if (username.equals(mAccountName)) { menu.findItem(R.id.action_send_private_message_view_user_detail_activity).setVisible(false); menu.findItem(R.id.action_report_view_user_detail_activity).setVisible(false); + menu.findItem(R.id.action_block_user_view_user_detail_activity).setVisible(false); } else { menu.findItem(R.id.action_edit_profile_view_user_detail_activity).setVisible(false); } @@ -1187,6 +1189,30 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele reportIntent.setData(Uri.parse("https://www.reddithelp.com/en/categories/rules-reporting/account-and-community-restrictions/what-should-i-do-if-i-see-something-i")); startActivity(reportIntent); return true; + } else if (itemId == R.id.action_block_user_view_user_detail_activity) { + if (mAccessToken == null) { + Toast.makeText(this, R.string.login_first, Toast.LENGTH_SHORT).show(); + return true; + } + + new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme) + .setTitle(R.string.block_user) + .setMessage(R.string.are_you_sure) + .setPositiveButton(R.string.yes, (dialogInterface, i) + -> BlockUser.blockUser(mOauthRetrofit, mAccessToken, username, new BlockUser.BlockUserListener() { + @Override + public void success() { + Toast.makeText(ViewUserDetailActivity.this, R.string.block_user_success, Toast.LENGTH_SHORT).show(); + } + + @Override + public void failed() { + Toast.makeText(ViewUserDetailActivity.this, R.string.block_user_failed, Toast.LENGTH_SHORT).show(); + } + })) + .setNegativeButton(R.string.no, null) + .show(); + return true; } else if (itemId == R.id.action_edit_profile_view_user_detail_activity) { startActivity(new Intent(this, EditProfileActivity.class)); return true; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/apis/RedditAPI.java b/app/src/main/java/ml/docilealligator/infinityforreddit/apis/RedditAPI.java index 07119b1f..41d44d38 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/apis/RedditAPI.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/apis/RedditAPI.java @@ -215,6 +215,10 @@ public interface RedditAPI { @POST("/api/compose") Call composePrivateMessage(@HeaderMap Map headers, @FieldMap Map params); + @FormUrlEncoded + @POST("api/block_user") + Call blockUser(@HeaderMap Map headers, @FieldMap Map params); + @GET("r/{subredditName}/api/user_flair_v2.json?raw_json=1") Call getUserFlairs(@HeaderMap Map headers, @Path("subredditName") String subredditName); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/user/BlockUser.java b/app/src/main/java/ml/docilealligator/infinityforreddit/user/BlockUser.java new file mode 100644 index 00000000..c7a7207e --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/user/BlockUser.java @@ -0,0 +1,40 @@ +package ml.docilealligator.infinityforreddit.user; + +import androidx.annotation.NonNull; + +import java.util.HashMap; +import java.util.Map; + +import ml.docilealligator.infinityforreddit.apis.RedditAPI; +import ml.docilealligator.infinityforreddit.utils.APIUtils; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; + +public class BlockUser { + public interface BlockUserListener { + void success(); + void failed(); + } + + public static void blockUser(Retrofit oauthRetrofit, String accessToken, String username, BlockUserListener blockUserListener) { + Map params = new HashMap<>(); + params.put(APIUtils.NAME_KEY, username); + oauthRetrofit.create(RedditAPI.class).blockUser(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback() { + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + if (response.isSuccessful()) { + blockUserListener.success(); + } else { + blockUserListener.failed(); + } + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + blockUserListener.failed(); + } + }); + } +} diff --git a/app/src/main/res/menu/view_user_detail_activity.xml b/app/src/main/res/menu/view_user_detail_activity.xml index 41e3527a..ec9128e4 100644 --- a/app/src/main/res/menu/view_user_detail_activity.xml +++ b/app/src/main/res/menu/view_user_detail_activity.xml @@ -55,6 +55,11 @@ android:orderInCategory="9" android:title="@string/action_report" /> + + Crosspost Set as Wallpaper Send Private Message + Block User Select User Flair Give Award Save to Database @@ -1053,6 +1054,10 @@ If you have 2-factor authentication enabled, kindly type your password like the following: <password>:<2FA code>.\nExample: yourpass:123456 + Block User + Blocked + Failed to block user + User flair selected Select this user flair? Clear Flair