mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-02 21:32:34 +00:00
Merge branch 'develop' into fix/6371-save-file-name-conflicts
This commit is contained in:
@@ -37,7 +37,7 @@ PRs must meet these rules.
|
|||||||
|
|
||||||
- Create previews for **all main states** of a Composable.
|
- Create previews for **all main states** of a Composable.
|
||||||
- Use `@PreviewsDayNight` for consistency.
|
- Use `@PreviewsDayNight` for consistency.
|
||||||
- Use `PreviewParameterProvider` (e.g., `FooStateProvider`) to provide states.
|
- Use `PreviewParameterProvider` (e.g., `FooStatePreviewParam`) to provide states.
|
||||||
- Wrap previews in `ElementPreview { ... }`.
|
- Wrap previews in `ElementPreview { ... }`.
|
||||||
- When writing tests, never try to record the screenshots, the CI will do it.
|
- When writing tests, never try to record the screenshots, the CI will do it.
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ We use [Appyx](https://bumble-tech.github.io/appyx/) for navigation and [Molecul
|
|||||||
| `FooView.kt` | Stateless Composable rendering the UI from `FooState`. |
|
| `FooView.kt` | Stateless Composable rendering the UI from `FooState`. |
|
||||||
| `FooState.kt` | Data class representing the immutable UI state. |
|
| `FooState.kt` | Data class representing the immutable UI state. |
|
||||||
| `FooEvent.kt` | Sealed interface for UI actions sent to the Presenter. |
|
| `FooEvent.kt` | Sealed interface for UI actions sent to the Presenter. |
|
||||||
| `FooStateProvider.kt` | Provides sample states for Previews and Screenshot tests. |
|
| `FooStatePreviewParam.kt` | Provides sample states for Previews and Screenshot tests. |
|
||||||
| `FooPresenterTest.kt` | Unit tests for the Presenter logic using Turbine. |
|
| `FooPresenterTest.kt` | Unit tests for the Presenter logic using Turbine. |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -14,16 +14,16 @@ import kotlin.reflect.KClass
|
|||||||
* Adds Node to the specified component graph.
|
* Adds Node to the specified component graph.
|
||||||
* Equivalent to the following declaration:
|
* Equivalent to the following declaration:
|
||||||
*
|
*
|
||||||
|
* ```
|
||||||
* @BindingContainer
|
* @BindingContainer
|
||||||
* @ContributesTo(Scope::class)
|
* @ContributesTo(Scope::class)
|
||||||
* abstract class YourNodeModule {
|
* interface YourNodeBindingContainer {
|
||||||
|
* @Binds
|
||||||
* @Binds
|
* @IntoMap
|
||||||
* @IntoMap
|
* @NodeKey(YourNode::class)
|
||||||
* @NodeKey(YourNode::class)
|
* fun bindYourNodeAssistedFactory(factory: YourNodeAssistedFactory): AssistedNodeFactory<*>
|
||||||
* abstract fun bindYourNodeFactory(factory: YourNode.Factory): AssistedNodeFactory<*>
|
* }
|
||||||
*}
|
* ```
|
||||||
|
|
||||||
*/
|
*/
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
annotation class ContributesNode(
|
annotation class ContributesNode(
|
||||||
|
|||||||
+2
-2
@@ -38,7 +38,7 @@ import java.io.File
|
|||||||
|
|
||||||
@BindingContainer
|
@BindingContainer
|
||||||
@ContributesTo(AppScope::class)
|
@ContributesTo(AppScope::class)
|
||||||
object AppModule {
|
object AppBindingContainer {
|
||||||
@Provides
|
@Provides
|
||||||
@BaseDirectory
|
@BaseDirectory
|
||||||
fun providesBaseDirectory(@ApplicationContext context: Context): File {
|
fun providesBaseDirectory(@ApplicationContext context: Context): File {
|
||||||
@@ -111,7 +111,7 @@ object AppModule {
|
|||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@SingleIn(AppScope::class)
|
@SingleIn(AppScope::class)
|
||||||
fun provideSnackbarDispatcher(): SnackbarDispatcher {
|
fun providesSnackbarDispatcher(): SnackbarDispatcher {
|
||||||
return SnackbarDispatcher()
|
return SnackbarDispatcher()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -30,8 +30,6 @@ import io.element.android.libraries.architecture.Presenter
|
|||||||
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
||||||
import io.element.android.libraries.core.log.logger.LoggerTag
|
import io.element.android.libraries.core.log.logger.LoggerTag
|
||||||
import io.element.android.libraries.core.meta.BuildMeta
|
import io.element.android.libraries.core.meta.BuildMeta
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
||||||
import io.element.android.libraries.matrix.api.encryption.RecoveryState
|
import io.element.android.libraries.matrix.api.encryption.RecoveryState
|
||||||
@@ -67,7 +65,6 @@ class LoggedInPresenter(
|
|||||||
private val buildMeta: BuildMeta,
|
private val buildMeta: BuildMeta,
|
||||||
private val networkMonitor: NetworkMonitor,
|
private val networkMonitor: NetworkMonitor,
|
||||||
private val localNetworkPermissionAdvisor: LocalNetworkPermissionAdvisor,
|
private val localNetworkPermissionAdvisor: LocalNetworkPermissionAdvisor,
|
||||||
private val featureFlagService: FeatureFlagService,
|
|
||||||
permissionsPresenterFactory: PermissionsPresenter.Factory,
|
permissionsPresenterFactory: PermissionsPresenter.Factory,
|
||||||
) : Presenter<LoggedInState> {
|
) : Presenter<LoggedInState> {
|
||||||
private val localNetworkPermissionsPresenter: PermissionsPresenter =
|
private val localNetworkPermissionsPresenter: PermissionsPresenter =
|
||||||
@@ -124,13 +121,9 @@ class LoggedInPresenter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
// Keep automatic call status (m.call) in sync with the feature flag and homeserver support.
|
// Keep automatic call status (m.call) in sync with homeserver support.
|
||||||
featureFlagService.isFeatureEnabledFlow(FeatureFlags.UserStatus)
|
val enabled = matrixClient.isUserStatusSupported().getOrDefault(false)
|
||||||
.onEach { isUserStatusEnabled ->
|
matrixClient.enableAutomaticCallStatus(enabled)
|
||||||
val enabled = isUserStatusEnabled && matrixClient.isUserStatusSupported().getOrDefault(false)
|
|
||||||
matrixClient.enableAutomaticCallStatus(enabled)
|
|
||||||
}
|
|
||||||
.launchIn(this)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val networkConnectivity by networkMonitor.connectivity.collectAsState()
|
val networkConnectivity by networkMonitor.connectivity.collectAsState()
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ import io.element.android.libraries.architecture.AsyncData
|
|||||||
import io.element.android.libraries.permissions.api.localnetwork.LocalNetworkPermissionDialog
|
import io.element.android.libraries.permissions.api.localnetwork.LocalNetworkPermissionDialog
|
||||||
import io.element.android.libraries.push.api.PusherRegistrationFailure
|
import io.element.android.libraries.push.api.PusherRegistrationFailure
|
||||||
|
|
||||||
open class LoggedInStateProvider : PreviewParameterProvider<LoggedInState> {
|
open class LoggedInStatePreviewParam : PreviewParameterProvider<LoggedInState> {
|
||||||
override val values: Sequence<LoggedInState>
|
override val values: Sequence<LoggedInState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aLoggedInState(),
|
aLoggedInState(),
|
||||||
@@ -124,7 +124,7 @@ private fun ForceNativeSlidingSyncMigrationDialog(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun LoggedInViewPreview(@PreviewParameter(LoggedInStateProvider::class) state: LoggedInState) = ElementPreview {
|
internal fun LoggedInViewPreview(@PreviewParameter(LoggedInStatePreviewParam::class) state: LoggedInState) = ElementPreview {
|
||||||
LoggedInView(
|
LoggedInView(
|
||||||
state = state,
|
state = state,
|
||||||
navigateToNotificationTroubleshoot = {},
|
navigateToNotificationTroubleshoot = {},
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import io.element.android.libraries.designsystem.theme.components.Text
|
|||||||
import io.element.android.libraries.designsystem.theme.components.TopAppBar
|
import io.element.android.libraries.designsystem.theme.components.TopAppBar
|
||||||
import io.element.android.libraries.designsystem.utils.DelayedVisibility
|
import io.element.android.libraries.designsystem.utils.DelayedVisibility
|
||||||
import io.element.android.libraries.matrix.ui.room.LoadingRoomState
|
import io.element.android.libraries.matrix.ui.room.LoadingRoomState
|
||||||
import io.element.android.libraries.matrix.ui.room.LoadingRoomStateProvider
|
import io.element.android.libraries.matrix.ui.room.LoadingRoomStatePreviewParam
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -84,7 +84,7 @@ private fun LoadingRoomTopBar(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun LoadingRoomNodeViewPreview(@PreviewParameter(LoadingRoomStateProvider::class) state: LoadingRoomState) = ElementPreview {
|
internal fun LoadingRoomNodeViewPreview(@PreviewParameter(LoadingRoomStatePreviewParam::class) state: LoadingRoomState) = ElementPreview {
|
||||||
LoadingRoomNodeView(
|
LoadingRoomNodeView(
|
||||||
state = state,
|
state = state,
|
||||||
onBackClick = {}
|
onBackClick = {}
|
||||||
|
|||||||
+1
-1
@@ -14,7 +14,7 @@ import io.element.android.features.rageshake.api.detection.aRageshakeDetectionSt
|
|||||||
import io.element.android.services.apperror.api.AppErrorState
|
import io.element.android.services.apperror.api.AppErrorState
|
||||||
import io.element.android.services.apperror.api.aAppErrorState
|
import io.element.android.services.apperror.api.aAppErrorState
|
||||||
|
|
||||||
open class RootStateProvider : PreviewParameterProvider<RootState> {
|
open class RootStatePreviewParam : PreviewParameterProvider<RootState> {
|
||||||
override val values: Sequence<RootState>
|
override val values: Sequence<RootState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aRootState().copy(
|
aRootState().copy(
|
||||||
@@ -60,7 +60,7 @@ fun RootView(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun RootViewPreview(@PreviewParameter(RootStateProvider::class) rootState: RootState) = ElementPreview {
|
internal fun RootViewPreview(@PreviewParameter(RootStatePreviewParam::class) rootState: RootState) = ElementPreview {
|
||||||
RootView(
|
RootView(
|
||||||
state = rootState,
|
state = rootState,
|
||||||
onOpenBugReport = {},
|
onOpenBugReport = {},
|
||||||
|
|||||||
@@ -17,9 +17,6 @@ import im.vector.app.features.analytics.plan.UserProperties
|
|||||||
import io.element.android.features.networkmonitor.api.NetworkStatus
|
import io.element.android.features.networkmonitor.api.NetworkStatus
|
||||||
import io.element.android.features.networkmonitor.test.FakeNetworkMonitor
|
import io.element.android.features.networkmonitor.test.FakeNetworkMonitor
|
||||||
import io.element.android.libraries.core.meta.BuildMeta
|
import io.element.android.libraries.core.meta.BuildMeta
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.core.SessionId
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
||||||
@@ -131,7 +128,6 @@ class LoggedInPresenterTest {
|
|||||||
buildMeta = buildMeta,
|
buildMeta = buildMeta,
|
||||||
networkMonitor = networkMonitor,
|
networkMonitor = networkMonitor,
|
||||||
localNetworkPermissionAdvisor = FakeLocalNetworkPermissionAdvisor(),
|
localNetworkPermissionAdvisor = FakeLocalNetworkPermissionAdvisor(),
|
||||||
featureFlagService = FakeFeatureFlagService(),
|
|
||||||
permissionsPresenterFactory = FakePermissionsPresenterFactory(),
|
permissionsPresenterFactory = FakePermissionsPresenterFactory(),
|
||||||
).test {
|
).test {
|
||||||
encryptionService.emitRecoveryState(RecoveryState.UNKNOWN)
|
encryptionService.emitRecoveryState(RecoveryState.UNKNOWN)
|
||||||
@@ -362,9 +358,6 @@ class LoggedInPresenterTest {
|
|||||||
}
|
}
|
||||||
createLoggedInPresenter(
|
createLoggedInPresenter(
|
||||||
matrixClient = matrixClient,
|
matrixClient = matrixClient,
|
||||||
featureFlagService = FakeFeatureFlagService(
|
|
||||||
initialState = mapOf(FeatureFlags.UserStatus.key to true),
|
|
||||||
),
|
|
||||||
).test {
|
).test {
|
||||||
cancelAndConsumeRemainingEvents()
|
cancelAndConsumeRemainingEvents()
|
||||||
assert(enableAutomaticCallStatusLambda)
|
assert(enableAutomaticCallStatusLambda)
|
||||||
@@ -374,7 +367,7 @@ class LoggedInPresenterTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - reacts to user status flag being toggled at runtime`() = runTest {
|
fun `present - enables automatic call status when server supports it`() = runTest {
|
||||||
val enableAutomaticCallStatusLambda = lambdaRecorder<Boolean, Unit> { }
|
val enableAutomaticCallStatusLambda = lambdaRecorder<Boolean, Unit> { }
|
||||||
val matrixClient = FakeMatrixClient(
|
val matrixClient = FakeMatrixClient(
|
||||||
accountManagementUrlResult = { Result.success(null) },
|
accountManagementUrlResult = { Result.success(null) },
|
||||||
@@ -382,23 +375,13 @@ class LoggedInPresenterTest {
|
|||||||
).apply {
|
).apply {
|
||||||
isUserStatusSupportedResult = Result.success(true)
|
isUserStatusSupportedResult = Result.success(true)
|
||||||
}
|
}
|
||||||
val featureFlagService = FakeFeatureFlagService(
|
|
||||||
initialState = mapOf(FeatureFlags.UserStatus.key to false),
|
|
||||||
)
|
|
||||||
createLoggedInPresenter(
|
createLoggedInPresenter(
|
||||||
matrixClient = matrixClient,
|
matrixClient = matrixClient,
|
||||||
featureFlagService = featureFlagService,
|
|
||||||
).test {
|
).test {
|
||||||
awaitItem()
|
|
||||||
// Turning the flag on at runtime enables it.
|
|
||||||
featureFlagService.setFeatureEnabled(FeatureFlags.UserStatus, true)
|
|
||||||
cancelAndConsumeRemainingEvents()
|
cancelAndConsumeRemainingEvents()
|
||||||
assert(enableAutomaticCallStatusLambda)
|
assert(enableAutomaticCallStatusLambda)
|
||||||
.isCalledExactly(2)
|
.isCalledOnce()
|
||||||
.withSequence(
|
.with(value(true))
|
||||||
listOf(value(false)),
|
|
||||||
listOf(value(true)),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -418,7 +401,6 @@ class LoggedInPresenterTest {
|
|||||||
),
|
),
|
||||||
buildMeta: BuildMeta = aBuildMeta(),
|
buildMeta: BuildMeta = aBuildMeta(),
|
||||||
networkMonitor: FakeNetworkMonitor = FakeNetworkMonitor(),
|
networkMonitor: FakeNetworkMonitor = FakeNetworkMonitor(),
|
||||||
featureFlagService: FeatureFlagService = FakeFeatureFlagService(),
|
|
||||||
): LoggedInPresenter {
|
): LoggedInPresenter {
|
||||||
return LoggedInPresenter(
|
return LoggedInPresenter(
|
||||||
matrixClient = matrixClient,
|
matrixClient = matrixClient,
|
||||||
@@ -430,7 +412,6 @@ class LoggedInPresenterTest {
|
|||||||
buildMeta = buildMeta,
|
buildMeta = buildMeta,
|
||||||
networkMonitor = networkMonitor,
|
networkMonitor = networkMonitor,
|
||||||
localNetworkPermissionAdvisor = FakeLocalNetworkPermissionAdvisor(),
|
localNetworkPermissionAdvisor = FakeLocalNetworkPermissionAdvisor(),
|
||||||
featureFlagService = featureFlagService,
|
|
||||||
permissionsPresenterFactory = FakePermissionsPresenterFactory(),
|
permissionsPresenterFactory = FakePermissionsPresenterFactory(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,32 +61,32 @@ class ContributesNodeProcessor(
|
|||||||
if (config.enableLogging) {
|
if (config.enableLogging) {
|
||||||
logger.warn("Processing ${ksClass.qualifiedName?.asString()}")
|
logger.warn("Processing ${ksClass.qualifiedName?.asString()}")
|
||||||
}
|
}
|
||||||
generateModule(ksClass)
|
generateBindingContainer(ksClass)
|
||||||
generateFactory(ksClass)
|
generateFactory(ksClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
return invalidSymbols
|
return invalidSymbols
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateModule(ksClass: KSClassDeclaration) {
|
private fun generateBindingContainer(ksClass: KSClassDeclaration) {
|
||||||
val annotation = ksClass.annotations.find { it.shortName.asString() == "ContributesNode" }!!
|
val annotation = ksClass.annotations.find { it.shortName.asString() == "ContributesNode" }!!
|
||||||
val scope = annotation.arguments.find { it.name?.asString() == "scope" }!!.value as KSType
|
val scope = annotation.arguments.find { it.name?.asString() == "scope" }!!.value as KSType
|
||||||
val modulePackage = ksClass.packageName.asString()
|
val bindingContainerPackage = ksClass.packageName.asString()
|
||||||
val moduleClassName = "${ksClass.simpleName.asString()}_Module"
|
val bindingContainerClassName = "${ksClass.simpleName.asString()}BindingContainer"
|
||||||
val nodeClassName = ClassName.bestGuess(ksClass.qualifiedName!!.asString())
|
val nodeClassName = ClassName.bestGuess(ksClass.qualifiedName!!.asString())
|
||||||
val content = FileSpec.builder(
|
val content = FileSpec.builder(
|
||||||
packageName = modulePackage,
|
packageName = bindingContainerPackage,
|
||||||
fileName = moduleClassName,
|
fileName = bindingContainerClassName,
|
||||||
)
|
)
|
||||||
.addType(
|
.addType(
|
||||||
TypeSpec.interfaceBuilder(moduleClassName)
|
TypeSpec.interfaceBuilder(bindingContainerClassName)
|
||||||
.addAnnotation(AnnotationSpec.builder(Origin::class).addMember(CLASS_PLACEHOLDER, nodeClassName).build())
|
.addAnnotation(AnnotationSpec.builder(Origin::class).addMember(CLASS_PLACEHOLDER, nodeClassName).build())
|
||||||
.addAnnotation(BindingContainer::class)
|
.addAnnotation(BindingContainer::class)
|
||||||
.addAnnotation(AnnotationSpec.builder(ContributesTo::class).addMember(CLASS_PLACEHOLDER, scope.toTypeName()).build())
|
.addAnnotation(AnnotationSpec.builder(ContributesTo::class).addMember(CLASS_PLACEHOLDER, scope.toTypeName()).build())
|
||||||
.addFunction(
|
.addFunction(
|
||||||
FunSpec.builder("bind${ksClass.simpleName.asString()}Factory")
|
FunSpec.builder("bind${ksClass.simpleName.asString()}AssistedFactory")
|
||||||
.addModifiers(KModifier.ABSTRACT)
|
.addModifiers(KModifier.ABSTRACT)
|
||||||
.addParameter("factory", ClassName(modulePackage, "${ksClass.simpleName.asString()}_AssistedFactory"))
|
.addParameter("factory", ClassName(bindingContainerPackage, "${ksClass.simpleName.asString()}AssistedFactory"))
|
||||||
.returns(ClassName.bestGuess(assistedNodeFactoryFqName.asString()).parameterizedBy(STAR))
|
.returns(ClassName.bestGuess(assistedNodeFactoryFqName.asString()).parameterizedBy(STAR))
|
||||||
.addAnnotation(Binds::class)
|
.addAnnotation(Binds::class)
|
||||||
.addAnnotation(IntoMap::class)
|
.addAnnotation(IntoMap::class)
|
||||||
@@ -114,7 +114,7 @@ class ContributesNodeProcessor(
|
|||||||
@OptIn(KspExperimental::class)
|
@OptIn(KspExperimental::class)
|
||||||
private fun generateFactory(ksClass: KSClassDeclaration) {
|
private fun generateFactory(ksClass: KSClassDeclaration) {
|
||||||
val generatedPackage = ksClass.packageName.asString()
|
val generatedPackage = ksClass.packageName.asString()
|
||||||
val assistedFactoryClassName = "${ksClass.simpleName.asString()}_AssistedFactory"
|
val assistedFactoryClassName = "${ksClass.simpleName.asString()}AssistedFactory"
|
||||||
val constructor = ksClass.getConstructors().first { it.parameters.isNotEmpty() }
|
val constructor = ksClass.getConstructors().first { it.parameters.isNotEmpty() }
|
||||||
val assistedParameters = constructor.parameters.filter { it.isAnnotationPresent(Assisted::class) }
|
val assistedParameters = constructor.parameters.filter { it.isAnnotationPresent(Assisted::class) }
|
||||||
if (assistedParameters.size != 2) {
|
if (assistedParameters.size != 2) {
|
||||||
|
|||||||
@@ -322,10 +322,10 @@ Example for a new feature called RoomDetails:
|
|||||||
4. Verify that the structure looks ok and click on Finish
|
4. Verify that the structure looks ok and click on Finish
|
||||||
5. The modules api/impl should be created under `features/roomdetails` directory.
|
5. The modules api/impl should be created under `features/roomdetails` directory.
|
||||||
6. Sync project with Gradle so the modules are recognized (no need to add them to settings.gradle).
|
6. Sync project with Gradle so the modules are recognized (no need to add them to settings.gradle).
|
||||||
7. You can now add more Presentation classes (Events, State, StateProvider, View, Presenter) in the impl module with the `Template Presentation Classes`.
|
7. You can now add more Presentation classes (Events, State, StatePreviewParam, View, Presenter) in the impl module with the `Template Presentation Classes`.
|
||||||
To use it, just right click on the package where you want to generate classes, and click on `New` / `Template Presentation Classes`.
|
To use it, just right click on the package where you want to generate classes, and click on `New` / `Template Presentation Classes`.
|
||||||
Fill the text field with the base name of the classes: the generated files are `<BaseName>Event.kt`, `<BaseName>State.kt`,
|
Fill the text field with the base name of the classes: the generated files are `<BaseName>Event.kt`, `<BaseName>State.kt`,
|
||||||
`<BaseName>StateProvider.kt`, `<BaseName>Presenter.kt`, `<BaseName>Node.kt` and `<BaseName>View.kt`. For instance
|
`<BaseName>StatePreviewParam.kt`, `<BaseName>Presenter.kt`, `<BaseName>Node.kt` and `<BaseName>View.kt`. For instance
|
||||||
`PreferencesRoot` in the `features/preferences/impl/root` package.
|
`PreferencesRoot` in the `features/preferences/impl/root` package.
|
||||||
|
|
||||||
|
|
||||||
@@ -360,9 +360,9 @@ We have 3 tests frameworks in place, and this should be sufficient to guarantee
|
|||||||
- Maestro to test the global usage of the application. See the related [documentation](../.maestro/README.md).
|
- Maestro to test the global usage of the application. See the related [documentation](../.maestro/README.md).
|
||||||
- Combination of [Showkase](https://github.com/airbnb/Showkase) and [Paparazzi](https://github.com/cashapp/paparazzi), to test UI pixel perfect. To add test,
|
- Combination of [Showkase](https://github.com/airbnb/Showkase) and [Paparazzi](https://github.com/cashapp/paparazzi), to test UI pixel perfect. To add test,
|
||||||
just add `@Preview` for the composable you are adding. See the related [documentation](screenshot_testing.md) and see in the template the
|
just add `@Preview` for the composable you are adding. See the related [documentation](screenshot_testing.md) and see in the template the
|
||||||
file [TemplateView.kt](../features/template/src/main/kotlin/io/element/android/features/template/TemplateView.kt). We create PreviewProvider to provide
|
file [TemplateView.kt](../features/template/src/main/kotlin/io/element/android/features/template/TemplateView.kt). We create PreviewParam classes to provide
|
||||||
different states. See for instance the
|
different states. See for instance the
|
||||||
file [TemplateStateProvider.kt](../features/template/src/main/kotlin/io/element/android/features/template/TemplateStateProvider.kt)
|
file [TemplateStatePreviewParam.kt](../features/template/src/main/kotlin/io/element/android/features/template/TemplateStatePreviewParam.kt)
|
||||||
- Tests on presenter with [Molecule](https://github.com/cashapp/molecule) and [Turbine](https://github.com/cashapp/turbine). See in the template the class [TemplatePresenterTests](../features/template/src/test/kotlin/io/element/android/features/template/TemplatePresenterTests.kt).
|
- Tests on presenter with [Molecule](https://github.com/cashapp/molecule) and [Turbine](https://github.com/cashapp/turbine). See in the template the class [TemplatePresenterTests](../features/template/src/test/kotlin/io/element/android/features/template/TemplatePresenterTests.kt).
|
||||||
|
|
||||||
**Note** For now we want to avoid using class mocking (with library such as *mockk*), because this should be not necessary. We prefer to create Fake
|
**Note** For now we want to avoid using class mocking (with library such as *mockk*), because this should be not necessary. We prefer to create Fake
|
||||||
|
|||||||
+1
-1
Submodule enterprise updated: ae0001a17d...e633a343b1
+1
-1
@@ -10,7 +10,7 @@ package io.element.android.features.analytics.api.preferences
|
|||||||
|
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
|
|
||||||
open class AnalyticsPreferencesStateProvider : PreviewParameterProvider<AnalyticsPreferencesState> {
|
open class AnalyticsPreferencesStatePreviewParam : PreviewParameterProvider<AnalyticsPreferencesState> {
|
||||||
override val values: Sequence<AnalyticsPreferencesState>
|
override val values: Sequence<AnalyticsPreferencesState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aAnalyticsPreferencesState().copy(isEnabled = true),
|
aAnalyticsPreferencesState().copy(isEnabled = true),
|
||||||
+1
-1
@@ -66,7 +66,7 @@ fun AnalyticsPreferencesView(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun AnalyticsPreferencesViewPreview(@PreviewParameter(AnalyticsPreferencesStateProvider::class) state: AnalyticsPreferencesState) =
|
internal fun AnalyticsPreferencesViewPreview(@PreviewParameter(AnalyticsPreferencesStatePreviewParam::class) state: AnalyticsPreferencesState) =
|
||||||
ElementPreview {
|
ElementPreview {
|
||||||
AnalyticsPreferencesView(
|
AnalyticsPreferencesView(
|
||||||
state = state,
|
state = state,
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ package io.element.android.features.analytics.impl
|
|||||||
|
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
|
|
||||||
open class AnalyticsOptInStateProvider : PreviewParameterProvider<AnalyticsOptInState> {
|
open class AnalyticsOptInStatePreviewParam : PreviewParameterProvider<AnalyticsOptInState> {
|
||||||
override val values: Sequence<AnalyticsOptInState>
|
override val values: Sequence<AnalyticsOptInState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aAnalyticsOptInState(),
|
aAnalyticsOptInState(),
|
||||||
+1
-1
@@ -171,7 +171,7 @@ private fun AnalyticsOptInFooter(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun AnalyticsOptInViewPreview(@PreviewParameter(AnalyticsOptInStateProvider::class) state: AnalyticsOptInState) = ElementPreview {
|
internal fun AnalyticsOptInViewPreview(@PreviewParameter(AnalyticsOptInStatePreviewParam::class) state: AnalyticsOptInState) = ElementPreview {
|
||||||
AnalyticsOptInView(
|
AnalyticsOptInView(
|
||||||
state = state,
|
state = state,
|
||||||
onClickTerms = {},
|
onClickTerms = {},
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.Presenter
|
|||||||
|
|
||||||
@ContributesTo(AppScope::class)
|
@ContributesTo(AppScope::class)
|
||||||
@BindingContainer
|
@BindingContainer
|
||||||
interface AnalyticsModule {
|
interface AnalyticsBindingContainer {
|
||||||
@Binds
|
@Binds
|
||||||
fun bindAnalyticsPreferencesPresenter(presenter: AnalyticsPreferencesPresenter): Presenter<AnalyticsPreferencesState>
|
fun bindAnalyticsPreferencesPresenter(presenter: AnalyticsPreferencesPresenter): Presenter<AnalyticsPreferencesState>
|
||||||
}
|
}
|
||||||
+1
-1
@@ -11,7 +11,7 @@ package io.element.android.features.announcement.impl
|
|||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.features.announcement.api.Announcement
|
import io.element.android.features.announcement.api.Announcement
|
||||||
|
|
||||||
open class AnnouncementStateProvider : PreviewParameterProvider<AnnouncementState> {
|
open class AnnouncementStatePreviewParam : PreviewParameterProvider<AnnouncementState> {
|
||||||
override val values: Sequence<AnnouncementState>
|
override val values: Sequence<AnnouncementState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
anAnnouncementState(),
|
anAnnouncementState(),
|
||||||
+2
-2
@@ -33,7 +33,7 @@ import io.element.android.compound.tokens.generated.CompoundIcons
|
|||||||
import io.element.android.features.announcement.api.Announcement
|
import io.element.android.features.announcement.api.Announcement
|
||||||
import io.element.android.features.announcement.impl.AnnouncementEvent
|
import io.element.android.features.announcement.impl.AnnouncementEvent
|
||||||
import io.element.android.features.announcement.impl.AnnouncementState
|
import io.element.android.features.announcement.impl.AnnouncementState
|
||||||
import io.element.android.features.announcement.impl.AnnouncementStateProvider
|
import io.element.android.features.announcement.impl.AnnouncementStatePreviewParam
|
||||||
import io.element.android.libraries.designsystem.atomic.molecules.ButtonColumnMolecule
|
import io.element.android.libraries.designsystem.atomic.molecules.ButtonColumnMolecule
|
||||||
import io.element.android.libraries.designsystem.atomic.molecules.IconTitleSubtitleMolecule
|
import io.element.android.libraries.designsystem.atomic.molecules.IconTitleSubtitleMolecule
|
||||||
import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage
|
import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage
|
||||||
@@ -216,7 +216,7 @@ private fun Announcement.Fullscreen.notice(): String? = when (this) {
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun FullscreenAnnouncementViewPreview(@PreviewParameter(AnnouncementStateProvider::class) state: AnnouncementState) = ElementPreview {
|
internal fun FullscreenAnnouncementViewPreview(@PreviewParameter(AnnouncementStatePreviewParam::class) state: AnnouncementState) = ElementPreview {
|
||||||
FullscreenAnnouncementView(
|
FullscreenAnnouncementView(
|
||||||
state = state,
|
state = state,
|
||||||
)
|
)
|
||||||
|
|||||||
+3
-1
@@ -60,7 +60,9 @@ class PictureInPicturePresenter(
|
|||||||
}
|
}
|
||||||
is PictureInPictureEvent.SetPipOrientation -> {
|
is PictureInPictureEvent.SetPipOrientation -> {
|
||||||
Timber.tag(loggerTag.value).d("onOrientationChange: ${event.orientation}")
|
Timber.tag(loggerTag.value).d("onOrientationChange: ${event.orientation}")
|
||||||
pipView?.setPipOrientation(event.orientation)
|
if (isPipSupported) {
|
||||||
|
pipView?.setPipOrientation(event.orientation)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -8,9 +8,15 @@
|
|||||||
|
|
||||||
package io.element.android.features.call.impl.pip
|
package io.element.android.features.call.impl.pip
|
||||||
|
|
||||||
|
import android.os.Build
|
||||||
|
import androidx.annotation.RequiresApi
|
||||||
|
|
||||||
interface PipView {
|
interface PipView {
|
||||||
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
fun setPipOrientation(orientation: Int?)
|
fun setPipOrientation(orientation: Int?)
|
||||||
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
fun setPipParams()
|
fun setPipParams()
|
||||||
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
fun enterPipMode(): Boolean
|
fun enterPipMode(): Boolean
|
||||||
fun hangUp()
|
fun hangUp()
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -16,7 +16,7 @@ import io.element.android.libraries.matrix.api.core.RoomId
|
|||||||
import io.element.android.libraries.matrix.api.core.SessionId
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
|
|
||||||
open class CallNotificationDataProvider : PreviewParameterProvider<CallNotificationData> {
|
open class CallNotificationDataPreviewParam : PreviewParameterProvider<CallNotificationData> {
|
||||||
override val values: Sequence<CallNotificationData>
|
override val values: Sequence<CallNotificationData>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aCallNotificationData(
|
aCallNotificationData(
|
||||||
+1
-1
@@ -11,7 +11,7 @@ package io.element.android.features.call.impl.ui
|
|||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncData
|
||||||
|
|
||||||
open class CallScreenStateProvider : PreviewParameterProvider<CallScreenState> {
|
open class CallScreenStatePreviewParam : PreviewParameterProvider<CallScreenState> {
|
||||||
override val values: Sequence<CallScreenState>
|
override val values: Sequence<CallScreenState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aCallScreenState(),
|
aCallScreenState(),
|
||||||
+1
-1
@@ -266,7 +266,7 @@ private fun WebView.dispatchEscKeyEvent() {
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun CallScreenViewPreview(
|
internal fun CallScreenViewPreview(
|
||||||
@PreviewParameter(CallScreenStateProvider::class) state: CallScreenState,
|
@PreviewParameter(CallScreenStatePreviewParam::class) state: CallScreenState,
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
CallScreenView(
|
CallScreenView(
|
||||||
state = state,
|
state = state,
|
||||||
|
|||||||
+4
-1
@@ -202,7 +202,9 @@ class ElementCallActivity :
|
|||||||
}
|
}
|
||||||
DisposableEffect(Unit) {
|
DisposableEffect(Unit) {
|
||||||
val onPictureInPictureModeChangedListener = Consumer { _: PictureInPictureModeChangedInfo ->
|
val onPictureInPictureModeChangedListener = Consumer { _: PictureInPictureModeChangedInfo ->
|
||||||
setPipParams()
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
setPipParams()
|
||||||
|
}
|
||||||
pipEventSink(PictureInPictureEvent.OnPictureInPictureModeChanged(isInPictureInPictureMode))
|
pipEventSink(PictureInPictureEvent.OnPictureInPictureModeChanged(isInPictureInPictureMode))
|
||||||
if (!isInPictureInPictureMode && !lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
|
if (!isInPictureInPictureMode && !lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
|
||||||
Timber.tag(loggerTag.value).d("Exiting PiP mode: Hangup the call")
|
Timber.tag(loggerTag.value).d("Exiting PiP mode: Hangup the call")
|
||||||
@@ -300,6 +302,7 @@ class ElementCallActivity :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
override fun setPipOrientation(orientation: Int?) {
|
override fun setPipOrientation(orientation: Int?) {
|
||||||
currentPipOrientation = orientation
|
currentPipOrientation = orientation
|
||||||
setPictureInPictureParams(getPictureInPictureParams())
|
setPictureInPictureParams(getPictureInPictureParams())
|
||||||
|
|||||||
+1
-1
@@ -161,7 +161,7 @@ private fun ActionButton(
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun IncomingCallScreenPreview(
|
internal fun IncomingCallScreenPreview(
|
||||||
@PreviewParameter(CallNotificationDataProvider::class) state: CallNotificationData,
|
@PreviewParameter(CallNotificationDataPreviewParam::class) state: CallNotificationData,
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
IncomingCallScreen(
|
IncomingCallScreen(
|
||||||
notificationData = state,
|
notificationData = state,
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ import kotlinx.coroutines.CoroutineScope
|
|||||||
|
|
||||||
@BindingContainer
|
@BindingContainer
|
||||||
@ContributesTo(RoomScope::class)
|
@ContributesTo(RoomScope::class)
|
||||||
object ContentScannerModule {
|
object ContentScannerBindingContainer {
|
||||||
@Provides
|
@Provides
|
||||||
@SingleIn(RoomScope::class)
|
@SingleIn(RoomScope::class)
|
||||||
fun providesContentScannerService(
|
fun providesContentScannerService(
|
||||||
+5
-5
@@ -15,16 +15,16 @@ import io.element.android.tests.testutils.testCoroutineDispatchers
|
|||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class ContentScannerModuleTest {
|
class ContentScannerBindingContainerTest {
|
||||||
@Test
|
@Test
|
||||||
fun `ContentScannerModule provides NoopContentScannerService when ContentScanner is null`() = runTest {
|
fun `ContentScannerBindingContainer provides NoopContentScannerService when ContentScanner is null`() = runTest {
|
||||||
// Given
|
// Given
|
||||||
val contentScanner: ContentScanner? = null
|
val contentScanner: ContentScanner? = null
|
||||||
val sessionCoroutineScope = backgroundScope
|
val sessionCoroutineScope = backgroundScope
|
||||||
val coroutineDispatchers = testCoroutineDispatchers()
|
val coroutineDispatchers = testCoroutineDispatchers()
|
||||||
|
|
||||||
// When
|
// When
|
||||||
val contentScannerService = ContentScannerModule.providesContentScannerService(
|
val contentScannerService = ContentScannerBindingContainer.providesContentScannerService(
|
||||||
contentScanner = contentScanner,
|
contentScanner = contentScanner,
|
||||||
coroutineScope = sessionCoroutineScope,
|
coroutineScope = sessionCoroutineScope,
|
||||||
coroutineDispatchers = coroutineDispatchers,
|
coroutineDispatchers = coroutineDispatchers,
|
||||||
@@ -35,14 +35,14 @@ class ContentScannerModuleTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `ContentScannerModule provides DefaultContentScannerService when ContentScanner is not null`() = runTest {
|
fun `ContentScannerBindingContainer provides DefaultContentScannerService when ContentScanner is not null`() = runTest {
|
||||||
// Given
|
// Given
|
||||||
val contentScanner: ContentScanner? = FakeContentScanner()
|
val contentScanner: ContentScanner? = FakeContentScanner()
|
||||||
val sessionCoroutineScope = backgroundScope
|
val sessionCoroutineScope = backgroundScope
|
||||||
val coroutineDispatchers = testCoroutineDispatchers()
|
val coroutineDispatchers = testCoroutineDispatchers()
|
||||||
|
|
||||||
// When
|
// When
|
||||||
val contentScannerService = ContentScannerModule.providesContentScannerService(
|
val contentScannerService = ContentScannerBindingContainer.providesContentScannerService(
|
||||||
contentScanner = contentScanner,
|
contentScanner = contentScanner,
|
||||||
coroutineScope = sessionCoroutineScope,
|
coroutineScope = sessionCoroutineScope,
|
||||||
coroutineDispatchers = coroutineDispatchers,
|
coroutineDispatchers = coroutineDispatchers,
|
||||||
+2
-2
@@ -23,7 +23,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import io.element.android.features.createroom.impl.R
|
import io.element.android.features.createroom.impl.R
|
||||||
import io.element.android.features.invitepeople.api.InvitePeopleEvents
|
import io.element.android.features.invitepeople.api.InvitePeopleEvents
|
||||||
import io.element.android.features.invitepeople.api.InvitePeopleState
|
import io.element.android.features.invitepeople.api.InvitePeopleState
|
||||||
import io.element.android.features.invitepeople.api.InvitePeopleStateProvider
|
import io.element.android.features.invitepeople.api.InvitePeopleStatePreviewParam
|
||||||
import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage
|
import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
@@ -86,7 +86,7 @@ private fun AddPeopleTopBar(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun AddPeopleViewPreview(@PreviewParameter(InvitePeopleStateProvider::class) state: InvitePeopleState) = ElementPreview {
|
internal fun AddPeopleViewPreview(@PreviewParameter(InvitePeopleStatePreviewParam::class) state: InvitePeopleState) = ElementPreview {
|
||||||
AddPeopleView(
|
AddPeopleView(
|
||||||
state = state,
|
state = state,
|
||||||
invitePeopleView = {},
|
invitePeopleView = {},
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ import io.element.android.libraries.permissions.api.aPermissionsState
|
|||||||
import io.element.android.libraries.previewutils.room.aSpaceRoom
|
import io.element.android.libraries.previewutils.room.aSpaceRoom
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
open class ConfigureRoomStateProvider : PreviewParameterProvider<ConfigureRoomState> {
|
open class ConfigureRoomStatePreviewParam : PreviewParameterProvider<ConfigureRoomState> {
|
||||||
override val values: Sequence<ConfigureRoomState>
|
override val values: Sequence<ConfigureRoomState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aConfigureRoomState(),
|
aConfigureRoomState(),
|
||||||
+2
-2
@@ -349,12 +349,12 @@ private fun RoomJoinRuleOptions(
|
|||||||
|
|
||||||
@PreviewWithLargeHeight
|
@PreviewWithLargeHeight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun ConfigureRoomViewLightPreview(@PreviewParameter(ConfigureRoomStateProvider::class) state: ConfigureRoomState) =
|
internal fun ConfigureRoomViewLightPreview(@PreviewParameter(ConfigureRoomStatePreviewParam::class) state: ConfigureRoomState) =
|
||||||
ElementPreviewLight { ContentToPreview(state) }
|
ElementPreviewLight { ContentToPreview(state) }
|
||||||
|
|
||||||
@PreviewWithLargeHeight
|
@PreviewWithLargeHeight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun ConfigureRoomViewDarkPreview(@PreviewParameter(ConfigureRoomStateProvider::class) state: ConfigureRoomState) =
|
internal fun ConfigureRoomViewDarkPreview(@PreviewParameter(ConfigureRoomStatePreviewParam::class) state: ConfigureRoomState) =
|
||||||
ElementPreviewDark { ContentToPreview(state) }
|
ElementPreviewDark { ContentToPreview(state) }
|
||||||
|
|
||||||
@ExcludeFromCoverage
|
@ExcludeFromCoverage
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ package io.element.android.features.logout.impl
|
|||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
|
|
||||||
open class AccountDeactivationStateProvider : PreviewParameterProvider<AccountDeactivationState> {
|
open class AccountDeactivationStatePreviewParam : PreviewParameterProvider<AccountDeactivationState> {
|
||||||
private val filledForm = aDeactivateFormState(eraseData = true, password = "password")
|
private val filledForm = aDeactivateFormState(eraseData = true, password = "password")
|
||||||
override val values: Sequence<AccountDeactivationState>
|
override val values: Sequence<AccountDeactivationState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
+1
-1
@@ -308,7 +308,7 @@ private fun String.sanitize(): String {
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun AccountDeactivationViewPreview(
|
internal fun AccountDeactivationViewPreview(
|
||||||
@PreviewParameter(AccountDeactivationStateProvider::class) state: AccountDeactivationState,
|
@PreviewParameter(AccountDeactivationStatePreviewParam::class) state: AccountDeactivationState,
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
AccountDeactivationView(
|
AccountDeactivationView(
|
||||||
state,
|
state,
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
|||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
|
||||||
open class ForwardMessagesStateProvider : PreviewParameterProvider<ForwardMessagesState> {
|
open class ForwardMessagesStatePreviewParam : PreviewParameterProvider<ForwardMessagesState> {
|
||||||
override val values: Sequence<ForwardMessagesState>
|
override val values: Sequence<ForwardMessagesState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aForwardMessagesState(),
|
aForwardMessagesState(),
|
||||||
+1
-1
@@ -38,7 +38,7 @@ fun ForwardMessagesView(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun ForwardMessagesViewPreview(@PreviewParameter(ForwardMessagesStateProvider::class) state: ForwardMessagesState) = ElementPreview {
|
internal fun ForwardMessagesViewPreview(@PreviewParameter(ForwardMessagesStatePreviewParam::class) state: ForwardMessagesState) = ElementPreview {
|
||||||
ForwardMessagesView(
|
ForwardMessagesView(
|
||||||
state = state,
|
state = state,
|
||||||
onForwardSuccess = {}
|
onForwardSuccess = {}
|
||||||
|
|||||||
+2
-2
@@ -18,7 +18,7 @@ import io.element.android.libraries.di.SessionScope
|
|||||||
|
|
||||||
@ContributesTo(SessionScope::class)
|
@ContributesTo(SessionScope::class)
|
||||||
@BindingContainer
|
@BindingContainer
|
||||||
interface FtueModule {
|
interface FtueBindingContainer {
|
||||||
@Binds
|
@Binds
|
||||||
fun bindChooseSelfVerificationMethodPresenter(presenter: ChooseSelfVerificationModePresenter): Presenter<ChooseSelfVerificationModeState>
|
fun bindChooseSelfVerificationModePresenter(presenter: ChooseSelfVerificationModePresenter): Presenter<ChooseSelfVerificationModeState>
|
||||||
}
|
}
|
||||||
+1
-1
@@ -11,7 +11,7 @@ package io.element.android.features.ftue.impl.notifications
|
|||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.permissions.api.aPermissionsState
|
import io.element.android.libraries.permissions.api.aPermissionsState
|
||||||
|
|
||||||
open class NotificationsOptInStateProvider : PreviewParameterProvider<NotificationsOptInState> {
|
open class NotificationsOptInStatePreviewParam : PreviewParameterProvider<NotificationsOptInState> {
|
||||||
override val values: Sequence<NotificationsOptInState>
|
override val values: Sequence<NotificationsOptInState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aNotificationsOptInState(),
|
aNotificationsOptInState(),
|
||||||
+1
-1
@@ -178,7 +178,7 @@ private fun NotificationRow(
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun NotificationsOptInViewPreview(
|
internal fun NotificationsOptInViewPreview(
|
||||||
@PreviewParameter(NotificationsOptInStateProvider::class) state: NotificationsOptInState
|
@PreviewParameter(NotificationsOptInStatePreviewParam::class) state: NotificationsOptInState
|
||||||
) {
|
) {
|
||||||
ElementPreview {
|
ElementPreview {
|
||||||
NotificationsOptInView(
|
NotificationsOptInView(
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
|||||||
import io.element.android.features.logout.api.direct.aDirectLogoutState
|
import io.element.android.features.logout.api.direct.aDirectLogoutState
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncData
|
||||||
|
|
||||||
class ChooseSelfVerificationModeStateProvider :
|
class ChooseSelfVerificationModeStatePreviewParam :
|
||||||
PreviewParameterProvider<ChooseSelfVerificationModeState> {
|
PreviewParameterProvider<ChooseSelfVerificationModeState> {
|
||||||
override val values = sequenceOf(
|
override val values = sequenceOf(
|
||||||
aChooseSelfVerificationModeState(
|
aChooseSelfVerificationModeState(
|
||||||
+1
-1
@@ -149,7 +149,7 @@ private fun ChooseSelfVerificationModeButtons(
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun ChooseSelfVerificationModeViewPreview(
|
internal fun ChooseSelfVerificationModeViewPreview(
|
||||||
@PreviewParameter(ChooseSelfVerificationModeStateProvider::class) state: ChooseSelfVerificationModeState
|
@PreviewParameter(ChooseSelfVerificationModeStatePreviewParam::class) state: ChooseSelfVerificationModeState
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
ChooseSelfVerificationModeView(
|
ChooseSelfVerificationModeView(
|
||||||
state = state,
|
state = state,
|
||||||
|
|||||||
+3
-3
@@ -10,7 +10,7 @@ package io.element.android.features.home.impl
|
|||||||
|
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.features.home.impl.roomlist.RoomListState
|
import io.element.android.features.home.impl.roomlist.RoomListState
|
||||||
import io.element.android.features.home.impl.roomlist.RoomListStateProvider
|
import io.element.android.features.home.impl.roomlist.RoomListStatePreviewParam
|
||||||
import io.element.android.features.home.impl.roomlist.aRoomListState
|
import io.element.android.features.home.impl.roomlist.aRoomListState
|
||||||
import io.element.android.features.home.impl.roomlist.aRoomsContentState
|
import io.element.android.features.home.impl.roomlist.aRoomsContentState
|
||||||
import io.element.android.features.home.impl.roomlist.generateRoomListRoomSummaryList
|
import io.element.android.features.home.impl.roomlist.generateRoomListRoomSummaryList
|
||||||
@@ -24,7 +24,7 @@ import io.element.android.libraries.matrix.api.user.MatrixUser
|
|||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
open class HomeStateProvider : PreviewParameterProvider<HomeState> {
|
open class HomeStatePreviewParam : PreviewParameterProvider<HomeState> {
|
||||||
override val values: Sequence<HomeState>
|
override val values: Sequence<HomeState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aHomeState(),
|
aHomeState(),
|
||||||
@@ -43,7 +43,7 @@ open class HomeStateProvider : PreviewParameterProvider<HomeState> {
|
|||||||
aHomeState(
|
aHomeState(
|
||||||
currentHomeNavigationBarItem = HomeNavigationBarItem.Spaces,
|
currentHomeNavigationBarItem = HomeNavigationBarItem.Spaces,
|
||||||
),
|
),
|
||||||
) + RoomListStateProvider().values.map {
|
) + RoomListStatePreviewParam().values.map {
|
||||||
aHomeState(roomListState = it)
|
aHomeState(roomListState = it)
|
||||||
} + aHomeState(
|
} + aHomeState(
|
||||||
currentHomeNavigationBarItem = HomeNavigationBarItem.Spaces,
|
currentHomeNavigationBarItem = HomeNavigationBarItem.Spaces,
|
||||||
+1
-1
@@ -371,7 +371,7 @@ internal fun RoomListRoomSummary.contentType() = displayType.ordinal
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun HomeViewPreview(@PreviewParameter(HomeStateProvider::class) state: HomeState) = ElementPreview {
|
internal fun HomeViewPreview(@PreviewParameter(HomeStatePreviewParam::class) state: HomeState) = ElementPreview {
|
||||||
HomeView(
|
HomeView(
|
||||||
homeState = state,
|
homeState = state,
|
||||||
onRoomClick = { _, _ -> },
|
onRoomClick = { _, _ -> },
|
||||||
|
|||||||
+2
-2
@@ -42,7 +42,7 @@ import io.element.android.features.home.impl.filters.selection.FilterSelectionSt
|
|||||||
import io.element.android.features.home.impl.model.RoomListRoomSummary
|
import io.element.android.features.home.impl.model.RoomListRoomSummary
|
||||||
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
||||||
import io.element.android.features.home.impl.roomlist.RoomListContentState
|
import io.element.android.features.home.impl.roomlist.RoomListContentState
|
||||||
import io.element.android.features.home.impl.roomlist.RoomListContentStateProvider
|
import io.element.android.features.home.impl.roomlist.RoomListContentStatePreviewParam
|
||||||
import io.element.android.features.home.impl.roomlist.RoomListEvent
|
import io.element.android.features.home.impl.roomlist.RoomListEvent
|
||||||
import io.element.android.features.home.impl.roomlist.SecurityBannerState
|
import io.element.android.features.home.impl.roomlist.SecurityBannerState
|
||||||
import io.element.android.features.home.impl.spacefilters.SpaceFiltersState
|
import io.element.android.features.home.impl.spacefilters.SpaceFiltersState
|
||||||
@@ -336,7 +336,7 @@ private fun EmptyScaffold(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun RoomListContentViewPreview(@PreviewParameter(RoomListContentStateProvider::class) state: RoomListContentState) = ElementPreview {
|
internal fun RoomListContentViewPreview(@PreviewParameter(RoomListContentStatePreviewParam::class) state: RoomListContentState) = ElementPreview {
|
||||||
RoomListContentView(
|
RoomListContentView(
|
||||||
contentState = state,
|
contentState = state,
|
||||||
filtersState = aRoomListFiltersState(
|
filtersState = aRoomListFiltersState(
|
||||||
|
|||||||
+2
-2
@@ -43,7 +43,7 @@ import io.element.android.compound.tokens.generated.CompoundIcons
|
|||||||
import io.element.android.features.home.impl.R
|
import io.element.android.features.home.impl.R
|
||||||
import io.element.android.features.home.impl.model.LatestEvent
|
import io.element.android.features.home.impl.model.LatestEvent
|
||||||
import io.element.android.features.home.impl.model.RoomListRoomSummary
|
import io.element.android.features.home.impl.model.RoomListRoomSummary
|
||||||
import io.element.android.features.home.impl.model.RoomListRoomSummaryProvider
|
import io.element.android.features.home.impl.model.RoomListRoomSummaryPreviewParam
|
||||||
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
||||||
import io.element.android.features.home.impl.roomlist.RoomListEvent
|
import io.element.android.features.home.impl.roomlist.RoomListEvent
|
||||||
import io.element.android.libraries.core.extensions.orEmpty
|
import io.element.android.libraries.core.extensions.orEmpty
|
||||||
@@ -449,7 +449,7 @@ private fun MentionIndicatorAtom() {
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun RoomSummaryRowPreview(@PreviewParameter(RoomListRoomSummaryProvider::class) data: RoomListRoomSummary) = ElementPreview {
|
internal fun RoomSummaryRowPreview(@PreviewParameter(RoomListRoomSummaryPreviewParam::class) data: RoomListRoomSummary) = ElementPreview {
|
||||||
RoomSummaryRow(
|
RoomSummaryRow(
|
||||||
room = data,
|
room = data,
|
||||||
hideInviteAvatars = false,
|
hideInviteAvatars = false,
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ import io.element.android.libraries.di.SessionScope
|
|||||||
|
|
||||||
@BindingContainer
|
@BindingContainer
|
||||||
@ContributesTo(SessionScope::class)
|
@ContributesTo(SessionScope::class)
|
||||||
interface HomeSpacesModule {
|
interface HomeSpacesBindingContainer {
|
||||||
@Binds
|
@Binds
|
||||||
fun bindHomeSpacesPresenter(presenter: HomeSpacesPresenter): Presenter<HomeSpacesState>
|
fun bindHomeSpacesPresenter(presenter: HomeSpacesPresenter): Presenter<HomeSpacesState>
|
||||||
}
|
}
|
||||||
+3
-3
@@ -26,15 +26,15 @@ import io.element.android.libraries.di.SessionScope
|
|||||||
|
|
||||||
@ContributesTo(SessionScope::class)
|
@ContributesTo(SessionScope::class)
|
||||||
@BindingContainer
|
@BindingContainer
|
||||||
interface RoomListModule {
|
interface RoomListBindingContainer {
|
||||||
@Binds
|
@Binds
|
||||||
fun bindRoomListPresenter(presenter: RoomListPresenter): Presenter<RoomListState>
|
fun bindRoomListPresenter(presenter: RoomListPresenter): Presenter<RoomListState>
|
||||||
|
|
||||||
@Binds
|
@Binds
|
||||||
fun bindSearchPresenter(presenter: RoomListSearchPresenter): Presenter<RoomListSearchState>
|
fun bindRoomListSearchPresenter(presenter: RoomListSearchPresenter): Presenter<RoomListSearchState>
|
||||||
|
|
||||||
@Binds
|
@Binds
|
||||||
fun bindFiltersPresenter(presenter: RoomListFiltersPresenter): Presenter<RoomListFiltersState>
|
fun bindRoomListFiltersPresenter(presenter: RoomListFiltersPresenter): Presenter<RoomListFiltersState>
|
||||||
|
|
||||||
@Binds
|
@Binds
|
||||||
fun bindSpaceFiltersPresenter(presenter: SpaceFiltersPresenter): Presenter<SpaceFiltersState>
|
fun bindSpaceFiltersPresenter(presenter: SpaceFiltersPresenter): Presenter<SpaceFiltersState>
|
||||||
+1
-1
@@ -12,7 +12,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
|||||||
import io.element.android.features.home.impl.filters.selection.FilterSelectionState
|
import io.element.android.features.home.impl.filters.selection.FilterSelectionState
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
class RoomListFiltersStateProvider : PreviewParameterProvider<RoomListFiltersState> {
|
class RoomListFiltersStatePreviewParam : PreviewParameterProvider<RoomListFiltersState> {
|
||||||
override val values: Sequence<RoomListFiltersState>
|
override val values: Sequence<RoomListFiltersState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aRoomListFiltersState(),
|
aRoomListFiltersState(),
|
||||||
+1
-1
@@ -212,7 +212,7 @@ private fun RoomListFilterView(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun RoomListFiltersViewPreview(@PreviewParameter(RoomListFiltersStateProvider::class) state: RoomListFiltersState) = ElementPreview {
|
internal fun RoomListFiltersViewPreview(@PreviewParameter(RoomListFiltersStatePreviewParam::class) state: RoomListFiltersState) = ElementPreview {
|
||||||
RoomListFiltersView(
|
RoomListFiltersView(
|
||||||
modifier = Modifier.padding(vertical = 4.dp),
|
modifier = Modifier.padding(vertical = 4.dp),
|
||||||
state = state,
|
state = state,
|
||||||
|
|||||||
+1
-1
@@ -24,7 +24,7 @@ import io.element.android.libraries.matrix.api.user.DisplayedStatus
|
|||||||
import io.element.android.libraries.matrix.ui.model.InviteSender
|
import io.element.android.libraries.matrix.ui.model.InviteSender
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSummary> {
|
open class RoomListRoomSummaryPreviewParam : PreviewParameterProvider<RoomListRoomSummary> {
|
||||||
override val values: Sequence<RoomListRoomSummary>
|
override val values: Sequence<RoomListRoomSummary>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
listOf(
|
listOf(
|
||||||
+1
-1
@@ -19,7 +19,7 @@ import kotlinx.collections.immutable.ImmutableList
|
|||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import kotlinx.collections.immutable.toImmutableSet
|
import kotlinx.collections.immutable.toImmutableSet
|
||||||
|
|
||||||
open class RoomListContentStateProvider : PreviewParameterProvider<RoomListContentState> {
|
open class RoomListContentStatePreviewParam : PreviewParameterProvider<RoomListContentState> {
|
||||||
override val values: Sequence<RoomListContentState>
|
override val values: Sequence<RoomListContentState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aRoomsContentState(),
|
aRoomsContentState(),
|
||||||
+1
-1
@@ -199,7 +199,7 @@ private fun RoomListModalBottomSheetContent(
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun RoomListContextMenuPreview(
|
internal fun RoomListContextMenuPreview(
|
||||||
@PreviewParameter(RoomListStateContextMenuShownProvider::class) contextMenu: RoomListState.ContextMenu.Shown
|
@PreviewParameter(RoomListStateContextMenuShownPreviewParam::class) contextMenu: RoomListState.ContextMenu.Shown
|
||||||
) = ElementPreview(fillMaxSize = true) {
|
) = ElementPreview(fillMaxSize = true) {
|
||||||
RoomListContextMenu(
|
RoomListContextMenu(
|
||||||
contextMenu = contextMenu,
|
contextMenu = contextMenu,
|
||||||
|
|||||||
+1
-1
@@ -126,7 +126,7 @@ private fun RoomListDeclineInviteMenuContent(
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun RoomListDeclineInviteMenuPreview(
|
internal fun RoomListDeclineInviteMenuPreview(
|
||||||
@PreviewParameter(RoomListStateDeclineInviteMenuShownProvider::class) menu: RoomListState.DeclineInviteMenu.Shown,
|
@PreviewParameter(RoomListStateDeclineInviteMenuShownPreviewParam::class) menu: RoomListState.DeclineInviteMenu.Shown,
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
RoomListDeclineInviteMenu(
|
RoomListDeclineInviteMenu(
|
||||||
menu = menu,
|
menu = menu,
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ package io.element.android.features.home.impl.roomlist
|
|||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
|
||||||
open class RoomListStateContextMenuShownProvider : PreviewParameterProvider<RoomListState.ContextMenu.Shown> {
|
open class RoomListStateContextMenuShownPreviewParam : PreviewParameterProvider<RoomListState.ContextMenu.Shown> {
|
||||||
override val values: Sequence<RoomListState.ContextMenu.Shown>
|
override val values: Sequence<RoomListState.ContextMenu.Shown>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aContextMenuShown(hasNewContent = true),
|
aContextMenuShown(hasNewContent = true),
|
||||||
+1
-1
@@ -12,7 +12,7 @@ import androidx.compose.ui.tooling.preview.datasource.LoremIpsum
|
|||||||
import io.element.android.features.home.impl.model.RoomListRoomSummary
|
import io.element.android.features.home.impl.model.RoomListRoomSummary
|
||||||
import io.element.android.features.home.impl.model.aRoomListRoomSummary
|
import io.element.android.features.home.impl.model.aRoomListRoomSummary
|
||||||
|
|
||||||
open class RoomListStateDeclineInviteMenuShownProvider : PreviewParameterProvider<RoomListState.DeclineInviteMenu.Shown> {
|
open class RoomListStateDeclineInviteMenuShownPreviewParam : PreviewParameterProvider<RoomListState.DeclineInviteMenu.Shown> {
|
||||||
override val values: Sequence<RoomListState.DeclineInviteMenu.Shown>
|
override val values: Sequence<RoomListState.DeclineInviteMenu.Shown>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aDeclineInviteMenuShown(),
|
aDeclineInviteMenuShown(),
|
||||||
+1
-1
@@ -33,7 +33,7 @@ import kotlinx.collections.immutable.ImmutableList
|
|||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
open class RoomListStateProvider : PreviewParameterProvider<RoomListState> {
|
open class RoomListStatePreviewParam : PreviewParameterProvider<RoomListState> {
|
||||||
override val values: Sequence<RoomListState>
|
override val values: Sequence<RoomListState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aRoomListState(),
|
aRoomListState(),
|
||||||
+1
-1
@@ -41,7 +41,7 @@ import kotlinx.collections.immutable.persistentMapOf
|
|||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
import kotlinx.collections.immutable.toPersistentList
|
import kotlinx.collections.immutable.toPersistentList
|
||||||
|
|
||||||
class GlobalSearchStateProvider : PreviewParameterProvider<GlobalSearchState> {
|
class GlobalSearchStatePreviewParam : PreviewParameterProvider<GlobalSearchState> {
|
||||||
override val values: Sequence<GlobalSearchState>
|
override val values: Sequence<GlobalSearchState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
// Not enabled, no preview
|
// Not enabled, no preview
|
||||||
+1
-1
@@ -553,7 +553,7 @@ private fun Modifier.addSeparatorLine(color: Color, isLastItem: Boolean): Modifi
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun GlobalSearchViewPreview(
|
internal fun GlobalSearchViewPreview(
|
||||||
@PreviewParameter(GlobalSearchStateProvider::class) state: GlobalSearchState,
|
@PreviewParameter(GlobalSearchStatePreviewParam::class) state: GlobalSearchState,
|
||||||
) {
|
) {
|
||||||
ElementPreview {
|
ElementPreview {
|
||||||
GlobalSearchView(
|
GlobalSearchView(
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ import io.element.android.features.home.impl.roomlist.aRoomListRoomSummaryList
|
|||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
|
|
||||||
class RoomListSearchStateProvider : PreviewParameterProvider<RoomListSearchState> {
|
class RoomListSearchStatePreviewParam : PreviewParameterProvider<RoomListSearchState> {
|
||||||
override val values: Sequence<RoomListSearchState>
|
override val values: Sequence<RoomListSearchState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aRoomListSearchState(),
|
aRoomListSearchState(),
|
||||||
+1
-1
@@ -196,7 +196,7 @@ private fun RoomListSearchContent(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun RoomListSearchContentPreview(@PreviewParameter(RoomListSearchStateProvider::class) state: RoomListSearchState) = ElementPreview {
|
internal fun RoomListSearchContentPreview(@PreviewParameter(RoomListSearchStatePreviewParam::class) state: RoomListSearchState) = ElementPreview {
|
||||||
RoomListSearchContent(
|
RoomListSearchContent(
|
||||||
state = state,
|
state = state,
|
||||||
hideInvitesAvatars = false,
|
hideInvitesAvatars = false,
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ import io.element.android.libraries.matrix.api.spaces.SpaceServiceFilter
|
|||||||
import io.element.android.libraries.previewutils.room.aSpaceRoom
|
import io.element.android.libraries.previewutils.room.aSpaceRoom
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
class SpaceFiltersStateProvider : PreviewParameterProvider<SpaceFiltersState> {
|
class SpaceFiltersStatePreviewParam : PreviewParameterProvider<SpaceFiltersState> {
|
||||||
override val values: Sequence<SpaceFiltersState>
|
override val values: Sequence<SpaceFiltersState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aSelectingSpaceFiltersState(),
|
aSelectingSpaceFiltersState(),
|
||||||
+1
-1
@@ -189,6 +189,6 @@ private fun SpaceFilterItem(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun SpaceFiltersViewPreview(@PreviewParameter(SpaceFiltersStateProvider::class) state: SpaceFiltersState) = ElementPreview(fillMaxSize = true) {
|
internal fun SpaceFiltersViewPreview(@PreviewParameter(SpaceFiltersStatePreviewParam::class) state: SpaceFiltersState) = ElementPreview(fillMaxSize = true) {
|
||||||
SpaceFiltersView(state = state)
|
SpaceFiltersView(state = state)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -15,11 +15,11 @@ import io.element.android.libraries.previewutils.room.aSpaceRoom
|
|||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
import kotlinx.collections.immutable.toImmutableSet
|
import kotlinx.collections.immutable.toImmutableSet
|
||||||
|
|
||||||
open class HomeSpacesStateProvider : PreviewParameterProvider<HomeSpacesState> {
|
open class HomeSpacesStatePreviewParam : PreviewParameterProvider<HomeSpacesState> {
|
||||||
override val values: Sequence<HomeSpacesState>
|
override val values: Sequence<HomeSpacesState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aHomeSpacesState(
|
aHomeSpacesState(
|
||||||
spaceRooms = SpaceRoomProvider().values.toList(),
|
spaceRooms = SpaceRoomPreviewParam().values.toList(),
|
||||||
seenSpaceInvites = setOf(
|
seenSpaceInvites = setOf(
|
||||||
RoomId("!spaceId3:example.com"),
|
RoomId("!spaceId3:example.com"),
|
||||||
),
|
),
|
||||||
+1
-1
@@ -171,7 +171,7 @@ private fun EmptySpaceHomeView(
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun HomeSpacesViewPreview(
|
internal fun HomeSpacesViewPreview(
|
||||||
@PreviewParameter(HomeSpacesStateProvider::class) state: HomeSpacesState,
|
@PreviewParameter(HomeSpacesStatePreviewParam::class) state: HomeSpacesState,
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
HomeSpacesView(
|
HomeSpacesView(
|
||||||
state = state,
|
state = state,
|
||||||
|
|||||||
+1
-1
@@ -14,7 +14,7 @@ import io.element.android.libraries.matrix.api.room.CurrentUserMembership
|
|||||||
import io.element.android.libraries.matrix.api.spaces.SpaceRoom
|
import io.element.android.libraries.matrix.api.spaces.SpaceRoom
|
||||||
import io.element.android.libraries.previewutils.room.aSpaceRoom
|
import io.element.android.libraries.previewutils.room.aSpaceRoom
|
||||||
|
|
||||||
class SpaceRoomProvider : PreviewParameterProvider<SpaceRoom> {
|
class SpaceRoomPreviewParam : PreviewParameterProvider<SpaceRoom> {
|
||||||
override val values: Sequence<SpaceRoom> = sequenceOf(
|
override val values: Sequence<SpaceRoom> = sequenceOf(
|
||||||
aSpaceRoom(),
|
aSpaceRoom(),
|
||||||
aSpaceRoom(
|
aSpaceRoom(
|
||||||
+3
@@ -5,6 +5,8 @@
|
|||||||
* Please see LICENSE files in the repository root for full details.
|
* Please see LICENSE files in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@file:OptIn(ExperimentalCoroutinesApi::class)
|
||||||
|
|
||||||
package io.element.android.features.home.impl.search
|
package io.element.android.features.home.impl.search
|
||||||
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
@@ -35,6 +37,7 @@ import io.element.android.tests.testutils.test
|
|||||||
import io.element.android.tests.testutils.testCoroutineDispatchers
|
import io.element.android.tests.testutils.testCoroutineDispatchers
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.flow.flowOf
|
import kotlinx.coroutines.flow.flowOf
|
||||||
import kotlinx.coroutines.test.TestScope
|
import kotlinx.coroutines.test.TestScope
|
||||||
import kotlinx.coroutines.test.runCurrent
|
import kotlinx.coroutines.test.runCurrent
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.AsyncAction
|
|||||||
import io.element.android.libraries.designsystem.preview.ROOM_NAME
|
import io.element.android.libraries.designsystem.preview.ROOM_NAME
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
|
||||||
open class AcceptDeclineInviteStateProvider : PreviewParameterProvider<AcceptDeclineInviteState> {
|
open class AcceptDeclineInviteStatePreviewParam : PreviewParameterProvider<AcceptDeclineInviteState> {
|
||||||
override val values: Sequence<AcceptDeclineInviteState>
|
override val values: Sequence<AcceptDeclineInviteState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
anAcceptDeclineInviteState(),
|
anAcceptDeclineInviteState(),
|
||||||
+1
-1
@@ -123,7 +123,7 @@ private fun DeclineConfirmationDialog(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun AcceptDeclineInviteViewPreview(@PreviewParameter(AcceptDeclineInviteStateProvider::class) state: AcceptDeclineInviteState) =
|
internal fun AcceptDeclineInviteViewPreview(@PreviewParameter(AcceptDeclineInviteStatePreviewParam::class) state: AcceptDeclineInviteState) =
|
||||||
ElementPreview {
|
ElementPreview {
|
||||||
AcceptDeclineInviteView(
|
AcceptDeclineInviteView(
|
||||||
state = state,
|
state = state,
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ package io.element.android.features.invite.impl.declineandblock
|
|||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
|
|
||||||
open class DeclineAndBlockStateProvider : PreviewParameterProvider<DeclineAndBlockState> {
|
open class DeclineAndBlockStatePreviewParam : PreviewParameterProvider<DeclineAndBlockState> {
|
||||||
override val values: Sequence<DeclineAndBlockState>
|
override val values: Sequence<DeclineAndBlockState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aDeclineAndBlockState(),
|
aDeclineAndBlockState(),
|
||||||
+1
-1
@@ -145,7 +145,7 @@ fun DeclineAndBlockView(
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun DeclineAndBlockViewPreview(
|
internal fun DeclineAndBlockViewPreview(
|
||||||
@PreviewParameter(DeclineAndBlockStateProvider::class) state: DeclineAndBlockState
|
@PreviewParameter(DeclineAndBlockStatePreviewParam::class) state: DeclineAndBlockState
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
DeclineAndBlockView(
|
DeclineAndBlockView(
|
||||||
state = state,
|
state = state,
|
||||||
|
|||||||
+2
-2
@@ -22,9 +22,9 @@ import io.element.android.libraries.matrix.api.MatrixClient
|
|||||||
|
|
||||||
@ContributesTo(SessionScope::class)
|
@ContributesTo(SessionScope::class)
|
||||||
@BindingContainer
|
@BindingContainer
|
||||||
interface InviteModule {
|
interface InviteBindingContainer {
|
||||||
@Binds
|
@Binds
|
||||||
fun bindAcceptDeclinePresenter(presenter: AcceptDeclineInvitePresenter): Presenter<AcceptDeclineInviteState>
|
fun bindAcceptDeclineInvitePresenter(presenter: AcceptDeclineInvitePresenter): Presenter<AcceptDeclineInviteState>
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@Provides
|
@Provides
|
||||||
+1
-1
@@ -12,7 +12,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
|||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
|
||||||
class InvitePeopleStateProvider : PreviewParameterProvider<InvitePeopleState> {
|
class InvitePeopleStatePreviewParam : PreviewParameterProvider<InvitePeopleState> {
|
||||||
override val values: Sequence<InvitePeopleState>
|
override val values: Sequence<InvitePeopleState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aPreviewInvitePeopleState(),
|
aPreviewInvitePeopleState(),
|
||||||
+1
-1
@@ -26,7 +26,7 @@ import kotlinx.collections.immutable.ImmutableList
|
|||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
internal class DefaultInvitePeopleStateProvider : PreviewParameterProvider<DefaultInvitePeopleState> {
|
internal class DefaultInvitePeopleStatePreviewParam : PreviewParameterProvider<DefaultInvitePeopleState> {
|
||||||
override val values: Sequence<DefaultInvitePeopleState>
|
override val values: Sequence<DefaultInvitePeopleState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aDefaultInvitePeopleState(),
|
aDefaultInvitePeopleState(),
|
||||||
+1
-1
@@ -316,7 +316,7 @@ private fun InvitePeopleConfirmModal(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun InvitePeopleViewPreview(@PreviewParameter(DefaultInvitePeopleStateProvider::class) state: DefaultInvitePeopleState) =
|
internal fun InvitePeopleViewPreview(@PreviewParameter(DefaultInvitePeopleStatePreviewParam::class) state: DefaultInvitePeopleState) =
|
||||||
ElementPreview {
|
ElementPreview {
|
||||||
InvitePeopleView(state = state)
|
InvitePeopleView(state = state)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@ import io.element.android.libraries.matrix.api.user.MatrixUser
|
|||||||
import io.element.android.libraries.matrix.ui.model.InviteSender
|
import io.element.android.libraries.matrix.ui.model.InviteSender
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
open class JoinRoomStateProvider : PreviewParameterProvider<JoinRoomState> {
|
open class JoinRoomStatePreviewParam : PreviewParameterProvider<JoinRoomState> {
|
||||||
override val values: Sequence<JoinRoomState>
|
override val values: Sequence<JoinRoomState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aJoinRoomState(
|
aJoinRoomState(
|
||||||
+1
-1
@@ -642,7 +642,7 @@ private fun JoinRoomTopBar(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun JoinRoomViewPreview(@PreviewParameter(JoinRoomStateProvider::class) state: JoinRoomState) = ElementPreview {
|
internal fun JoinRoomViewPreview(@PreviewParameter(JoinRoomStatePreviewParam::class) state: JoinRoomState) = ElementPreview {
|
||||||
JoinRoomView(
|
JoinRoomView(
|
||||||
state = state,
|
state = state,
|
||||||
onBackClick = { },
|
onBackClick = { },
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@ import java.util.Optional
|
|||||||
|
|
||||||
@BindingContainer
|
@BindingContainer
|
||||||
@ContributesTo(SessionScope::class)
|
@ContributesTo(SessionScope::class)
|
||||||
object JoinRoomModule {
|
object JoinRoomBindingContainer {
|
||||||
@Provides
|
@Provides
|
||||||
fun providesJoinRoomPresenterFactory(
|
fun providesJoinRoomPresenterFactory(
|
||||||
client: MatrixClient,
|
client: MatrixClient,
|
||||||
+1
-1
@@ -16,7 +16,7 @@ import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
|
|||||||
import io.element.android.libraries.designsystem.preview.USER_NAME_CHARLIE
|
import io.element.android.libraries.designsystem.preview.USER_NAME_CHARLIE
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
class KnockRequestsBannerStateProvider : PreviewParameterProvider<KnockRequestsBannerState> {
|
class KnockRequestsBannerStatePreviewParam : PreviewParameterProvider<KnockRequestsBannerState> {
|
||||||
override val values: Sequence<KnockRequestsBannerState>
|
override val values: Sequence<KnockRequestsBannerState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aKnockRequestsBannerState(),
|
aKnockRequestsBannerState(),
|
||||||
+1
-1
@@ -227,7 +227,7 @@ private fun KnockRequestAvatarListView(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
internal fun KnockRequestsBannerViewPreview(@PreviewParameter(KnockRequestsBannerStateProvider::class) state: KnockRequestsBannerState) = ElementPreview {
|
internal fun KnockRequestsBannerViewPreview(@PreviewParameter(KnockRequestsBannerStatePreviewParam::class) state: KnockRequestsBannerState) = ElementPreview {
|
||||||
KnockRequestsBannerView(
|
KnockRequestsBannerView(
|
||||||
state = state,
|
state = state,
|
||||||
onViewRequestsClick = {},
|
onViewRequestsClick = {},
|
||||||
|
|||||||
+4
-3
@@ -6,7 +6,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.knockrequests.impl.data
|
package io.element.android.features.knockrequests.impl.data.di
|
||||||
|
|
||||||
import dev.zacsweers.metro.BindingContainer
|
import dev.zacsweers.metro.BindingContainer
|
||||||
import dev.zacsweers.metro.ContributesTo
|
import dev.zacsweers.metro.ContributesTo
|
||||||
@@ -14,16 +14,17 @@ import dev.zacsweers.metro.Provides
|
|||||||
import dev.zacsweers.metro.SingleIn
|
import dev.zacsweers.metro.SingleIn
|
||||||
import io.element.android.features.knockrequests.api.KnockRequestPermissions
|
import io.element.android.features.knockrequests.api.KnockRequestPermissions
|
||||||
import io.element.android.features.knockrequests.api.knockRequestPermissions
|
import io.element.android.features.knockrequests.api.knockRequestPermissions
|
||||||
|
import io.element.android.features.knockrequests.impl.data.KnockRequestsService
|
||||||
import io.element.android.libraries.di.RoomScope
|
import io.element.android.libraries.di.RoomScope
|
||||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||||
import io.element.android.libraries.matrix.api.room.powerlevels.permissionsFlow
|
import io.element.android.libraries.matrix.api.room.powerlevels.permissionsFlow
|
||||||
|
|
||||||
@BindingContainer
|
@BindingContainer
|
||||||
@ContributesTo(RoomScope::class)
|
@ContributesTo(RoomScope::class)
|
||||||
object KnockRequestsModule {
|
object KnockRequestsBindingContainer {
|
||||||
@Provides
|
@Provides
|
||||||
@SingleIn(RoomScope::class)
|
@SingleIn(RoomScope::class)
|
||||||
fun knockRequestsService(room: JoinedRoom): KnockRequestsService {
|
fun providesKnockRequestsService(room: JoinedRoom): KnockRequestsService {
|
||||||
return KnockRequestsService(
|
return KnockRequestsService(
|
||||||
knockRequestsFlow = room.knockRequestsFlow,
|
knockRequestsFlow = room.knockRequestsFlow,
|
||||||
permissionsFlow = room.permissionsFlow(KnockRequestPermissions.DEFAULT) { perms ->
|
permissionsFlow = room.permissionsFlow(KnockRequestPermissions.DEFAULT) { perms ->
|
||||||
+1
-1
@@ -18,7 +18,7 @@ import io.element.android.libraries.matrix.api.core.UserId
|
|||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
|
|
||||||
open class KnockRequestsListStateProvider : PreviewParameterProvider<KnockRequestsListState> {
|
open class KnockRequestsListStatePreviewParam : PreviewParameterProvider<KnockRequestsListState> {
|
||||||
override val values: Sequence<KnockRequestsListState>
|
override val values: Sequence<KnockRequestsListState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aKnockRequestsListState(
|
aKnockRequestsListState(
|
||||||
+1
-1
@@ -491,7 +491,7 @@ private fun KnockRequestsListTopBar(onBackClick: () -> Unit) {
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun KnockRequestsListViewPreview(
|
internal fun KnockRequestsListViewPreview(
|
||||||
@PreviewParameter(KnockRequestsListStateProvider::class) state: KnockRequestsListState
|
@PreviewParameter(KnockRequestsListStatePreviewParam::class) state: KnockRequestsListState
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
KnockRequestsListView(
|
KnockRequestsListView(
|
||||||
state = state,
|
state = state,
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ import io.element.android.features.leaveroom.api.LeaveRoomEvent
|
|||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
|
||||||
class InternalLeaveRoomStateProvider : PreviewParameterProvider<InternalLeaveRoomState> {
|
class InternalLeaveRoomStatePreviewParam : PreviewParameterProvider<InternalLeaveRoomState> {
|
||||||
override val values: Sequence<InternalLeaveRoomState>
|
override val values: Sequence<InternalLeaveRoomState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aLeaveRoomState(),
|
aLeaveRoomState(),
|
||||||
+1
-1
@@ -139,7 +139,7 @@ private fun LeaveRoomProgressDialog(modifier: Modifier = Modifier) {
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun LeaveRoomViewPreview(
|
internal fun LeaveRoomViewPreview(
|
||||||
@PreviewParameter(InternalLeaveRoomStateProvider::class) state: InternalLeaveRoomState
|
@PreviewParameter(InternalLeaveRoomStatePreviewParam::class) state: InternalLeaveRoomState
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
Box(
|
Box(
|
||||||
modifier = Modifier.size(300.dp, 300.dp),
|
modifier = Modifier.size(300.dp, 300.dp),
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ import io.element.android.libraries.di.SessionScope
|
|||||||
|
|
||||||
@ContributesTo(SessionScope::class)
|
@ContributesTo(SessionScope::class)
|
||||||
@BindingContainer
|
@BindingContainer
|
||||||
interface LeaveRoomModule {
|
interface LeaveRoomBindingContainer {
|
||||||
@Binds
|
@Binds
|
||||||
fun bindLeaveRoomPresenter(presenter: LeaveRoomPresenter): Presenter<LeaveRoomState>
|
fun bindLeaveRoomPresenter(presenter: LeaveRoomPresenter): Presenter<LeaveRoomState>
|
||||||
}
|
}
|
||||||
+1
-1
@@ -15,7 +15,7 @@ import io.element.android.libraries.architecture.AsyncData
|
|||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
|
|
||||||
open class DependencyLicensesListStateProvider : PreviewParameterProvider<DependencyLicensesListState> {
|
open class DependencyLicensesListStatePreviewParam : PreviewParameterProvider<DependencyLicensesListState> {
|
||||||
override val values: Sequence<DependencyLicensesListState>
|
override val values: Sequence<DependencyLicensesListState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aDependencyLicensesListState(
|
aDependencyLicensesListState(
|
||||||
+1
-1
@@ -126,7 +126,7 @@ fun DependencyLicensesListView(
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun DependencyLicensesListViewPreview(
|
internal fun DependencyLicensesListViewPreview(
|
||||||
@PreviewParameter(DependencyLicensesListStateProvider::class) state: DependencyLicensesListState
|
@PreviewParameter(DependencyLicensesListStatePreviewParam::class) state: DependencyLicensesListState
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
DependencyLicensesListView(
|
DependencyLicensesListView(
|
||||||
state = state,
|
state = state,
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
|||||||
import io.element.android.libraries.permissions.api.PermissionsState
|
import io.element.android.libraries.permissions.api.PermissionsState
|
||||||
import io.element.android.libraries.permissions.api.aPermissionsState
|
import io.element.android.libraries.permissions.api.aPermissionsState
|
||||||
|
|
||||||
open class DesktopNoticeStateProvider : PreviewParameterProvider<DesktopNoticeState> {
|
open class DesktopNoticeStatePreviewParam : PreviewParameterProvider<DesktopNoticeState> {
|
||||||
override val values: Sequence<DesktopNoticeState>
|
override val values: Sequence<DesktopNoticeState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aDesktopNoticeState(),
|
aDesktopNoticeState(),
|
||||||
+1
-1
@@ -118,7 +118,7 @@ fun DesktopNoticeView(
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun DesktopNoticeViewPreview(
|
internal fun DesktopNoticeViewPreview(
|
||||||
@PreviewParameter(DesktopNoticeStateProvider::class) state: DesktopNoticeState,
|
@PreviewParameter(DesktopNoticeStatePreviewParam::class) state: DesktopNoticeState,
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
DesktopNoticeView(
|
DesktopNoticeView(
|
||||||
state = state,
|
state = state,
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ package io.element.android.features.linknewdevice.impl.screens.error
|
|||||||
|
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
|
|
||||||
class ErrorScreenTypeProvider : PreviewParameterProvider<ErrorScreenType> {
|
class ErrorScreenTypePreviewParam : PreviewParameterProvider<ErrorScreenType> {
|
||||||
override val values: Sequence<ErrorScreenType> = sequenceOf(
|
override val values: Sequence<ErrorScreenType> = sequenceOf(
|
||||||
ErrorScreenType.Cancelled,
|
ErrorScreenType.Cancelled,
|
||||||
ErrorScreenType.Declined,
|
ErrorScreenType.Declined,
|
||||||
+1
-1
@@ -165,7 +165,7 @@ private fun ColumnScope.Buttons(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun ErrorViewPreview(@PreviewParameter(ErrorScreenTypeProvider::class) errorScreenType: ErrorScreenType) {
|
internal fun ErrorViewPreview(@PreviewParameter(ErrorScreenTypePreviewParam::class) errorScreenType: ErrorScreenType) {
|
||||||
ElementPreview {
|
ElementPreview {
|
||||||
ErrorView(
|
ErrorView(
|
||||||
errorScreenType = errorScreenType,
|
errorScreenType = errorScreenType,
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
|||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.matrix.api.linknewdevice.ErrorType
|
import io.element.android.libraries.matrix.api.linknewdevice.ErrorType
|
||||||
|
|
||||||
open class EnterNumberStateProvider : PreviewParameterProvider<EnterNumberState> {
|
open class EnterNumberStatePreviewParam : PreviewParameterProvider<EnterNumberState> {
|
||||||
override val values: Sequence<EnterNumberState>
|
override val values: Sequence<EnterNumberState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aEnterNumberState(),
|
aEnterNumberState(),
|
||||||
+1
-1
@@ -117,7 +117,7 @@ fun EnterNumberView(
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun EnterNumberViewPreview(
|
internal fun EnterNumberViewPreview(
|
||||||
@PreviewParameter(EnterNumberStateProvider::class) state: EnterNumberState,
|
@PreviewParameter(EnterNumberStatePreviewParam::class) state: EnterNumberState,
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
EnterNumberView(
|
EnterNumberView(
|
||||||
state = state,
|
state = state,
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ package io.element.android.features.linknewdevice.impl.screens.qrcode
|
|||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncData
|
||||||
|
|
||||||
class ShowQrCodeStateProvider : PreviewParameterProvider<ShowQrCodeState> {
|
class ShowQrCodeStatePreviewParam : PreviewParameterProvider<ShowQrCodeState> {
|
||||||
override val values: Sequence<ShowQrCodeState>
|
override val values: Sequence<ShowQrCodeState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aShowQrCodeState(),
|
aShowQrCodeState(),
|
||||||
+1
-1
@@ -117,7 +117,7 @@ private fun QrCodeOrLoading(
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun ShowQrCodeViewPreview(
|
internal fun ShowQrCodeViewPreview(
|
||||||
@PreviewParameter(ShowQrCodeStateProvider::class) state: ShowQrCodeState,
|
@PreviewParameter(ShowQrCodeStatePreviewParam::class) state: ShowQrCodeState,
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
ShowQrCodeView(
|
ShowQrCodeView(
|
||||||
state = state,
|
state = state,
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
|||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncData
|
||||||
import io.element.android.libraries.matrix.api.linknewdevice.ErrorType
|
import io.element.android.libraries.matrix.api.linknewdevice.ErrorType
|
||||||
|
|
||||||
open class LinkNewDeviceRootStateProvider : PreviewParameterProvider<LinkNewDeviceRootState> {
|
open class LinkNewDeviceRootStatePreviewParam : PreviewParameterProvider<LinkNewDeviceRootState> {
|
||||||
override val values: Sequence<LinkNewDeviceRootState>
|
override val values: Sequence<LinkNewDeviceRootState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aLinkNewDeviceRootState(),
|
aLinkNewDeviceRootState(),
|
||||||
+1
-1
@@ -140,7 +140,7 @@ fun LinkNewDeviceRootView(
|
|||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun LinkNewDeviceRootViewPreview(
|
internal fun LinkNewDeviceRootViewPreview(
|
||||||
@PreviewParameter(LinkNewDeviceRootStateProvider::class) state: LinkNewDeviceRootState
|
@PreviewParameter(LinkNewDeviceRootStatePreviewParam::class) state: LinkNewDeviceRootState
|
||||||
) = ElementPreview {
|
) = ElementPreview {
|
||||||
LinkNewDeviceRootView(
|
LinkNewDeviceRootView(
|
||||||
state = state,
|
state = state,
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ package io.element.android.features.linknewdevice.impl.screens.scan
|
|||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
|
|
||||||
open class ScanQrCodeStateProvider : PreviewParameterProvider<ScanQrCodeState> {
|
open class ScanQrCodeStatePreviewParam : PreviewParameterProvider<ScanQrCodeState> {
|
||||||
override val values: Sequence<ScanQrCodeState>
|
override val values: Sequence<ScanQrCodeState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aScanQrCodeState(),
|
aScanQrCodeState(),
|
||||||
+1
-1
@@ -166,7 +166,7 @@ private fun ColumnScope.Buttons(
|
|||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun ScanQrCodeViewPreview(@PreviewParameter(ScanQrCodeStateProvider::class) state: ScanQrCodeState) = ElementPreview {
|
internal fun ScanQrCodeViewPreview(@PreviewParameter(ScanQrCodeStatePreviewParam::class) state: ScanQrCodeState) = ElementPreview {
|
||||||
ScanQrCodeView(
|
ScanQrCodeView(
|
||||||
state = state,
|
state = state,
|
||||||
onBackClick = {},
|
onBackClick = {},
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user