sample(auth): full customization demo - #2414

Open
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker
Open

sample(auth): full customization demo#2414
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker

Conversation

@demolaf

@demolafdemolaf commented Jul 22, 2026

Copy link
Copy Markdown
Member

Extends the full customization demo to the remaining FirebaseAuthScreen slots, so the sample now supplies a custom UI for every one: mfaEnrollmentContent (all five enrollment steps), mfaChallengeContent, reauthContent and authenticatedContent.

The authenticated screen mostly exists to make the other two reachable — "Set up two-factor" navigates into enrollment, and changing the password runs through authUI.withReauth, which is what provokes the reauth slot.

  • common/AuthPage.kt: shared page frame (mascot, headline, card, bottom actions) for the new screens, so their background, scrolling and inset behaviour match the existing email and phone steps.
  • screens/reauth/ReauthUI.kt handles password reauthentication only, with an explicit fallback for accounts that have no password provider — the federated path the default reauth sheet uses is internal/private, so it isn't expressible from a custom slot.
  • Also addresses review feedback on the existing screens: system back returns to email entry from the login/sign-up steps, the other-sign-in-methods sheet scrolls (nine providers plus the ToS footer overflowed shorter screens), and the confirmation email is compared trimmed and case-insensitively.

Preview

  • Full Customization Flow
full-customization-flow.webm
  • Other sign in methods via bottom sheet
other-sign-in-methods.webm
  • Error Dialog (Inherits font change)
Screenshot_1784723834

@gemini-code-assistgemini-code-assistBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a fully customized authentication flow demo (FullCustomizationDemoActivity and associated steps) to showcase the capabilities of customMethodPickerLayout in FirebaseAuthScreen, alongside minor inset adjustments in the default auth screens. The review feedback is highly constructive and should be addressed: it recommends implementing a BackHandler for proper step-back navigation, making the alternative sign-in methods sheet scrollable to prevent clipping on smaller screens, passing the FirebaseAuth instance dynamically to support custom configurations, performing case-insensitive and trimmed email validation, and ensuring the loading indicator in CtaButton has sufficient contrast.

@demolaf
demolaf changed the base branch from sample/firestore-database-storage to fix/mfa-edge-to-edge-insetsJuly 22, 2026 13:02
@demolaf
demolaf changed the base branch from fix/mfa-edge-to-edge-insets to sample/firestore-database-storageJuly 22, 2026 13:03
@demolafdemolaf changed the title sample(auth): flesh out full customization demo with email/login/sign…sample(auth): flesh out full customization demoJul 22, 2026
@demolafdemolaf changed the title sample(auth): flesh out full customization demosample(auth): full customization demoJul 22, 2026
@demolaf
demolafforce-pushed the sample/firestore-database-storage branch from 0cdfacd to 1778d6cCompareJuly 27, 2026 10:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from e98fb6e to cbbd262CompareJuly 28, 2026 16:01
@demolaf
demolaf changed the base branch from sample/firestore-database-storage to version-10.0.0-beta04July 28, 2026 16:03
@demolaf
demolaf changed the base branch from version-10.0.0-beta04 to fix/auth-state-stale-notification-resetJuly 28, 2026 16:03
@demolafdemolaf closed this Jul 28, 2026
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from ccd214c to 267731eCompareJuly 28, 2026 16:08
@demolafdemolaf reopened this Jul 28, 2026
@demolaf
demolafforce-pushed the fix/auth-state-stale-notification-reset branch from 267731e to e035a60CompareJuly 29, 2026 00:45
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 74c0370 to 007676dCompareAugust 10, 2026 16:40
@demolaf
demolaf changed the base branch from fix/auth-state-stale-notification-reset to version-10.0.0-beta04August 10, 2026 16:43
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from dbaac07 to f896825CompareAugust 18, 2026 09:55
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from d552549 to a2d2bc9CompareAugust 21, 2026 14:06
@demolaf
demolaf marked this pull request as ready for review August 21, 2026 14:58
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from 06a6fe9 to 697f1d9CompareAugust 24, 2026 09:29
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 4785c0e to 5e3a069CompareAugust 24, 2026 10:16
@demolaf
demolaf marked this pull request as draft August 25, 2026 09:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5e3a069 to ba5b475CompareAugust 29, 2026 22:02
@demolaf
demolaf changed the base branch from version-10.0.0-beta04-old to version-10.0.0-beta05August 29, 2026 22:02
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch 2 times, most recently from 875cf50 to 1c0c935CompareAugust 31, 2026 22:36
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from dadde5c to 5706131CompareSeptember 1, 2026 11:35
@demolaf
demolafforce-pushed the version-10.0.0-beta05 branch from 444543d to 059bba8CompareSeptember 1, 2026 16:17
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5706131 to 38aca2eCompareSeptember 2, 2026 18:25
@demolaf
demolaf marked this pull request as ready for review September 2, 2026 18:36
(cherry picked from commit d88088103e61630c95f69de273953346b90486ab)
…-state UI to full customization demo
(cherry picked from commit 96694e0dddd4dacaa769d09ee153c34d4f51f8a2)
Intercept back on the login/sign-up steps so it returns to email entry
instead of leaving the auth flow, make the other-sign-in-methods sheet
scrollable (nine providers plus the ToS footer overflow shorter screens),
compare the confirmation email trimmed and case-insensitively and give the
field an email keyboard, and take the configured FirebaseAuth instance
rather than reaching for the global default.
(cherry picked from commit 1dfdeda82ecce93f6af54f4dfd6371d108c0ca44)
…ntState
(cherry picked from commit 20681c413ada0394de19203bb2dde2784bac6d06)
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 8176916 to 48d81bfCompareSeptember 3, 2026 15:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@demolaf
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

sample(auth): full customization demo - #2414

