View ContextTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.myexample | |
import io.mockk.every | |
import io.mockk.mockk | |
import io.mockk.verify | |
import org.junit.Test | |
import kotlin.test.assertEquals | |
interface CallContext |
View MainActivity.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@AndroidEntryPoint | |
class MainActivity : BaseActivity() { | |
// The model to run authentication and content visibility | |
private val model: MainScreenModel by viewModels | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
MainContent(model) { |
View FlowStarter.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Common interface to start feature-flow | |
*/ | |
interface FlowStarter<G: Any, U: Any> { | |
/** | |
* Creates a starting state | |
* @param email Email to proceed with | |
*/ | |
fun start(email: String): CommonMachineState<G, U> | |
} |
View EmailCheckState.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class EmailCheckState( | |
context: WelcomeContext, | |
private val data: WelcomeDataState, | |
private val checkEmail: CheckEmail | |
) : WelcomeState(context) { | |
private val email = requireNotNull(data.email) { | |
"Email is not provided" | |
} |
View LoginFlowProxy.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Proxy definition (for readability) | |
*/ | |
private typealias LoginProxy = ProxyMachineState< | |
WelcomeGesture, // Host gesture system | |
WelcomeUiState, // Host ui-state system | |
LoginGesture, // Feature gesture system | |
LoginUiState // Feature ui-state system | |
> |
View ProxyMachineState.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
abstract class ProxyMachineState<PG: Any, PU: Any, CG: Any, CU: Any> : CommonMachineState<PG, PU>() { | |
/** | |
* Proxy state machine | |
*/ | |
private val machine = object : CommonStateMachine.Base<CG, CU>(::init) { | |
fun doStart() { | |
start() | |
} |
View BaseInterfaces.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Common state machine | |
* @param G UI gesture | |
* @param U UI state | |
*/ | |
interface CommonStateMachine<G: Any, U: Any> : MachineInput<G>, MachineOutput<G, U> | |
/** | |
* Common state-machine state | |
* @param G UI gesture |
View WelcomeScreen.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fun WelcomeScreen(onTerminate: @Composable () -> Unit) { | |
val model = hiltViewModel<WelcomeViewModel>() | |
val state = model.state.collectAsState(WelcomeUiState.Loading) | |
BackHandler(onBack = { model.process(Back) }) | |
when (val uiState = state.value) { | |
// Native ui-state rendering... |
View MasterView.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Composable | |
fun LoginScreen(state: LoginUiState, onGesture: (LoginGesture) -> Unit) { | |
// Login screen rendering... | |
} | |
@Composable | |
fun RegistrationScreen(state: RegisterUiState, onGesture: (RegisterGesture) -> Unit) { | |
// Registration screen rendering... | |
} |
View WelcomeUiState.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sealed class WelcomeUiState { | |
/** | |
* Login state wrapper | |
* @property value Login UI state | |
*/ | |
data class Login(val value: LoginUiState) : WelcomeUiState() | |
/** | |
* Register state wrapper | |
* @property value Register UI state |
NewerOlder