mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 00:59:49 +01:00
Show warning when group changes would clear member labels.
This commit is contained in:
@@ -4,4 +4,5 @@ import org.thoughtcrime.securesms.groups.ui.GroupChangeFailureReason
|
||||
|
||||
sealed class PermissionsSettingsEvents {
|
||||
class GroupChangeError(val reason: GroupChangeFailureReason) : PermissionsSettingsEvents()
|
||||
object ShowMemberLabelsWillBeRemovedWarning : PermissionsSettingsEvents()
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.components.settings.conversation.permissions
|
||||
import android.widget.Toast
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.fragment.app.viewModels
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.settings.DSLConfiguration
|
||||
import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment
|
||||
@@ -39,6 +40,7 @@ class PermissionsSettingsFragment : DSLSettingsFragment(
|
||||
viewModel.events.observe(viewLifecycleOwner) { event ->
|
||||
when (event) {
|
||||
is PermissionsSettingsEvents.GroupChangeError -> handleGroupChangeError(event)
|
||||
is PermissionsSettingsEvents.ShowMemberLabelsWillBeRemovedWarning -> showMemberLabelsWillBeRemovedDialog()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -94,13 +96,26 @@ class PermissionsSettingsFragment : DSLSettingsFragment(
|
||||
selected = getSelected(state.nonAdminCanSetMemberLabel),
|
||||
confirmAction = true,
|
||||
onSelected = { selectedIndex ->
|
||||
viewModel.setNonAdminCanSetMemberLabel(selectedIndex == 1)
|
||||
if (selectedIndex >= 0) {
|
||||
viewModel.onMemberLabelPermissionChangeRequested(nonAdminCanSetMemberLabel = selectedIndex == 1)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun showMemberLabelsWillBeRemovedDialog() {
|
||||
MaterialAlertDialogBuilder(requireContext())
|
||||
.setTitle(R.string.PermissionsSettingsFragment__member_labels_will_be_cleared_title)
|
||||
.setMessage(R.string.PermissionsSettingsFragment__member_labels_will_be_cleared_body)
|
||||
.setPositiveButton(R.string.PermissionsSettingsFragment__change_permission) { _, _ ->
|
||||
viewModel.onRestrictMemberLabelsToAdminsConfirmed()
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show()
|
||||
}
|
||||
|
||||
@StringRes
|
||||
private fun getSelected(isNonAdminAllowed: Boolean): Int {
|
||||
return if (isNonAdminAllowed) {
|
||||
|
||||
@@ -3,6 +3,9 @@ package org.thoughtcrime.securesms.components.settings.conversation.permissions
|
||||
import android.content.Context
|
||||
import org.signal.core.util.concurrent.SignalExecutors
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.signal.core.util.orNull
|
||||
import org.thoughtcrime.securesms.database.GroupTable
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.groups.GroupAccessControl
|
||||
import org.thoughtcrime.securesms.groups.GroupChangeException
|
||||
import org.thoughtcrime.securesms.groups.GroupId
|
||||
@@ -13,7 +16,10 @@ import java.io.IOException
|
||||
|
||||
private val TAG = Log.tag(PermissionsSettingsRepository::class.java)
|
||||
|
||||
class PermissionsSettingsRepository(private val context: Context) {
|
||||
class PermissionsSettingsRepository(
|
||||
private val context: Context,
|
||||
private val groupTable: GroupTable = SignalDatabase.groups
|
||||
) {
|
||||
|
||||
fun applyMembershipRightsChange(groupId: GroupId, newRights: GroupAccessControl, error: GroupChangeErrorCallback) {
|
||||
SignalExecutors.UNBOUNDED.execute {
|
||||
@@ -57,6 +63,12 @@ class PermissionsSettingsRepository(private val context: Context) {
|
||||
}
|
||||
}
|
||||
|
||||
fun hasNonAdminMembersWithLabels(groupId: GroupId): Boolean {
|
||||
val v2GroupId = groupId.v2OrNull() ?: return false
|
||||
val group = groupTable.getGroup(v2GroupId).orNull() ?: return false
|
||||
return group.requireV2GroupProperties().nonAdminMembersWithLabels().isNotEmpty()
|
||||
}
|
||||
|
||||
fun applyMemberLabelRightsChange(groupId: GroupId, newRights: GroupAccessControl, errorCallback: GroupChangeErrorCallback) {
|
||||
SignalExecutors.UNBOUNDED.execute {
|
||||
try {
|
||||
|
||||
@@ -11,11 +11,11 @@ import org.thoughtcrime.securesms.util.livedata.Store
|
||||
|
||||
class PermissionsSettingsViewModel(
|
||||
private val groupId: GroupId,
|
||||
private val repository: PermissionsSettingsRepository
|
||||
private val repository: PermissionsSettingsRepository,
|
||||
liveGroup: LiveGroup = LiveGroup(groupId)
|
||||
) : ViewModel() {
|
||||
|
||||
private val store = Store(PermissionsSettingsState())
|
||||
private val liveGroup = LiveGroup(groupId)
|
||||
private val internalEvents = SingleLiveEvent<PermissionsSettingsEvents>()
|
||||
|
||||
val state: LiveData<PermissionsSettingsState> = store.stateLiveData
|
||||
@@ -61,7 +61,17 @@ class PermissionsSettingsViewModel(
|
||||
}
|
||||
}
|
||||
|
||||
fun setNonAdminCanSetMemberLabel(nonAdminCanSetMemberLabel: Boolean) {
|
||||
fun onMemberLabelPermissionChangeRequested(nonAdminCanSetMemberLabel: Boolean) {
|
||||
if (!nonAdminCanSetMemberLabel && repository.hasNonAdminMembersWithLabels(groupId)) {
|
||||
internalEvents.postValue(PermissionsSettingsEvents.ShowMemberLabelsWillBeRemovedWarning)
|
||||
} else {
|
||||
setNonAdminCanSetMemberLabel(nonAdminCanSetMemberLabel)
|
||||
}
|
||||
}
|
||||
|
||||
fun onRestrictMemberLabelsToAdminsConfirmed() = setNonAdminCanSetMemberLabel(false)
|
||||
|
||||
private fun setNonAdminCanSetMemberLabel(nonAdminCanSetMemberLabel: Boolean) {
|
||||
repository.applyMemberLabelRightsChange(
|
||||
groupId = groupId,
|
||||
newRights = nonAdminCanSetMemberLabel.asGroupAccessControl()
|
||||
|
||||
Reference in New Issue
Block a user