Open
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker
Open

sample(auth): full customization demo#2414
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker

Conversation

@demolaf

@demolafdemolaf commented Jul 22, 2026

Copy link
Copy Markdown
Member

Extends the full customization demo to the remaining FirebaseAuthScreen slots, so the sample now supplies a custom UI for every one: mfaEnrollmentContent (all five enrollment steps), mfaChallengeContent, reauthContent and authenticatedContent.

The authenticated screen mostly exists to make the other two reachable — "Set up two-factor" navigates into enrollment, and changing the password runs through authUI.withReauth, which is what provokes the reauth slot.

  • common/AuthPage.kt: shared page frame (mascot, headline, card, bottom actions) for the new screens, so their background, scrolling and inset behaviour match the existing email and phone steps.
  • screens/reauth/ReauthUI.kt handles password reauthentication only, with an explicit fallback for accounts that have no password provider — the federated path the default reauth sheet uses is internal/private, so it isn't expressible from a custom slot.
  • Also addresses review feedback on the existing screens: system back returns to email entry from the login/sign-up steps, the other-sign-in-methods sheet scrolls (nine providers plus the ToS footer overflowed shorter screens), and the confirmation email is compared trimmed and case-insensitively.

Preview

  • Full Customization Flow
full-customization-flow.webm
  • Other sign in methods via bottom sheet
other-sign-in-methods.webm
  • Error Dialog (Inherits font change)
Screenshot_1784723834

@gemini-code-assistgemini-code-assistBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a fully customized authentication flow demo (FullCustomizationDemoActivity and associated steps) to showcase the capabilities of customMethodPickerLayout in FirebaseAuthScreen, alongside minor inset adjustments in the default auth screens. The review feedback is highly constructive and should be addressed: it recommends implementing a BackHandler for proper step-back navigation, making the alternative sign-in methods sheet scrollable to prevent clipping on smaller screens, passing the FirebaseAuth instance dynamically to support custom configurations, performing case-insensitive and trimmed email validation, and ensuring the loading indicator in CtaButton has sufficient contrast.

@demolaf
demolaf changed the base branch from sample/firestore-database-storage to fix/mfa-edge-to-edge-insetsJuly 22, 2026 13:02
@demolaf
demolaf changed the base branch from fix/mfa-edge-to-edge-insets to sample/firestore-database-storageJuly 22, 2026 13:03
@demolafdemolaf changed the title sample(auth): flesh out full customization demo with email/login/sign…sample(auth): flesh out full customization demoJul 22, 2026
@demolafdemolaf changed the title sample(auth): flesh out full customization demosample(auth): full customization demoJul 22, 2026
@demolaf
demolafforce-pushed the sample/firestore-database-storage branch from 0cdfacd to 1778d6cCompareJuly 27, 2026 10:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from e98fb6e to cbbd262CompareJuly 28, 2026 16:01
@demolaf
demolaf changed the base branch from sample/firestore-database-storage to version-10.0.0-beta04July 28, 2026 16:03
@demolaf
demolaf changed the base branch from version-10.0.0-beta04 to fix/auth-state-stale-notification-resetJuly 28, 2026 16:03
@demolafdemolaf closed this Jul 28, 2026
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from ccd214c to 267731eCompareJuly 28, 2026 16:08
@demolafdemolaf reopened this Jul 28, 2026
@demolaf
demolafforce-pushed the fix/auth-state-stale-notification-reset branch from 267731e to e035a60CompareJuly 29, 2026 00:45
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 74c0370 to 007676dCompareAugust 10, 2026 16:40
@demolaf
demolaf changed the base branch from fix/auth-state-stale-notification-reset to version-10.0.0-beta04August 10, 2026 16:43
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from dbaac07 to f896825CompareAugust 18, 2026 09:55
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from d552549 to a2d2bc9CompareAugust 21, 2026 14:06
@demolaf
demolaf marked this pull request as ready for review August 21, 2026 14:58
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from 06a6fe9 to 697f1d9CompareAugust 24, 2026 09:29
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 4785c0e to 5e3a069CompareAugust 24, 2026 10:16
@demolaf
demolaf marked this pull request as draft August 25, 2026 09:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5e3a069 to ba5b475CompareAugust 29, 2026 22:02
@demolaf
demolaf changed the base branch from version-10.0.0-beta04-old to version-10.0.0-beta05August 29, 2026 22:02
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch 2 times, most recently from 875cf50 to 1c0c935CompareAugust 31, 2026 22:36
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from dadde5c to 5706131CompareSeptember 1, 2026 11:35
@demolaf
demolafforce-pushed the version-10.0.0-beta05 branch from 444543d to 059bba8CompareSeptember 1, 2026 16:17
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5706131 to 38aca2eCompareSeptember 2, 2026 18:25
@demolaf
demolaf marked this pull request as ready for review September 2, 2026 18:36
(cherry picked from commit d88088103e61630c95f69de273953346b90486ab)
…-state UI to full customization demo
(cherry picked from commit 96694e0dddd4dacaa769d09ee153c34d4f51f8a2)
Intercept back on the login/sign-up steps so it returns to email entry
instead of leaving the auth flow, make the other-sign-in-methods sheet
scrollable (nine providers plus the ToS footer overflow shorter screens),
compare the confirmation email trimmed and case-insensitively and give the
field an email keyboard, and take the configured FirebaseAuth instance
rather than reaching for the global default.
(cherry picked from commit 1dfdeda82ecce93f6af54f4dfd6371d108c0ca44)
…ntState
(cherry picked from commit 20681c413ada0394de19203bb2dde2784bac6d06)
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 8176916 to 48d81bfCompareSeptember 3, 2026 15:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@demolaf
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

sample(auth): full customization demo - #2414

Open
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker
Open

