forked from mirrors/Fedilab
Allow to mute/unmute from profile
This commit is contained in:
parent
5e11438f0c
commit
93fce1f56e
7 changed files with 145 additions and 0 deletions
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -46,6 +46,10 @@
|
|||
android:id="@+id/action_mute"
|
||||
android:title="@string/more_action_1"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_mute_home"
|
||||
android:title="@string/mute_home"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_timed_mute"
|
||||
android:title="@string/more_action_8"
|
||||
|
|
|
@ -2059,4 +2059,6 @@
|
|||
<string name="pin_tag">Pin tag</string>
|
||||
<string name="unpin_tag">Unpin tag</string>
|
||||
<string name="unfollow_tag">Unfollow tag</string>
|
||||
<string name="mute_home">Mute for home</string>
|
||||
<string name="unmute_home">Unmute for home</string>
|
||||
</resources>
|
Loading…
Reference in a new issue