diff --git a/app/src/main/java/com/auth0/android/sample/MainActivity.kt b/app/src/main/java/com/auth0/android/sample/MainActivity.kt index e7e2b72..501f92e 100644 --- a/app/src/main/java/com/auth0/android/sample/MainActivity.kt +++ b/app/src/main/java/com/auth0/android/sample/MainActivity.kt @@ -76,7 +76,6 @@ class MainActivity : ComponentActivity() { val webAuthProvider by lazy { WebAuthProvider.login(account) .withScheme(getString(R.string.com_auth0_scheme)) - .withAudience(audience) } private val logoutBuilder by lazy { @@ -211,9 +210,16 @@ fun SampleApp( onContinueWithEmail = { email, password -> when { email.isBlank() -> authViewModel.sendLoginError("Email is required") - !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches() -> authViewModel.sendLoginError("Enter a valid email address") + !android.util.Patterns.EMAIL_ADDRESS.matcher(email) + .matches() -> authViewModel.sendLoginError("Enter a valid email address") + password.isBlank() -> authViewModel.sendLoginError("Password is required") - else -> authViewModel.loginWithPassword(email, password, authClient, audience) + else -> authViewModel.loginWithPassword( + email, + password, + authClient, + audience + ) } }, onOtherMethods = { navController.navigate(AppRoute.ExploreLogin) }, @@ -228,9 +234,6 @@ fun SampleApp( ) } - composable { - // Add support for Google Login - } composable { DashboardScreen( @@ -271,7 +274,11 @@ fun SampleApp( } composable { + val nameParts = + userProfile.name.trim().split("\\s+".toRegex(), limit = 2).map { it.trim() } UpdateFullNameScreen( + currentFirstName = nameParts.getOrElse(0) { "" }, + currentLastName = nameParts.getOrElse(1) { "" }, onBack = { navController.popBackStack() } ) } diff --git a/app/src/main/java/com/auth0/android/sample/ui/components/FactorCard.kt b/app/src/main/java/com/auth0/android/sample/ui/components/FactorCard.kt index 3f644b2..cd36626 100644 --- a/app/src/main/java/com/auth0/android/sample/ui/components/FactorCard.kt +++ b/app/src/main/java/com/auth0/android/sample/ui/components/FactorCard.kt @@ -20,6 +20,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.draw.alpha import androidx.compose.ui.unit.dp import com.auth0.android.sample.ui.theme.isAuth0DarkTheme import com.auth0.universalcomponents.theme.Auth0Theme @@ -41,6 +42,7 @@ fun FactorCard( description: String, icon: Painter, isSelected: Boolean = false, + enabled: Boolean = true, onClick: () -> Unit = {} ) { val colors = Auth0Theme.colors @@ -59,7 +61,10 @@ fun FactorCard( Card( onClick = onClick, - modifier = Modifier.fillMaxWidth(), + enabled = enabled, + modifier = Modifier + .fillMaxWidth() + .alpha(if (enabled) 1f else 0.4f), shape = shapes.large, colors = CardDefaults.cardColors(containerColor = cardBackground), border = BorderStroke( diff --git a/app/src/main/java/com/auth0/android/sample/ui/components/NavigationGridCard.kt b/app/src/main/java/com/auth0/android/sample/ui/components/NavigationGridCard.kt index b11d12b..862fd93 100644 --- a/app/src/main/java/com/auth0/android/sample/ui/components/NavigationGridCard.kt +++ b/app/src/main/java/com/auth0/android/sample/ui/components/NavigationGridCard.kt @@ -15,6 +15,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.vectorResource import androidx.compose.ui.unit.dp @@ -37,6 +38,7 @@ fun NavigationGridCard( label: String, icon: Int, selected: Boolean = false, + enabled: Boolean = true, onClick: () -> Unit ) { val colors = Auth0Theme.colors @@ -48,7 +50,8 @@ fun NavigationGridCard( Card( modifier = Modifier .height(132.dp) - .clickable { onClick() }, + .alpha(if (enabled) 1f else 0.4f) + .then(if (enabled) Modifier.clickable { onClick() } else Modifier), shape = shapes.extraLarge, colors = CardDefaults.cardColors(containerColor = colors.backgroundLayerTop), border = BorderStroke(1.dp, colors.borderDefault), diff --git a/app/src/main/java/com/auth0/android/sample/ui/screens/AppearanceScreen.kt b/app/src/main/java/com/auth0/android/sample/ui/screens/AppearanceScreen.kt index 6e58c7a..9727a6a 100644 --- a/app/src/main/java/com/auth0/android/sample/ui/screens/AppearanceScreen.kt +++ b/app/src/main/java/com/auth0/android/sample/ui/screens/AppearanceScreen.kt @@ -120,7 +120,7 @@ fun AppearanceScreen( onClick = { appearanceViewModel.selectTheme(index) }, colors = RadioButtonDefaults.colors( selectedColor = if (isDark) colors.backgroundAccent else colors.backgroundPrimary, - unselectedColor = colors.borderDefault + unselectedColor = if (isDark) colors.backgroundAccent else colors.backgroundPrimary ) ) } diff --git a/app/src/main/java/com/auth0/android/sample/ui/screens/ChooseSignInScreen.kt b/app/src/main/java/com/auth0/android/sample/ui/screens/ChooseSignInScreen.kt index b2f2dd5..b4fe417 100644 --- a/app/src/main/java/com/auth0/android/sample/ui/screens/ChooseSignInScreen.kt +++ b/app/src/main/java/com/auth0/android/sample/ui/screens/ChooseSignInScreen.kt @@ -1,5 +1,6 @@ package com.auth0.android.sample.ui.screens +import android.widget.Toast import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets @@ -24,6 +25,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.style.TextAlign import com.auth0.android.sample.ui.components.Auth0LogoHeader @@ -38,7 +40,8 @@ private enum class LoginOption { Embedded, Hosted } * Pre-login screen for choosing the sign-in method. * * Cards are selectable — tapping a card sets the selection state. The Continue button - * navigates to the chosen flow and is disabled until a card is selected. + * navigates to the chosen flow. Hosted Login is selected by default so the button is + * enabled immediately on load. * * @param onEmbeddedLogin Navigate to embedded login * @param onHostedLogin Navigate to hosted (redirect) Auth0 login @@ -50,7 +53,8 @@ fun ChooseSignInScreen( onHostedLogin: () -> Unit, onSettings: () -> Unit = {} ) { - var selectedOption by remember { mutableStateOf(null) } + var selectedOption by remember { mutableStateOf(LoginOption.Hosted) } + val context = LocalContext.current val typography = Auth0Theme.typography val dimensions = Auth0Theme.dimensions val shapes = Auth0Theme.shapes @@ -90,7 +94,8 @@ fun ChooseSignInScreen( description = "Total brand control and low user frictions", icon = painterResource(com.auth0.android.sample.R.drawable.ic_embedded_login), isSelected = selectedOption == LoginOption.Embedded, - onClick = { selectedOption = LoginOption.Embedded } + enabled = false, + onClick = { Toast.makeText(context, "Coming soon", Toast.LENGTH_SHORT).show() } ) Spacer(modifier = Modifier.height(dimensions.spacingMd)) @@ -147,7 +152,7 @@ fun ChooseSignInScreen( ) Text( text = "Appearance", - style = typography.label, + style = typography.body, color = colors.textBold ) } diff --git a/app/src/main/java/com/auth0/android/sample/ui/screens/DashboardScreen.kt b/app/src/main/java/com/auth0/android/sample/ui/screens/DashboardScreen.kt index 3697f54..10fa82e 100644 --- a/app/src/main/java/com/auth0/android/sample/ui/screens/DashboardScreen.kt +++ b/app/src/main/java/com/auth0/android/sample/ui/screens/DashboardScreen.kt @@ -87,9 +87,12 @@ fun DashboardScreen( verticalArrangement = Arrangement.spacedBy(dimensions.spacingMd) ) { items(DashboardDestination.entries.toList()) { destination -> + val enabled = destination == DashboardDestination.Profile || + destination == DashboardDestination.LoginSecurity NavigationGridCard( label = destination.label, icon = destination.icon, + enabled = enabled, onClick = { onNavigate(destination) } ) } @@ -100,7 +103,7 @@ fun DashboardScreen( TextButton(onClick = onLogout) { Text( text = "Log out", - style = typography.label, + style = typography.body, color = colors.textBold ) } diff --git a/app/src/main/java/com/auth0/android/sample/ui/screens/ProfileScreen.kt b/app/src/main/java/com/auth0/android/sample/ui/screens/ProfileScreen.kt index ae13075..4066fe6 100644 --- a/app/src/main/java/com/auth0/android/sample/ui/screens/ProfileScreen.kt +++ b/app/src/main/java/com/auth0/android/sample/ui/screens/ProfileScreen.kt @@ -230,10 +230,12 @@ private fun ProfileInfoRow( color = colors.textBold, modifier = Modifier.weight(1f) ) - Icon( - imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight, - contentDescription = null, - tint = colors.textDefault - ) + if (onClick != null) { + Icon( + imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight, + contentDescription = null, + tint = colors.textDefault + ) + } } } diff --git a/app/src/main/java/com/auth0/android/sample/ui/viewmodels/AuthViewModel.kt b/app/src/main/java/com/auth0/android/sample/ui/viewmodels/AuthViewModel.kt index 8fc0bf7..c23c59e 100644 --- a/app/src/main/java/com/auth0/android/sample/ui/viewmodels/AuthViewModel.kt +++ b/app/src/main/java/com/auth0/android/sample/ui/viewmodels/AuthViewModel.kt @@ -123,7 +123,7 @@ class AuthViewModel : ViewModel() { try { val user = credentials.user _userProfile.value = UserProfile( - name = user.name ?: user.nickname ?: "User", + name = user.nickname ?: "User", email = user.email ?: "", pictureUrl = user.pictureURL ?: "" )