Hide option to mute own domain from account profile page (it is a no-op). (#3937)

Muting your own server domain is a no-op. Check for this case, and remove the "mute" menu item if true.

Fixes #3798
This commit is contained in:
Angelo Suzuki 2023-08-19 14:17:04 +02:00 committed by GitHub
parent b6102a755a
commit c7ffc6ad93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 7 deletions

View File

@ -772,13 +772,16 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvide
loadedAccount?.let { loadedAccount -> loadedAccount?.let { loadedAccount ->
val muteDomain = menu.findItem(R.id.action_mute_domain) val muteDomain = menu.findItem(R.id.action_mute_domain)
domain = getDomain(loadedAccount.url) domain = getDomain(loadedAccount.url)
if (domain.isEmpty()) { when {
// If we can't get the domain, there's no way we can mute it anyway... // If we can't get the domain, there's no way we can mute it anyway...
// If the account is from our own domain, muting it is no-op
domain.isEmpty() || viewModel.isFromOwnDomain -> {
menu.removeItem(R.id.action_mute_domain) menu.removeItem(R.id.action_mute_domain)
} else { }
if (blockingDomain) { blockingDomain -> {
muteDomain.title = getString(R.string.action_unmute_domain, domain) muteDomain.title = getString(R.string.action_unmute_domain, domain)
} else { }
else -> {
muteDomain.title = getString(R.string.action_mute_domain, domain) muteDomain.title = getString(R.string.action_mute_domain, domain)
} }
} }

View File

@ -19,6 +19,7 @@ import com.keylesspalace.tusky.util.Error
import com.keylesspalace.tusky.util.Loading import com.keylesspalace.tusky.util.Loading
import com.keylesspalace.tusky.util.Resource import com.keylesspalace.tusky.util.Resource
import com.keylesspalace.tusky.util.Success import com.keylesspalace.tusky.util.Success
import com.keylesspalace.tusky.util.getDomain
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -27,7 +28,7 @@ import javax.inject.Inject
class AccountViewModel @Inject constructor( class AccountViewModel @Inject constructor(
private val mastodonApi: MastodonApi, private val mastodonApi: MastodonApi,
private val eventHub: EventHub, private val eventHub: EventHub,
private val accountManager: AccountManager accountManager: AccountManager
) : ViewModel() { ) : ViewModel() {
val accountData = MutableLiveData<Resource<Account>>() val accountData = MutableLiveData<Resource<Account>>()
@ -41,8 +42,13 @@ class AccountViewModel @Inject constructor(
lateinit var accountId: String lateinit var accountId: String
var isSelf = false var isSelf = false
/** True if the viewed account has the same domain as the active account */
var isFromOwnDomain = false
private var noteUpdateJob: Job? = null private var noteUpdateJob: Job? = null
private val activeAccount = accountManager.activeAccount!!
init { init {
viewModelScope.launch { viewModelScope.launch {
eventHub.events.collect { event -> eventHub.events.collect { event ->
@ -65,6 +71,8 @@ class AccountViewModel @Inject constructor(
accountData.postValue(Success(account)) accountData.postValue(Success(account))
isDataLoading = false isDataLoading = false
isRefreshing.postValue(false) isRefreshing.postValue(false)
isFromOwnDomain = getDomain(account.url) == activeAccount.domain
}, },
{ t -> { t ->
Log.w(TAG, "failed obtaining account", t) Log.w(TAG, "failed obtaining account", t)
@ -298,7 +306,7 @@ class AccountViewModel @Inject constructor(
fun setAccountInfo(accountId: String) { fun setAccountInfo(accountId: String) {
this.accountId = accountId this.accountId = accountId
this.isSelf = accountManager.activeAccount?.accountId == accountId this.isSelf = activeAccount.accountId == accountId
reload(false) reload(false)
} }