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 008b171a76..4ce91c9e98 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 @@ -868,6 +868,9 @@ class ConversationSettingsFragment : 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/groups/memberlabel/MemberLabelFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/memberlabel/MemberLabelFragment.kt index 6a4c61a533..0ff98fcca2 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 @@ -122,6 +122,7 @@ 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.showAboutOverrideSheet) { if (uiState.showAboutOverrideSheet) { @@ -142,7 +143,10 @@ class MemberLabelFragment : ComposeFragment(), ReactWithAnyEmojiBottomSheetDialo viewModel.onSaveStateConsumed() } - is SaveState.InsufficientRights -> throw IllegalStateException("User does not have permission to set member label.") + is SaveState.InsufficientRights -> { + snackbarHostState.showSnackbar(noPermissionErrorMessage) + viewModel.onSaveStateConsumed() + } 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 8dfcbf357d..4c871e79d7 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 @@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.conversation.colors.NameColor import org.thoughtcrime.securesms.database.GroupTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.AppDependencies +import org.thoughtcrime.securesms.groups.GroupAccessControl import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.groups.GroupManager import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -106,7 +107,13 @@ class MemberLabelRepository private constructor( 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.memberLevel(recipient).isInGroup + + val memberLevel = groupRecord.memberLevel(recipient) + if (groupRecord.memberLabelAccessControl == GroupAccessControl.ONLY_ADMINS) { + memberLevel == GroupTable.MemberLevel.ADMINISTRATOR + } else { + memberLevel.isInGroup + } } /** diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 41101658d0..8c49d2dd17 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -9537,6 +9537,8 @@ 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