Confirm blocks and mutes from timelines (#1740)
* Add preference for confirming blocks and mutes from timelines Implements #1737 * Apply code review feedback
This commit is contained in:
parent
1b476c790a
commit
91263eed8b
5 changed files with 66 additions and 7 deletions
|
@ -681,6 +681,30 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun toggleBlock() {
|
||||||
|
if (viewModel.relationshipData.value?.data?.blocking != true) {
|
||||||
|
AlertDialog.Builder(this)
|
||||||
|
.setMessage(getString(R.string.dialog_block_warning, loadedAccount?.username))
|
||||||
|
.setPositiveButton(android.R.string.ok) { _, _ -> viewModel.changeBlockState() }
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.show()
|
||||||
|
} else {
|
||||||
|
viewModel.changeBlockState()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun toggleMute() {
|
||||||
|
if (viewModel.relationshipData.value?.data?.muting != true) {
|
||||||
|
AlertDialog.Builder(this)
|
||||||
|
.setMessage(getString(R.string.dialog_mute_warning, loadedAccount?.username))
|
||||||
|
.setPositiveButton(android.R.string.ok) { _, _ -> viewModel.changeMuteState() }
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.show()
|
||||||
|
} else {
|
||||||
|
viewModel.changeMuteState()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun mention() {
|
private fun mention() {
|
||||||
loadedAccount?.let {
|
loadedAccount?.let {
|
||||||
val intent = ComposeActivity.startIntent(this,
|
val intent = ComposeActivity.startIntent(this,
|
||||||
|
@ -727,11 +751,11 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
R.id.action_block -> {
|
R.id.action_block -> {
|
||||||
viewModel.changeBlockState()
|
toggleBlock()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
R.id.action_mute -> {
|
R.id.action_mute -> {
|
||||||
viewModel.changeMuteState()
|
toggleMute()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
R.id.action_mute_domain -> {
|
R.id.action_mute_domain -> {
|
||||||
|
|
|
@ -193,7 +193,7 @@ class SearchViewModel @Inject constructor(
|
||||||
return accountManager.getAllAccountsOrderedByActive()
|
return accountManager.getAllAccountsOrderedByActive()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun muteAcount(accountId: String) {
|
fun muteAccount(accountId: String) {
|
||||||
timelineCases.mute(accountId)
|
timelineCases.mute(accountId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -325,11 +325,11 @@ class SearchStatusesFragment : SearchFragment<Pair<Status, StatusViewData.Concre
|
||||||
return@setOnMenuItemClickListener true
|
return@setOnMenuItemClickListener true
|
||||||
}
|
}
|
||||||
R.id.status_mute -> {
|
R.id.status_mute -> {
|
||||||
viewModel.muteAcount(accountId)
|
onMute(accountId, accountUsername)
|
||||||
return@setOnMenuItemClickListener true
|
return@setOnMenuItemClickListener true
|
||||||
}
|
}
|
||||||
R.id.status_block -> {
|
R.id.status_block -> {
|
||||||
viewModel.blockAccount(accountId)
|
onBlock(accountId, accountUsername)
|
||||||
return@setOnMenuItemClickListener true
|
return@setOnMenuItemClickListener true
|
||||||
}
|
}
|
||||||
R.id.status_report -> {
|
R.id.status_report -> {
|
||||||
|
@ -362,6 +362,22 @@ class SearchStatusesFragment : SearchFragment<Pair<Status, StatusViewData.Concre
|
||||||
popup.show()
|
popup.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun onBlock(accountId: String, accountUsername: String) {
|
||||||
|
AlertDialog.Builder(requireContext())
|
||||||
|
.setMessage(getString(R.string.dialog_block_warning, accountUsername))
|
||||||
|
.setPositiveButton(android.R.string.ok) { _, _ -> viewModel.blockAccount(accountId) }
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onMute(accountId: String, accountUsername: String) {
|
||||||
|
AlertDialog.Builder(requireContext())
|
||||||
|
.setMessage(getString(R.string.dialog_mute_warning, accountUsername))
|
||||||
|
.setPositiveButton(android.R.string.ok) { _, _ -> viewModel.muteAccount(accountId) }
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
private fun accountIsInMentions(account: AccountEntity?, mentions: Array<Mention>): Boolean {
|
private fun accountIsInMentions(account: AccountEntity?, mentions: Array<Mention>): Boolean {
|
||||||
return mentions.firstOrNull {
|
return mentions.firstOrNull {
|
||||||
account?.username == it.username && account.domain == Uri.parse(it.url)?.host
|
account?.username == it.username && account.domain == Uri.parse(it.url)?.host
|
||||||
|
|
|
@ -39,6 +39,7 @@ import androidx.appcompat.widget.PopupMenu;
|
||||||
import androidx.core.app.ActivityOptionsCompat;
|
import androidx.core.app.ActivityOptionsCompat;
|
||||||
import androidx.core.view.ViewCompat;
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.lifecycle.Lifecycle;
|
import androidx.lifecycle.Lifecycle;
|
||||||
|
import androidx.preference.PreferenceManager;
|
||||||
|
|
||||||
import com.keylesspalace.tusky.BaseActivity;
|
import com.keylesspalace.tusky.BaseActivity;
|
||||||
import com.keylesspalace.tusky.BottomSheetActivity;
|
import com.keylesspalace.tusky.BottomSheetActivity;
|
||||||
|
@ -284,11 +285,11 @@ public abstract class SFragment extends BaseFragment implements Injectable {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case R.id.status_mute: {
|
case R.id.status_mute: {
|
||||||
timelineCases.mute(accountId);
|
onMute(accountId, accountUsername);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case R.id.status_block: {
|
case R.id.status_block: {
|
||||||
timelineCases.block(accountId);
|
onBlock(accountId, accountUsername);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case R.id.status_report: {
|
case R.id.status_report: {
|
||||||
|
@ -328,6 +329,22 @@ public abstract class SFragment extends BaseFragment implements Injectable {
|
||||||
popup.show();
|
popup.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onMute(String accountId, String accountUsername) {
|
||||||
|
new AlertDialog.Builder(requireContext())
|
||||||
|
.setMessage(getString(R.string.dialog_mute_warning, accountUsername))
|
||||||
|
.setPositiveButton(android.R.string.ok, (__, ___) -> timelineCases.mute(accountId))
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onBlock(String accountId, String accountUsername) {
|
||||||
|
new AlertDialog.Builder(requireContext())
|
||||||
|
.setMessage(getString(R.string.dialog_block_warning, accountUsername))
|
||||||
|
.setPositiveButton(android.R.string.ok, (__, ___) -> timelineCases.block(accountId))
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean accountIsInMentions(AccountEntity account, Status.Mention[] mentions) {
|
private static boolean accountIsInMentions(AccountEntity account, Status.Mention[] mentions) {
|
||||||
if (account == null) {
|
if (account == null) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -196,6 +196,8 @@
|
||||||
<string name="dialog_redraft_toot_warning">Delete and re-draft this toot?</string>
|
<string name="dialog_redraft_toot_warning">Delete and re-draft this toot?</string>
|
||||||
<string name="mute_domain_warning">Are you sure you want to block all of %s? You will not see content from that domain in any public timelines or in your notifications. Your followers from that domain will be removed.</string>
|
<string name="mute_domain_warning">Are you sure you want to block all of %s? You will not see content from that domain in any public timelines or in your notifications. Your followers from that domain will be removed.</string>
|
||||||
<string name="mute_domain_warning_dialog_ok">Hide entire domain</string>
|
<string name="mute_domain_warning_dialog_ok">Hide entire domain</string>
|
||||||
|
<string name="dialog_block_warning">Block @%s?</string>
|
||||||
|
<string name="dialog_mute_warning">Mute @%s?</string>
|
||||||
|
|
||||||
<string name="visibility_public">Public: Post to public timelines</string>
|
<string name="visibility_public">Public: Post to public timelines</string>
|
||||||
<string name="visibility_unlisted">Unlisted: Do not show in public timelines</string>
|
<string name="visibility_unlisted">Unlisted: Do not show in public timelines</string>
|
||||||
|
|
Loading…
Reference in a new issue