feat: add mute notifications toggle

This commit is contained in:
FineFindus
2024-04-02 19:53:54 +02:00
parent 18f8c1d29e
commit e6501ad8a3
5 changed files with 23 additions and 8 deletions

View File

@@ -4,16 +4,18 @@ import org.joinmastodon.android.api.MastodonAPIRequest;
import org.joinmastodon.android.model.Relationship; import org.joinmastodon.android.model.Relationship;
public class SetAccountMuted extends MastodonAPIRequest<Relationship>{ public class SetAccountMuted extends MastodonAPIRequest<Relationship>{
public SetAccountMuted(String id, boolean muted, long duration){ public SetAccountMuted(String id, boolean muted, long duration, boolean muteNotifications){
super(HttpMethod.POST, "/accounts/"+id+"/"+(muted ? "mute" : "unmute"), Relationship.class); super(HttpMethod.POST, "/accounts/"+id+"/"+(muted ? "mute" : "unmute"), Relationship.class);
if(muted) if(muted)
setRequestBody(new Request(duration, muteNotifications)); setRequestBody(new Request(duration, muteNotifications));
} }
private static class Request{ private static class Request{
public long duration; public long duration;
public Request(long duration){ public boolean muteNotifications;
public Request(long duration, boolean muteNotifications){
this.duration=duration; this.duration=duration;
this.muteNotifications=muteNotifications;
} }
} }
} }

View File

@@ -86,6 +86,7 @@ public abstract class AccountRestrictionConfirmationSheet extends BottomSheet{
AutoOrientationLinearLayout layout = new AutoOrientationLinearLayout(getContext()); AutoOrientationLinearLayout layout = new AutoOrientationLinearLayout(getContext());
LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(0,ViewGroup.LayoutParams.WRAP_CONTENT); LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(0,ViewGroup.LayoutParams.WRAP_CONTENT);
lp.gravity=Gravity.CENTER;
lp.weight=1f; lp.weight=1f;
layout.addView(tv, lp); layout.addView(tv, lp);
layout.addView(view, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); layout.addView(view, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

View File

@@ -8,14 +8,16 @@ import android.widget.PopupMenu;
import org.joinmastodon.android.R; import org.joinmastodon.android.R;
import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.ui.views.M3Switch;
import java.time.Duration; import java.time.Duration;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
public class MuteAccountConfirmationSheet extends AccountRestrictionConfirmationSheet{ public class MuteAccountConfirmationSheet extends AccountRestrictionConfirmationSheet{
public MuteAccountConfirmationSheet(@NonNull Context context, Account user, AtomicReference<Duration> muteDuration, ConfirmCallback confirmCallback){ public MuteAccountConfirmationSheet(@NonNull Context context, Account user, AtomicReference<Duration> muteDuration, AtomicBoolean muteNotifications, ConfirmCallback confirmCallback){
super(context, user, confirmCallback); super(context, user, confirmCallback);
titleView.setText(R.string.mute_user_confirm_title); titleView.setText(R.string.mute_user_confirm_title);
confirmBtn.setText(R.string.do_mute); confirmBtn.setText(R.string.do_mute);
@@ -27,6 +29,13 @@ public class MuteAccountConfirmationSheet extends AccountRestrictionConfirmation
addRow(R.drawable.ic_fluent_mention_24_regular, R.string.you_wont_see_user_mentions); 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); addRow(R.drawable.ic_fluent_arrow_reply_24_regular, R.string.user_can_mention_and_follow_you);
// add mute notifications toggle (Moshidon)
M3Switch m3Switch=new M3Switch(getContext());
m3Switch.setClickable(true);
m3Switch.setChecked(muteNotifications.get());
m3Switch.setOnCheckedChangeListener((compoundButton, b) -> muteNotifications.set(b));
addRow(R.drawable.ic_fluent_alert_off_24_regular, R.string.mo_mute_notifications, m3Switch);
// add mute duration (Moshidon) // add mute duration (Moshidon)
Button button=new Button(getContext()); Button button=new Button(getContext());
PopupMenu popupMenu=getMuteDurationPopupMenu(context, muteDuration, button); PopupMenu popupMenu=getMuteDurationPopupMenu(context, muteDuration, button);

View File

@@ -156,6 +156,7 @@ import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.BiPredicate; import java.util.function.BiPredicate;
@@ -599,10 +600,11 @@ public class UiUtils {
} }
public static void confirmToggleMuteUser(Context context, String accountID, Account account, boolean currentlyMuted, Consumer<Relationship> resultCallback){ public static void confirmToggleMuteUser(Context context, String accountID, Account account, boolean currentlyMuted, Consumer<Relationship> resultCallback){
if(!currentlyMuted){ if(!currentlyMuted){
//pass a reference to the duration, so it can be changed inside the confirmation sheet //pass a references, so they can be changed inside the confirmation sheet
AtomicReference<Duration> muteDuration=new AtomicReference<>(Duration.ZERO); AtomicReference<Duration> muteDuration=new AtomicReference<>(Duration.ZERO);
new MuteAccountConfirmationSheet(context, account, muteDuration, (onSuccess, onError)->{ AtomicBoolean muteNotifications=new AtomicBoolean(true);
new SetAccountMuted(account.id, true, muteDuration.get().getSeconds()) new MuteAccountConfirmationSheet(context, account, muteDuration, muteNotifications, (onSuccess, onError)->{
new SetAccountMuted(account.id, true, muteDuration.get().getSeconds(), muteNotifications.get())
.setCallback(new Callback<>(){ .setCallback(new Callback<>(){
@Override @Override
public void onSuccess(Relationship result){ public void onSuccess(Relationship result){
@@ -620,7 +622,7 @@ public class UiUtils {
.exec(accountID); .exec(accountID);
}).show(); }).show();
}else{ }else{
new SetAccountMuted(account.id, false, 0) new SetAccountMuted(account.id, false, 0, false)
.setCallback(new Callback<>(){ .setCallback(new Callback<>(){
@Override @Override
public void onSuccess(Relationship result){ public void onSuccess(Relationship result){

View File

@@ -119,4 +119,5 @@
<!-- <string name="mo_mutes">Mutes</string>--> <!-- <string name="mo_mutes">Mutes</string>-->
<string name="mo_blocked_accounts">Blocked accounts</string> <string name="mo_blocked_accounts">Blocked accounts</string>
<!-- <string name="mo_blocks">Blocks</string>--> <!-- <string name="mo_blocks">Blocks</string>-->
<string name="mo_mute_notifications">Hide notifications from this user?</string>
</resources> </resources>