Do not expose AnnouncementState in the api module
This commit is contained in:
parent
1edd3b6314
commit
717932a111
13 changed files with 16 additions and 30 deletions
|
|
@ -174,8 +174,8 @@ class RootFlowNode(
|
||||||
state = state,
|
state = state,
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
onOpenBugReport = this::onOpenBugReport,
|
onOpenBugReport = this::onOpenBugReport,
|
||||||
announcementRenderer = { state, announcementModifier ->
|
announcementRenderer = { announcementModifier ->
|
||||||
announcementService.Render(state, announcementModifier)
|
announcementService.Render(announcementModifier)
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
val backstackSlider = rememberBackstackSlider<NavTarget>(
|
val backstackSlider = rememberBackstackSlider<NavTarget>(
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import dev.zacsweers.metro.Inject
|
import dev.zacsweers.metro.Inject
|
||||||
import im.vector.app.features.analytics.plan.SuperProperties
|
import im.vector.app.features.analytics.plan.SuperProperties
|
||||||
import io.element.android.features.announcement.api.AnnouncementState
|
|
||||||
import io.element.android.features.rageshake.api.crash.CrashDetectionState
|
import io.element.android.features.rageshake.api.crash.CrashDetectionState
|
||||||
import io.element.android.features.rageshake.api.detection.RageshakeDetectionState
|
import io.element.android.features.rageshake.api.detection.RageshakeDetectionState
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
|
|
@ -25,7 +24,6 @@ import io.element.android.services.apperror.api.AppErrorStateService
|
||||||
class RootPresenter(
|
class RootPresenter(
|
||||||
private val crashDetectionPresenter: Presenter<CrashDetectionState>,
|
private val crashDetectionPresenter: Presenter<CrashDetectionState>,
|
||||||
private val rageshakeDetectionPresenter: Presenter<RageshakeDetectionState>,
|
private val rageshakeDetectionPresenter: Presenter<RageshakeDetectionState>,
|
||||||
private val announcementPresenter: Presenter<AnnouncementState>,
|
|
||||||
private val appErrorStateService: AppErrorStateService,
|
private val appErrorStateService: AppErrorStateService,
|
||||||
private val analyticsService: AnalyticsService,
|
private val analyticsService: AnalyticsService,
|
||||||
private val sdkMetadata: SdkMetadata,
|
private val sdkMetadata: SdkMetadata,
|
||||||
|
|
@ -34,7 +32,6 @@ class RootPresenter(
|
||||||
override fun present(): RootState {
|
override fun present(): RootState {
|
||||||
val rageshakeDetectionState = rageshakeDetectionPresenter.present()
|
val rageshakeDetectionState = rageshakeDetectionPresenter.present()
|
||||||
val crashDetectionState = crashDetectionPresenter.present()
|
val crashDetectionState = crashDetectionPresenter.present()
|
||||||
val announcementState = announcementPresenter.present()
|
|
||||||
val appErrorState by appErrorStateService.appErrorStateFlow.collectAsState()
|
val appErrorState by appErrorStateService.appErrorStateFlow.collectAsState()
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
|
|
@ -51,7 +48,6 @@ class RootPresenter(
|
||||||
rageshakeDetectionState = rageshakeDetectionState,
|
rageshakeDetectionState = rageshakeDetectionState,
|
||||||
crashDetectionState = crashDetectionState,
|
crashDetectionState = crashDetectionState,
|
||||||
errorState = appErrorState,
|
errorState = appErrorState,
|
||||||
announcementState = announcementState,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@
|
||||||
package io.element.android.appnav.root
|
package io.element.android.appnav.root
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import io.element.android.features.announcement.api.AnnouncementState
|
|
||||||
import io.element.android.features.rageshake.api.crash.CrashDetectionState
|
import io.element.android.features.rageshake.api.crash.CrashDetectionState
|
||||||
import io.element.android.features.rageshake.api.detection.RageshakeDetectionState
|
import io.element.android.features.rageshake.api.detection.RageshakeDetectionState
|
||||||
import io.element.android.services.apperror.api.AppErrorState
|
import io.element.android.services.apperror.api.AppErrorState
|
||||||
|
|
@ -18,5 +17,4 @@ data class RootState(
|
||||||
val rageshakeDetectionState: RageshakeDetectionState,
|
val rageshakeDetectionState: RageshakeDetectionState,
|
||||||
val crashDetectionState: CrashDetectionState,
|
val crashDetectionState: CrashDetectionState,
|
||||||
val errorState: AppErrorState,
|
val errorState: AppErrorState,
|
||||||
val announcementState: AnnouncementState,
|
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@
|
||||||
package io.element.android.appnav.root
|
package io.element.android.appnav.root
|
||||||
|
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.features.announcement.api.anAnnouncementState
|
|
||||||
import io.element.android.features.rageshake.api.crash.aCrashDetectionState
|
import io.element.android.features.rageshake.api.crash.aCrashDetectionState
|
||||||
import io.element.android.features.rageshake.api.detection.aRageshakeDetectionState
|
import io.element.android.features.rageshake.api.detection.aRageshakeDetectionState
|
||||||
import io.element.android.services.apperror.api.AppErrorState
|
import io.element.android.services.apperror.api.AppErrorState
|
||||||
|
|
@ -34,6 +33,5 @@ open class RootStateProvider : PreviewParameterProvider<RootState> {
|
||||||
fun aRootState() = RootState(
|
fun aRootState() = RootState(
|
||||||
rageshakeDetectionState = aRageshakeDetectionState(),
|
rageshakeDetectionState = aRageshakeDetectionState(),
|
||||||
crashDetectionState = aCrashDetectionState(),
|
crashDetectionState = aCrashDetectionState(),
|
||||||
announcementState = anAnnouncementState(),
|
|
||||||
errorState = AppErrorState.NoError,
|
errorState = AppErrorState.NoError,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import io.element.android.features.announcement.api.AnnouncementState
|
|
||||||
import io.element.android.features.rageshake.api.crash.CrashDetectionEvents
|
import io.element.android.features.rageshake.api.crash.CrashDetectionEvents
|
||||||
import io.element.android.features.rageshake.api.crash.CrashDetectionView
|
import io.element.android.features.rageshake.api.crash.CrashDetectionView
|
||||||
import io.element.android.features.rageshake.api.detection.RageshakeDetectionEvents
|
import io.element.android.features.rageshake.api.detection.RageshakeDetectionEvents
|
||||||
|
|
@ -28,7 +27,7 @@ import io.element.android.services.apperror.impl.AppErrorView
|
||||||
fun RootView(
|
fun RootView(
|
||||||
state: RootState,
|
state: RootState,
|
||||||
onOpenBugReport: () -> Unit,
|
onOpenBugReport: () -> Unit,
|
||||||
announcementRenderer: @Composable (AnnouncementState, Modifier) -> Unit,
|
announcementRenderer: @Composable (Modifier) -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
children: @Composable BoxScope.() -> Unit,
|
children: @Composable BoxScope.() -> Unit,
|
||||||
) {
|
) {
|
||||||
|
|
@ -45,10 +44,7 @@ fun RootView(
|
||||||
onOpenBugReport.invoke()
|
onOpenBugReport.invoke()
|
||||||
}
|
}
|
||||||
|
|
||||||
announcementRenderer(
|
announcementRenderer(Modifier)
|
||||||
state.announcementState,
|
|
||||||
Modifier,
|
|
||||||
)
|
|
||||||
|
|
||||||
RageshakeDetectionView(
|
RageshakeDetectionView(
|
||||||
state = state.rageshakeDetectionState,
|
state = state.rageshakeDetectionState,
|
||||||
|
|
@ -70,7 +66,7 @@ internal fun RootViewPreview(@PreviewParameter(RootStateProvider::class) rootSta
|
||||||
RootView(
|
RootView(
|
||||||
state = rootState,
|
state = rootState,
|
||||||
onOpenBugReport = {},
|
onOpenBugReport = {},
|
||||||
announcementRenderer = { _, _ -> },
|
announcementRenderer = { },
|
||||||
) {
|
) {
|
||||||
Text("Children")
|
Text("Children")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@ import app.cash.molecule.moleculeFlow
|
||||||
import app.cash.turbine.test
|
import app.cash.turbine.test
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.appnav.root.RootPresenter
|
import io.element.android.appnav.root.RootPresenter
|
||||||
import io.element.android.features.announcement.api.anAnnouncementState
|
|
||||||
import io.element.android.features.rageshake.api.crash.aCrashDetectionState
|
import io.element.android.features.rageshake.api.crash.aCrashDetectionState
|
||||||
import io.element.android.features.rageshake.api.detection.aRageshakeDetectionState
|
import io.element.android.features.rageshake.api.detection.aRageshakeDetectionState
|
||||||
import io.element.android.libraries.matrix.test.FakeSdkMetadata
|
import io.element.android.libraries.matrix.test.FakeSdkMetadata
|
||||||
|
|
@ -72,7 +71,6 @@ class RootPresenterTest {
|
||||||
return RootPresenter(
|
return RootPresenter(
|
||||||
crashDetectionPresenter = { aCrashDetectionState() },
|
crashDetectionPresenter = { aCrashDetectionState() },
|
||||||
rageshakeDetectionPresenter = { aRageshakeDetectionState() },
|
rageshakeDetectionPresenter = { aRageshakeDetectionState() },
|
||||||
announcementPresenter = { anAnnouncementState() },
|
|
||||||
appErrorStateService = appErrorService,
|
appErrorStateService = appErrorService,
|
||||||
analyticsService = FakeAnalyticsService(),
|
analyticsService = FakeAnalyticsService(),
|
||||||
sdkMetadata = FakeSdkMetadata("sha")
|
sdkMetadata = FakeSdkMetadata("sha")
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ interface AnnouncementService {
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun Render(
|
fun Render(
|
||||||
state: AnnouncementState,
|
|
||||||
modifier: Modifier,
|
modifier: Modifier,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@ import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import dev.zacsweers.metro.Inject
|
import dev.zacsweers.metro.Inject
|
||||||
import io.element.android.features.announcement.api.AnnouncementState
|
|
||||||
import io.element.android.features.announcement.impl.store.AnnouncementStore
|
import io.element.android.features.announcement.impl.store.AnnouncementStore
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
* Please see LICENSE files in the repository root for full details.
|
* Please see LICENSE files in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.element.android.features.announcement.api
|
package io.element.android.features.announcement.impl
|
||||||
|
|
||||||
data class AnnouncementState(
|
data class AnnouncementState(
|
||||||
val showSpaceAnnouncement: Boolean,
|
val showSpaceAnnouncement: Boolean,
|
||||||
|
|
@ -18,7 +18,6 @@ import dev.zacsweers.metro.AppScope
|
||||||
import dev.zacsweers.metro.ContributesBinding
|
import dev.zacsweers.metro.ContributesBinding
|
||||||
import dev.zacsweers.metro.Inject
|
import dev.zacsweers.metro.Inject
|
||||||
import io.element.android.features.announcement.api.AnnouncementService
|
import io.element.android.features.announcement.api.AnnouncementService
|
||||||
import io.element.android.features.announcement.api.AnnouncementState
|
|
||||||
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementState
|
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementState
|
||||||
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementView
|
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementView
|
||||||
import io.element.android.features.announcement.impl.store.AnnouncementStore
|
import io.element.android.features.announcement.impl.store.AnnouncementStore
|
||||||
|
|
@ -29,6 +28,7 @@ import kotlinx.coroutines.flow.first
|
||||||
@Inject
|
@Inject
|
||||||
class DefaultAnnouncementService(
|
class DefaultAnnouncementService(
|
||||||
private val announcementStore: AnnouncementStore,
|
private val announcementStore: AnnouncementStore,
|
||||||
|
private val announcementPresenter: Presenter<AnnouncementState>,
|
||||||
private val spaceAnnouncementPresenter: Presenter<SpaceAnnouncementState>,
|
private val spaceAnnouncementPresenter: Presenter<SpaceAnnouncementState>,
|
||||||
) : AnnouncementService {
|
) : AnnouncementService {
|
||||||
override suspend fun onEnteringSpaceTab() {
|
override suspend fun onEnteringSpaceTab() {
|
||||||
|
|
@ -39,10 +39,11 @@ class DefaultAnnouncementService(
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun Render(state: AnnouncementState, modifier: Modifier) {
|
override fun Render(modifier: Modifier) {
|
||||||
|
val announcementState = announcementPresenter.present()
|
||||||
Box(modifier = modifier.fillMaxSize()) {
|
Box(modifier = modifier.fillMaxSize()) {
|
||||||
AnimatedVisibility(
|
AnimatedVisibility(
|
||||||
visible = state.showSpaceAnnouncement,
|
visible = announcementState.showSpaceAnnouncement,
|
||||||
enter = fadeIn(),
|
enter = fadeIn(),
|
||||||
exit = fadeOut(),
|
exit = fadeOut(),
|
||||||
) {
|
) {
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,8 @@ import dev.zacsweers.metro.AppScope
|
||||||
import dev.zacsweers.metro.BindingContainer
|
import dev.zacsweers.metro.BindingContainer
|
||||||
import dev.zacsweers.metro.Binds
|
import dev.zacsweers.metro.Binds
|
||||||
import dev.zacsweers.metro.ContributesTo
|
import dev.zacsweers.metro.ContributesTo
|
||||||
import io.element.android.features.announcement.api.AnnouncementState
|
|
||||||
import io.element.android.features.announcement.impl.AnnouncementPresenter
|
import io.element.android.features.announcement.impl.AnnouncementPresenter
|
||||||
|
import io.element.android.features.announcement.impl.AnnouncementState
|
||||||
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementPresenter
|
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementPresenter
|
||||||
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementState
|
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementState
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,11 @@ class DefaultAnnouncementServiceTest {
|
||||||
|
|
||||||
private fun createDefaultAnnouncementService(
|
private fun createDefaultAnnouncementService(
|
||||||
announcementStore: AnnouncementStore = InMemoryAnnouncementStore(),
|
announcementStore: AnnouncementStore = InMemoryAnnouncementStore(),
|
||||||
|
announcementPresenter: Presenter<AnnouncementState> = Presenter { anAnnouncementState() },
|
||||||
spaceAnnouncementPresenter: Presenter<SpaceAnnouncementState> = Presenter { aSpaceAnnouncementState() },
|
spaceAnnouncementPresenter: Presenter<SpaceAnnouncementState> = Presenter { aSpaceAnnouncementState() },
|
||||||
) = DefaultAnnouncementService(
|
) = DefaultAnnouncementService(
|
||||||
announcementStore = announcementStore,
|
announcementStore = announcementStore,
|
||||||
|
announcementPresenter = announcementPresenter,
|
||||||
spaceAnnouncementPresenter = spaceAnnouncementPresenter,
|
spaceAnnouncementPresenter = spaceAnnouncementPresenter,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,19 +10,18 @@ package io.element.android.features.rageshake.test.logs
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import io.element.android.features.announcement.api.AnnouncementService
|
import io.element.android.features.announcement.api.AnnouncementService
|
||||||
import io.element.android.features.announcement.api.AnnouncementState
|
|
||||||
import io.element.android.tests.testutils.lambda.lambdaError
|
import io.element.android.tests.testutils.lambda.lambdaError
|
||||||
|
|
||||||
class FakeAnnouncementService(
|
class FakeAnnouncementService(
|
||||||
val onEnteringSpaceTabResult: () -> Unit = { lambdaError() },
|
val onEnteringSpaceTabResult: () -> Unit = { lambdaError() },
|
||||||
val renderResult: (AnnouncementState, Modifier) -> Unit = { _, _ -> lambdaError() },
|
val renderResult: (Modifier) -> Unit = { lambdaError() },
|
||||||
) : AnnouncementService {
|
) : AnnouncementService {
|
||||||
override suspend fun onEnteringSpaceTab() {
|
override suspend fun onEnteringSpaceTab() {
|
||||||
onEnteringSpaceTabResult()
|
onEnteringSpaceTabResult()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun Render(state: AnnouncementState, modifier: Modifier) {
|
override fun Render(modifier: Modifier) {
|
||||||
renderResult(state, modifier)
|
renderResult(modifier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue