[PR #6888] [MERGED] [PM-36867] fix: Disable card scanner on F-Droid builds #125539

Closed
opened 2026-06-12 05:11:30 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/bitwarden/android/pull/6888
Author: @SaintPatrck
Created: 5/8/2026
Status: Merged
Merged: 5/8/2026
Merged by: @SaintPatrck

Base: mainHead: pm-36867/fdroid-card-scanner-disable


📝 Commits (4)

  • de12862 [PM-36867] fix: Disable card scanner on F-Droid builds
  • b0b0ff9 Match flavor-stub convention for unused parameter
  • cf24c16 Alphabetize standardImplementation dependencies
  • 01abaf6 Cross-module access for card scanner support classes

📊 Changes

10 files changed (+90 additions, -30 deletions)

View changed files

📝 app/build.gradle.kts (+3 -2)
app/src/fdroid/kotlin/com/bitwarden/ui/platform/feature/cardscanner/util/CardTextAnalyzerImpl.kt (+27 -0)
📝 app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt (+7 -2)
📝 app/src/standard/kotlin/com/bitwarden/ui/platform/feature/cardscanner/util/CardTextAnalyzerImpl.kt (+7 -17)
📝 app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt (+24 -0)
📝 ui/build.gradle.kts (+0 -1)
📝 ui/src/main/kotlin/com/bitwarden/ui/platform/feature/cardscanner/util/CardScanFrameFilter.kt (+1 -1)
📝 ui/src/main/kotlin/com/bitwarden/ui/platform/feature/cardscanner/util/ExpiryBuffer.kt (+1 -1)
📝 ui/src/main/kotlin/com/bitwarden/ui/platform/feature/cardscanner/util/PanVoteBuffer.kt (+15 -1)
📝 ui/src/main/kotlin/com/bitwarden/ui/platform/feature/cardscanner/util/RecognizedText.kt (+5 -5)

📄 Description

🎟️ Tracking

📔 Objective

F-Droid builds were crashing on launch. CardTextAnalyzerImpl was constructed eagerly as a default parameter on LocalManagerProvider — its property initializer called ML Kit's TextRecognition.getClient(...) during composition setup at app startup, which fails on devices without functional Google Play Services (GrapheneOS owner profile, restricted GMS, etc.).

F-Droid policy disallows Google ML Kit, so the card scanner is disabled there entirely:

  • ML Kit dependency moves from :ui to :app standardImplementation
  • CardTextAnalyzerImpl is split by flavor: real ML Kit impl in app/src/standard, no-op stub in app/src/fdroid (matching the existing flavor-stub pattern used by LogsManagerImpl, PlayBillingManagerImpl, AppReviewManagerImpl)
  • The standard impl's recognizer is now by lazy so ML Kit is never touched in <init>, hardening against future composition-default mistakes
  • VaultAddEditViewModel.isCardScannerEnabled is gated on !buildInfoManager.isFdroid for both initial state and the runtime feature-flag-update path, so the Scan Card button never renders on F-Droid builds

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/bitwarden/android/pull/6888 **Author:** [@SaintPatrck](https://github.com/SaintPatrck) **Created:** 5/8/2026 **Status:** ✅ Merged **Merged:** 5/8/2026 **Merged by:** [@SaintPatrck](https://github.com/SaintPatrck) **Base:** `main` ← **Head:** `pm-36867/fdroid-card-scanner-disable` --- ### 📝 Commits (4) - [`de12862`](https://github.com/bitwarden/android/commit/de12862459d4047f1d3b845f0897344ab7434f79) [PM-36867] fix: Disable card scanner on F-Droid builds - [`b0b0ff9`](https://github.com/bitwarden/android/commit/b0b0ff94e21dec1145da5c96e0a6e135999305e2) Match flavor-stub convention for unused parameter - [`cf24c16`](https://github.com/bitwarden/android/commit/cf24c16d3e51f59140dcfc1beb71e82d58d34fa4) Alphabetize standardImplementation dependencies - [`01abaf6`](https://github.com/bitwarden/android/commit/01abaf640c318eba0d4edc6ba422894ba653593b) Cross-module access for card scanner support classes ### 📊 Changes **10 files changed** (+90 additions, -30 deletions) <details> <summary>View changed files</summary> 📝 `app/build.gradle.kts` (+3 -2) ➕ `app/src/fdroid/kotlin/com/bitwarden/ui/platform/feature/cardscanner/util/CardTextAnalyzerImpl.kt` (+27 -0) 📝 `app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt` (+7 -2) 📝 `app/src/standard/kotlin/com/bitwarden/ui/platform/feature/cardscanner/util/CardTextAnalyzerImpl.kt` (+7 -17) 📝 `app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt` (+24 -0) 📝 `ui/build.gradle.kts` (+0 -1) 📝 `ui/src/main/kotlin/com/bitwarden/ui/platform/feature/cardscanner/util/CardScanFrameFilter.kt` (+1 -1) 📝 `ui/src/main/kotlin/com/bitwarden/ui/platform/feature/cardscanner/util/ExpiryBuffer.kt` (+1 -1) 📝 `ui/src/main/kotlin/com/bitwarden/ui/platform/feature/cardscanner/util/PanVoteBuffer.kt` (+15 -1) 📝 `ui/src/main/kotlin/com/bitwarden/ui/platform/feature/cardscanner/util/RecognizedText.kt` (+5 -5) </details> ### 📄 Description ## 🎟️ Tracking - https://bitwarden.atlassian.net/browse/PM-36867 - https://github.com/bitwarden/android/issues/6884 ## 📔 Objective F-Droid builds were crashing on launch. `CardTextAnalyzerImpl` was constructed eagerly as a default parameter on `LocalManagerProvider` — its property initializer called ML Kit's `TextRecognition.getClient(...)` during composition setup at app startup, which fails on devices without functional Google Play Services (GrapheneOS owner profile, restricted GMS, etc.). F-Droid policy disallows Google ML Kit, so the card scanner is disabled there entirely: - ML Kit dependency moves from `:ui` to `:app` `standardImplementation` - `CardTextAnalyzerImpl` is split by flavor: real ML Kit impl in `app/src/standard`, no-op stub in `app/src/fdroid` (matching the existing flavor-stub pattern used by `LogsManagerImpl`, `PlayBillingManagerImpl`, `AppReviewManagerImpl`) - The standard impl's `recognizer` is now `by lazy` so ML Kit is never touched in `<init>`, hardening against future composition-default mistakes - `VaultAddEditViewModel.isCardScannerEnabled` is gated on `!buildInfoManager.isFdroid` for both initial state and the runtime feature-flag-update path, so the Scan Card button never renders on F-Droid builds --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-06-12 05:11:30 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/android#125539