Commit 93fce1f5 authored by Thomas's avatar Thomas
Browse files

Allow to mute/unmute from profile

parent 5e11438f
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ package app.fedilab.android.activities;


import static app.fedilab.android.BaseMainActivity.currentAccount;
import static app.fedilab.android.ui.drawer.StatusAdapter.sendAction;

import android.content.BroadcastReceiver;
import android.content.ClipData;
@@ -117,6 +118,7 @@ public class ProfileActivity extends BaseActivity {
    private String mention_str;
    private WellKnownNodeinfo.NodeInfo nodeInfo;
    private boolean checkRemotely;
    private boolean homeMuted;

    private final BroadcastReceiver broadcast_data = new BroadcastReceiver() {
        @Override
@@ -144,6 +146,7 @@ public class ProfileActivity extends BaseActivity {
        Bundle b = getIntent().getExtras();
        binding.accountFollow.setEnabled(false);
        checkRemotely = false;
        homeMuted = false;
        if (b != null) {
            account = (Account) b.getSerializable(Helper.ARG_ACCOUNT);
            account_id = b.getString(Helper.ARG_USER_ID, null);
@@ -185,6 +188,8 @@ public class ProfileActivity extends BaseActivity {
            Toasty.error(ProfileActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show();
            finish();
        }
        //Check if account is homeMuted
        accountsVM.isMuted(currentAccount, account).observe(ProfileActivity.this, account1 -> homeMuted = account1 != null);
        LocalBroadcastManager.getInstance(ProfileActivity.this).registerReceiver(broadcast_data, new IntentFilter(Helper.BROADCAST_DATA));
    }

@@ -685,9 +690,11 @@ public class ProfileActivity extends BaseActivity {
                menu.findItem(R.id.action_endorse).setVisible(false);
                menu.findItem(R.id.action_direct_message).setVisible(false);
                menu.findItem(R.id.action_add_to_list).setVisible(false);
                menu.findItem(R.id.action_mute_home).setVisible(false);
            } else {
                menu.findItem(R.id.action_block).setVisible(true);
                menu.findItem(R.id.action_mute).setVisible(true);
                menu.findItem(R.id.action_mute_home).setVisible(true);
                menu.findItem(R.id.action_timed_mute).setVisible(true);
                menu.findItem(R.id.action_mention).setVisible(true);
            }
@@ -696,6 +703,7 @@ public class ProfileActivity extends BaseActivity {
                if (!relationship.following) {
                    menu.findItem(R.id.action_hide_boost).setVisible(false);
                    menu.findItem(R.id.action_endorse).setVisible(false);
                    menu.findItem(R.id.action_mute_home).setVisible(false);
                }
                if (relationship.blocking) {
                    menu.findItem(R.id.action_block).setTitle(R.string.action_unblock);
@@ -713,6 +721,11 @@ public class ProfileActivity extends BaseActivity {
                } else {
                    menu.findItem(R.id.action_hide_boost).setTitle(getString(R.string.show_boost, account.username));
                }
                if (homeMuted) {
                    menu.findItem(R.id.action_mute_home).setTitle(getString(R.string.unmute_home));
                } else {
                    menu.findItem(R.id.action_mute_home).setTitle(getString(R.string.mute_home));
                }
            }
        }
        return true;
@@ -989,6 +1002,27 @@ public class ProfileActivity extends BaseActivity {
                });
                builderInner.show();
            }
        } else if (itemId == R.id.action_mute_home) {
            AlertDialog.Builder builderInner = new AlertDialog.Builder(ProfileActivity.this, Helper.dialogStyle());
            builderInner.setMessage(account.acct);
            builderInner.setNeutralButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
            if (homeMuted) {
                builderInner.setTitle(R.string.unmute_home);
                builderInner.setPositiveButton(R.string.action_unmute, (dialog, which) -> accountsVM.unmuteHome(currentAccount, account)
                        .observe(ProfileActivity.this, account -> {
                            homeMuted = false;
                            Toasty.info(ProfileActivity.this, getString(R.string.toast_unmute), Toasty.LENGTH_LONG).show();
                        }));
            } else {
                builderInner.setTitle(R.string.mute_home);
                builderInner.setPositiveButton(R.string.action_mute, (dialog, which) -> accountsVM.muteHome(currentAccount, account)
                        .observe(ProfileActivity.this, account -> {
                            homeMuted = true;
                            sendAction(ProfileActivity.this, Helper.ARG_STATUS_ACCOUNT_ID_DELETED, null, account.id);
                            Toasty.info(ProfileActivity.this, getString(R.string.toast_mute), Toasty.LENGTH_LONG).show();
                        }));
            }
            builderInner.show();
        } else if (itemId == R.id.action_timed_mute) {
            MastodonHelper.scheduleBoost(ProfileActivity.this, MastodonHelper.ScheduleType.TIMED_MUTED, null, account, rs -> {
                this.relationship = rs;
+22 −0
Original line number Diff line number Diff line
@@ -180,6 +180,28 @@ public class MutedAccounts implements Serializable {
        }
    }

    /**
     * Check if an account is muted in db
     *
     * @param forAccount {@link BaseAccount}
     * @param target     {@link Account}
     * @return MutedAccounts - {@link MutedAccounts}
     */
    public boolean isMuted(BaseAccount forAccount, Account target) throws DBException {
        if (db == null) {
            throw new DBException("db is null. Wrong initialization.");
        }
        MutedAccounts mutedAccounts = getMutedAccount(forAccount);
        if (mutedAccounts != null && mutedAccounts.accounts != null) {
            for (Account account : mutedAccounts.accounts) {
                if (account.id.equals(target.id)) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * Returns the MutedAccounts for an account
     *
+11 −0
Original line number Diff line number Diff line
@@ -1655,6 +1655,17 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
                                Toasty.info(context, context.getString(R.string.toast_mute), Toasty.LENGTH_LONG).show();
                            }));
                    builderInner.show();
                } else if (itemId == R.id.action_mute_home) {
                    AlertDialog.Builder builderInner = new AlertDialog.Builder(context, Helper.dialogStyle());
                    builderInner.setTitle(R.string.mute_home);
                    builderInner.setMessage(statusToDeal.account.acct);
                    builderInner.setNeutralButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
                    builderInner.setPositiveButton(R.string.action_mute, (dialog, which) -> accountsVM.muteHome(currentAccount, statusToDeal.account)
                            .observe((LifecycleOwner) context, account -> {
                                sendAction(context, Helper.ARG_STATUS_ACCOUNT_ID_DELETED, null, statusToDeal.account.id);
                                Toasty.info(context, context.getString(R.string.toast_mute), Toasty.LENGTH_LONG).show();
                            }));
                    builderInner.show();
                } else if (itemId == R.id.action_mute_conversation) {
                    if (statusToDeal.muted) {
                        statusesVM.unMute(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id).observe((LifecycleOwner) context, status1 -> Toasty.info(context, context.getString(R.string.toast_unmute_conversation)).show());
+67 −0
Original line number Diff line number Diff line
@@ -52,7 +52,10 @@ import app.fedilab.android.client.entities.api.Suggestion;
import app.fedilab.android.client.entities.api.Suggestions;
import app.fedilab.android.client.entities.api.Tag;
import app.fedilab.android.client.entities.api.Token;
import app.fedilab.android.client.entities.app.BaseAccount;
import app.fedilab.android.client.entities.app.MutedAccounts;
import app.fedilab.android.client.entities.app.StatusCache;
import app.fedilab.android.exception.DBException;
import app.fedilab.android.helper.Helper;
import app.fedilab.android.helper.MastodonHelper;
import okhttp3.MultipartBody;
@@ -748,6 +751,70 @@ public class AccountsVM extends AndroidViewModel {
        return relationShipMutableLiveData;
    }


    /**
     * Mute the given account in db
     *
     * @return {@link LiveData} containing the {@link Account} to the given account
     */
    public LiveData<Account> isMuted(@NonNull BaseAccount forAccount, @NonNull Account target) {
        accountMutableLiveData = new MutableLiveData<>();
        new Thread(() -> {
            boolean isMuted = false;
            try {
                isMuted = new MutedAccounts(getApplication().getApplicationContext()).isMuted(forAccount, target);
            } catch (DBException e) {
                e.printStackTrace();
            }
            Handler mainHandler = new Handler(Looper.getMainLooper());
            boolean finalIsMuted = isMuted;
            Runnable myRunnable = () -> accountMutableLiveData.setValue(finalIsMuted ? target : null);
            mainHandler.post(myRunnable);
        }).start();
        return accountMutableLiveData;
    }

    /**
     * Mute the given account in db
     *
     * @return {@link LiveData} containing the {@link Account} to the given account
     */
    public LiveData<Account> muteHome(@NonNull BaseAccount forAccount, @NonNull Account target) {
        accountMutableLiveData = new MutableLiveData<>();
        new Thread(() -> {

            try {
                new MutedAccounts(getApplication().getApplicationContext()).muteAccount(forAccount, target);
            } catch (DBException e) {
                e.printStackTrace();
            }
            Handler mainHandler = new Handler(Looper.getMainLooper());
            Runnable myRunnable = () -> accountMutableLiveData.setValue(target);
            mainHandler.post(myRunnable);
        }).start();
        return accountMutableLiveData;
    }

    /**
     * Unmute the given account in db
     *
     * @return {@link LiveData} containing the {@link Account} to the given account
     */
    public LiveData<Account> unmuteHome(@NonNull BaseAccount forAccount, @NonNull Account target) {
        accountMutableLiveData = new MutableLiveData<>();
        new Thread(() -> {
            try {
                new MutedAccounts(getApplication().getApplicationContext()).unMuteAccount(forAccount, target);
            } catch (DBException e) {
                e.printStackTrace();
            }
            Handler mainHandler = new Handler(Looper.getMainLooper());
            Runnable myRunnable = () -> accountMutableLiveData.setValue(target);
            mainHandler.post(myRunnable);
        }).start();
        return accountMutableLiveData;
    }

    /**
     * Unmute the given account.
     *
+5 −0
Original line number Diff line number Diff line
@@ -16,6 +16,11 @@
        android:icon="@drawable/ic_baseline_open_with_24"
        android:title="@string/action_open_in_web"
        app:showAsAction="never" />
    <item
        android:id="@+id/action_mute_home"
        android:icon="@drawable/ic_baseline_volume_mute_24"
        android:title="@string/mute_home"
        app:showAsAction="never" />
    <item
        android:id="@+id/action_mute"
        android:icon="@drawable/ic_baseline_volume_mute_24"
Loading