diff --git a/android/app-newm/build.gradle.kts b/android/app-newm/build.gradle.kts index d5116e02..21e310ec 100644 --- a/android/app-newm/build.gradle.kts +++ b/android/app-newm/build.gradle.kts @@ -66,6 +66,9 @@ dependencies { implementation(project(Modules.login)) implementation(project(Modules.shared)) + implementation(Circuit.foundation) + implementation(Circuit.retained) + // implementation(Airbnb.showkase) implementation(Google.activityCompose) implementation(Google.androidxCore) diff --git a/android/app-newm/src/main/java/io/newm/LoginActivity.kt b/android/app-newm/src/main/java/io/newm/LoginActivity.kt index 04fc8661..02724d47 100644 --- a/android/app-newm/src/main/java/io/newm/LoginActivity.kt +++ b/android/app-newm/src/main/java/io/newm/LoginActivity.kt @@ -5,14 +5,22 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController +import com.slack.circuit.foundation.CircuitCompositionLocals +import com.slack.circuit.foundation.CircuitConfig +import com.slack.circuit.foundation.CircuitContent +import com.slack.circuit.retained.LocalRetainedStateRegistry +import com.slack.circuit.retained.continuityRetainedStateRegistry import io.newm.core.theme.NewmTheme import io.newm.feature.login.screen.* import io.newm.feature.login.screen.createaccount.CreateAccountScreen +import io.newm.feature.login.screen.createaccount.CreateAccountPresenter +import io.newm.feature.login.screen.createaccount.CreateAccountUi import io.newm.feature.login.screen.createaccount.CreateAccountViewModel import io.newm.feature.login.screen.createaccount.EnterVerificationCodeScreen import io.newm.feature.login.screen.createaccount.WhatShouldWeCallYouScreen @@ -20,12 +28,41 @@ import io.newm.screens.Screen class LoginActivity : ComponentActivity() { + // TODO inject + private val circuitConfig: CircuitConfig = CircuitConfig.Builder() + .addPresenterFactory { screen, navigator, _ -> + when (screen) { + is CreateAccountScreen -> CreateAccountPresenter() + + else -> null + } + } + .addUiFactory { screen, _ -> + when (screen) { + is CreateAccountScreen -> CreateAccountUi() + else -> null + } + }.build() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) installSplashScreen() setContent { NewmTheme(darkTheme = true) { - WelcomeToNewm(::launchHomeActivity) + CircuitDependencies { + WelcomeToNewm(::launchHomeActivity) + } + } + } + } + + @Composable + private fun CircuitDependencies( + content: @Composable () -> Unit + ) { + CircuitCompositionLocals(circuitConfig) { + CompositionLocalProvider(LocalRetainedStateRegistry provides continuityRetainedStateRegistry()) { + content() } } } @@ -60,13 +97,7 @@ fun WelcomeToNewm( ) } composable(Screen.Signup.route) { - CreateAccountScreen( - viewModel = signupViewModel, - onUserLoggedIn = onStartHomeActivity, - onNext = { - navController.navigate(Screen.WhatShouldWeCallYou.route) - }, - ) + CircuitContent(screen = CreateAccountScreen) } composable(Screen.WhatShouldWeCallYou.route) { WhatShouldWeCallYouScreen( diff --git a/android/feature-login/build.gradle.kts b/android/feature-login/build.gradle.kts index f8b524a4..e7b915e0 100644 --- a/android/feature-login/build.gradle.kts +++ b/android/feature-login/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id(Plugins.androidLibrary) kotlin(Plugins.android) + id(Plugins.parcelize) id(Plugins.paparazzi) } @@ -40,6 +41,9 @@ dependencies { implementation(project(Modules.coreUiUtils)) implementation(project(Modules.coreResources)) + implementation(Circuit.foundation) + implementation(Circuit.retained) + implementation(Google.androidxCore) implementation(Google.composeMaterial) implementation(Google.composeUi) diff --git a/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/CreateAccountPresenter.kt b/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/CreateAccountPresenter.kt new file mode 100644 index 00000000..369b71a5 --- /dev/null +++ b/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/CreateAccountPresenter.kt @@ -0,0 +1,30 @@ +package io.newm.feature.login.screen.createaccount + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import com.slack.circuit.retained.rememberRetained +import com.slack.circuit.runtime.Navigator +import com.slack.circuit.runtime.presenter.Presenter +import io.newm.feature.login.screen.TextFieldState +import io.newm.feature.login.screen.createaccount.signupform.SignupFormUiEvent +import io.newm.feature.login.screen.password.ConfirmPasswordState +import io.newm.feature.login.screen.password.PasswordState + +class CreateAccountPresenter : Presenter { + @Composable + override fun present(): CreateAccountUiState { + val userEmail = rememberRetained { TextFieldState() } + val password = rememberRetained { PasswordState() } + val passwordConfirmation = rememberRetained { ConfirmPasswordState(password) } + + return CreateAccountUiState.SignupForm( + emailState = userEmail, + passwordState = password, + passwordConfirmationState = passwordConfirmation, + ) { event -> + when (event) { + SignupFormUiEvent.Next -> TODO() + } + } + } +} diff --git a/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/CreateAccountScreen.kt b/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/CreateAccountScreen.kt index d86d87a8..7e46d9e1 100644 --- a/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/CreateAccountScreen.kt +++ b/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/CreateAccountScreen.kt @@ -1,99 +1,7 @@ package io.newm.feature.login.screen.createaccount -import androidx.compose.foundation.layout.* -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.focus.focusRequester -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp -import io.newm.feature.login.screen.email.Email -import io.newm.feature.login.screen.email.EmailState -import io.newm.feature.login.screen.password.Password -import io.newm.feature.login.screen.password.PasswordState -import io.newm.core.resources.R -import io.newm.core.ui.buttons.SecondaryButton -import io.newm.feature.login.screen.PreLoginArtistBackgroundContentTemplate +import com.slack.circuit.runtime.Screen +import kotlinx.parcelize.Parcelize -@Composable -fun CreateAccountScreen( - onUserLoggedIn: () -> Unit, - onNext: () -> Unit, - viewModel: CreateAccountViewModel -) { - val userState by viewModel.state.collectAsState() - - CreateAccountScreen( - onUserLoggedIn = onUserLoggedIn, - onNext = onNext, - userState = userState, - setUserEmail = viewModel::setUserEmail, - setUserPassword = viewModel::setUserPassword, - setUserPasswordConfirmation = viewModel::setUserPasswordConfirmation, - requestCode = viewModel::requestCode, - ) -} - -@Composable -internal fun CreateAccountScreen( - onUserLoggedIn: () -> Unit, - onNext: () -> Unit, - userState: CreateAccountViewModel.SignupUserState, - setUserEmail: (String) -> Unit, - setUserPassword: (String) -> Unit, - setUserPasswordConfirmation: (String) -> Unit, - requestCode: () -> Unit, -) { - PreLoginArtistBackgroundContentTemplate { - - LaunchedEffect( - key1 = userState.verificationRequested, - key2 = userState.verificationRequested - ) { - if (userState.verificationRequested) { - onNext() - } - if (userState.isUserRegistered) { - onUserLoggedIn() - } - } - - val focusRequester = remember { FocusRequester() } - - val emailState = remember { EmailState() } - Email(emailState = emailState, onImeAction = { focusRequester.requestFocus() }) - - val passwordState1 = remember { PasswordState() } - Password( - label = stringResource(id = R.string.password), - passwordState = passwordState1, - onImeAction = {}, - modifier = Modifier.focusRequester(focusRequester), - ) - - val passwordState2 = remember { PasswordState() } - Password( - label = stringResource(id = R.string.password), - passwordState = passwordState2, - onImeAction = {}, - modifier = Modifier.focusRequester(focusRequester), - ) - - Spacer(modifier = Modifier.height(16.dp)) - - SecondaryButton(text = "Next") { - if (passwordState1.isValid && passwordState2.isValid - && passwordState1.text == passwordState2.text || true - ) { - setUserEmail("cescobar+2@newm.io") - setUserPassword("Password18") - setUserPasswordConfirmation("Password18") - requestCode() - } - } - } -} +@Parcelize +object CreateAccountScreen : Screen diff --git a/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/CreateAccountUi.kt b/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/CreateAccountUi.kt new file mode 100644 index 00000000..1211863d --- /dev/null +++ b/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/CreateAccountUi.kt @@ -0,0 +1,18 @@ +package io.newm.feature.login.screen.createaccount + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.slack.circuit.runtime.ui.Ui +import io.newm.feature.login.screen.createaccount.CreateAccountUiState.SignupForm +import io.newm.feature.login.screen.createaccount.signupform.SignUpFormUi + +class CreateAccountUi : Ui { + @Composable + override fun Content(state: CreateAccountUiState, modifier: Modifier) { + when (state) { + is SignupForm -> { + SignUpFormUi(state = state) + } + } + } +} diff --git a/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/CreateAccountUiState.kt b/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/CreateAccountUiState.kt new file mode 100644 index 00000000..b36d949d --- /dev/null +++ b/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/CreateAccountUiState.kt @@ -0,0 +1,14 @@ +package io.newm.feature.login.screen.createaccount + +import com.slack.circuit.runtime.CircuitUiState +import io.newm.feature.login.screen.TextFieldState +import io.newm.feature.login.screen.createaccount.signupform.SignupFormUiEvent + +sealed interface CreateAccountUiState : CircuitUiState { + data class SignupForm( + val passwordConfirmationState: TextFieldState, + val passwordState: TextFieldState, + val emailState: TextFieldState, + val eventSink: (SignupFormUiEvent) -> Unit, + ) : CreateAccountUiState +} diff --git a/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/signupform/SignUpFormUi.kt b/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/signupform/SignUpFormUi.kt new file mode 100644 index 00000000..fef27d6f --- /dev/null +++ b/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/signupform/SignUpFormUi.kt @@ -0,0 +1,51 @@ +package io.newm.feature.login.screen.createaccount.signupform + +import androidx.compose.foundation.layout.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import io.newm.feature.login.screen.email.Email +import io.newm.feature.login.screen.password.Password +import io.newm.core.resources.R +import io.newm.core.ui.buttons.SecondaryButton +import io.newm.feature.login.screen.PreLoginArtistBackgroundContentTemplate +import io.newm.feature.login.screen.createaccount.CreateAccountUiState.SignupForm + +@Composable +fun SignUpFormUi( + state: SignupForm, +) { + val onEvent = state.eventSink + val focusRequester = remember { FocusRequester() } + + PreLoginArtistBackgroundContentTemplate { + Email( + emailState = state.emailState, + onImeAction = { focusRequester.requestFocus() } + ) + + Password( + label = stringResource(id = R.string.password), + passwordState = state.passwordState, + onImeAction = {}, + modifier = Modifier.focusRequester(focusRequester), + ) + + Password( + label = stringResource(id = R.string.password), + passwordState = state.passwordConfirmationState, + onImeAction = {}, + modifier = Modifier.focusRequester(focusRequester), + ) + + Spacer(modifier = Modifier.height(16.dp)) + + SecondaryButton(text = "Next") { + onEvent(SignupFormUiEvent.Next) + } + } +} diff --git a/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/signupform/SignupFormUiEvent.kt b/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/signupform/SignupFormUiEvent.kt new file mode 100644 index 00000000..1fe4e52d --- /dev/null +++ b/android/feature-login/src/main/java/io/newm/feature/login/screen/createaccount/signupform/SignupFormUiEvent.kt @@ -0,0 +1,7 @@ +package io.newm.feature.login.screen.createaccount.signupform + +import com.slack.circuit.runtime.CircuitUiEvent + +sealed interface SignupFormUiEvent : CircuitUiEvent { + object Next : SignupFormUiEvent +} diff --git a/android/feature-login/src/test/kotlin/io/newm/feature/login/screen/CreateAccountScreenTest.kt b/android/feature-login/src/test/kotlin/io/newm/feature/login/screen/CreateAccountUiTest.kt similarity index 51% rename from android/feature-login/src/test/kotlin/io/newm/feature/login/screen/CreateAccountScreenTest.kt rename to android/feature-login/src/test/kotlin/io/newm/feature/login/screen/CreateAccountUiTest.kt index f1beedf3..fef7931b 100644 --- a/android/feature-login/src/test/kotlin/io/newm/feature/login/screen/CreateAccountScreenTest.kt +++ b/android/feature-login/src/test/kotlin/io/newm/feature/login/screen/CreateAccountUiTest.kt @@ -4,27 +4,26 @@ import com.google.testing.junit.testparameterinjector.TestParameter import com.google.testing.junit.testparameterinjector.TestParameterInjector import io.newm.core.test.utils.SnapshotTest import io.newm.core.test.utils.SnapshotTestConfiguration -import io.newm.feature.login.screen.createaccount.CreateAccountScreen -import io.newm.feature.login.screen.createaccount.CreateAccountViewModel +import io.newm.feature.login.screen.createaccount.CreateAccountUiState +import io.newm.feature.login.screen.createaccount.signupform.SignUpFormUi import org.junit.Test import org.junit.runner.RunWith @RunWith(TestParameterInjector::class) -class CreateAccountScreenTest( +class CreateAccountUiTest( @TestParameter private val testConfiguration: SnapshotTestConfiguration, ) : SnapshotTest(testConfiguration) { @Test - fun default() { + fun `default sign up form`() { snapshot { - CreateAccountScreen( - userState = CreateAccountViewModel.SignupUserState(), - onNext = {}, - onUserLoggedIn = {}, - setUserPasswordConfirmation = {}, - setUserPassword = {}, - requestCode = {}, - setUserEmail = {} + SignUpFormUi( + state = CreateAccountUiState.SignupForm( + passwordConfirmationState = TextFieldState(), + passwordState = TextFieldState(), + emailState = TextFieldState(), + eventSink = {}, + ) ) } } diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountScreenTest_default[AccessibilityLight].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountScreenTest_default[AccessibilityLight].png deleted file mode 100644 index b647fc5b..00000000 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountScreenTest_default[AccessibilityLight].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:332132fc35923246e44f6ec2cd244d9e5b2309844c098ee532a65d1562dbc435 -size 46873 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountScreenTest_default[NormalDark].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountScreenTest_default[NormalDark].png deleted file mode 100644 index dc542d0c..00000000 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountScreenTest_default[NormalDark].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:030d3661e8797135fbe1210b5947a98fde092c77ae56294e26fb26b088372c41 -size 26668 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountScreenTest_default[NormalLight].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountScreenTest_default[NormalLight].png deleted file mode 100644 index b70f85f5..00000000 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountScreenTest_default[NormalLight].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:64f76109a9069f938f681fa89659d1e6179bed7ccd90fb7a3d986c7abc31119c -size 26953 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountUiTest_default sign up form[AccessibilityLight].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountUiTest_default sign up form[AccessibilityLight].png new file mode 100644 index 00000000..57c8f79d --- /dev/null +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountUiTest_default sign up form[AccessibilityLight].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf6e7f6a08101ee30b9e322d93d241810248b268024872632b39985c0e789c66 +size 46912 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountUiTest_default sign up form[NormalDark].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountUiTest_default sign up form[NormalDark].png new file mode 100644 index 00000000..2c7ae5ac --- /dev/null +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountUiTest_default sign up form[NormalDark].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:597323e973f180fa51a59ccb7d37fcb815bc79260a8f9a6e82b9783d4817fa2f +size 26757 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountUiTest_default sign up form[NormalLight].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountUiTest_default sign up form[NormalLight].png new file mode 100644 index 00000000..e1c8f004 --- /dev/null +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_CreateAccountUiTest_default sign up form[NormalLight].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33109b26c6bb5240387fdc72cec4b5dc04c159b30050731b69c5ae7bd909c4da +size 27030 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_EnterVerificationScreenContentTest_default[NormalDark].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_EnterVerificationScreenContentTest_default[NormalDark].png index e5f1978e..a05772eb 100644 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_EnterVerificationScreenContentTest_default[NormalDark].png +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_EnterVerificationScreenContentTest_default[NormalDark].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b96dae08c31b6c67bc480ea988d6f6fd9a9f53d0d2cdffb9272d1229e7b7d67 -size 38691 +oid sha256:7902663ea466169ab906686180d5bf5d88bef1ed2b344afd07e0cb6e4ad98bb5 +size 38872 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_EnterVerificationScreenContentTest_default[NormalLight].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_EnterVerificationScreenContentTest_default[NormalLight].png index 1e33bb17..59ea2891 100644 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_EnterVerificationScreenContentTest_default[NormalLight].png +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_EnterVerificationScreenContentTest_default[NormalLight].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b6aa7ebd37c0aa21228482242856eae57bb0ab4c750936b51f980b53a311d72 -size 37838 +oid sha256:6a1287bd8411518c8127a1a6bafdd57a78ec0dcc40e6f2647597914778700fa8 +size 37993 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_LoginScreenTest_default[AccessibilityLight].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_LoginScreenTest_default[AccessibilityLight].png index 2e7b486d..3b73f407 100644 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_LoginScreenTest_default[AccessibilityLight].png +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_LoginScreenTest_default[AccessibilityLight].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a4639b4d52d510e4f6c9a8e2e291ca6ff82cba5cb15b98ccc2ea3a009c55205 -size 62120 +oid sha256:cb646a01ffecf147648ebaf5f0938e4d4f84d769b26f696358d99163b8e72d2a +size 62350 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_LoginScreenTest_default[NormalDark].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_LoginScreenTest_default[NormalDark].png index 9769631c..eb9f8646 100644 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_LoginScreenTest_default[NormalDark].png +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_LoginScreenTest_default[NormalDark].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3f16f3bb831cbb3cb6fe383ce33b9211cd47deb3a51f70d8f4d13170c4e23fc -size 30750 +oid sha256:28297099ade783165a2537dfc1cba66f4ff2e27f239213475e6accc5526b09dd +size 30967 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_LoginScreenTest_default[NormalLight].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_LoginScreenTest_default[NormalLight].png index 3df0eb26..0a5d04d6 100644 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_LoginScreenTest_default[NormalLight].png +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_LoginScreenTest_default[NormalLight].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:90700e127461124492fd7df0c7daedabb170d17f037a14c141d19bb1223f58ce -size 30969 +oid sha256:e3de4b9b47b4aeeeb7d25ff24d3fb70dd20384e001a9235248ae6300e1cd319e +size 31112 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WelcomeScreenTest_default[AccessibilityLight].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WelcomeScreenTest_default[AccessibilityLight].png index da3618bf..0b263f0a 100644 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WelcomeScreenTest_default[AccessibilityLight].png +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WelcomeScreenTest_default[AccessibilityLight].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a811d529bd5b0cd2ec927cf4a8097743bbcbe2d767cede78a9b39a779e133b9 -size 89741 +oid sha256:94ee17ada687637a364d1baf9fae152e93b014160513b5433a6a9bff7a4aba8b +size 90288 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WelcomeScreenTest_default[NormalDark].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WelcomeScreenTest_default[NormalDark].png index 625b08ef..342c1c0e 100644 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WelcomeScreenTest_default[NormalDark].png +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WelcomeScreenTest_default[NormalDark].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45a4bc4894219faf3dbf4a4dade6099695a45b2a0632b53fad0f6bee294dc829 -size 40027 +oid sha256:74ad2b4b96b422fa293667c99f82e34daf47b10796ac6b6e8bd2d06eb6d9454b +size 40420 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WelcomeScreenTest_default[NormalLight].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WelcomeScreenTest_default[NormalLight].png index 203efa0a..b26a7011 100644 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WelcomeScreenTest_default[NormalLight].png +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WelcomeScreenTest_default[NormalLight].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4a7086371edfe1a6a89b2dec1ff458f022ce4f59ab426085b6bc5e6d608343b -size 39837 +oid sha256:a6f02d14999b9e006d1ce3c01775a7e2c328890d0c268a4268abc828c0395aed +size 40147 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WhatShouldWeCallYouScreenTest_default[AccessibilityLight].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WhatShouldWeCallYouScreenTest_default[AccessibilityLight].png index af660280..e086a69d 100644 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WhatShouldWeCallYouScreenTest_default[AccessibilityLight].png +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WhatShouldWeCallYouScreenTest_default[AccessibilityLight].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8828e78a2a1dfe20a5507550f2e114443163d7155dcb7f0305fe1d5bf1c999d2 -size 57128 +oid sha256:fd212b36468ef70632b874dc9c6b39508a372c14b87c9d6a7972bc1da8f52933 +size 57329 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WhatShouldWeCallYouScreenTest_default[NormalDark].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WhatShouldWeCallYouScreenTest_default[NormalDark].png index 29e4317a..226fab32 100644 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WhatShouldWeCallYouScreenTest_default[NormalDark].png +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WhatShouldWeCallYouScreenTest_default[NormalDark].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9acc56c7381669e592af0cdf209f7e43b39eafd910eafeb9ae0e0fa487ede30a -size 22288 +oid sha256:a81e66324688408fae59282809e3e7fe8ff45de828e253970abc51103571b24e +size 22480 diff --git a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WhatShouldWeCallYouScreenTest_default[NormalLight].png b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WhatShouldWeCallYouScreenTest_default[NormalLight].png index ebf34757..4d0d8402 100644 --- a/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WhatShouldWeCallYouScreenTest_default[NormalLight].png +++ b/android/feature-login/src/test/snapshots/images/io.newm.feature.login.screen_WhatShouldWeCallYouScreenTest_default[NormalLight].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15e009b2a1426cd427fa1756300bb931f356097cb23d00d18df24242117951f3 -size 22435 +oid sha256:0374f5e3cd4d3996050c4b98515137769eeb2fc15afbecbc6fe2a8b7ed989ca8 +size 22585 diff --git a/buildSrc/src/main/java/Circuit.kt b/buildSrc/src/main/java/Circuit.kt new file mode 100644 index 00000000..4f51a56c --- /dev/null +++ b/buildSrc/src/main/java/Circuit.kt @@ -0,0 +1,12 @@ +object Circuit { + // The circuit foundational APIs like CircuitConfig, CircuitContent, etc. Depends on the other three. + const val foundation = "com.slack.circuit:circuit-foundation:${Versions.circuit}" + // Common runtime components like Screen, Navigator, etc. + const val runtime = "com.slack.circuit:circuit-runtime:${Versions.circuit}" + // The Presenter API, depends on circuit-runtime. + const val runtimePresenter = "com.slack.circuit:circuit-runtime-presenter:${Versions.circuit}" + // The Ui API, depends on circuit-runtime. + const val runtimeUi = "com.slack.circuit:circuit-runtime-ui:${Versions.circuit}" + // This is be used to remember values that survive configuration changes using rememberRetained{} + const val retained = "com.slack.circuit:circuit-retained:${Versions.circuit}" +} diff --git a/buildSrc/src/main/java/Plugins.kt b/buildSrc/src/main/java/Plugins.kt index 41a63c96..5ac8ddb7 100644 --- a/buildSrc/src/main/java/Plugins.kt +++ b/buildSrc/src/main/java/Plugins.kt @@ -1,4 +1,5 @@ object Plugins { + const val parcelize = "kotlin-parcelize" const val android = "android" const val androidApplication = "com.android.application" const val androidLibrary = "com.android.library" diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt index 60d05b06..12fc1524 100644 --- a/buildSrc/src/main/java/Versions.kt +++ b/buildSrc/src/main/java/Versions.kt @@ -2,8 +2,8 @@ object Versions { const val androidCompileSdk = 33 const val androidMinSdk = 30 const val androidTargetSdk = 33 - const val androidGradlePlugin = "7.4.2" + const val androidxActivity = "1.5.1" const val androidxAppCompat = "1.5.0" const val androidxConstraintLayout = "2.1.4" @@ -12,6 +12,7 @@ object Versions { const val androidxLifecycle = "2.5.1" const val androidxNavigation = "2.5.1" const val androidxSplashScreen = "1.0.0" + const val circuit = "0.9.1" const val composeCompiler = "1.4.6" const val compose = "1.4.0" const val composeMaterialIcons = "1.3.0-beta01"