diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt index 08e821e4f1..008b171a76 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt @@ -861,17 +861,13 @@ class ConversationSettingsFragment : ) if (RemoteConfig.sendMemberLabels) { - val canSetMemberLabel = groupState.canSetOwnMemberLabel && !state.isDeprecatedOrUnregistered clickPref( title = DSLSettingsText.from(R.string.ConversationSettingsFragment__group_member_label), icon = DSLSettingsIcon.from(R.drawable.symbol_tag_24), - isEnabled = canSetMemberLabel, + isEnabled = groupState.canSetOwnMemberLabel && !state.isDeprecatedOrUnregistered, onClick = { val action = ConversationSettingsFragmentDirections.actionConversationSettingsFragmentToMemberLabelFragment(groupState.groupId) navController.safeNavigate(action) - }, - onDisabledClicked = { - Snackbar.make(requireView(), R.string.GroupMemberLabel__error_no_edit_permission, Snackbar.LENGTH_SHORT).show() } ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt index cf38d44e21..07d00036bb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt @@ -522,8 +522,8 @@ sealed class ConversationSettingsViewModel( } } - private fun loadCanSetMemberLabel(v2GroupId: GroupId.V2) = viewModelScope.launch(SignalDispatchers.IO) { - val canSetLabel = MemberLabelRepository.instance.canSetLabel(v2GroupId, Recipient.self()) + private fun loadCanSetMemberLabel(groupId: GroupId.V2) = viewModelScope.launch(SignalDispatchers.IO) { + val canSetLabel = MemberLabelRepository.instance.canSetLabel(groupId, Recipient.self()) store.update { it.copy( specificSettingsState = it.requireGroupSettingsState().copy( diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt index c069f49366..823dcbf2bb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -142,10 +142,10 @@ import org.thoughtcrime.securesms.revealable.ViewOnceUtil import org.thoughtcrime.securesms.sms.GroupV2UpdateMessageUtil import org.thoughtcrime.securesms.stories.Stories.isFeatureEnabled import org.thoughtcrime.securesms.util.JsonUtils -import org.thoughtcrime.securesms.util.SignalTrace import org.thoughtcrime.securesms.util.MediaUtil import org.thoughtcrime.securesms.util.MessageConstraintsUtil import org.thoughtcrime.securesms.util.RemoteConfig +import org.thoughtcrime.securesms.util.SignalTrace import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.isStory import org.whispersystems.signalservice.internal.push.SyncMessage diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt index d9e080c5c2..608c196da9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt @@ -68,9 +68,9 @@ import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.recipients.RecipientUtil import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.thoughtcrime.securesms.util.ConversationUtil -import org.thoughtcrime.securesms.util.SignalTrace import org.thoughtcrime.securesms.util.JsonUtils import org.thoughtcrime.securesms.util.JsonUtils.SaneJSONObject +import org.thoughtcrime.securesms.util.SignalTrace import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.isPoll import org.thoughtcrime.securesms.util.isScheduled diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/memberlabel/MemberLabelFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/memberlabel/MemberLabelFragment.kt index f9f427bb12..8f007e590f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/memberlabel/MemberLabelFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/memberlabel/MemberLabelFragment.kt @@ -107,7 +107,6 @@ class MemberLabelFragment : ComposeFragment(), ReactWithAnyEmojiBottomSheetDialo } val networkErrorMessage = stringResource(R.string.GroupMemberLabel__error_cant_save_no_network) - val noPermissionErrorMessage = stringResource(R.string.GroupMemberLabel__error_no_edit_permission) LaunchedEffect(uiState.saveState) { when (uiState.saveState) { @@ -121,10 +120,7 @@ class MemberLabelFragment : ComposeFragment(), ReactWithAnyEmojiBottomSheetDialo viewModel.onSaveStateConsumed() } - is SaveState.InsufficientRights -> { - snackbarHostState.showSnackbar(noPermissionErrorMessage) - viewModel.onSaveStateConsumed() - } + is SaveState.InsufficientRights -> throw IllegalStateException("User does not have permission to set member label.") is SaveState.InProgress, null -> Unit } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/memberlabel/MemberLabelRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/memberlabel/MemberLabelRepository.kt index 072af073bd..fae853669e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/memberlabel/MemberLabelRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/memberlabel/MemberLabelRepository.kt @@ -94,12 +94,12 @@ class MemberLabelRepository private constructor( } /** - * Checks whether the [Recipient] has permission to set their member label in the given group. + * Checks whether [recipient] has permission to set their member label in the given group. */ suspend fun canSetLabel(groupId: GroupId.V2, recipient: Recipient): Boolean = withContext(Dispatchers.IO) { if (!RemoteConfig.sendMemberLabels) return@withContext false val groupRecord = groupsTable.getGroup(groupId).orNull() ?: return@withContext false - groupRecord.attributesAccessControl.allows(groupRecord.memberLevel(recipient)) + groupRecord.memberLevel(recipient).isInGroup } /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt b/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt index 9a12e02ee5..ae5bae7ba2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt @@ -1252,7 +1252,7 @@ object RemoteConfig { @JvmStatic @get:JvmName("sendMemberLabels") val sendMemberLabels: Boolean by remoteBoolean( - key = "android.sendMemberLabels.2", + key = "android.sendMemberLabels.3", defaultValue = false, hotSwappable = true ) diff --git a/app/src/main/res/values/light_colors.xml b/app/src/main/res/values/light_colors.xml index 8c1a4cece0..7fb8c14c03 100644 --- a/app/src/main/res/values/light_colors.xml +++ b/app/src/main/res/values/light_colors.xml @@ -179,7 +179,7 @@ @color/signal_colorOnCustom @color/signal_colorOnSurface @color/signal_colorOnSurface_8 - @color/transparent_white_80 + @color/signal_colorOnSurface_8 @color/transparent_white_36 @color/transparent_white_36 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8e5b5af9bf..b589e9f926 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -9471,8 +9471,6 @@ Add a member label to describe yourself or your role in this group. Labels are only visible within this group. Couldn\'t save label. Check your network and try again. - - Only admins can add member labels in this group. Select emoji