sample(auth): full customization demo#2414
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker

Conversation

@demolaf

@demolafdemolaf commented Jul 22, 2026

Copy link
Copy Markdown
Member

Extends the full customization demo to the remaining FirebaseAuthScreen slots, so the sample now supplies a custom UI for every one: mfaEnrollmentContent (all five enrollment steps), mfaChallengeContent, reauthContent and authenticatedContent.

The authenticated screen mostly exists to make the other two reachable — "Set up two-factor" navigates into enrollment, and changing the password runs through authUI.withReauth, which is what provokes the reauth slot.

  • common/AuthPage.kt: shared page frame (mascot, headline, card, bottom actions) for the new screens, so their background, scrolling and inset behaviour match the existing email and phone steps.
  • screens/reauth/ReauthUI.kt handles password reauthentication only, with an explicit fallback for accounts that have no password provider — the federated path the default reauth sheet uses is internal/private, so it isn't expressible from a custom slot.
  • Also addresses review feedback on the existing screens: system back returns to email entry from the login/sign-up steps, the other-sign-in-methods sheet scrolls (nine providers plus the ToS footer overflowed shorter screens), and the confirmation email is compared trimmed and case-insensitively.

Preview

  • Full Customization Flow
full-customization-flow.webm
  • Other sign in methods via bottom sheet
other-sign-in-methods.webm
  • Error Dialog (Inherits font change)
Screenshot_1784723834

@gemini-code-assistgemini-code-assistBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a fully customized authentication flow demo (FullCustomizationDemoActivity and associated steps) to showcase the capabilities of customMethodPickerLayout in FirebaseAuthScreen, alongside minor inset adjustments in the default auth screens. The review feedback is highly constructive and should be addressed: it recommends implementing a BackHandler for proper step-back navigation, making the alternative sign-in methods sheet scrollable to prevent clipping on smaller screens, passing the FirebaseAuth instance dynamically to support custom configurations, performing case-insensitive and trimmed email validation, and ensuring the loading indicator in CtaButton has sufficient contrast.

@demolaf
demolaf changed the base branch from sample/firestore-database-storage to fix/mfa-edge-to-edge-insetsJuly 22, 2026 13:02
@demolaf
demolaf changed the base branch from fix/mfa-edge-to-edge-insets to sample/firestore-database-storageJuly 22, 2026 13:03
@demolafdemolaf changed the title sample(auth): flesh out full customization demo with email/login/sign…sample(auth): flesh out full customization demoJul 22, 2026
@demolafdemolaf changed the title sample(auth): flesh out full customization demosample(auth): full customization demoJul 22, 2026
@demolaf
demolafforce-pushed the sample/firestore-database-storage branch from 0cdfacd to 1778d6cCompareJuly 27, 2026 10:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from e98fb6e to cbbd262CompareJuly 28, 2026 16:01
@demolaf
demolaf changed the base branch from sample/firestore-database-storage to version-10.0.0-beta04July 28, 2026 16:03
@demolaf
demolaf changed the base branch from version-10.0.0-beta04 to fix/auth-state-stale-notification-resetJuly 28, 2026 16:03
@demolafdemolaf closed this Jul 28, 2026
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from ccd214c to 267731eCompareJuly 28, 2026 16:08
@demolafdemolaf reopened this Jul 28, 2026
@demolaf
demolafforce-pushed the fix/auth-state-stale-notification-reset branch from 267731e to e035a60CompareJuly 29, 2026 00:45
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 74c0370 to 007676dCompareAugust 10, 2026 16:40
@demolaf
demolaf changed the base branch from fix/auth-state-stale-notification-reset to version-10.0.0-beta04August 10, 2026 16:43
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from dbaac07 to f896825CompareAugust 18, 2026 09:55
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from d552549 to a2d2bc9CompareAugust 21, 2026 14:06
@demolaf
demolaf marked this pull request as ready for review August 21, 2026 14:58
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from 06a6fe9 to 697f1d9CompareAugust 24, 2026 09:29
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 4785c0e to 5e3a069CompareAugust 24, 2026 10:16
@demolaf
demolaf marked this pull request as draft August 25, 2026 09:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5e3a069 to ba5b475CompareAugust 29, 2026 22:02
@demolaf
demolaf changed the base branch from version-10.0.0-beta04-old to version-10.0.0-beta05August 29, 2026 22:02
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch 2 times, most recently from 875cf50 to 1c0c935CompareAugust 31, 2026 22:36
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from dadde5c to 5706131CompareSeptember 1, 2026 11:35
@demolaf
demolafforce-pushed the version-10.0.0-beta05 branch from 444543d to 059bba8CompareSeptember 1, 2026 16:17
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5706131 to 38aca2eCompareSeptember 2, 2026 18:25
@demolaf
demolaf marked this pull request as ready for review September 2, 2026 18:36
(cherry picked from commit d88088103e61630c95f69de273953346b90486ab)
…-state UI to full customization demo
(cherry picked from commit 96694e0dddd4dacaa769d09ee153c34d4f51f8a2)
Intercept back on the login/sign-up steps so it returns to email entry
instead of leaving the auth flow, make the other-sign-in-methods sheet
scrollable (nine providers plus the ToS footer overflow shorter screens),
compare the confirmation email trimmed and case-insensitively and give the
field an email keyboard, and take the configured FirebaseAuth instance
rather than reaching for the global default.
(cherry picked from commit 1dfdeda82ecce93f6af54f4dfd6371d108c0ca44)
…ntState
(cherry picked from commit 20681c413ada0394de19203bb2dde2784bac6d06)
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 8176916 to 48d81bfCompareSeptember 3, 2026 15:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@demolaf
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

sample(auth): full customization demo - #2414

Open
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker
Open

sample(auth): full customization demo#2414
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker

