mirror of
https://github.com/Docile-Alligator/Infinity-For-Reddit.git
synced 2025-10-29 11:35:08 +00:00
New mod options: (Un)mark NSFW and (Un)mark spoiler.
This commit is contained in:
parent
bdc7ce142a
commit
73ff709340
@ -7,4 +7,6 @@ interface PostModerationActionHandler {
|
||||
fun removePost(post: Post, position: Int, isSpam: Boolean)
|
||||
fun toggleSticky(post: Post, position: Int)
|
||||
fun toggleLock(post: Post, position: Int)
|
||||
fun toggleNSFW(post: Post, position: Int)
|
||||
fun toggleSpoiler(post: Post, position: Int)
|
||||
}
|
||||
@ -56,27 +56,44 @@ class ModerationActionBottomSheetFragment : LandscapeExpandedRoundedBottomSheetD
|
||||
dismiss()
|
||||
}
|
||||
|
||||
binding.toggleStickyTextViewModerationActionBottomSheetFragment.setText(if (post.isStickied) R.string.unset_sticky_post else R.string.set_sticky_post)
|
||||
activity?.let {
|
||||
binding.toggleStickyTextViewModerationActionBottomSheetFragment.setCompoundDrawablesWithIntrinsicBounds(
|
||||
AppCompatResources.getDrawable(it, if (post.isStickied) R.drawable.ic_unstick_post_24dp else R.drawable.ic_stick_post_24dp), null, null, null
|
||||
)
|
||||
binding.toggleLockTextViewModerationActionBottomSheetFragment.setCompoundDrawablesWithIntrinsicBounds(
|
||||
AppCompatResources.getDrawable(it, if (post.isLocked) R.drawable.ic_unlock_24dp else R.drawable.ic_lock_day_night_24dp), null, null, null
|
||||
)
|
||||
binding.toggleNsfwTextViewModerationActionBottomSheetFragment.setCompoundDrawablesWithIntrinsicBounds(
|
||||
AppCompatResources.getDrawable(it, if (post.isNSFW) R.drawable.ic_unmark_nsfw_24dp else R.drawable.ic_mark_nsfw_24dp), null, null, null
|
||||
)
|
||||
binding.toggleSpoilerTextViewModerationActionBottomSheetFragment.setCompoundDrawablesWithIntrinsicBounds(
|
||||
AppCompatResources.getDrawable(it, if (post.isLocked) R.drawable.ic_unmark_spoiler_24dp else R.drawable.ic_spoiler_24dp), null, null, null
|
||||
)
|
||||
}
|
||||
|
||||
binding.toggleStickyTextViewModerationActionBottomSheetFragment.setText(if (post.isStickied) R.string.unset_sticky_post else R.string.set_sticky_post)
|
||||
binding.toggleStickyTextViewModerationActionBottomSheetFragment.setOnClickListener {
|
||||
(parentFragment as PostModerationActionHandler).toggleSticky(post, position)
|
||||
dismiss()
|
||||
}
|
||||
|
||||
binding.toggleLockTextViewModerationActionBottomSheetFragment.setText(if (post.isLocked) R.string.unlock else R.string.lock)
|
||||
activity?.let {
|
||||
binding.toggleLockTextViewModerationActionBottomSheetFragment.setCompoundDrawablesWithIntrinsicBounds(
|
||||
AppCompatResources.getDrawable(it, if (post.isLocked) R.drawable.ic_unlock_24dp else R.drawable.ic_lock_day_night_24dp), null, null, null
|
||||
)
|
||||
}
|
||||
binding.toggleLockTextViewModerationActionBottomSheetFragment.setOnClickListener {
|
||||
(parentFragment as PostModerationActionHandler).toggleLock(post, position)
|
||||
dismiss()
|
||||
}
|
||||
|
||||
binding.toggleNsfwTextViewModerationActionBottomSheetFragment.setText(if (post.isNSFW) R.string.action_unmark_nsfw else R.string.action_mark_nsfw)
|
||||
binding.toggleNsfwTextViewModerationActionBottomSheetFragment.setOnClickListener {
|
||||
(parentFragment as PostModerationActionHandler).toggleNSFW(post, position)
|
||||
dismiss()
|
||||
}
|
||||
|
||||
binding.toggleSpoilerTextViewModerationActionBottomSheetFragment.setText(if (post.isSpoiler) R.string.action_unmark_spoiler else R.string.action_mark_spoiler)
|
||||
binding.toggleSpoilerTextViewModerationActionBottomSheetFragment.setOnClickListener {
|
||||
(parentFragment as PostModerationActionHandler).toggleSpoiler(post, position)
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
}
|
||||
return binding.root
|
||||
|
||||
@ -1410,4 +1410,14 @@ public class PostFragment extends PostFragmentBase implements FragmentCommunicat
|
||||
public void toggleLock(@NonNull Post post, int position) {
|
||||
mPostViewModel.toggleLockPost(post, position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toggleNSFW(@NonNull Post post, int position) {
|
||||
mPostViewModel.toggleNSFW(post, position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toggleSpoiler(@NonNull Post post, int position) {
|
||||
mPostViewModel.toggleSpoiler(post, position);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1662,7 +1662,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put(APIUtils.ID_KEY, mPost.getFullName());
|
||||
mOauthRetrofit.create(RedditAPI.class).markNSFW(APIUtils.getOAuthHeader(activity.accessToken), params)
|
||||
.enqueue(new Callback<String>() {
|
||||
.enqueue(new Callback<>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
|
||||
@ -24,4 +24,16 @@ sealed class ModerationEvent(open val post: Post, open val position: Int, val to
|
||||
|
||||
data class Unlocked(override val post: Post, override val position: Int) : ModerationEvent(post, position, R.string.unlocked)
|
||||
data class UnlockFailed(override val post: Post, override val position: Int) : ModerationEvent(post, position, R.string.unlock_failed)
|
||||
|
||||
data class MarkedNSFW(override val post: Post, override val position: Int) : ModerationEvent(post, position, R.string.mark_nsfw_success)
|
||||
data class MarkNSFWFailed(override val post: Post, override val position: Int) : ModerationEvent(post, position, R.string.mark_nsfw_failed)
|
||||
|
||||
data class UnmarkedNSFW(override val post: Post, override val position: Int) : ModerationEvent(post, position, R.string.unmark_nsfw_success)
|
||||
data class UnmarkNSFWFailed(override val post: Post, override val position: Int) : ModerationEvent(post, position, R.string.unmark_nsfw_failed)
|
||||
|
||||
data class MarkedSpoiler(override val post: Post, override val position: Int) : ModerationEvent(post, position, R.string.mark_spoiler_success)
|
||||
data class MarkSpoilerFailed(override val post: Post, override val position: Int) : ModerationEvent(post, position, R.string.mark_spoiler_failed)
|
||||
|
||||
data class UnmarkedSpoiler(override val post: Post, override val position: Int) : ModerationEvent(post, position, R.string.unmark_spoiler_success)
|
||||
data class UnmarkSpoilerFailed(override val post: Post, override val position: Int) : ModerationEvent(post, position, R.string.unmark_spoiler_failed)
|
||||
}
|
||||
@ -579,4 +579,48 @@ public class PostViewModel extends ViewModel {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void toggleNSFW(@NonNull Post post, int position) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put(APIUtils.ID_KEY, post.getFullName());
|
||||
Call<String> call = post.isNSFW() ? retrofit.create(RedditAPI.class).unmarkNSFW(APIUtils.getOAuthHeader(accessToken), params) : retrofit.create(RedditAPI.class).markNSFW(APIUtils.getOAuthHeader(accessToken), params);
|
||||
call.enqueue(new Callback<>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
post.setNSFW(!post.isNSFW());
|
||||
moderationEventLiveData.postValue(post.isNSFW() ? new ModerationEvent.MarkedNSFW(post, position): new ModerationEvent.UnmarkedNSFW(post, position));
|
||||
} else {
|
||||
moderationEventLiveData.postValue(post.isNSFW() ? new ModerationEvent.UnmarkNSFWFailed(post, position) : new ModerationEvent.MarkNSFWFailed(post, position));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable throwable) {
|
||||
moderationEventLiveData.postValue(post.isNSFW() ? new ModerationEvent.UnmarkNSFWFailed(post, position) : new ModerationEvent.MarkNSFWFailed(post, position));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void toggleSpoiler(@NonNull Post post, int position) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put(APIUtils.ID_KEY, post.getFullName());
|
||||
Call<String> call = post.isSpoiler() ? retrofit.create(RedditAPI.class).unmarkSpoiler(APIUtils.getOAuthHeader(accessToken), params) : retrofit.create(RedditAPI.class).markSpoiler(APIUtils.getOAuthHeader(accessToken), params);
|
||||
call.enqueue(new Callback<>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
post.setSpoiler(!post.isSpoiler());
|
||||
moderationEventLiveData.postValue(post.isSpoiler() ? new ModerationEvent.MarkedSpoiler(post, position): new ModerationEvent.UnmarkedSpoiler(post, position));
|
||||
} else {
|
||||
moderationEventLiveData.postValue(post.isSpoiler() ? new ModerationEvent.UnmarkSpoilerFailed(post, position) : new ModerationEvent.MarkSpoilerFailed(post, position));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable throwable) {
|
||||
moderationEventLiveData.postValue(post.isSpoiler() ? new ModerationEvent.UnmarkSpoilerFailed(post, position) : new ModerationEvent.MarkSpoilerFailed(post, position));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
9
app/src/main/res/drawable/ic_mark_nsfw_24dp.xml
Normal file
9
app/src/main/res/drawable/ic_mark_nsfw_24dp.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960">
|
||||
<path
|
||||
android:pathData="M240,880v-170q-39,-17 -68.5,-45.5t-50,-64.5q-20.5,-36 -31,-77T80,440q0,-158 112,-259t288,-101q176,0 288,101t112,259q0,42 -10.5,83t-31,77q-20.5,36 -50,64.5T720,710v170L240,880ZM320,800h40v-80h80v80h80v-80h80v80h40v-142q38,-9 67.5,-30t50,-50q20.5,-29 31.5,-64t11,-74q0,-125 -88.5,-202.5T480,160q-143,0 -231.5,77.5T160,440q0,39 11,74t31.5,64q20.5,29 50.5,50t67,30v142ZM420,600h120l-60,-120 -60,120ZM340,520q33,0 56.5,-23.5T420,440q0,-33 -23.5,-56.5T340,360q-33,0 -56.5,23.5T260,440q0,33 23.5,56.5T340,520ZM620,520q33,0 56.5,-23.5T700,440q0,-33 -23.5,-56.5T620,360q-33,0 -56.5,23.5T540,440q0,33 23.5,56.5T620,520ZM480,800Z"
|
||||
android:fillColor="#000000"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_spoiler_24dp.xml
Normal file
9
app/src/main/res/drawable/ic_spoiler_24dp.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960">
|
||||
<path
|
||||
android:pathData="M109,840q-11,0 -20,-5.5T75,820q-5,-9 -5.5,-19.5T75,780l370,-640q6,-10 15.5,-15t19.5,-5q10,0 19.5,5t15.5,15l370,640q6,10 5.5,20.5T885,820q-5,9 -14,14.5t-20,5.5L109,840ZM178,760h604L480,240 178,760ZM480,720q17,0 28.5,-11.5T520,680q0,-17 -11.5,-28.5T480,640q-17,0 -28.5,11.5T440,680q0,17 11.5,28.5T480,720ZM480,600q17,0 28.5,-11.5T520,560v-120q0,-17 -11.5,-28.5T480,400q-17,0 -28.5,11.5T440,440v120q0,17 11.5,28.5T480,600ZM480,500Z"
|
||||
android:fillColor="#000000"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_unmark_nsfw_24dp.xml
Normal file
9
app/src/main/res/drawable/ic_unmark_nsfw_24dp.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960">
|
||||
<path
|
||||
android:pathData="M363,840q-16,0 -30.5,-6T307,817L143,653q-11,-11 -17,-25.5t-6,-30.5v-234q0,-16 6,-30.5t17,-25.5l164,-164q11,-11 25.5,-17t30.5,-6h234q16,0 30.5,6t25.5,17l164,164q11,11 17,25.5t6,30.5v234q0,16 -6,30.5T817,653L653,817q-11,11 -25.5,17t-30.5,6L363,840ZM364,760h232l164,-164v-232L596,200L364,200L200,364v232l164,164ZM480,536 L566,622q11,11 28,11t28,-11q11,-11 11,-28t-11,-28l-86,-86 86,-86q11,-11 11,-28t-11,-28q-11,-11 -28,-11t-28,11l-86,86 -86,-86q-11,-11 -28,-11t-28,11q-11,11 -11,28t11,28l86,86 -86,86q-11,11 -11,28t11,28q11,11 28,11t28,-11l86,-86ZM480,480Z"
|
||||
android:fillColor="#000000"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_unmark_spoiler_24dp.xml
Normal file
9
app/src/main/res/drawable/ic_unmark_spoiler_24dp.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960">
|
||||
<path
|
||||
android:pathData="M480,720q-17,0 -28.5,-11.5T440,680q0,-17 11.5,-28.5T480,640q17,0 28.5,11.5T520,680q0,17 -11.5,28.5T480,720ZM440,560v-121l80,80v41q0,17 -11.5,28.5T480,600q-17,0 -28.5,-11.5T440,560ZM480,120q11,0 20.5,4.5T515,140l208,359q10,17 4,31t-19,22q-13,8 -29,5t-27,-21L480,240l-21,36q-10,17 -25.5,19.5T405,290q-13,-8 -19,-22.5t4,-31.5l55,-96q6,-11 15,-15.5t20,-4.5ZM178,760h469L350,463 178,760ZM791,903l-64,-63L109,840q-23,0 -34,-20t0,-40l217,-375L55,168q-12,-12 -11.5,-28.5T56,111q12,-12 28.5,-12t28.5,12l735,736q12,12 12,28t-12,28q-12,12 -28.5,12T791,903ZM499,612ZM544,431Z"
|
||||
android:fillColor="#000000"/>
|
||||
</vector>
|
||||
@ -108,6 +108,42 @@
|
||||
android:textSize="?attr/font_default"
|
||||
app:drawableTint="?attr/primaryTextColor" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/toggle_nsfw_text_view_moderation_action_bottom_sheet_fragment"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:clickable="true"
|
||||
android:drawablePadding="48dp"
|
||||
android:focusable="true"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:paddingStart="32dp"
|
||||
android:paddingTop="16dp"
|
||||
android:paddingEnd="32dp"
|
||||
android:paddingBottom="16dp"
|
||||
android:textColor="?attr/primaryTextColor"
|
||||
android:textSize="?attr/font_default"
|
||||
app:drawableTint="?attr/primaryTextColor" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/toggle_spoiler_text_view_moderation_action_bottom_sheet_fragment"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:clickable="true"
|
||||
android:drawablePadding="48dp"
|
||||
android:focusable="true"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:paddingStart="32dp"
|
||||
android:paddingTop="16dp"
|
||||
android:paddingEnd="32dp"
|
||||
android:paddingBottom="16dp"
|
||||
android:textColor="?attr/primaryTextColor"
|
||||
android:textSize="?attr/font_default"
|
||||
app:drawableTint="?attr/primaryTextColor" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user