Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
1e44a13
Begin development on 10.0.0
thatfiredev Mar 19, 2025
bae4ce4
feat: Core: FirebaseAuthUI Singleton & DI (#2215)
Lyokone Sep 15, 2025
91b0a49
feat: Core: Auth State & User Accessors (#2217)
Lyokone Sep 18, 2025
ed436cf
feat(AuthUIConfiguration): implement configuration model, DSL builder…
demolaf Sep 19, 2025
ed47c1d
feat: Email & Password Validator and PasswordRule validations (#2218)
demolaf Sep 22, 2025
c180522
feat: AuthException parsing for UI (#2222)
Lyokone Sep 23, 2025
59325de
feat: Localization - AuthUIStringProvider and locale override (#2221)
demolaf Sep 23, 2025
f1dfd0c
feat: Provider Models (AuthProvider + concrete types) (#2223)
demolaf Sep 24, 2025
b88993f
feat: AuthUITheme, ProviderStyle and tests (#2224)
demolaf Sep 25, 2025
29a443f
feat: Error Recovery & Dialog (#2225)
Lyokone Sep 25, 2025
7aed4b8
feat: Core: Sign-out & Delete (#2226)
Lyokone Sep 26, 2025
5960b4b
feat: AuthProviderButton and tests (#2228)
demolaf Sep 30, 2025
68df21d
feat: AuthMethodPicker (#2230)
demolaf Oct 6, 2025
4d1aefd
feat: MFA Config Model (MfaConfiguration, MfaFactor) (#2234)
Lyokone Oct 7, 2025
3cfde41
feat: AuthTextField (#2231)
demolaf Oct 7, 2025
a2ba642
feat: CountryData & Selector Utilities (#2235)
Lyokone Oct 7, 2025
10b6dc7
feat: Email Provider Integration (#2233)
demolaf Oct 8, 2025
ddf6719
feat: EmailAuthScreen (Stateful + Slot) (#2236)
demolaf Oct 10, 2025
72ad750
feat: MFA Enrollment (TOTP) (#2238)
Lyokone Oct 10, 2025
9387fd5
feat: Credential Manager: Passwords (#2241)
Lyokone Oct 14, 2025
01052cd
EmailAuthScreen Tests (#2239)
demolaf Oct 14, 2025
75712c1
feat: Phone Provider Integration (#2240)
demolaf Oct 14, 2025
c3f2f80
feat: MFA Enrollment (SMS) (#2242)
Lyokone Oct 15, 2025
b14c136
feat: PhoneAuthScreen (#2243)
demolaf Oct 16, 2025
8771332
feat: MFA Screens (#2244)
Lyokone Oct 17, 2025
5a13fbc
feat: Facebook Sign-In (FacebookSignInHandler) (#2245)
demolaf Oct 20, 2025
5de660b
feat: extract routes from example app to main library (#2246)
Lyokone Oct 22, 2025
6e3f755
feat: add support for MFA challenge during sign in (#2248)
Lyokone Oct 22, 2025
3b776cc
feat: Anonymous Auth & Upgrade (#2247)
demolaf Oct 22, 2025
8070632
feat: Core: AuthFlowController (#2252)
Lyokone Oct 23, 2025
f5e2829
feat: Samples: Custom Slots & Theming (#2253)
Lyokone Oct 23, 2025
d7ce8ac
feat: Google Sign-In (GoogleSignInHandler) (#2254)
demolaf Oct 24, 2025
9654e5c
feat: OAuth Providers (Twitter, GitHub, Microsoft, Yahoo, Apple), Gen…
demolaf Oct 24, 2025
e4681e0
feat: Accessibility & i18n Audit (#2258)
Lyokone Oct 24, 2025
d7dddf5
feat: Add relevant tracking information (#2259)
Lyokone Oct 24, 2025
16cda47
move LINE OAuth to demo app (#2260)
demolaf Oct 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .firebase/hosting.cHVibGlj.cache
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
index.html,1760725054923,96d3ff69603ba92f085431c7b56242a873ddcdd5a1c9691f7836b093f8114a5a
.well-known/assetlinks.json,1760725039101,cbfe2437a47d2f4a2bca9bb7c1c789b4684d6a13694821e46e4177ccce023f4b
23 changes: 18 additions & 5 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,27 @@ on:
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- uses: actions/checkout@v2
- name: set up JDK 17
uses: actions/setup-java@v1
- uses: actions/checkout@v4

- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: 17
- name: Build with Gradle
java-version: '21'
distribution: 'temurin'

- name: Build and Test
run: ./scripts/build.sh

- name: Print Logs
if: failure()
run: ./scripts/print_build_logs.sh
52 changes: 52 additions & 0 deletions .github/workflows/e2e_test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: E2E Tests (Firebase Emulator)

on:
- pull_request
- push

jobs:
e2e-tests:
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- uses: actions/checkout@v4

- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}

- name: Firebase Emulator Cache
uses: actions/cache@v4
with:
path: ~/.cache/firebase/emulators
key: firebase-emulators-v3-${{ runner.os }}

- name: Install Node.js 20
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'

- name: Install Firebase Tools
run: |
npm i -g firebase-tools

- name: Start Firebase Auth Emulator
run: ./scripts/start-firebase-emulator.sh

- name: Run E2E Tests
run: |
./gradlew e2eTest

- name: Print Logs
if: failure()
run: ./scripts/print_build_logs.sh
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,5 @@ google-services.json
crashlytics-build.properties
auth/src/main/res/values/com_crashlytics_export_strings.xml
*.log
composeapp/.firebaserc
composeapp/firebase.json
61 changes: 50 additions & 11 deletions auth/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import com.android.build.gradle.internal.dsl.TestOptions

plugins {
id("com.android.library")
id("com.vanniktech.maven.publish")
id("org.jetbrains.kotlin.android")
id("org.jetbrains.kotlin.plugin.compose") version Config.kotlinVersion
}

android {
Expand All @@ -12,8 +11,9 @@ android {

defaultConfig {
minSdk = Config.SdkVersions.min
targetSdk =Config.SdkVersions.target
targetSdk = Config.SdkVersions.target

buildConfigField("String", "LIBRARY_NAME", "\"Firebase-UI-Android\"")
buildConfigField("String", "VERSION_NAME", "\"${Config.version}\"")

resourcePrefix("fui_")
Expand All @@ -26,8 +26,8 @@ android {
consumerProguardFiles("auth-proguard.pro")
}
}
compileOptions {

compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
Expand Down Expand Up @@ -67,41 +67,80 @@ android {
kotlinOptions {
jvmTarget = "17"
}
buildFeatures {
compose = true
buildConfig = true
}
}

dependencies {
implementation(Config.Libs.Androidx.materialDesign)
implementation(platform(Config.Libs.Androidx.Compose.bom))
implementation(Config.Libs.Androidx.Compose.ui)
implementation(Config.Libs.Androidx.Compose.uiGraphics)
implementation(Config.Libs.Androidx.Compose.material3)
implementation(Config.Libs.Androidx.Compose.foundation)
implementation(Config.Libs.Androidx.Compose.tooling)
implementation(Config.Libs.Androidx.Compose.toolingPreview)
implementation(Config.Libs.Androidx.Compose.activityCompose)
implementation(Config.Libs.Androidx.activity)
implementation(Config.Libs.Androidx.materialDesign)
implementation(Config.Libs.Androidx.Compose.materialIconsExtended)
implementation(Config.Libs.Androidx.datastorePreferences)
// The new activity result APIs force us to include Fragment 1.3.0
// See https://issuetracker.google.com/issues/152554847
implementation(Config.Libs.Androidx.fragment)
implementation(Config.Libs.Androidx.customTabs)
implementation(Config.Libs.Androidx.constraint)
implementation("androidx.credentials:credentials:1.3.0")
implementation("androidx.credentials:credentials-play-services-auth:1.3.0")

// Google Authentication
implementation(Config.Libs.Androidx.credentials)
implementation(Config.Libs.Androidx.credentialsPlayServices)
implementation(Config.Libs.Misc.googleid)
implementation(Config.Libs.PlayServices.auth)
//api(Config.Libs.PlayServices.auth)

implementation(Config.Libs.Androidx.lifecycleExtensions)
implementation("androidx.core:core-ktx:1.13.1")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
implementation("com.google.android.libraries.identity.googleid:googleid:1.1.1")
implementation("androidx.navigation:navigation-compose:2.8.3")
implementation("com.google.zxing:core:3.5.3")
annotationProcessor(Config.Libs.Androidx.lifecycleCompiler)

implementation(platform(Config.Libs.Firebase.bom))
api(Config.Libs.Firebase.auth)
api(Config.Libs.PlayServices.auth)

// Phone number validation
implementation(Config.Libs.Misc.libphonenumber)

compileOnly(Config.Libs.Provider.facebook)
implementation(Config.Libs.Androidx.legacySupportv4) // Needed to override deps
implementation(Config.Libs.Androidx.cardView) // Needed to override Facebook

testImplementation(Config.Libs.Test.junit)
testImplementation(Config.Libs.Test.truth)
testImplementation(Config.Libs.Test.mockito)
testImplementation(Config.Libs.Test.core)
testImplementation(Config.Libs.Test.robolectric)
testImplementation(Config.Libs.Test.kotlinReflect)
testImplementation(Config.Libs.Provider.facebook)
testImplementation(Config.Libs.Test.mockitoCore)
testImplementation(Config.Libs.Test.mockitoInline)
testImplementation(Config.Libs.Test.mockitoKotlin)
testImplementation(Config.Libs.Androidx.credentials)
testImplementation(Config.Libs.Test.composeUiTestJunit4)

debugImplementation(project(":internal:lintchecks"))
}

val mockitoAgent by configurations.creating

dependencies {
mockitoAgent(Config.Libs.Test.mockitoCore) {
isTransitive = false
}
}

tasks.withType<Test>().configureEach {
jvmArgs("-javaagent:${mockitoAgent.asPath}")
}
12 changes: 11 additions & 1 deletion auth/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@

<application>

<service android:name="com.google.firebase.components.ComponentDiscoveryService">
<meta-data
android:name="com.google.firebase.components:com.firebase.ui.auth.compose.FirebaseUIComposeRegistrar"
android:value="com.google.firebase.components.ComponentRegistrar" />
</service>

<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
Expand All @@ -27,6 +33,10 @@
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_application_id" />

<meta-data
android:name="com.facebook.sdk.ClientToken"
android:value="@string/facebook_client_token"/>

<activity
android:name=".KickoffActivity"
android:label=""
Expand Down Expand Up @@ -83,8 +93,8 @@

<activity
android:name=".ui.email.EmailLinkCatcherActivity"
android:exported="false"
android:label=""
android:exported="false"
android:theme="@style/FirebaseUI.Transparent"
android:windowSoftInputMode="adjustResize" />

Expand Down
Loading