Add app room state model
This commit is contained in:
parent
8312c20d5d
commit
6a1d360036
|
@ -1,18 +1,18 @@
|
|||
CREATE TABLE dbStRoomMeta (
|
||||
CREATE TABLE dbAppRoom (
|
||||
room_id TEXT NOT NULL,
|
||||
is_bubble INTEGER AS Int NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (room_id)
|
||||
);
|
||||
|
||||
markBubble:
|
||||
INSERT OR REPLACE INTO dbStRoomMeta(room_id, is_bubble)
|
||||
INSERT OR REPLACE INTO dbAppRoom(room_id, is_bubble)
|
||||
VALUES (?,?);
|
||||
|
||||
unmarkBubble:
|
||||
INSERT OR REPLACE INTO dbStRoomMeta(room_id, is_bubble)
|
||||
INSERT OR REPLACE INTO dbAppRoom(room_id, is_bubble)
|
||||
VALUES (?,?);
|
||||
|
||||
select:
|
||||
SELECT is_bubble
|
||||
FROM dbStRoomMeta
|
||||
FROM dbAppRoom
|
||||
WHERE room_id = ?;
|
|
@ -52,6 +52,8 @@ import app.dapk.st.matrix.common.RichText
|
|||
import app.dapk.st.matrix.common.UserId
|
||||
import app.dapk.st.messenger.gallery.ImageGalleryActivityPayload
|
||||
import app.dapk.st.messenger.state.*
|
||||
import app.dapk.st.messenger.state.ScreenAction.ChatBubble
|
||||
import app.dapk.st.messenger.state.ScreenAction.MuteNotifications
|
||||
import app.dapk.st.navigator.Navigator
|
||||
import coil.compose.rememberAsyncImagePainter
|
||||
import coil.request.ImageRequest
|
||||
|
@ -115,8 +117,15 @@ internal fun MessengerScreen(
|
|||
OverflowMenu {
|
||||
BooleanOption(value = it.isMuted, trueText = "Unmute notifications", falseText = "Mute notifications") {
|
||||
val action = when (it) {
|
||||
true -> ScreenAction.Notifications.Unmute
|
||||
false -> ScreenAction.Notifications.Unmute
|
||||
true -> MuteNotifications.Unmute
|
||||
false -> MuteNotifications.Mute
|
||||
}
|
||||
viewModel.dispatch(action)
|
||||
}
|
||||
BooleanOption(value = it.isMuted, trueText = "Disable bubble", falseText = "Enable bubble") {
|
||||
val action = when (it) {
|
||||
true -> ChatBubble.Disable
|
||||
false -> ChatBubble.Enable
|
||||
}
|
||||
viewModel.dispatch(action)
|
||||
}
|
||||
|
|
|
@ -12,9 +12,14 @@ sealed interface ScreenAction : Action {
|
|||
object OpenGalleryPicker : ScreenAction
|
||||
object LeaveRoom : ScreenAction
|
||||
|
||||
sealed interface Notifications : ScreenAction {
|
||||
object Mute : Notifications
|
||||
object Unmute : Notifications
|
||||
sealed interface MuteNotifications : ScreenAction {
|
||||
object Mute : MuteNotifications
|
||||
object Unmute : MuteNotifications
|
||||
}
|
||||
|
||||
sealed interface ChatBubble : ScreenAction {
|
||||
object Enable: ChatBubble
|
||||
object Disable: ChatBubble
|
||||
}
|
||||
|
||||
sealed interface LeaveRoomConfirmation : ScreenAction {
|
||||
|
@ -33,6 +38,7 @@ sealed interface ComponentLifecycle : Action {
|
|||
sealed interface MessagesStateChange : Action {
|
||||
data class Content(val content: MessengerPageState) : MessagesStateChange
|
||||
data class MuteContent(val isMuted: Boolean) : MessagesStateChange
|
||||
data class ChatBubbleContent(val isChatBubble: Boolean) : MessagesStateChange
|
||||
}
|
||||
|
||||
sealed interface ComposerStateChange : Action {
|
||||
|
|
|
@ -38,6 +38,7 @@ internal fun messengerReducer(
|
|||
composerState = initialComposerState(initialAttachments),
|
||||
viewerState = null,
|
||||
dialogState = null,
|
||||
appRoomState = Lce.Loading(),
|
||||
),
|
||||
|
||||
async(ComponentLifecycle::class) { action ->
|
||||
|
@ -156,22 +157,46 @@ internal fun messengerReducer(
|
|||
}
|
||||
},
|
||||
|
||||
async(ScreenAction.Notifications::class) { action ->
|
||||
async(ScreenAction.MuteNotifications::class) { action ->
|
||||
when (action) {
|
||||
ScreenAction.Notifications.Mute -> chatEngine.muteRoom(roomId)
|
||||
ScreenAction.Notifications.Unmute -> chatEngine.unmuteRoom(roomId)
|
||||
ScreenAction.MuteNotifications.Mute -> chatEngine.muteRoom(roomId)
|
||||
ScreenAction.MuteNotifications.Unmute -> chatEngine.unmuteRoom(roomId)
|
||||
}
|
||||
|
||||
dispatch(
|
||||
MessagesStateChange.MuteContent(
|
||||
isMuted = when (action) {
|
||||
ScreenAction.Notifications.Mute -> true
|
||||
ScreenAction.Notifications.Unmute -> false
|
||||
ScreenAction.MuteNotifications.Mute -> true
|
||||
ScreenAction.MuteNotifications.Unmute -> false
|
||||
}
|
||||
)
|
||||
)
|
||||
},
|
||||
|
||||
async(ScreenAction.ChatBubble::class) { action ->
|
||||
when (action) {
|
||||
ScreenAction.ChatBubble.Disable -> {}
|
||||
ScreenAction.ChatBubble.Enable -> {}
|
||||
}
|
||||
|
||||
dispatch(
|
||||
MessagesStateChange.ChatBubbleContent(
|
||||
isChatBubble = when (action) {
|
||||
ScreenAction.ChatBubble.Enable -> true
|
||||
ScreenAction.ChatBubble.Disable -> false
|
||||
}
|
||||
)
|
||||
)
|
||||
},
|
||||
|
||||
change(MessagesStateChange.ChatBubbleContent::class) { action, state ->
|
||||
when (val appRoomState = state.appRoomState) {
|
||||
is Lce.Content -> state.copy(appRoomState = appRoomState.copy(value = appRoomState.value.copy(isChatBubble = action.isChatBubble)))
|
||||
is Lce.Error -> state
|
||||
is Lce.Loading -> state
|
||||
}
|
||||
},
|
||||
|
||||
change(ScreenAction.UpdateDialogState::class) { action, state ->
|
||||
state.copy(dialogState = action.dialogState)
|
||||
},
|
||||
|
|
|
@ -17,6 +17,11 @@ data class MessengerScreenState(
|
|||
val composerState: ComposerState,
|
||||
val viewerState: ViewerState?,
|
||||
val dialogState: DialogState?,
|
||||
val appRoomState: Lce<AppRoomState>,
|
||||
)
|
||||
|
||||
data class AppRoomState(
|
||||
val isChatBubble: Boolean
|
||||
)
|
||||
|
||||
data class ViewerState(
|
||||
|
|
|
@ -15,7 +15,6 @@ import fake.FakeChatEngine
|
|||
import fake.FakeJobBag
|
||||
import fake.FakeMessageOptionsStore
|
||||
import fixture.*
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import kotlinx.coroutines.flow.flowOf
|
||||
|
@ -77,6 +76,7 @@ class MessengerReducerTest {
|
|||
composerState = ComposerState.Text(value = "", reply = null),
|
||||
viewerState = null,
|
||||
dialogState = null,
|
||||
appRoomState = Lce.Loading(),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
@ -90,6 +90,7 @@ class MessengerReducerTest {
|
|||
composerState = ComposerState.Text(value = "", reply = null),
|
||||
viewerState = null,
|
||||
dialogState = null,
|
||||
appRoomState = Lce.Loading(),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
@ -103,6 +104,7 @@ class MessengerReducerTest {
|
|||
composerState = ComposerState.Attachments(listOf(A_MESSAGE_ATTACHMENT), reply = null),
|
||||
viewerState = null,
|
||||
dialogState = null,
|
||||
appRoomState = Lce.Loading(),
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue