correctly update the menu when muting domains (#1848)

main
Konrad Pozniak 4 years ago committed by Alibek Omarov
parent da110b8fc0
commit 7b95236961
  1. 16
      app/src/main/java/com/keylesspalace/tusky/AccountActivity.kt
  2. 3
      app/src/main/java/com/keylesspalace/tusky/entity/Relationship.kt
  3. 29
      app/src/main/java/com/keylesspalace/tusky/viewmodel/AccountViewModel.kt
  4. 1
      app/src/main/res/values/strings.xml

@ -83,6 +83,7 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI
private var followState: FollowState = FollowState.NOT_FOLLOWING private var followState: FollowState = FollowState.NOT_FOLLOWING
private var blocking: Boolean = false private var blocking: Boolean = false
private var muting: Boolean = false private var muting: Boolean = false
private var blockingDomain: Boolean = false
private var showingReblogs: Boolean = false private var showingReblogs: Boolean = false
private var subscribing: Boolean = false private var subscribing: Boolean = false
private var loadedAccount: Account? = null private var loadedAccount: Account? = null
@ -543,6 +544,7 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI
} }
blocking = relation.blocking blocking = relation.blocking
muting = relation.muting muting = relation.muting
blockingDomain = relation.blockingDomain
showingReblogs = relation.showingReblogs showingReblogs = relation.showingReblogs
accountFollowsYouTextView.visible(relation.followedBy) accountFollowsYouTextView.visible(relation.followedBy)
@ -664,10 +666,14 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI
if (domain.isEmpty()) { if (domain.isEmpty()) {
// 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...
menu.removeItem(R.id.action_mute_domain) menu.removeItem(R.id.action_mute_domain)
} else {
if (blockingDomain) {
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)
} }
} }
}
if (followState == FollowState.FOLLOWING) { if (followState == FollowState.FOLLOWING) {
val showReblogs = menu.findItem(R.id.action_show_reblogs) val showReblogs = menu.findItem(R.id.action_show_reblogs)
@ -710,13 +716,17 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI
.show() .show()
} }
private fun showMuteDomainWarningDialog(instance: String) { private fun toggleBlockDomain(instance: String) {
if(blockingDomain) {
viewModel.unblockDomain(instance)
} else {
AlertDialog.Builder(this) AlertDialog.Builder(this)
.setMessage(getString(R.string.mute_domain_warning, instance)) .setMessage(getString(R.string.mute_domain_warning, instance))
.setPositiveButton(getString(R.string.mute_domain_warning_dialog_ok)) { _, _ -> viewModel.muteDomain(instance) } .setPositiveButton(getString(R.string.mute_domain_warning_dialog_ok)) { _, _ -> viewModel.blockDomain(instance) }
.setNegativeButton(android.R.string.cancel, null) .setNegativeButton(android.R.string.cancel, null)
.show() .show()
} }
}
private fun toggleBlock() { private fun toggleBlock() {
if (viewModel.relationshipData.value?.data?.blocking != true) { if (viewModel.relationshipData.value?.data?.blocking != true) {
@ -796,7 +806,7 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI
return true return true
} }
R.id.action_mute_domain -> { R.id.action_mute_domain -> {
showMuteDomainWarningDialog(domain) toggleBlockDomain(domain)
return true return true
} }
R.id.action_show_reblogs -> { R.id.action_show_reblogs -> {

@ -25,5 +25,6 @@ data class Relationship (
val muting: Boolean, val muting: Boolean,
val requested: Boolean, val requested: Boolean,
@SerializedName("showing_reblogs") val showingReblogs: Boolean, @SerializedName("showing_reblogs") val showingReblogs: Boolean,
val subscribing: Boolean? = null // Pleroma extension val subscribing: Boolean? = null, // Pleroma extension
@SerializedName("domain_blocking") val blockingDomain: Boolean
) )

@ -164,18 +164,41 @@ class AccountViewModel @Inject constructor(
} }
} }
fun muteDomain(instance: String) { fun blockDomain(instance: String) {
mastodonApi.blockDomain(instance).enqueue(object: Callback<Any> { mastodonApi.blockDomain(instance).enqueue(object: Callback<Any> {
override fun onResponse(call: Call<Any>, response: Response<Any>) { override fun onResponse(call: Call<Any>, response: Response<Any>) {
if (response.isSuccessful) { if (response.isSuccessful) {
eventHub.dispatch(DomainMuteEvent(instance)) eventHub.dispatch(DomainMuteEvent(instance))
val relation = relationshipData.value?.data
if(relation != null) {
relationshipData.postValue(Success(relation.copy(blockingDomain = true)))
}
} else {
Log.e(TAG, "Error muting %s".format(instance))
}
}
override fun onFailure(call: Call<Any>, t: Throwable) {
Log.e(TAG, "Error muting %s".format(instance), t)
}
})
}
fun unblockDomain(instance: String) {
mastodonApi.unblockDomain(instance).enqueue(object: Callback<Any> {
override fun onResponse(call: Call<Any>, response: Response<Any>) {
if (response.isSuccessful) {
val relation = relationshipData.value?.data
if(relation != null) {
relationshipData.postValue(Success(relation.copy(blockingDomain = false)))
}
} else { } else {
Log.e(TAG, String.format("Error muting %s", instance)) Log.e(TAG, "Error unmuting %s".format(instance))
} }
} }
override fun onFailure(call: Call<Any>, t: Throwable) { override fun onFailure(call: Call<Any>, t: Throwable) {
Log.e(TAG, String.format("Error muting %s", instance), t) Log.e(TAG, "Error unmuting %s".format(instance), t)
} }
}) })
} }

@ -109,6 +109,7 @@
<string name="action_mute">Mute</string> <string name="action_mute">Mute</string>
<string name="action_unmute">Unmute</string> <string name="action_unmute">Unmute</string>
<string name="action_mute_domain">Mute %s</string> <string name="action_mute_domain">Mute %s</string>
<string name="action_unmute_domain">Unmute %s</string>
<string name="action_mute_conversation">Mute conversation</string> <string name="action_mute_conversation">Mute conversation</string>
<string name="action_unmute_conversation">Unmute conversation</string> <string name="action_unmute_conversation">Unmute conversation</string>
<string name="action_mention">Mention</string> <string name="action_mention">Mention</string>

Loading…
Cancel
Save