[PR #6690] [PM-33512] feat: Add PremiumStateManager for upgrade banner eligibility #12933

Closed
opened 2026-04-11 03:54:01 -05:00 by GiteaMirror · 0 comments
Owner

Original Pull Request: https://github.com/bitwarden/android/pull/6690

State: closed
Merged: Yes


🎟️ Tracking

https://bitwarden.atlassian.net/browse/PM-33512

📔 Objective

Add PremiumStateManager that consolidates all premium upgrade banner eligibility logic into a single StateFlow<Boolean>. This centralizes the eligibility decision so downstream consumers (e.g., VaultViewModel, Settings) observe one signal instead of combining multiple flows themselves.

Eligibility formula (all must be true):

  • User is not premium
  • In-app billing is supported (Play Billing or F-Droid)
  • MobilePremiumUpgrade feature flag is enabled
  • Banner has not been dismissed
  • Account is at least 7 days old
  • Vault contains at least 5 non-deleted items

Changes:

  • PremiumStateManager interface with isPremiumUpgradeBannerEligibleFlow and dismissPremiumUpgradeBanner()
  • PremiumStateManagerImpl combining 5 upstream flows via combine with Clock injection for account age calculation
  • BillingModule wiring with @Provides @Singleton
  • 18 unit tests covering all eligibility conditions, boundary values, DataState variants, and reactive updates
**Original Pull Request:** https://github.com/bitwarden/android/pull/6690 **State:** closed **Merged:** Yes --- ## 🎟️ Tracking https://bitwarden.atlassian.net/browse/PM-33512 ## 📔 Objective Add `PremiumStateManager` that consolidates all premium upgrade banner eligibility logic into a single `StateFlow<Boolean>`. This centralizes the eligibility decision so downstream consumers (e.g., `VaultViewModel`, Settings) observe one signal instead of combining multiple flows themselves. **Eligibility formula** (all must be true): - User is not premium - In-app billing is supported (Play Billing or F-Droid) - `MobilePremiumUpgrade` feature flag is enabled - Banner has not been dismissed - Account is at least 7 days old - Vault contains at least 5 non-deleted items **Changes:** - `PremiumStateManager` interface with `isPremiumUpgradeBannerEligibleFlow` and `dismissPremiumUpgradeBanner()` - `PremiumStateManagerImpl` combining 5 upstream flows via `combine` with `Clock` injection for account age calculation - `BillingModule` wiring with `@Provides @Singleton` - 18 unit tests covering all eligibility conditions, boundary values, `DataState` variants, and reactive updates
GiteaMirror added the pull-request label 2026-04-11 03:54:01 -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#12933