[PR #6794] [PM-33517] feat: Add Plan row to Settings and premium subscription management #32882

Open
opened 2026-04-18 16:13:57 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/bitwarden/android/pull/6794
Author: @SaintPatrck
Created: 4/14/2026
Status: 🔄 Open

Base: premium-upgrade/PM-33946-dynamic-pricing-implHead: premium-upgrade/PM-33517-settings-premium_bak


📝 Commits (7)

  • f38ae8b [PM-33946] feat: Replace static pricing with dynamic data from plans API
  • a78bd73 Address code review findings for pricing error handling
  • 9f00370 Fix checkout callback URL, dialog timing, and result handling
  • 383dca9 Use syncForResult to prevent stuck loading dialog on sync failure
  • 30669f6 Pass PremiumCheckoutCallbackResult through SpecialCircumstance directly
  • 4a6de0d Address review findings and add missing test coverage
  • 581f032 [PM-33517] feat: Add Plan row to Settings and premium subscription management

📊 Changes

30 files changed (+2435 additions, -108 deletions)

View changed files

📝 app/src/main/kotlin/com/x8bit/bitwarden/MainViewModel.kt (+9 -5)
📝 app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/BillingRepository.kt (+6 -0)
📝 app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/BillingRepositoryImpl.kt (+15 -0)
app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/model/PremiumPlanPricingResult.kt (+28 -0)
app/src/main/kotlin/com/x8bit/bitwarden/data/billing/util/PremiumCheckoutUtils.kt (+65 -0)
📝 app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SpecialCircumstance.kt (+4 -1)
📝 app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/premium/plan/PlanNavigation.kt (+19 -0)
📝 app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/premium/plan/PlanScreen.kt (+272 -6)
📝 app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/premium/plan/PlanViewModel.kt (+480 -37)
📝 app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/premium/plan/handlers/PlanHandlers.kt (+35 -0)
📝 app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavViewModel.kt (+1 -1)
📝 app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsNavigation.kt (+6 -1)
📝 app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsScreen.kt (+3 -1)
📝 app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsViewModel.kt (+67 -4)
📝 app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/util/ShortcutUtils.kt (+1 -1)
📝 app/src/test/kotlin/com/x8bit/bitwarden/MainViewModelTest.kt (+97 -7)
📝 app/src/test/kotlin/com/x8bit/bitwarden/data/billing/repository/BillingRepositoryTest.kt (+51 -0)
app/src/test/kotlin/com/x8bit/bitwarden/data/billing/util/PremiumCheckoutUtilsTest.kt (+65 -0)
📝 app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/premium/plan/PlanScreenTest.kt (+299 -0)
📝 app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/premium/plan/PlanViewModelTest.kt (+628 -42)

...and 10 more files

📄 Description

🎟️ Tracking

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

📔 Objective

Add a Plan row to the Settings screen and implement premium subscription management for existing premium users.

Stacked on #6793 (PM-33946 dynamic pricing)

Changes

  • Add "Plan" row to Settings screen that navigates to the PlanScreen in Standard (push) mode
  • Extend PlanScreen with a Premium ViewState showing subscription details (billing amount, next renewal date)
  • Add premium user dialogs: cancel confirmation, portal loading, portal error
  • Add premium user actions: ManagePlanClick, CancelPremiumClick, ConfirmCancelClick, portal URL fetching
  • Wire up customer portal navigation via BillingRepository.getPortalUrl()
  • Add ic_plan.xml drawable for the settings row
  • Full test coverage for all new ViewModel logic and Screen composables

🔄 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/6794 **Author:** [@SaintPatrck](https://github.com/SaintPatrck) **Created:** 4/14/2026 **Status:** 🔄 Open **Base:** `premium-upgrade/PM-33946-dynamic-pricing-impl` ← **Head:** `premium-upgrade/PM-33517-settings-premium_bak` --- ### 📝 Commits (7) - [`f38ae8b`](https://github.com/bitwarden/android/commit/f38ae8bfe1f01224c14d3d68402aa5e8d72d9595) [PM-33946] feat: Replace static pricing with dynamic data from plans API - [`a78bd73`](https://github.com/bitwarden/android/commit/a78bd73b0be07d0edc60c45b81e85f2a8abee4c1) Address code review findings for pricing error handling - [`9f00370`](https://github.com/bitwarden/android/commit/9f00370eede8674d83897ed00a1b8584a064995b) Fix checkout callback URL, dialog timing, and result handling - [`383dca9`](https://github.com/bitwarden/android/commit/383dca91982d39b371b64b933e3c2c3f918a2f96) Use syncForResult to prevent stuck loading dialog on sync failure - [`30669f6`](https://github.com/bitwarden/android/commit/30669f65e67f90fedcdbe4c3f46a9c25f8aff310) Pass PremiumCheckoutCallbackResult through SpecialCircumstance directly - [`4a6de0d`](https://github.com/bitwarden/android/commit/4a6de0d5e10fe87ff6bfaddb69c6465ae343b99f) Address review findings and add missing test coverage - [`581f032`](https://github.com/bitwarden/android/commit/581f03269140112d53263a3a9361fd9081fb4a88) [PM-33517] feat: Add Plan row to Settings and premium subscription management ### 📊 Changes **30 files changed** (+2435 additions, -108 deletions) <details> <summary>View changed files</summary> 📝 `app/src/main/kotlin/com/x8bit/bitwarden/MainViewModel.kt` (+9 -5) 📝 `app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/BillingRepository.kt` (+6 -0) 📝 `app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/BillingRepositoryImpl.kt` (+15 -0) ➕ `app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/model/PremiumPlanPricingResult.kt` (+28 -0) ➕ `app/src/main/kotlin/com/x8bit/bitwarden/data/billing/util/PremiumCheckoutUtils.kt` (+65 -0) 📝 `app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/SpecialCircumstance.kt` (+4 -1) 📝 `app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/premium/plan/PlanNavigation.kt` (+19 -0) 📝 `app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/premium/plan/PlanScreen.kt` (+272 -6) 📝 `app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/premium/plan/PlanViewModel.kt` (+480 -37) 📝 `app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/premium/plan/handlers/PlanHandlers.kt` (+35 -0) 📝 `app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavViewModel.kt` (+1 -1) 📝 `app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsNavigation.kt` (+6 -1) 📝 `app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsScreen.kt` (+3 -1) 📝 `app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsViewModel.kt` (+67 -4) 📝 `app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/util/ShortcutUtils.kt` (+1 -1) 📝 `app/src/test/kotlin/com/x8bit/bitwarden/MainViewModelTest.kt` (+97 -7) 📝 `app/src/test/kotlin/com/x8bit/bitwarden/data/billing/repository/BillingRepositoryTest.kt` (+51 -0) ➕ `app/src/test/kotlin/com/x8bit/bitwarden/data/billing/util/PremiumCheckoutUtilsTest.kt` (+65 -0) 📝 `app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/premium/plan/PlanScreenTest.kt` (+299 -0) 📝 `app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/premium/plan/PlanViewModelTest.kt` (+628 -42) _...and 10 more files_ </details> ### 📄 Description ## 🎟️ Tracking https://bitwarden.atlassian.net/browse/PM-33517 ## 📔 Objective Add a **Plan** row to the Settings screen and implement premium subscription management for existing premium users. **Stacked on #6793** (PM-33946 dynamic pricing) ### Changes - Add "Plan" row to Settings screen that navigates to the PlanScreen in Standard (push) mode - Extend PlanScreen with a `Premium` ViewState showing subscription details (billing amount, next renewal date) - Add premium user dialogs: cancel confirmation, portal loading, portal error - Add premium user actions: ManagePlanClick, CancelPremiumClick, ConfirmCancelClick, portal URL fetching - Wire up customer portal navigation via `BillingRepository.getPortalUrl()` - Add `ic_plan.xml` drawable for the settings row - Full test coverage for all new ViewModel logic and Screen composables --- <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-04-18 16:13:57 -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#32882