1- package com.firebase.ui.auth.compose
1+ package com.firebase.ui.auth.compose.ui.method_picker
22
33import androidx.compose.foundation.Image
4- import androidx.compose.foundation.background
5- import androidx.compose.foundation.layout.Arrangement
64import androidx.compose.foundation.layout.Box
75import androidx.compose.foundation.layout.Column
8- import androidx.compose.foundation.layout.PaddingValues
9- import androidx.compose.foundation.layout.Spacer
10- import androidx.compose.foundation.layout.fillMaxHeight
116import androidx.compose.foundation.layout.fillMaxSize
12- import androidx.compose.foundation.layout.height
137import androidx.compose.foundation.layout.padding
14- import androidx.compose.foundation.layout.safeContentPadding
158import androidx.compose.foundation.layout.safeDrawingPadding
16- import androidx.compose.foundation.layout.widthIn
179import androidx.compose.foundation.lazy.LazyColumn
18- import androidx.compose.material.icons.Icons
19- import androidx.compose.material.icons.filled.Favorite
20- import androidx.compose.material.icons.filled.Star
21- import androidx.compose.material3.Icon
22- import androidx.compose.material3.Scaffold
23- import androidx.compose.material3.Text
2410import androidx.compose.runtime.Composable
2511import androidx.compose.ui.Alignment
2612import androidx.compose.ui.Modifier
27- import androidx.compose.ui.graphics.Color
2813import androidx.compose.ui.platform.LocalContext
29- import androidx.compose.ui.text.style.TextAlign
14+ import androidx.compose.ui.platform.LocalInspectionMode
15+ import androidx.compose.ui.platform.testTag
16+ import androidx.compose.ui.res.stringResource
3017import androidx.compose.ui.tooling.preview.Preview
3118import androidx.compose.ui.unit.dp
3219import com.firebase.ui.auth.R
33- import com.firebase.ui.auth.compose.AuthProviderButton
3420import com.firebase.ui.auth.compose.configuration.AuthProvider
35- import com.firebase.ui.auth.compose.configuration.stringprovider .DefaultAuthUIStringProvider
21+ import com.firebase.ui.auth.compose.configuration.string_provider .DefaultAuthUIStringProvider
3622import com.firebase.ui.auth.compose.configuration.theme.AuthUIAsset
37-
38- // AuthMethodPicker(
39- // providers = listOf(GoogleAuthProvider(), EmailAuthProvider()),
40- // onProviderSelected = { provider -> /* ... */ }
41- // )
23+ import com.firebase.ui.auth.compose.ui.components.AuthProviderButton
4224
4325/* *
4426 * Renders the provider selection screen.
@@ -59,6 +41,8 @@ import com.firebase.ui.auth.compose.configuration.theme.AuthUIAsset
5941 * @param logo An optional logo to display.
6042 * @param onProviderSelected A callback when a provider is selected.
6143 * @param customLayout An optional custom layout composable for the provider buttons.
44+ * @param termsOfServiceUrl The URL for the Terms of Service.
45+ * @param privacyPolicyUrl The URL for the Privacy Policy.
6246 *
6347 * @since 10.0.0
6448 */
@@ -69,8 +53,11 @@ fun AuthMethodPicker(
6953 logo : AuthUIAsset ? = null,
7054 onProviderSelected : (AuthProvider ) -> Unit ,
7155 customLayout : @Composable ((List <AuthProvider >, (AuthProvider ) -> Unit ) -> Unit )? = null,
56+ termsOfServiceUrl : String? = null,
57+ privacyPolicyUrl : String? = null,
7258) {
7359 val context = LocalContext .current
60+ val inPreview = LocalInspectionMode .current
7461
7562 Column (
7663 modifier = modifier
@@ -83,7 +70,8 @@ fun AuthMethodPicker(
8370 modifier = Modifier
8471 .weight(0.4f ),
8572 painter = it.painter,
86- contentDescription = " AuthMethodPicker logo" ,
73+ contentDescription = if (inPreview) " "
74+ else stringResource(R .string.fui_auth_method_picker_logo)
8775 )
8876 }
8977 if (customLayout != null ) {
@@ -92,9 +80,9 @@ fun AuthMethodPicker(
9280 LazyColumn (
9381 modifier = Modifier
9482 .fillMaxSize()
95- .weight(1f ),
83+ .weight(1f )
84+ .testTag(" AuthMethodPicker LazyColumn" ),
9685 horizontalAlignment = Alignment .CenterHorizontally ,
97- contentPadding = PaddingValues (bottom = 64 .dp) // Space for text
9886 ) {
9987 items(providers.size) { index ->
10088 val provider = providers[index]
@@ -112,14 +100,18 @@ fun AuthMethodPicker(
112100 }
113101 }
114102 }
115- Text (
116- " By continuing, you are indicating that you accept our " +
117- " Terms of Service and Privacy Policy." ,
118- textAlign = TextAlign .Center ,
119- modifier = Modifier
120- .padding(horizontal = 16 .dp, vertical = 16 .dp)
121- )
122103 }
104+ AnnotatedStringResource (
105+ context = context,
106+ inPreview = inPreview,
107+ previewText = " By continuing, you accept our Terms of Service and Privacy Policy." ,
108+ modifier = Modifier .padding(vertical = 16 .dp),
109+ id = R .string.fui_tos_and_pp,
110+ links = arrayOf(
111+ " Terms of Service" to (termsOfServiceUrl ? : " " ),
112+ " Privacy Policy" to (privacyPolicyUrl ? : " " )
113+ )
114+ )
123115 }
124116}
125117
@@ -160,19 +152,12 @@ fun PreviewAuthMethodPicker() {
160152 customParameters = emptyMap()
161153 ),
162154 AuthProvider .Anonymous ,
163- AuthProvider .GenericOAuth (
164- providerId = " google.com" ,
165- scopes = emptyList(),
166- customParameters = emptyMap(),
167- buttonLabel = " Generic Provider" ,
168- buttonIcon = AuthUIAsset .Vector (Icons .Default .Star ),
169- buttonColor = Color .Gray ,
170- contentColor = Color .White
171- )
172155 ),
173156 logo = AuthUIAsset .Resource (R .drawable.fui_ic_check_circle_black_128dp),
174157 onProviderSelected = { provider ->
175158
176159 },
160+ termsOfServiceUrl = " https://example.com/terms" ,
161+ privacyPolicyUrl = " https://example.com/privacy"
177162 )
178163}
0 commit comments