mobile: do not show "observer" overlay when user leaves group
This commit is contained in:
parent
37d0bc2f14
commit
c50306709b
@ -496,6 +496,14 @@ data class Chat (
|
|||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val userIsObserver: Boolean get() = when(chatInfo) {
|
||||||
|
is ChatInfo.Group -> {
|
||||||
|
val m = chatInfo.groupInfo.membership
|
||||||
|
m.memberActive && m.memberRole == GroupMemberRole.Observer
|
||||||
|
}
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
|
||||||
val id: String get() = chatInfo.id
|
val id: String get() = chatInfo.id
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
@ -83,6 +83,7 @@ fun TerminalLayout(
|
|||||||
liveMessageAlertShown = SharedPreference(get = { false }, set = {}),
|
liveMessageAlertShown = SharedPreference(get = { false }, set = {}),
|
||||||
needToAllowVoiceToContact = false,
|
needToAllowVoiceToContact = false,
|
||||||
allowedVoiceByPrefs = false,
|
allowedVoiceByPrefs = false,
|
||||||
|
userIsObserver = false,
|
||||||
userCanSend = true,
|
userCanSend = true,
|
||||||
allowVoiceToContact = {},
|
allowVoiceToContact = {},
|
||||||
sendMessage = sendCommand,
|
sendMessage = sendCommand,
|
||||||
|
@ -648,6 +648,7 @@ fun ComposeView(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val userCanSend = rememberUpdatedState(chat.userCanSend)
|
val userCanSend = rememberUpdatedState(chat.userCanSend)
|
||||||
|
val userIsObserver = rememberUpdatedState(chat.userIsObserver)
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
contextItemView()
|
contextItemView()
|
||||||
@ -744,6 +745,7 @@ fun ComposeView(
|
|||||||
needToAllowVoiceToContact,
|
needToAllowVoiceToContact,
|
||||||
allowedVoiceByPrefs,
|
allowedVoiceByPrefs,
|
||||||
allowVoiceToContact = ::allowVoiceToContact,
|
allowVoiceToContact = ::allowVoiceToContact,
|
||||||
|
userIsObserver = userIsObserver.value,
|
||||||
userCanSend = userCanSend.value,
|
userCanSend = userCanSend.value,
|
||||||
sendMessage = {
|
sendMessage = {
|
||||||
sendMessage()
|
sendMessage()
|
||||||
|
@ -60,6 +60,7 @@ fun SendMsgView(
|
|||||||
liveMessageAlertShown: SharedPreference<Boolean>,
|
liveMessageAlertShown: SharedPreference<Boolean>,
|
||||||
needToAllowVoiceToContact: Boolean,
|
needToAllowVoiceToContact: Boolean,
|
||||||
allowedVoiceByPrefs: Boolean,
|
allowedVoiceByPrefs: Boolean,
|
||||||
|
userIsObserver: Boolean,
|
||||||
userCanSend: Boolean,
|
userCanSend: Boolean,
|
||||||
allowVoiceToContact: () -> Unit,
|
allowVoiceToContact: () -> Unit,
|
||||||
sendMessage: () -> Unit,
|
sendMessage: () -> Unit,
|
||||||
@ -75,7 +76,7 @@ fun SendMsgView(
|
|||||||
val showVoiceButton = cs.message.isEmpty() && showVoiceRecordIcon && !composeState.value.editing &&
|
val showVoiceButton = cs.message.isEmpty() && showVoiceRecordIcon && !composeState.value.editing &&
|
||||||
cs.liveMessage == null && (cs.preview is ComposePreview.NoPreview || recState.value is RecordingState.Started)
|
cs.liveMessage == null && (cs.preview is ComposePreview.NoPreview || recState.value is RecordingState.Started)
|
||||||
val showDeleteTextButton = rememberSaveable { mutableStateOf(false) }
|
val showDeleteTextButton = rememberSaveable { mutableStateOf(false) }
|
||||||
NativeKeyboard(composeState, textStyle, showDeleteTextButton, userCanSend, onMessageChange)
|
NativeKeyboard(composeState, textStyle, showDeleteTextButton, userIsObserver, onMessageChange)
|
||||||
// Disable clicks on text field
|
// Disable clicks on text field
|
||||||
if (cs.preview is ComposePreview.VoicePreview || !userCanSend) {
|
if (cs.preview is ComposePreview.VoicePreview || !userCanSend) {
|
||||||
Box(Modifier
|
Box(Modifier
|
||||||
@ -182,7 +183,7 @@ private fun NativeKeyboard(
|
|||||||
composeState: MutableState<ComposeState>,
|
composeState: MutableState<ComposeState>,
|
||||||
textStyle: MutableState<TextStyle>,
|
textStyle: MutableState<TextStyle>,
|
||||||
showDeleteTextButton: MutableState<Boolean>,
|
showDeleteTextButton: MutableState<Boolean>,
|
||||||
userCanSend: Boolean,
|
userIsObserver: Boolean,
|
||||||
onMessageChange: (String) -> Unit
|
onMessageChange: (String) -> Unit
|
||||||
) {
|
) {
|
||||||
val cs = composeState.value
|
val cs = composeState.value
|
||||||
@ -262,16 +263,23 @@ private fun NativeKeyboard(
|
|||||||
}
|
}
|
||||||
showDeleteTextButton.value = it.lineCount >= 4
|
showDeleteTextButton.value = it.lineCount >= 4
|
||||||
}
|
}
|
||||||
if (composeState.value.preview is ComposePreview.VoicePreview || !userCanSend) {
|
if (composeState.value.preview is ComposePreview.VoicePreview) {
|
||||||
Text(
|
ComposeOverlay(R.string.voice_message_send_text, textStyle, padding)
|
||||||
if (composeState.value.preview is ComposePreview.VoicePreview) generalGetString(R.string.voice_message_send_text) else generalGetString(R.string.you_are_observer),
|
} else if (userIsObserver) {
|
||||||
Modifier.padding(padding),
|
ComposeOverlay(R.string.you_are_observer, textStyle, padding)
|
||||||
color = HighOrLowlight,
|
|
||||||
style = textStyle.value.copy(fontStyle = FontStyle.Italic)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun ComposeOverlay(textId: Int, textStyle: MutableState<TextStyle>, padding: PaddingValues) {
|
||||||
|
Text(
|
||||||
|
generalGetString(textId),
|
||||||
|
Modifier.padding(padding),
|
||||||
|
color = HighOrLowlight,
|
||||||
|
style = textStyle.value.copy(fontStyle = FontStyle.Italic)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun BoxScope.DeleteTextButton(composeState: MutableState<ComposeState>) {
|
private fun BoxScope.DeleteTextButton(composeState: MutableState<ComposeState>) {
|
||||||
IconButton(
|
IconButton(
|
||||||
@ -581,6 +589,7 @@ fun PreviewSendMsgView() {
|
|||||||
liveMessageAlertShown = SharedPreference(get = { true }, set = { }),
|
liveMessageAlertShown = SharedPreference(get = { true }, set = { }),
|
||||||
needToAllowVoiceToContact = false,
|
needToAllowVoiceToContact = false,
|
||||||
allowedVoiceByPrefs = true,
|
allowedVoiceByPrefs = true,
|
||||||
|
userIsObserver = false,
|
||||||
userCanSend = true,
|
userCanSend = true,
|
||||||
allowVoiceToContact = {},
|
allowVoiceToContact = {},
|
||||||
sendMessage = {},
|
sendMessage = {},
|
||||||
@ -610,6 +619,7 @@ fun PreviewSendMsgViewEditing() {
|
|||||||
liveMessageAlertShown = SharedPreference(get = { true }, set = { }),
|
liveMessageAlertShown = SharedPreference(get = { true }, set = { }),
|
||||||
needToAllowVoiceToContact = false,
|
needToAllowVoiceToContact = false,
|
||||||
allowedVoiceByPrefs = true,
|
allowedVoiceByPrefs = true,
|
||||||
|
userIsObserver = false,
|
||||||
userCanSend = true,
|
userCanSend = true,
|
||||||
allowVoiceToContact = {},
|
allowVoiceToContact = {},
|
||||||
sendMessage = {},
|
sendMessage = {},
|
||||||
@ -639,6 +649,7 @@ fun PreviewSendMsgViewInProgress() {
|
|||||||
liveMessageAlertShown = SharedPreference(get = { true }, set = { }),
|
liveMessageAlertShown = SharedPreference(get = { true }, set = { }),
|
||||||
needToAllowVoiceToContact = false,
|
needToAllowVoiceToContact = false,
|
||||||
allowedVoiceByPrefs = true,
|
allowedVoiceByPrefs = true,
|
||||||
|
userIsObserver = false,
|
||||||
userCanSend = true,
|
userCanSend = true,
|
||||||
allowVoiceToContact = {},
|
allowVoiceToContact = {},
|
||||||
sendMessage = {},
|
sendMessage = {},
|
||||||
|
@ -555,6 +555,15 @@ final class Chat: ObservableObject, Identifiable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var userIsObserver: Bool {
|
||||||
|
switch chatInfo {
|
||||||
|
case let .group(groupInfo):
|
||||||
|
let m = groupInfo.membership
|
||||||
|
return m.memberActive && m.memberRole == .observer
|
||||||
|
default: return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var id: ChatId { get { chatInfo.id } }
|
var id: ChatId { get { chatInfo.id } }
|
||||||
|
|
||||||
var viewId: String { get { "\(chatInfo.id) \(created.timeIntervalSince1970)" } }
|
var viewId: String { get { "\(chatInfo.id) \(created.timeIntervalSince1970)" } }
|
||||||
|
@ -291,7 +291,7 @@ struct ComposeView: View {
|
|||||||
.background(.background)
|
.background(.background)
|
||||||
.disabled(!chat.userCanSend)
|
.disabled(!chat.userCanSend)
|
||||||
|
|
||||||
if (!chat.userCanSend) {
|
if chat.userIsObserver {
|
||||||
Text("you are observer")
|
Text("you are observer")
|
||||||
.italic()
|
.italic()
|
||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
|
Loading…
Reference in New Issue
Block a user