Conversation

@demolaf

@demolafdemolaf commented Jul 22, 2026

Copy link
Copy Markdown
Member

Extends the full customization demo to the remaining FirebaseAuthScreen slots, so the sample now supplies a custom UI for every one: mfaEnrollmentContent (all five enrollment steps), mfaChallengeContent, reauthContent and authenticatedContent.

The authenticated screen mostly exists to make the other two reachable — "Set up two-factor" navigates into enrollment, and changing the password runs through authUI.withReauth, which is what provokes the reauth slot.

  • common/AuthPage.kt: shared page frame (mascot, headline, card, bottom actions) for the new screens, so their background, scrolling and inset behaviour match the existing email and phone steps.
  • screens/reauth/ReauthUI.kt handles password reauthentication only, with an explicit fallback for accounts that have no password provider — the federated path the default reauth sheet uses is internal/private, so it isn't expressible from a custom slot.
  • Also addresses review feedback on the existing screens: system back returns to email entry from the login/sign-up steps, the other-sign-in-methods sheet scrolls (nine providers plus the ToS footer overflowed shorter screens), and the confirmation email is compared trimmed and case-insensitively.

Preview

  • Full Customization Flow
full-customization-flow.webm
  • Other sign in methods via bottom sheet
other-sign-in-methods.webm
  • Error Dialog (Inherits font change)
Screenshot_1784723834

@gemini-code-assistgemini-code-assistBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a fully customized authentication flow demo (FullCustomizationDemoActivity and associated steps) to showcase the capabilities of customMethodPickerLayout in FirebaseAuthScreen, alongside minor inset adjustments in the default auth screens. The review feedback is highly constructive and should be addressed: it recommends implementing a BackHandler for proper step-back navigation, making the alternative sign-in methods sheet scrollable to prevent clipping on smaller screens, passing the FirebaseAuth instance dynamically to support custom configurations, performing case-insensitive and trimmed email validation, and ensuring the loading indicator in CtaButton has sufficient contrast.

@demolaf
demolaf changed the base branch from sample/firestore-database-storage to fix/mfa-edge-to-edge-insetsJuly 22, 2026 13:02
@demolaf
demolaf changed the base branch from fix/mfa-edge-to-edge-insets to sample/firestore-database-storageJuly 22, 2026 13:03
@demolafdemolaf changed the title sample(auth): flesh out full customization demo with email/login/sign…sample(auth): flesh out full customization demoJul 22, 2026
@demolafdemolaf changed the title sample(auth): flesh out full customization demosample(auth): full customization demoJul 22, 2026
@demolaf
demolafforce-pushed the sample/firestore-database-storage branch from 0cdfacd to 1778d6cCompareJuly 27, 2026 10:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from e98fb6e to cbbd262CompareJuly 28, 2026 16:01
@demolaf
demolaf changed the base branch from sample/firestore-database-storage to version-10.0.0-beta04July 28, 2026 16:03
@demolaf
demolaf changed the base branch from version-10.0.0-beta04 to fix/auth-state-stale-notification-resetJuly 28, 2026 16:03
@demolafdemolaf closed this Jul 28, 2026
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from ccd214c to 267731eCompareJuly 28, 2026 16:08
@demolafdemolaf reopened this Jul 28, 2026
@demolaf
demolafforce-pushed the fix/auth-state-stale-notification-reset branch from 267731e to e035a60CompareJuly 29, 2026 00:45
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 74c0370 to 007676dCompareAugust 10, 2026 16:40
@demolaf
demolaf changed the base branch from fix/auth-state-stale-notification-reset to version-10.0.0-beta04August 10, 2026 16:43
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from dbaac07 to f896825CompareAugust 18, 2026 09:55
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from d552549 to a2d2bc9CompareAugust 21, 2026 14:06
@demolaf
demolaf marked this pull request as ready for review August 21, 2026 14:58
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from 06a6fe9 to 697f1d9CompareAugust 24, 2026 09:29
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 4785c0e to 5e3a069CompareAugust 24, 2026 10:16
@demolaf
demolaf marked this pull request as draft August 25, 2026 09:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5e3a069 to ba5b475CompareAugust 29, 2026 22:02
@demolaf
demolaf changed the base branch from version-10.0.0-beta04-old to version-10.0.0-beta05August 29, 2026 22:02
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch 2 times, most recently from 875cf50 to 1c0c935CompareAugust 31, 2026 22:36
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from dadde5c to 5706131CompareSeptember 1, 2026 11:35
@demolaf
demolafforce-pushed the version-10.0.0-beta05 branch from 444543d to 059bba8CompareSeptember 1, 2026 16:17
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5706131 to 38aca2eCompareSeptember 2, 2026 18:25
@demolaf
demolaf marked this pull request as ready for review September 2, 2026 18:36
(cherry picked from commit d88088103e61630c95f69de273953346b90486ab)
…-state UI to full customization demo
(cherry picked from commit 96694e0dddd4dacaa769d09ee153c34d4f51f8a2)
Intercept back on the login/sign-up steps so it returns to email entry
instead of leaving the auth flow, make the other-sign-in-methods sheet
scrollable (nine providers plus the ToS footer overflow shorter screens),
compare the confirmation email trimmed and case-insensitively and give the
field an email keyboard, and take the configured FirebaseAuth instance
rather than reaching for the global default.
(cherry picked from commit 1dfdeda82ecce93f6af54f4dfd6371d108c0ca44)
…ntState
(cherry picked from commit 20681c413ada0394de19203bb2dde2784bac6d06)
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 8176916 to 48d81bfCompareSeptember 3, 2026 15:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@demolaf
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

sample(auth): full customization demo - #2414

Open
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker
Open

sample(auth): full customization demo#2414
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker

Conversation

