diff --git a/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenFragment.kt index 7eb4199fca..e24a54bbc0 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenFragment.kt @@ -7,6 +7,7 @@ import android.view.ViewGroup import android.widget.Toast import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding @@ -114,7 +115,7 @@ class HomeScreenFragment : BaseComposeFragment(), val view = (vm.views.collectAsStateWithLifecycle().value.find { it is WidgetView.SpaceWidget.View } as? WidgetView.SpaceWidget.View) - Box( + Column( modifier = Modifier .fillMaxSize() ) { @@ -131,7 +132,7 @@ class HomeScreenFragment : BaseComposeFragment(), onSettingsClicked = { vm.onSpaceSettingsClicked(space = SpaceId(space)) } ) PageWithWidgets( - modifier = Modifier.padding(top = 52.dp), + modifier = Modifier.weight(1f), showSpaceWidget = false ) } diff --git a/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenToolbar.kt b/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenToolbar.kt index 85a28c10ba..fdbab98b88 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenToolbar.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenToolbar.kt @@ -40,7 +40,6 @@ fun HomeScreenToolbar( ) { Box( modifier = Modifier - .systemBarsPadding() .fillMaxWidth() .height(52.dp) ) { diff --git a/app/src/main/java/com/anytypeio/anytype/ui/widgets/types/SpaceChatWidget.kt b/app/src/main/java/com/anytypeio/anytype/ui/widgets/types/SpaceChatWidget.kt index 93f4269d7e..961af669d8 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/widgets/types/SpaceChatWidget.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/widgets/types/SpaceChatWidget.kt @@ -111,7 +111,8 @@ fun SpaceChatWidgetCard( contentAlignment = Alignment.Center ) { Text( - text = unReadMentionCount.toString(), + modifier = Modifier.padding(horizontal = 6.dp), + text = unReadMessageCount.toString(), style = Caption1Regular, color = colorResource(id = R.color.text_white), ) diff --git a/data/src/main/java/com/anytypeio/anytype/data/auth/event/ChatEventRemoteChannel.kt b/data/src/main/java/com/anytypeio/anytype/data/auth/event/ChatEventRemoteChannel.kt index 686c7c2de9..1b9179ca2e 100644 --- a/data/src/main/java/com/anytypeio/anytype/data/auth/event/ChatEventRemoteChannel.kt +++ b/data/src/main/java/com/anytypeio/anytype/data/auth/event/ChatEventRemoteChannel.kt @@ -11,6 +11,11 @@ interface ChatEventRemoteChannel { class Default( private val channel: ChatEventRemoteChannel ) : ChatEventChannel { + + override fun subscribe(subscribe: Id): Flow> { + return channel.subscribe(subscribe) + } + override fun observe(chat: Id): Flow> { return channel.observe(chat) } diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatEventChannel.kt b/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatEventChannel.kt index fea0e1ba3e..f78c699907 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatEventChannel.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatEventChannel.kt @@ -6,4 +6,5 @@ import kotlinx.coroutines.flow.Flow interface ChatEventChannel { fun observe(chat: Id): Flow> + fun subscribe(subscribe: Id): Flow> } \ No newline at end of file diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatPreviewContainer.kt b/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatPreviewContainer.kt index 3984595dde..597242ea6c 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatPreviewContainer.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatPreviewContainer.kt @@ -15,6 +15,7 @@ import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapNotNull +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.scan import kotlinx.coroutines.launch @@ -50,7 +51,7 @@ interface ChatPreviewContainer { .onFailure { logger.logException(it, "DROID-2966 Error while getting initial previews") } .getOrDefault(emptyList()) events - .observe(SUBSCRIPTION_ID) + .subscribe(SUBSCRIPTION_ID) .scan(initial = initial) { previews, events -> events.fold(previews) { state, event -> when (event) { diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/SpaceChatWidgetContainer.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/SpaceChatWidgetContainer.kt index abfcf34992..eb24196218 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/SpaceChatWidgetContainer.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/SpaceChatWidgetContainer.kt @@ -5,6 +5,7 @@ import com.anytypeio.anytype.domain.chats.ChatPreviewContainer import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.emitAll import kotlinx.coroutines.flow.flow @@ -14,7 +15,7 @@ class SpaceChatWidgetContainer @Inject constructor( private val widget: Widget, private val container: ChatPreviewContainer ) : WidgetContainer { - override val view: Flow = flow { + override val view: Flow = flow { emitAll( container .observePreview(space = SpaceId(widget.config.space)) @@ -22,6 +23,7 @@ class SpaceChatWidgetContainer @Inject constructor( (preview?.state?.unreadMessages?.counter ?: 0) to (preview?.state?.unreadMentions?.counter ?: 0) } .distinctUntilChanged() + .debounce(DEBOUNCE_DURATION) .map { (unreadMessageCount, unreadMentionCount) -> WidgetView.SpaceChat( id = widget.id, @@ -39,4 +41,8 @@ class SpaceChatWidgetContainer @Inject constructor( ) ) } + + companion object { + const val DEBOUNCE_DURATION = 500L + } } \ No newline at end of file