From c78897049afcbf902469939731f900f86871967f Mon Sep 17 00:00:00 2001 From: lalwani Date: Thu, 21 Nov 2024 11:21:50 -0800 Subject: [PATCH] Added auth demp app --- samples/auth-demo/build.gradle.kts | 61 +++++ samples/auth-demo/proguard-rules.pro | 21 ++ .../auth-demo/src/main/AndroidManifest.xml | 23 ++ .../com/ubercab/presidio/demo/DemoActivity.kt | 219 ++++++++++++++++++ .../ubercab/presidio/demo/ui/theme/Color.kt | 26 +++ .../ubercab/presidio/demo/ui/theme/Theme.kt | 79 +++++++ .../ubercab/presidio/demo/ui/theme/Type.kt | 51 ++++ .../res/drawable/ic_launcher_background.xml | 170 ++++++++++++++ .../res/drawable/ic_launcher_foreground.xml | 30 +++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2520 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3530 bytes .../main/res/mipmap-mdpi/ic_launch_round.png | Bin 0 -> 1699 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1176 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3881 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 5210 bytes .../src/main/res/raw/sso_config.json | 5 + .../auth-demo/src/main/res/values/colors.xml | 10 + .../auth-demo/src/main/res/values/strings.xml | 3 + .../auth-demo/src/main/res/values/themes.xml | 5 + settings.gradle.kts | 1 + 20 files changed, 704 insertions(+) create mode 100644 samples/auth-demo/build.gradle.kts create mode 100644 samples/auth-demo/proguard-rules.pro create mode 100644 samples/auth-demo/src/main/AndroidManifest.xml create mode 100644 samples/auth-demo/src/main/java/com/ubercab/presidio/demo/DemoActivity.kt create mode 100644 samples/auth-demo/src/main/java/com/ubercab/presidio/demo/ui/theme/Color.kt create mode 100644 samples/auth-demo/src/main/java/com/ubercab/presidio/demo/ui/theme/Theme.kt create mode 100644 samples/auth-demo/src/main/java/com/ubercab/presidio/demo/ui/theme/Type.kt create mode 100644 samples/auth-demo/src/main/res/drawable/ic_launcher_background.xml create mode 100644 samples/auth-demo/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 samples/auth-demo/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 samples/auth-demo/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 samples/auth-demo/src/main/res/mipmap-mdpi/ic_launch_round.png create mode 100644 samples/auth-demo/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 samples/auth-demo/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 samples/auth-demo/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 samples/auth-demo/src/main/res/raw/sso_config.json create mode 100644 samples/auth-demo/src/main/res/values/colors.xml create mode 100644 samples/auth-demo/src/main/res/values/strings.xml create mode 100644 samples/auth-demo/src/main/res/values/themes.xml diff --git a/samples/auth-demo/build.gradle.kts b/samples/auth-demo/build.gradle.kts new file mode 100644 index 00000000..b6f40518 --- /dev/null +++ b/samples/auth-demo/build.gradle.kts @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2024. Uber Technologies + * + * 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 + * + * https://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. + */ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) +} + +android { + namespace = "com.ubercab.presidio.auth_demo" + compileSdk = 34 + + defaultConfig { + applicationId = "com.ubercab.presidio.demo" + minSdk = 26 + targetSdk = 34 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + vectorDrawables { useSupportLibrary = true } + } + + buildTypes { + getByName("debug") { matchingFallbacks += listOf("release") } + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { jvmTarget = "1.8" } + buildFeatures { compose = true } + composeOptions { kotlinCompilerExtensionVersion = "1.5.11" } +} + +dependencies { + implementation(libs.core.ktx) + implementation(libs.lifecycle.runtime.ktx) + implementation(libs.activity.compose) + implementation(platform(libs.compose.bom)) + implementation(libs.material3) + implementation("com.uber.sdk2:core:2.0.1-BETA") + implementation("com.uber.sdk2:authentication:2.0.1-BETA") + testImplementation(libs.junit.junit) +} diff --git a/samples/auth-demo/proguard-rules.pro b/samples/auth-demo/proguard-rules.pro new file mode 100644 index 00000000..481bb434 --- /dev/null +++ b/samples/auth-demo/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/samples/auth-demo/src/main/AndroidManifest.xml b/samples/auth-demo/src/main/AndroidManifest.xml new file mode 100644 index 00000000..8163141e --- /dev/null +++ b/samples/auth-demo/src/main/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/auth-demo/src/main/java/com/ubercab/presidio/demo/DemoActivity.kt b/samples/auth-demo/src/main/java/com/ubercab/presidio/demo/DemoActivity.kt new file mode 100644 index 00000000..137bb04c --- /dev/null +++ b/samples/auth-demo/src/main/java/com/ubercab/presidio/demo/DemoActivity.kt @@ -0,0 +1,219 @@ +/* + * Copyright (C) 2024. Uber Technologies + * + * 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 + * + * https://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. + */ +package com.ubercab.presidio.demo + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.widget.Toast +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuBox +import androidx.compose.material3.ExposedDropdownMenuDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.material3.TextFieldDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import com.uber.sdk2.auth.UberAuthClientImpl +import com.uber.sdk2.auth.request.AuthContext +import com.uber.sdk2.auth.request.AuthDestination +import com.uber.sdk2.auth.request.AuthType +import com.uber.sdk2.auth.request.CrossApp +import com.uber.sdk2.auth.request.PrefillInfo +import com.uber.sdk2.auth.response.UberToken +import com.uber.sdk2.core.ui.UberButton +import com.ubercab.presidio.demo.ui.theme.UberandroidsdkTheme + +class DemoActivity : ComponentActivity() { + + private val uberAuthLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + logResult(result.resultCode, result.data) + } + + private fun logResult(resultCode: Int, data: Intent?) { + when (resultCode) { + RESULT_OK -> { + val uberToken = data?.getParcelableExtra("EXTRA_UBER_TOKEN") + Toast.makeText(this, "Uber Token: ${uberToken?.accessToken}", Toast.LENGTH_SHORT).show() + } + else -> { + val errorMessage = data?.getStringExtra("EXTRA_ERROR") + Toast.makeText(this, "Error: $errorMessage", Toast.LENGTH_SHORT).show() + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + UberandroidsdkTheme { + Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) { + Column( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally, + ) { + AuthScreen( + context = this@DemoActivity, + launcher = uberAuthLauncher, + authDestination = AuthDestination.InApp, + ) + } + } + } + } + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun AuthScreen( + context: Context, + launcher: ActivityResultLauncher, + authDestination: AuthDestination, +) { + val email = remember { mutableStateOf("") } + val firstName = remember { mutableStateOf("") } + val lastName = remember { mutableStateOf("") } + val phoneNumber = remember { mutableStateOf("") } + + TextFieldWithLabel("Email", email) + TextFieldWithLabel("First Name", firstName) + TextFieldWithLabel("Last Name", lastName) + TextFieldWithLabel("Phone Number", phoneNumber) + + var expanded by remember { mutableStateOf(false) } + var selectedOptionText by remember { mutableStateOf("Select an option") } + val options = listOf("Rider", "Eats", "Driver", "InApp") + + Column(modifier = Modifier.fillMaxWidth().padding(16.dp)) { + ExposedDropdownMenuBox(expanded = expanded, onExpandedChange = { expanded = !expanded }) { + Box( + modifier = + Modifier.fillMaxWidth() + .clickable { expanded = true } + .menuAnchor() + .padding(16.dp) // Optional: padding for better touch target + ) { + TextField( + value = selectedOptionText, + onValueChange = {}, + label = { Text("Selected Option") }, + modifier = Modifier.fillMaxWidth(), + readOnly = true, + trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) }, + singleLine = true, + enabled = false, // Disable the TextField to prevent keyboard + ) + } + + ExposedDropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false }, + modifier = Modifier.fillMaxWidth(), + ) { + options.forEach { label -> + DropdownMenuItem( + onClick = { + selectedOptionText = label + expanded = false + }, + text = { Text(text = label) }, + ) + } + } + } + } + + val authDestination = + when (selectedOptionText) { + "Rider" -> AuthDestination.CrossAppSso(listOf(CrossApp.Rider, CrossApp.Eats)) + "Eats" -> AuthDestination.CrossAppSso(listOf(CrossApp.Eats, CrossApp.Rider)) + "Driver" -> AuthDestination.CrossAppSso(listOf(CrossApp.Driver, CrossApp.Rider)) + "InApp" -> AuthDestination.InApp + else -> AuthDestination.InApp + } + + AuthButton( + context = context, + launcher = launcher, + authDestination = authDestination, + buttonText = "Authenticate", + PrefillInfo(email.value, firstName.value, lastName.value, phoneNumber.value), + ) +} + +@Composable +fun TextFieldWithLabel(label: String, textState: MutableState) { + TextField( + value = textState.value, + onValueChange = { textState.value = it }, + label = { Text(label) }, + modifier = Modifier.fillMaxWidth().padding(bottom = 8.dp), + colors = + TextFieldDefaults.colors( + disabledContainerColor = Color.White, + focusedIndicatorColor = MaterialTheme.colorScheme.primary, + unfocusedIndicatorColor = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f), + focusedTextColor = MaterialTheme.colorScheme.onSurface, + ), + ) +} + +@Composable +fun AuthButton( + context: Context, + launcher: ActivityResultLauncher, + authDestination: AuthDestination, + buttonText: String, + prefillInfo: PrefillInfo? = null, +) { + UberButton( + text = buttonText, + onClick = { + // Invoke the Uber authentication call here + UberAuthClientImpl() + .authenticate( + context as DemoActivity, + launcher, + AuthContext(authDestination, AuthType.PKCE(), prefillInfo), + ) + }, + ) +} diff --git a/samples/auth-demo/src/main/java/com/ubercab/presidio/demo/ui/theme/Color.kt b/samples/auth-demo/src/main/java/com/ubercab/presidio/demo/ui/theme/Color.kt new file mode 100644 index 00000000..73cba511 --- /dev/null +++ b/samples/auth-demo/src/main/java/com/ubercab/presidio/demo/ui/theme/Color.kt @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2024. Uber Technologies + * + * 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 + * + * https://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. + */ +package com.ubercab.presidio.demo.ui.theme + +import androidx.compose.ui.graphics.Color + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val Purple40 = Color(0xFF6650a4) +val PurpleGrey40 = Color(0xFF625b71) +val Pink40 = Color(0xFF7D5260) diff --git a/samples/auth-demo/src/main/java/com/ubercab/presidio/demo/ui/theme/Theme.kt b/samples/auth-demo/src/main/java/com/ubercab/presidio/demo/ui/theme/Theme.kt new file mode 100644 index 00000000..669bb451 --- /dev/null +++ b/samples/auth-demo/src/main/java/com/ubercab/presidio/demo/ui/theme/Theme.kt @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2024. Uber Technologies + * + * 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 + * + * https://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. + */ +package com.ubercab.presidio.demo.ui.theme + +import android.app.Activity +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalView +import androidx.core.view.WindowCompat + +private val DarkColorScheme = + darkColorScheme(primary = Purple80, secondary = PurpleGrey80, tertiary = Pink80) + +private val LightColorScheme = + lightColorScheme( + primary = Purple40, + secondary = PurpleGrey40, + tertiary = Pink40, + + /* Other default colors to override + background = Color(0xFFFFFBFE), + surface = Color(0xFFFFFBFE), + onPrimary = Color.White, + onSecondary = Color.White, + onTertiary = Color.White, + onBackground = Color(0xFF1C1B1F), + onSurface = Color(0xFF1C1B1F), + */ + ) + +@Composable +fun UberandroidsdkTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit, +) { + val colorScheme = + when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + val view = LocalView.current + if (!view.isInEditMode) { + SideEffect { + val window = (view.context as Activity).window + window.statusBarColor = colorScheme.primary.toArgb() + WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme + } + } + + MaterialTheme(colorScheme = colorScheme, typography = Typography, content = content) +} diff --git a/samples/auth-demo/src/main/java/com/ubercab/presidio/demo/ui/theme/Type.kt b/samples/auth-demo/src/main/java/com/ubercab/presidio/demo/ui/theme/Type.kt new file mode 100644 index 00000000..3b41f6f8 --- /dev/null +++ b/samples/auth-demo/src/main/java/com/ubercab/presidio/demo/ui/theme/Type.kt @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2024. Uber Technologies + * + * 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 + * + * https://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. + */ +package com.ubercab.presidio.demo.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = + Typography( + bodyLarge = + TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp, + ) + /* Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) + */ + ) diff --git a/samples/auth-demo/src/main/res/drawable/ic_launcher_background.xml b/samples/auth-demo/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..07d5da9c --- /dev/null +++ b/samples/auth-demo/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/auth-demo/src/main/res/drawable/ic_launcher_foreground.xml b/samples/auth-demo/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 00000000..2b068d11 --- /dev/null +++ b/samples/auth-demo/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/samples/auth-demo/src/main/res/mipmap-hdpi/ic_launcher.png b/samples/auth-demo/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..998bf5f2336e55cde702951821cb72cb39e10850 GIT binary patch literal 2520 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 literal 0 HcmV?d00001 diff --git a/samples/auth-demo/src/main/res/mipmap-mdpi/ic_launcher.png b/samples/auth-demo/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cad757b38b65e5887b9992849dfe2be99a0624c8 GIT binary patch literal 1176 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 literal 0 HcmV?d00001 diff --git a/samples/auth-demo/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/samples/auth-demo/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..0f3bcd914e5562cff6dbce651874e2e878f18b4f GIT binary patch literal 5210 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 UZ4q!~m;e9(07*qoM6N<$f^!16k^lez literal 0 HcmV?d00001 diff --git a/samples/auth-demo/src/main/res/raw/sso_config.json b/samples/auth-demo/src/main/res/raw/sso_config.json new file mode 100644 index 00000000..7e886c0e --- /dev/null +++ b/samples/auth-demo/src/main/res/raw/sso_config.json @@ -0,0 +1,5 @@ +{ + "client_id": "your_client_id", + "redirect_uri": "your_redirect_uri", + "scope": "your_scopes_comma_separated" +} diff --git a/samples/auth-demo/src/main/res/values/colors.xml b/samples/auth-demo/src/main/res/values/colors.xml new file mode 100644 index 00000000..f8c6127d --- /dev/null +++ b/samples/auth-demo/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/samples/auth-demo/src/main/res/values/strings.xml b/samples/auth-demo/src/main/res/values/strings.xml new file mode 100644 index 00000000..3e25bc54 --- /dev/null +++ b/samples/auth-demo/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Auth Demo + \ No newline at end of file diff --git a/samples/auth-demo/src/main/res/values/themes.xml b/samples/auth-demo/src/main/res/values/themes.xml new file mode 100644 index 00000000..675317bd --- /dev/null +++ b/samples/auth-demo/src/main/res/values/themes.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 165cf445..4d6a9505 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -45,6 +45,7 @@ include( ":core", ":core-android", ":rides-android", + ":samples:auth-demo", ":samples:request-button-sample", ":samples:login-sample", ":samples:login-with-auth-code-demo",