@demolaf

@demolafdemolaf commented Jul 22, 2026

Copy link
Copy Markdown
Member

Extends the full customization demo to the remaining FirebaseAuthScreen slots, so the sample now supplies a custom UI for every one: mfaEnrollmentContent (all five enrollment steps), mfaChallengeContent, reauthContent and authenticatedContent.

The authenticated screen mostly exists to make the other two reachable — "Set up two-factor" navigates into enrollment, and changing the password runs through authUI.withReauth, which is what provokes the reauth slot.

  • common/AuthPage.kt: shared page frame (mascot, headline, card, bottom actions) for the new screens, so their background, scrolling and inset behaviour match the existing email and phone steps.
  • screens/reauth/ReauthUI.kt handles password reauthentication only, with an explicit fallback for accounts that have no password provider — the federated path the default reauth sheet uses is internal/private, so it isn't expressible from a custom slot.
  • Also addresses review feedback on the existing screens: system back returns to email entry from the login/sign-up steps, the other-sign-in-methods sheet scrolls (nine providers plus the ToS footer overflowed shorter screens), and the confirmation email is compared trimmed and case-insensitively.

Preview

  • Full Customization Flow
full-customization-flow.webm
  • Other sign in methods via bottom sheet
other-sign-in-methods.webm
  • Error Dialog (Inherits font change)
Screenshot_1784723834

@gemini-code-assistgemini-code-assistBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a fully customized authentication flow demo (FullCustomizationDemoActivity and associated steps) to showcase the capabilities of customMethodPickerLayout in FirebaseAuthScreen, alongside minor inset adjustments in the default auth screens. The review feedback is highly constructive and should be addressed: it recommends implementing a BackHandler for proper step-back navigation, making the alternative sign-in methods sheet scrollable to prevent clipping on smaller screens, passing the FirebaseAuth instance dynamically to support custom configurations, performing case-insensitive and trimmed email validation, and ensuring the loading indicator in CtaButton has sufficient contrast.

@demolaf
demolaf changed the base branch from sample/firestore-database-storage to fix/mfa-edge-to-edge-insetsJuly 22, 2026 13:02
@demolaf
demolaf changed the base branch from fix/mfa-edge-to-edge-insets to sample/firestore-database-storageJuly 22, 2026 13:03
@demolafdemolaf changed the title sample(auth): flesh out full customization demo with email/login/sign…sample(auth): flesh out full customization demoJul 22, 2026
@demolafdemolaf changed the title sample(auth): flesh out full customization demosample(auth): full customization demoJul 22, 2026
@demolaf
demolafforce-pushed the sample/firestore-database-storage branch from 0cdfacd to 1778d6cCompareJuly 27, 2026 10:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from e98fb6e to cbbd262CompareJuly 28, 2026 16:01
@demolaf
demolaf changed the base branch from sample/firestore-database-storage to version-10.0.0-beta04July 28, 2026 16:03
@demolaf
demolaf changed the base branch from version-10.0.0-beta04 to fix/auth-state-stale-notification-resetJuly 28, 2026 16:03
@demolafdemolaf closed this Jul 28, 2026
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from ccd214c to 267731eCompareJuly 28, 2026 16:08
@demolafdemolaf reopened this Jul 28, 2026
@demolaf
demolafforce-pushed the fix/auth-state-stale-notification-reset branch from 267731e to e035a60CompareJuly 29, 2026 00:45
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 74c0370 to 007676dCompareAugust 10, 2026 16:40
@demolaf
demolaf changed the base branch from fix/auth-state-stale-notification-reset to version-10.0.0-beta04August 10, 2026 16:43
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from dbaac07 to f896825CompareAugust 18, 2026 09:55
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from d552549 to a2d2bc9CompareAugust 21, 2026 14:06
@demolaf
demolaf marked this pull request as ready for review August 21, 2026 14:58
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from 06a6fe9 to 697f1d9CompareAugust 24, 2026 09:29
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 4785c0e to 5e3a069CompareAugust 24, 2026 10:16
@demolaf
demolaf marked this pull request as draft August 25, 2026 09:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5e3a069 to ba5b475CompareAugust 29, 2026 22:02
@demolaf
demolaf changed the base branch from version-10.0.0-beta04-old to version-10.0.0-beta05August 29, 2026 22:02
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch 2 times, most recently from 875cf50 to 1c0c935CompareAugust 31, 2026 22:36
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from dadde5c to 5706131CompareSeptember 1, 2026 11:35
@demolaf
demolafforce-pushed the version-10.0.0-beta05 branch from 444543d to 059bba8CompareSeptember 1, 2026 16:17
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5706131 to 38aca2eCompareSeptember 2, 2026 18:25
@demolaf
demolaf marked this pull request as ready for review September 2, 2026 18:36
(cherry picked from commit d88088103e61630c95f69de273953346b90486ab)
…-state UI to full customization demo
(cherry picked from commit 96694e0dddd4dacaa769d09ee153c34d4f51f8a2)
Intercept back on the login/sign-up steps so it returns to email entry
instead of leaving the auth flow, make the other-sign-in-methods sheet
scrollable (nine providers plus the ToS footer overflow shorter screens),
compare the confirmation email trimmed and case-insensitively and give the
field an email keyboard, and take the configured FirebaseAuth instance
rather than reaching for the global default.
(cherry picked from commit 1dfdeda82ecce93f6af54f4dfd6371d108c0ca44)
…ntState
(cherry picked from commit 20681c413ada0394de19203bb2dde2784bac6d06)
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 8176916 to 48d81bfCompareSeptember 3, 2026 15:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@demolaf
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

sample(auth): full customization demo - #2414

Open
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker
Open

sample(auth): full customization demo#2414
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker

Conversation

@demolaf

