Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
150 commits
Select commit Hold shift + click to select a range
3ef562c
Auth: add new dependencies
UweTrottmann Feb 26, 2026
c276a90
Auth: copy files from FirebaseUI
UweTrottmann Feb 26, 2026
2f07e56
Auth: add missing license and copyright info
UweTrottmann May 1, 2026
8d31232
Auth: use SPDX tags, add source info
UweTrottmann May 1, 2026
0215b3c
Auth: update package names
UweTrottmann Feb 26, 2026
af2a597
Auth: copy string resources from FirebaseUI
UweTrottmann Mar 5, 2026
12ad451
Auth: copy drawable resources from FirebaseUI
UweTrottmann Mar 5, 2026
49c37e3
Auth: update copyright header
UweTrottmann Feb 26, 2026
a0a028f
Auth: prepare to use new auth UI
UweTrottmann Feb 26, 2026
1a212da
Auth: fix imports
UweTrottmann Feb 26, 2026
1c966f1
Auth: register FirebaseAuthActivity in AndroidManifest
UweTrottmann Mar 5, 2026
add3b34
Auth: remove unused providers
UweTrottmann Feb 26, 2026
68c0d27
Auth: remove sms factor
UweTrottmann Mar 5, 2026
78c52ea
Auth: remove unused imports
UweTrottmann Mar 5, 2026
6d75af5
Auth: use default_web_client_id from this apps resources
UweTrottmann Mar 5, 2026
723ae4f
Cloud: drop no longer supported silent sign-in
UweTrottmann Mar 5, 2026
af28d52
Cloud: drop edge-to-edge opt-out for Firebase Auth UI
UweTrottmann Nov 20, 2025
a1a5209
Build: update firebase-auth [22.3.1 -> 24.0.1]
UweTrottmann Mar 5, 2026
c302192
Auth: remove FirebaseUI 8 auth dependency
UweTrottmann Mar 5, 2026
2024f87
Auth: use new delete account API
UweTrottmann Mar 5, 2026
d15d04a
Auth: use simpler auth error logging and reporting
UweTrottmann Mar 5, 2026
b91350f
Auth: use new sign out API
UweTrottmann Mar 5, 2026
6548863
Cloud auth: start README
UweTrottmann Mar 12, 2026
0ca2e9d
Auth: clarify action that verification email needs to be sent manually
UweTrottmann Mar 12, 2026
cefe353
Auth: replace hard coded email provider ID with constants
UweTrottmann Mar 12, 2026
4c021d2
Auth: don't require email verification (same as before)
UweTrottmann Mar 12, 2026
003a298
CloudSetupFragment: prevent signing in with same account after deletion
UweTrottmann Mar 12, 2026
cf513a5
Auth: fix Compose previews for some email auth screens
UweTrottmann Mar 12, 2026
801509b
CloudSetupFragment: untangle sign in and start setup code paths
UweTrottmann Mar 12, 2026
6c15957
EmailAuthScreen: keep filled data when switching between modes
UweTrottmann Mar 12, 2026
64b2d7b
Auth README: note sign up with email to overwrite Google auth provider
UweTrottmann Mar 12, 2026
d8fbcdb
Auth: don't keep state (error dialogs) when starting a new auth flow
UweTrottmann Mar 12, 2026
c278b60
CloudSetupFragment: clear error from previous sign-in attempts
UweTrottmann Mar 12, 2026
ec5afa4
CloudSetupFragment: don't invalidate account if signing in fails
UweTrottmann Mar 12, 2026
f3647ff
Auth: fix Compose preview for AuthMethodPicker
UweTrottmann Mar 12, 2026
971984f
AuthMethodPicker: set default logo, add continue with to preview
UweTrottmann Mar 12, 2026
1144056
Auth: forward email address when continuing
UweTrottmann Mar 12, 2026
aa7503b
Auth: use FirebaseAuthActivity directly, drop AuthFlowController
UweTrottmann Mar 13, 2026
bdc289b
AuthState.Success: remove always null or default properties
UweTrottmann Mar 13, 2026
ccf8f68
FirebaseAuthScreen: don't set FirebaseUI version
UweTrottmann Mar 13, 2026
880d466
FirebaseAuthScreen: don't show error dialog if user canceled operation
UweTrottmann Mar 13, 2026
8bc41a9
Email sign up: proper exception and message if email is in use
UweTrottmann Mar 13, 2026
e66d11a
ErrorRecoveryDialog: remove never called onRetry callback
UweTrottmann Mar 13, 2026
98772b0
EmailAuthScreen: use error dialog from FirebaseAuthScreen
UweTrottmann Mar 13, 2026
4db062a
ErrorRecoveryDialog: don't show recover action if password is incorrect
UweTrottmann Mar 13, 2026
6e37fd6
FirebaseAuthScreen: simplify error dialog state management
UweTrottmann Mar 13, 2026
63f15ba
Icons: update email and visibility icons with rounded Material Symbol
UweTrottmann Mar 19, 2026
163283c
Auth: replace Material icons with drawables in AuthTextField
UweTrottmann Mar 19, 2026
c77a6a5
Auth: remove auth_picker_email_google.xml, replaced by AuthMethodPicker
UweTrottmann Mar 19, 2026
8cd0519
Auth: replace provider default icons
UweTrottmann Mar 19, 2026
9ee0b05
Auth: extract AuthTopAppBar, use matching colors
UweTrottmann Mar 19, 2026
a68e22b
Auth: replace Material icons with drawables in AuthTopAppBar
UweTrottmann Mar 19, 2026
bed9087
Auth: remove deprecated, unused Material Icons library
UweTrottmann Mar 19, 2026
1762cfa
Auth: extract AuthHorizontalDivider, drop the "or Continue with" text
UweTrottmann Mar 19, 2026
3f2356a
Auth: fix SignInUI preview, drop unused emailSignInLinkSent parameter
UweTrottmann Mar 19, 2026
af10830
Auth: style AuthMethodPicker screen to match existing one, drop ToS link
UweTrottmann Mar 19, 2026
e6b7760
Auth: set privacy policy URL
UweTrottmann Mar 19, 2026
f1547d2
Auth: remove ToS URL config option and redundant ToS and privacy footer
UweTrottmann Mar 19, 2026
6b1eab8
Auth: remove some unused strings
UweTrottmann Mar 19, 2026
0e21704
Auth: remove unused RequiresProfileCompletion state
UweTrottmann Mar 19, 2026
dc6fc67
Auth: in FirebaseAuthScreen ensure used strings are shown
UweTrottmann Mar 19, 2026
67ff55d
Auth: require to pass a server client ID for Google auth
UweTrottmann Mar 19, 2026
8a863a0
Auth: drop unused Preconditions class
UweTrottmann Mar 19, 2026
2d29309
Auth: actually handle weak password exception
UweTrottmann Mar 19, 2026
ccac062
EmailAuthScreen: rename unused symbol to _
UweTrottmann Apr 24, 2026
ee7cbb3
Auth: completely remove anonymous provider support
UweTrottmann Mar 19, 2026
e77f4d6
Auth: remove unused AuthUIConfiguration options
UweTrottmann Mar 19, 2026
ade7d64
Auth: use custom names for preference datastores, add corruption handler
UweTrottmann Mar 20, 2026
6cc0bc7
EmailAuthProvider: extract duplicate credential and sign-in pref saving
UweTrottmann Mar 20, 2026
93197dd
Auth: use Timber for logging
UweTrottmann Mar 20, 2026
5e12003
Auth: reuse existing strings
UweTrottmann Mar 20, 2026
52d51aa
Auth: move strings from fui_ to auth_ prefix
UweTrottmann Mar 26, 2026
f0d0c40
Auth: explicitly disable MFA support
UweTrottmann Mar 26, 2026
be2bb8f
Auth: change translation_description to comment attribute Crowdin uses
UweTrottmann Mar 26, 2026
31ae144
Auth: move some currently not visible strings to donottranslate.xml
UweTrottmann Mar 26, 2026
3f7dceb
Auth: remove some unused strings
UweTrottmann Mar 26, 2026
75c5b68
Auth: restore email verification code to avoid breaking changes
UweTrottmann Mar 26, 2026
be4dfe6
Auth: extract SuccessDestination, clean it up, add previews
UweTrottmann Mar 26, 2026
d3a6e30
Auth: remove redundant MFA enabled check in AuthSuccessContent
UweTrottmann Mar 26, 2026
4adf6ef
Auth: correct privacy policy message string comment
UweTrottmann Mar 26, 2026
440d08b
Auth: move some currently not visible strings to donottranslate.xml
UweTrottmann Mar 26, 2026
b68b93e
Auth: combine into single valid email required label
UweTrottmann Mar 26, 2026
bf2f511
Auth: combine into single valid verification code required label
UweTrottmann Mar 26, 2026
0484019
Auth: remove some unused strings
UweTrottmann Mar 26, 2026
767df26
Auth: use more understandable sign up action string
UweTrottmann Mar 26, 2026
12326ea
Auth: use name hint that works for names that don't have a last name
UweTrottmann Mar 26, 2026
836bba3
Auth: move email link pref keys to manager class, drop Firebase prefix
UweTrottmann Mar 26, 2026
ad8c4c9
Auth: use rule to enforce password length, unify error handling
UweTrottmann Mar 26, 2026
31f8116
Auth: add tests for createUserWithEmailAndPassword
UweTrottmann Apr 16, 2026
ccd91bb
Auth: introduce constants for Firebase error codes
UweTrottmann Apr 16, 2026
3914a71
Auth: properly handle disabled account sign-up
UweTrottmann Apr 16, 2026
7eca80d
Auth: in error dialog, fix when retry is shown, clean up
UweTrottmann Apr 16, 2026
fc927cf
Auth: remove unused parameter name
UweTrottmann Apr 16, 2026
56aa518
Auth: test signInWithEmailAndPassword
UweTrottmann Apr 16, 2026
d462938
ErrorRecoveryDialog: no need to handle AuthCancelledException
UweTrottmann Apr 16, 2026
fe64ebb
Auth: extract LoadingDialog, remove non-localized message
UweTrottmann Apr 16, 2026
d007153
Auth: re-use incorrect credentials message for MFA
UweTrottmann Apr 16, 2026
f8a7059
Auth: drop unused invalidPassword string
UweTrottmann Apr 16, 2026
6d68ab1
Auth: move more not visible MFA strings to donottranslate.xml
UweTrottmann Apr 16, 2026
c591501
Auth: move not visible password rule strings to donottranslate.xml
UweTrottmann Apr 16, 2026
8b3e0aa
Auth: reorganize strings
UweTrottmann Apr 16, 2026
f7bf573
Auth: remove punctuation, reword strings for consistency
UweTrottmann Apr 16, 2026
c27718f
Auth: localize AuthTextField show/hide button
UweTrottmann Apr 16, 2026
e486ef9
Auth: use regular case for buttons
UweTrottmann Apr 16, 2026
98c0103
Auth: de-emphasize email mode change buttons, match pw reset button
UweTrottmann Apr 16, 2026
9e9c2b2
Auth: just show account identifier and symbol on success destination
UweTrottmann Apr 16, 2026
6ecced1
Auth: use common "Reset password" label for reset password function
UweTrottmann Apr 16, 2026
dda67f3
Auth: use SeriesGuide theme
UweTrottmann Apr 16, 2026
19332d5
Auth: replace remaining com.firebase.ui references
UweTrottmann Apr 17, 2026
53f48d9
MfaEnrollmentContentState: fix references
UweTrottmann Apr 17, 2026
5372783
CloudSetupFragment: remove redundant error display, only log/report
UweTrottmann Apr 17, 2026
fdb41a0
Auth: for invalid password error hint at reset password function
UweTrottmann Apr 17, 2026
ea37b20
Auth: use consistent string names, comments and values
UweTrottmann Apr 17, 2026
e42d0a7
FirebaseAuthUI: remove unused context parameter for delete
UweTrottmann Apr 17, 2026
d7e404b
Auth: make email enumeration harder
UweTrottmann Apr 17, 2026
7d00d4d
Auth: remove placeholder from reset email sent message
UweTrottmann Apr 17, 2026
4ac76d7
Auth: replace inline show/hide password button with toggle below
UweTrottmann Apr 17, 2026
1f15d19
AuthMethodPicker: make whole screen scrollable for better usability
UweTrottmann Apr 18, 2026
60b9336
AuthMethodPicker: inline Scaffold, add app bar
UweTrottmann Apr 18, 2026
275819d
Guidelines: note how to avoid clip to padding with Compose
UweTrottmann Apr 23, 2026
677d496
Auth email UI: center on wide screens, don't clip scrolled content
UweTrottmann Apr 18, 2026
e863c7d
Auth UI: guess fix for other cases where scroll content is clipped
UweTrottmann Apr 18, 2026
036ff49
Auth UI: make SuccessDestination scrollable
UweTrottmann Apr 18, 2026
a811ea6
FirebaseAuthScreen: keep shown screen on config change
UweTrottmann Apr 23, 2026
8aae43d
FirebaseAuthScreen: don't show error dialog again after it was dismissed
UweTrottmann Apr 23, 2026
958a075
ResetPasswordUI: don't show confirm dialog again after it was dismissed
UweTrottmann Apr 23, 2026
858497f
FirebaseAuthScreen: reset to sign in mode when re-entering email screen
UweTrottmann Apr 23, 2026
1e95748
SignInUI: don't automatically sign in after filling credentials
UweTrottmann Apr 23, 2026
ab4e654
Auth UI: note account linking exception is not used for trusted provider
UweTrottmann Apr 23, 2026
ac34fee
Auth: let auth screen set Cancelled state, activity uses state flow
UweTrottmann Apr 24, 2026
b14123c
Auth: log all errors to help with diagnosis (still only report last one)
UweTrottmann Apr 24, 2026
0fce0ab
Auth: improve FirebaseAuthUI docs, drop unused unconfigured value tag
UweTrottmann Apr 24, 2026
f9e05f5
FirebaseAuthUI: deduplicate Firebase user to AuthState mapping
UweTrottmann Apr 24, 2026
0f81d5e
Auth: expand README
UweTrottmann Apr 24, 2026
41d8771
AuthUIConfiguration: drop unused theme option
UweTrottmann Apr 24, 2026
c438732
AuthUIConfiguration: document what setting locale actually does
UweTrottmann Apr 24, 2026
3b2be3e
Auth: require at least 15 characters for new passwords
UweTrottmann Apr 24, 2026
92d56b2
AuthProvider: remove unused parameter for clearCredentialState
UweTrottmann Apr 24, 2026
c38f871
Auth: use localized and better message if linking credential is required
UweTrottmann Apr 24, 2026
aac624f
EmailAuthProvider+FirebaseAuthUI: improve documentation
UweTrottmann Apr 24, 2026
4a99f49
Google Sign-In: simplify exception handling
UweTrottmann Apr 30, 2026
163500a
Google Sign-In: remove no-op authorization code
UweTrottmann Apr 30, 2026
d68922e
Auth: remove now unused play-services-auth library
UweTrottmann Apr 30, 2026
071143b
Google Sign-In: show error message if no Google accounts available
UweTrottmann Apr 30, 2026
bcc70e8
Auth: replace AuthUIAsset with drawable resources
UweTrottmann Apr 30, 2026
2d13588
AuthProviderButton: for accessiblity don't ellipsize text
UweTrottmann Apr 30, 2026
3dfe791
Licenses: change AGPL-3.0-or-later to GPL-3.0-or-later
UweTrottmann May 1, 2026
b7e6e51
Build: use placeholder JSON file for services plugin, always apply it
UweTrottmann Jun 18, 2026
dd96e14
Lint: ignore credential manager digital asset links json file not set
UweTrottmann Jun 18, 2026
25351f0
DefaultAuthUIStringProvider: drop locale override, not usable anyhow
UweTrottmann Jun 18, 2026
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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Releases marked with 🧪 (or previously with the "beta" suffix) were released o

