Move StateMachine to its own module. (#257)

This commit is contained in:
Jorge Martin Espinosa
2023-03-23 17:49:15 +01:00
committed by GitHub
parent 0c0b3d0aa6
commit 4a1a338e07
7 changed files with 42 additions and 5 deletions

View File

@@ -42,6 +42,7 @@ dependencies {
implementation(projects.libraries.designsystem) implementation(projects.libraries.designsystem)
implementation(projects.libraries.elementresources) implementation(projects.libraries.elementresources)
implementation(projects.libraries.uiStrings) implementation(projects.libraries.uiStrings)
implementation(projects.libraries.statemachine)
implementation(libs.accompanist.flowlayout) implementation(libs.accompanist.flowlayout)
api(projects.features.verifysession.api) api(projects.features.verifysession.api)

View File

@@ -17,7 +17,7 @@
@file:Suppress("WildcardImport") @file:Suppress("WildcardImport")
package io.element.android.features.verifysession.impl package io.element.android.features.verifysession.impl
import io.element.android.libraries.core.statemachine.createStateMachine import io.element.android.libraries.statemachine.createStateMachine
import io.element.android.libraries.matrix.api.verification.SessionVerificationService import io.element.android.libraries.matrix.api.verification.SessionVerificationService
import io.element.android.libraries.matrix.api.verification.VerificationEmoji import io.element.android.libraries.matrix.api.verification.VerificationEmoji
import io.element.android.libraries.matrix.api.verification.VerificationFlowState import io.element.android.libraries.matrix.api.verification.VerificationFlowState

View File

@@ -0,0 +1,35 @@
/*
* Copyright (c) 2022 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// TODO: Remove once https://youtrack.jetbrains.com/issue/KTIJ-19369 is fixed
@Suppress("DSL_SCOPE_VIOLATION")
plugins {
id("java-library")
id("com.android.lint")
alias(libs.plugins.kotlin.jvm)
}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
dependencies {
implementation(libs.coroutines.core)
testImplementation(libs.test.junit)
testImplementation(libs.test.truth)
}

View File

@@ -14,9 +14,8 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.libraries.core.statemachine package io.element.android.libraries.statemachine
import io.element.android.libraries.core.bool.orFalse
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
@@ -64,7 +63,7 @@ class StateMachine<Event : Any, State : Any>(
private fun <E : Event> findMatchingRoute(event: E): StateMachineRoute<E, State, State>? { private fun <E : Event> findMatchingRoute(event: E): StateMachineRoute<E, State, State>? {
val routesForEvent = routes.filter { it.eventType.isInstance(event) } val routesForEvent = routes.filter { it.eventType.isInstance(event) }
return (routesForEvent.firstOrNull { it.fromState?.isInstance(currentState).orFalse() } return (routesForEvent.firstOrNull { it.fromState?.isInstance(currentState) == true }
?: routesForEvent.firstOrNull { it.fromState == null }) as? StateMachineRoute<E, State, State> ?: routesForEvent.firstOrNull { it.fromState == null }) as? StateMachineRoute<E, State, State>
} }

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.libraries.core.statemachine package io.element.android.libraries.statemachine
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import org.junit.Assert.fail import org.junit.Assert.fail

View File

@@ -61,6 +61,7 @@ fun DependencyHandlerScope.allLibrariesImpl() {
implementation(project(":libraries:dateformatter:impl")) implementation(project(":libraries:dateformatter:impl"))
implementation(project(":libraries:di")) implementation(project(":libraries:di"))
implementation(project(":libraries:session-storage:impl")) implementation(project(":libraries:session-storage:impl"))
implementation(project(":libraries:statemachine"))
} }

View File

@@ -65,6 +65,7 @@ include(":libraries:encrypted-db")
include(":libraries:session-storage:api") include(":libraries:session-storage:api")
include(":libraries:session-storage:impl") include(":libraries:session-storage:impl")
include(":libraries:session-storage:impl-memory") include(":libraries:session-storage:impl-memory")
include(":libraries:statemachine")
include(":services:analytics:api") include(":services:analytics:api")
include(":services:analytics:noop") include(":services:analytics:noop")