@demolafdemolaf commented Jul 22, 2026

Copy link
Copy Markdown
Member

Extends the full customization demo to the remaining FirebaseAuthScreen slots, so the sample now supplies a custom UI for every one: mfaEnrollmentContent (all five enrollment steps), mfaChallengeContent, reauthContent and authenticatedContent.

The authenticated screen mostly exists to make the other two reachable — "Set up two-factor" navigates into enrollment, and changing the password runs through authUI.withReauth, which is what provokes the reauth slot.

  • common/AuthPage.kt: shared page frame (mascot, headline, card, bottom actions) for the new screens, so their background, scrolling and inset behaviour match the existing email and phone steps.
  • screens/reauth/ReauthUI.kt handles password reauthentication only, with an explicit fallback for accounts that have no password provider — the federated path the default reauth sheet uses is internal/private, so it isn't expressible from a custom slot.
  • Also addresses review feedback on the existing screens: system back returns to email entry from the login/sign-up steps, the other-sign-in-methods sheet scrolls (nine providers plus the ToS footer overflowed shorter screens), and the confirmation email is compared trimmed and case-insensitively.

Preview

  • Full Customization Flow
full-customization-flow.webm
  • Other sign in methods via bottom sheet
other-sign-in-methods.webm
  • Error Dialog (Inherits font change)
Screenshot_1784723834

@gemini-code-assistgemini-code-assistBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a fully customized authentication flow demo (FullCustomizationDemoActivity and associated steps) to showcase the capabilities of customMethodPickerLayout in FirebaseAuthScreen, alongside minor inset adjustments in the default auth screens. The review feedback is highly constructive and should be addressed: it recommends implementing a BackHandler for proper step-back navigation, making the alternative sign-in methods sheet scrollable to prevent clipping on smaller screens, passing the FirebaseAuth instance dynamically to support custom configurations, performing case-insensitive and trimmed email validation, and ensuring the loading indicator in CtaButton has sufficient contrast.

@demolaf
demolaf changed the base branch from sample/firestore-database-storage to fix/mfa-edge-to-edge-insetsJuly 22, 2026 13:02
@demolaf
demolaf changed the base branch from fix/mfa-edge-to-edge-insets to sample/firestore-database-storageJuly 22, 2026 13:03
@demolafdemolaf changed the title sample(auth): flesh out full customization demo with email/login/sign…sample(auth): flesh out full customization demoJul 22, 2026
@demolafdemolaf changed the title sample(auth): flesh out full customization demosample(auth): full customization demoJul 22, 2026
@demolaf
demolafforce-pushed the sample/firestore-database-storage branch from 0cdfacd to 1778d6cCompareJuly 27, 2026 10:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from e98fb6e to cbbd262CompareJuly 28, 2026 16:01
@demolaf
demolaf changed the base branch from sample/firestore-database-storage to version-10.0.0-beta04July 28, 2026 16:03
@demolaf
demolaf changed the base branch from version-10.0.0-beta04 to fix/auth-state-stale-notification-resetJuly 28, 2026 16:03
@demolafdemolaf closed this Jul 28, 2026
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from ccd214c to 267731eCompareJuly 28, 2026 16:08
@demolafdemolaf reopened this Jul 28, 2026
@demolaf
demolafforce-pushed the fix/auth-state-stale-notification-reset branch from 267731e to e035a60CompareJuly 29, 2026 00:45
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 74c0370 to 007676dCompareAugust 10, 2026 16:40
@demolaf
demolaf changed the base branch from fix/auth-state-stale-notification-reset to version-10.0.0-beta04August 10, 2026 16:43
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from dbaac07 to f896825CompareAugust 18, 2026 09:55
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from d552549 to a2d2bc9CompareAugust 21, 2026 14:06
@demolaf
demolaf marked this pull request as ready for review August 21, 2026 14:58
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from 06a6fe9 to 697f1d9CompareAugust 24, 2026 09:29
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 4785c0e to 5e3a069CompareAugust 24, 2026 10:16
@demolaf
demolaf marked this pull request as draft August 25, 2026 09:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5e3a069 to ba5b475CompareAugust 29, 2026 22:02
@demolaf
demolaf changed the base branch from version-10.0.0-beta04-old to version-10.0.0-beta05August 29, 2026 22:02
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch 2 times, most recently from 875cf50 to 1c0c935CompareAugust 31, 2026 22:36
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from dadde5c to 5706131CompareSeptember 1, 2026 11:35
@demolaf
demolafforce-pushed the version-10.0.0-beta05 branch from 444543d to 059bba8CompareSeptember 1, 2026 16:17
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5706131 to 38aca2eCompareSeptember 2, 2026 18:25
@demolaf
demolaf marked this pull request as ready for review September 2, 2026 18:36
(cherry picked from commit d88088103e61630c95f69de273953346b90486ab)
…-state UI to full customization demo
(cherry picked from commit 96694e0dddd4dacaa769d09ee153c34d4f51f8a2)
Intercept back on the login/sign-up steps so it returns to email entry
instead of leaving the auth flow, make the other-sign-in-methods sheet
scrollable (nine providers plus the ToS footer overflow shorter screens),
compare the confirmation email trimmed and case-insensitively and give the
field an email keyboard, and take the configured FirebaseAuth instance
rather than reaching for the global default.
(cherry picked from commit 1dfdeda82ecce93f6af54f4dfd6371d108c0ca44)
…ntState
(cherry picked from commit 20681c413ada0394de19203bb2dde2784bac6d06)
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 8176916 to 48d81bfCompareSeptember 3, 2026 15:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@demolaf
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

sample(auth): full customization demo - #2414

Open
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker
Open

sample(auth): full customization demo#2414
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker

Conversation

@demolaf

@demolafdemolaf commented Jul 22, 2026

