From 56540d7e7b9041a8e48200397f000321e73685a9 Mon Sep 17 00:00:00 2001 From: FineFindus Date: Tue, 2 Apr 2024 19:32:08 +0200 Subject: [PATCH] feat: re-add mute duration option --- .../sheets/MuteAccountConfirmationSheet.java | 47 ++++++++++++++++++- .../android/ui/utils/UiUtils.java | 6 ++- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/sheets/MuteAccountConfirmationSheet.java b/mastodon/src/main/java/org/joinmastodon/android/ui/sheets/MuteAccountConfirmationSheet.java index 87522e1bf..2a3816858 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/sheets/MuteAccountConfirmationSheet.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/sheets/MuteAccountConfirmationSheet.java @@ -1,17 +1,22 @@ package org.joinmastodon.android.ui.sheets; import android.content.Context; +import android.view.Gravity; import android.view.View; +import android.widget.Button; +import android.widget.PopupMenu; import org.joinmastodon.android.R; import org.joinmastodon.android.model.Account; +import java.time.Duration; +import java.util.concurrent.atomic.AtomicReference; + import androidx.annotation.NonNull; public class MuteAccountConfirmationSheet extends AccountRestrictionConfirmationSheet{ - public MuteAccountConfirmationSheet(@NonNull Context context, Account user, ConfirmCallback confirmCallback){ + public MuteAccountConfirmationSheet(@NonNull Context context, Account user, AtomicReference muteDuration, ConfirmCallback confirmCallback){ super(context, user, confirmCallback); - //TODO: readd the time option titleView.setText(R.string.mute_user_confirm_title); confirmBtn.setText(R.string.do_mute); secondaryBtn.setVisibility(View.GONE); @@ -21,5 +26,43 @@ public class MuteAccountConfirmationSheet extends AccountRestrictionConfirmation addRow(R.drawable.ic_fluent_eye_off_24_regular, R.string.user_can_still_see_your_posts); addRow(R.drawable.ic_fluent_mention_24_regular, R.string.you_wont_see_user_mentions); addRow(R.drawable.ic_fluent_arrow_reply_24_regular, R.string.user_can_mention_and_follow_you); + + // add mute duration (Moshidon) + Button button=new Button(getContext()); + PopupMenu popupMenu=getMuteDurationPopupMenu(context, muteDuration, button); + button.setOnClickListener(v->popupMenu.show()); + button.setOnTouchListener(popupMenu.getDragToOpenListener()); + button.setText(popupMenu.getMenu().getItem(0).getTitle()); + + addRow(R.drawable.ic_fluent_clock_20_regular, R.string.sk_mute_label, button); + } + + @NonNull + private PopupMenu getMuteDurationPopupMenu(@NonNull Context context, AtomicReference muteDuration, Button button){ + PopupMenu popupMenu=new PopupMenu(context, button, Gravity.CENTER_HORIZONTAL); + popupMenu.inflate(R.menu.mute_duration); + popupMenu.setOnMenuItemClickListener(item->{ + int id=item.getItemId(); + if(id==R.id.duration_indefinite) + muteDuration.set(Duration.ZERO); + else if(id==R.id.duration_minutes_5){ + muteDuration.set(Duration.ofMinutes(5)); + }else if(id==R.id.duration_minutes_30){ + muteDuration.set(Duration.ofMinutes(30)); + }else if(id==R.id.duration_hours_1){ + muteDuration.set(Duration.ofHours(1)); + }else if(id==R.id.duration_hours_6){ + muteDuration.set(Duration.ofHours(6)); + }else if(id==R.id.duration_days_1){ + muteDuration.set(Duration.ofDays(1)); + }else if(id==R.id.duration_days_3){ + muteDuration.set(Duration.ofDays(3)); + }else if(id==R.id.duration_days_7){ + muteDuration.set(Duration.ofDays(7)); + } + button.setText(item.getTitle()); + return true; + }); + return popupMenu; } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java index 2720b997c..f4faad476 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java @@ -599,8 +599,10 @@ public class UiUtils { } public static void confirmToggleMuteUser(Context context, String accountID, Account account, boolean currentlyMuted, Consumer resultCallback){ if(!currentlyMuted){ - new MuteAccountConfirmationSheet(context, account, (onSuccess, onError)->{ - new SetAccountMuted(account.id, true, 0) + //pass a reference to the duration, so it can be changed inside the confirmation sheet + AtomicReference muteDuration=new AtomicReference<>(Duration.ZERO); + new MuteAccountConfirmationSheet(context, account, muteDuration, (onSuccess, onError)->{ + new SetAccountMuted(account.id, true, muteDuration.get().getSeconds()) .setCallback(new Callback<>(){ @Override public void onSuccess(Relationship result){