* 🔧 Shows: move manage lists button from more options menu to inside the overview and details tabs.
* 🔨 Trakt: downloading ratings also works if API returns rating 0.
* 🔨 Cloud: after deleting an account, signing in no longer re-uses the deleted account.

## Version 2026.2

Expand Down
5 changes: 5 additions & 0 deletions CREDITS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,9 @@ Copyright 2013 Uwe Trottmann
truth (https://github.com/google/truth)
Copyright 2011 Google, Inc.

ZXing (https://github.com/zxing/zxing)
Copyright ZXing authors

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
Expand All @@ -134,6 +137,8 @@ limitations under the License.

## Licensed under Android Software Development Kit License

googleid (https://developers.google.com/identity/android-credential-manager)

Google Play Billing (https://developer.android.com/google/play/billing/billing_library_overview)

Google Play Services (https://developers.google.com/android/guides/overview)
Expand Down
38 changes: 26 additions & 12 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,30 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import java.io.FileInputStream
import java.util.Properties

// For CI (and so debug builds just work), use a placeholder file for google-services plugin
val googleServicesJsonFile = project.file("google-services.json")
val placeholderWarningMessage =
"WARNING: Using google-services.json with placeholder values, do not release this!"
if (!googleServicesJsonFile.exists()) {
val templateFile = project.file("google-services-template.json")
templateFile.copyTo(googleServicesJsonFile)
// Also write warning message to template file so it shows up in git
templateFile.writeText(placeholderWarningMessage)
}
if (googleServicesJsonFile.readText().contains("placeholder")) {
println(placeholderWarningMessage)
}

plugins {
id("com.android.application")
kotlin("android")
kotlin("kapt")
alias(libs.plugins.compose.compiler)
// Firebase Authentication, Crashlytics
alias(libs.plugins.google.services)
alias(libs.plugins.firebase.crashlytics)
}

if (project.file("google-services.json").exists()) {
apply(plugin = "com.google.gms.google-services")
}
// Note: need to apply Crashlytics after Google services plugin,
// above conditional apply doesn't work inside plugins block.
apply(plugin = "com.google.firebase.crashlytics")

val sgCompileSdk: Int by rootProject.extra
val sgMinSdk: Int by rootProject.extra
val sgTargetSdk: Int by rootProject.extra
Expand Down Expand Up @@ -213,6 +223,7 @@ dependencies {
implementation(libs.androidx.constraintlayout)
implementation(libs.androidx.coordinatorlayout)
implementation(libs.androidx.preference)
implementation(libs.androidx.datastore)
implementation(libs.androidx.swiperefreshlayout)

// Compose
Expand All @@ -226,6 +237,7 @@ dependencies {
implementation(libs.androidx.activity.compose)
// Optional - Integration with ViewModels
implementation(libs.androidx.lifecycle.compose)
implementation(libs.androidx.navigation)

// ViewModel and LiveData
implementation(libs.androidx.lifecycle.livedata)
Expand Down Expand Up @@ -273,14 +285,16 @@ dependencies {
exclude(group = "org.threeten", module = "threetenbp") // using ThreeTenABP instead
}

// Firebase Authentication
implementation(libs.firebase.auth)
implementation(libs.androidx.credentials)
implementation(libs.androidx.credentials.play)
implementation(libs.googleid)
implementation(libs.zxing)

// Note: can not use Firebase BOM as firebase-ui-auth has not updated in a while
// Crashlytics
implementation(libs.firebase.crashlytics)
// Firebase Sign-In
implementation(libs.firebase.ui.auth)
// Use compatible later versions of firebase-ui-auth dependencies to get latest fixes.
implementation(libs.firebase.auth)
implementation(libs.play.services.auth)

// Amazon Billing
// Note: requires to add AppstoreAuthenticationKey.pem into amazon/assets.
Expand Down
93 changes: 93 additions & 0 deletions app/google-services-template.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
{
"project_info": {
"project_number": "123456789012",
"firebase_url": "https://project-id-placeholder.firebaseio.com",
"project_id": "project-id-placeholder",
"storage_bucket": "project-id-placeholder.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "app-id-placeholder",
"android_client_info": {
"package_name": "com.battlelancer.seriesguide"
}
},
"oauth_client": [
{
"client_id": "client-id-placeholder",
"client_type": 1,
"android_info": {
"package_name": "com.battlelancer.seriesguide",
"certificate_hash": "certificate-hash-placeholder"
}
},
{
"client_id": "client-id-placeholder",
"client_type": 1,
"android_info": {
"package_name": "com.battlelancer.seriesguide",
"certificate_hash": "certificate-hash-placeholder"
}
},
{
"client_id": "client-id-placeholder",
"client_type": 3
}
],
"api_key": [
{
"current_key": "api-key-placeholder"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "client-id-placeholder",
"client_type": 3
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "app-id-placeholder",
"android_client_info": {
"package_name": "com.uwetrottmann.seriesguide.amzn"
}
},
"oauth_client": [
{
"client_id": "client-id-placeholder",
"client_type": 1,
"android_info": {
"package_name": "com.uwetrottmann.seriesguide.amzn",
"certificate_hash": "certificate-hash-placeholder"
}
},
{
"client_id": "client-id-placeholder",
"client_type": 3
}
],
"api_key": [
{
"current_key": "api-key-placeholder"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "client-id-placeholder",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}
7 changes: 7 additions & 0 deletions app/lint.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,11 @@
</issue>
<!-- Avoid spamming lint output, there is no need to use these, it's just convenience -->
<issue id="UseKtx" severity="ignore" />
<!--
AndroidX Credential Manager: lint errors that an asset_statements must be added, but according
to documentation it's only required for passkeys. It also requires providing a
.well-known/assetlinks.json from the sign-in domain, but currently not offering a web interface.
https://developer.android.com/identity/credential-manager/prerequisites#configure-digital-asset-links
-->
<issue id="CredManMissingDal" severity="ignore" />
</lint>
2 changes: 2 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,8 @@
<activity
android:name="com.battlelancer.seriesguide.backend.CloudSetupActivity"
android:label="@string/hexagon" />
<activity
android:name="com.battlelancer.seriesguide.backend.auth.FirebaseAuthActivity" />

<!-- Shows -->
<activity
Expand Down
Loading