Copy link
Copy Markdown
Member

Extends the full customization demo to the remaining FirebaseAuthScreen slots, so the sample now supplies a custom UI for every one: mfaEnrollmentContent (all five enrollment steps), mfaChallengeContent, reauthContent and authenticatedContent.

The authenticated screen mostly exists to make the other two reachable — "Set up two-factor" navigates into enrollment, and changing the password runs through authUI.withReauth, which is what provokes the reauth slot.

  • common/AuthPage.kt: shared page frame (mascot, headline, card, bottom actions) for the new screens, so their background, scrolling and inset behaviour match the existing email and phone steps.
  • screens/reauth/ReauthUI.kt handles password reauthentication only, with an explicit fallback for accounts that have no password provider — the federated path the default reauth sheet uses is internal/private, so it isn't expressible from a custom slot.
  • Also addresses review feedback on the existing screens: system back returns to email entry from the login/sign-up steps, the other-sign-in-methods sheet scrolls (nine providers plus the ToS footer overflowed shorter screens), and the confirmation email is compared trimmed and case-insensitively.

Preview

  • Full Customization Flow
full-customization-flow.webm
  • Other sign in methods via bottom sheet
other-sign-in-methods.webm
  • Error Dialog (Inherits font change)
Screenshot_1784723834

@gemini-code-assistgemini-code-assistBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a fully customized authentication flow demo (FullCustomizationDemoActivity and associated steps) to showcase the capabilities of customMethodPickerLayout in FirebaseAuthScreen, alongside minor inset adjustments in the default auth screens. The review feedback is highly constructive and should be addressed: it recommends implementing a BackHandler for proper step-back navigation, making the alternative sign-in methods sheet scrollable to prevent clipping on smaller screens, passing the FirebaseAuth instance dynamically to support custom configurations, performing case-insensitive and trimmed email validation, and ensuring the loading indicator in CtaButton has sufficient contrast.

@demolaf
demolaf changed the base branch from sample/firestore-database-storage to fix/mfa-edge-to-edge-insetsJuly 22, 2026 13:02
@demolaf
demolaf changed the base branch from fix/mfa-edge-to-edge-insets to sample/firestore-database-storageJuly 22, 2026 13:03
@demolafdemolaf changed the title sample(auth): flesh out full customization demo with email/login/sign…sample(auth): flesh out full customization demoJul 22, 2026
@demolafdemolaf changed the title sample(auth): flesh out full customization demosample(auth): full customization demoJul 22, 2026
@demolaf
demolafforce-pushed the sample/firestore-database-storage branch from 0cdfacd to 1778d6cCompareJuly 27, 2026 10:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from e98fb6e to cbbd262CompareJuly 28, 2026 16:01
@demolaf
demolaf changed the base branch from sample/firestore-database-storage to version-10.0.0-beta04July 28, 2026 16:03
@demolaf
demolaf changed the base branch from version-10.0.0-beta04 to fix/auth-state-stale-notification-resetJuly 28, 2026 16:03
@demolafdemolaf closed this Jul 28, 2026
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from ccd214c to 267731eCompareJuly 28, 2026 16:08
@demolafdemolaf reopened this Jul 28, 2026
@demolaf
demolafforce-pushed the fix/auth-state-stale-notification-reset branch from 267731e to e035a60CompareJuly 29, 2026 00:45
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 74c0370 to 007676dCompareAugust 10, 2026 16:40
@demolaf
demolaf changed the base branch from fix/auth-state-stale-notification-reset to version-10.0.0-beta04August 10, 2026 16:43
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from dbaac07 to f896825CompareAugust 18, 2026 09:55
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from d552549 to a2d2bc9CompareAugust 21, 2026 14:06
@demolaf
demolaf marked this pull request as ready for review August 21, 2026 14:58
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from 06a6fe9 to 697f1d9CompareAugust 24, 2026 09:29
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 4785c0e to 5e3a069CompareAugust 24, 2026 10:16
@demolaf
demolaf marked this pull request as draft August 25, 2026 09:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5e3a069 to ba5b475CompareAugust 29, 2026 22:02
@demolaf
demolaf changed the base branch from version-10.0.0-beta04-old to version-10.0.0-beta05August 29, 2026 22:02
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch 2 times, most recently from 875cf50 to 1c0c935CompareAugust 31, 2026 22:36
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from dadde5c to 5706131CompareSeptember 1, 2026 11:35
@demolaf
demolafforce-pushed the version-10.0.0-beta05 branch from 444543d to 059bba8CompareSeptember 1, 2026 16:17
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5706131 to 38aca2eCompareSeptember 2, 2026 18:25
@demolaf
demolaf marked this pull request as ready for review September 2, 2026 18:36
(cherry picked from commit d88088103e61630c95f69de273953346b90486ab)
…-state UI to full customization demo
(cherry picked from commit 96694e0dddd4dacaa769d09ee153c34d4f51f8a2)
Intercept back on the login/sign-up steps so it returns to email entry
instead of leaving the auth flow, make the other-sign-in-methods sheet
scrollable (nine providers plus the ToS footer overflow shorter screens),
compare the confirmation email trimmed and case-insensitively and give the
field an email keyboard, and take the configured FirebaseAuth instance
rather than reaching for the global default.
(cherry picked from commit 1dfdeda82ecce93f6af54f4dfd6371d108c0ca44)
…ntState
(cherry picked from commit 20681c413ada0394de19203bb2dde2784bac6d06)
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 8176916 to 48d81bfCompareSeptember 3, 2026 15:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@demolaf
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

sample(auth): full customization demo - #2414

Open
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker
Open

sample(auth): full customization demo#2414
demolaf wants to merge 12 commits into
version-10.0.0-beta05from
sample/full-customization-method-picker

Conversation

@demolaf

@demolafdemolaf commented Jul 22, 2026

Copy link
Copy Markdown
Member

Extends the full customization demo to the remaining FirebaseAuthScreen slots, so the sample now supplies a custom UI for every one: mfaEnrollmentContent (all five enrollment steps), mfaChallengeContent, reauthContent and authenticatedContent.

The authenticated screen mostly exists to make the other two reachable — "Set up two-factor" navigates into enrollment, and changing the password runs through authUI.withReauth, which is what provokes the reauth slot.

  • common/AuthPage.kt: shared page frame (mascot, headline, card, bottom actions) for the new screens, so their background, scrolling and inset behaviour match the existing email and phone steps.
  • screens/reauth/ReauthUI.kt handles password reauthentication only, with an explicit fallback for accounts that have no password provider — the federated path the default reauth sheet uses is internal/private, so it isn't expressible from a custom slot.
  • Also addresses review feedback on the existing screens: system back returns to email entry from the login/sign-up steps, the other-sign-in-methods sheet scrolls (nine providers plus the ToS footer overflowed shorter screens), and the confirmation email is compared trimmed and case-insensitively.

Preview

  • Full Customization Flow
full-customization-flow.webm
  • Other sign in methods via bottom sheet
other-sign-in-methods.webm
  • Error Dialog (Inherits font change)
Screenshot_1784723834

@gemini-code-assistgemini-code-assistBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a fully customized authentication flow demo (FullCustomizationDemoActivity and associated steps) to showcase the capabilities of customMethodPickerLayout in FirebaseAuthScreen, alongside minor inset adjustments in the default auth screens. The review feedback is highly constructive and should be addressed: it recommends implementing a BackHandler for proper step-back navigation, making the alternative sign-in methods sheet scrollable to prevent clipping on smaller screens, passing the FirebaseAuth instance dynamically to support custom configurations, performing case-insensitive and trimmed email validation, and ensuring the loading indicator in CtaButton has sufficient contrast.

@demolaf
demolaf changed the base branch from sample/firestore-database-storage to fix/mfa-edge-to-edge-insetsJuly 22, 2026 13:02
@demolaf
demolaf changed the base branch from fix/mfa-edge-to-edge-insets to sample/firestore-database-storageJuly 22, 2026 13:03
@demolafdemolaf changed the title sample(auth): flesh out full customization demo with email/login/sign…sample(auth): flesh out full customization demoJul 22, 2026
@demolafdemolaf changed the title sample(auth): flesh out full customization demosample(auth): full customization demoJul 22, 2026
@demolaf
demolafforce-pushed the sample/firestore-database-storage branch from 0cdfacd to 1778d6cCompareJuly 27, 2026 10:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from e98fb6e to cbbd262CompareJuly 28, 2026 16:01
@demolaf
demolaf changed the base branch from sample/firestore-database-storage to version-10.0.0-beta04July 28, 2026 16:03
@demolaf
demolaf changed the base branch from version-10.0.0-beta04 to fix/auth-state-stale-notification-resetJuly 28, 2026 16:03
@demolafdemolaf closed this Jul 28, 2026
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from ccd214c to 267731eCompareJuly 28, 2026 16:08
@demolafdemolaf reopened this Jul 28, 2026
@demolaf
demolafforce-pushed the fix/auth-state-stale-notification-reset branch from 267731e to e035a60CompareJuly 29, 2026 00:45
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 74c0370 to 007676dCompareAugust 10, 2026 16:40
@demolaf
demolaf changed the base branch from fix/auth-state-stale-notification-reset to version-10.0.0-beta04August 10, 2026 16:43
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from dbaac07 to f896825CompareAugust 18, 2026 09:55
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from d552549 to a2d2bc9CompareAugust 21, 2026 14:06
@demolaf
demolaf marked this pull request as ready for review August 21, 2026 14:58
@demolaf
demolafforce-pushed the version-10.0.0-beta04 branch from 06a6fe9 to 697f1d9CompareAugust 24, 2026 09:29
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 4785c0e to 5e3a069CompareAugust 24, 2026 10:16
@demolaf
demolaf marked this pull request as draft August 25, 2026 09:46
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5e3a069 to ba5b475CompareAugust 29, 2026 22:02
@demolaf
demolaf changed the base branch from version-10.0.0-beta04-old to version-10.0.0-beta05August 29, 2026 22:02
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch 2 times, most recently from 875cf50 to 1c0c935CompareAugust 31, 2026 22:36
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from dadde5c to 5706131CompareSeptember 1, 2026 11:35
@demolaf
demolafforce-pushed the version-10.0.0-beta05 branch from 444543d to 059bba8CompareSeptember 1, 2026 16:17
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 5706131 to 38aca2eCompareSeptember 2, 2026 18:25
@demolaf
demolaf marked this pull request as ready for review September 2, 2026 18:36
(cherry picked from commit d88088103e61630c95f69de273953346b90486ab)
…-state UI to full customization demo
(cherry picked from commit 96694e0dddd4dacaa769d09ee153c34d4f51f8a2)
Intercept back on the login/sign-up steps so it returns to email entry
instead of leaving the auth flow, make the other-sign-in-methods sheet
scrollable (nine providers plus the ToS footer overflow shorter screens),
compare the confirmation email trimmed and case-insensitively and give the
field an email keyboard, and take the configured FirebaseAuth instance
rather than reaching for the global default.
(cherry picked from commit 1dfdeda82ecce93f6af54f4dfd6371d108c0ca44)
…ntState
(cherry picked from commit 20681c413ada0394de19203bb2dde2784bac6d06)
@demolaf
demolafforce-pushed the sample/full-customization-method-picker branch from 8176916 to 48d81bfCompareSeptember 3, 2026 15:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@demolaf