[PR #6818] [MERGED] [PM-35454] feat: Add subscription API, domain models, and status badge component #55109

Closed
opened 2026-05-01 21:04:01 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/bitwarden/android/pull/6818
Author: @SaintPatrck
Created: 4/21/2026
Status: Merged
Merged: 4/27/2026
Merged by: @SaintPatrck

Base: mainHead: premium-upgrade/PM-35454-subscription-backend


📝 Commits (6)

  • 6a3421b [PM-35454] feat: Add subscription API, domain models, and status badge component
  • 488f21a Align status badge primitives with Figma and differentiate dark theme
  • e8e202f Use BigDecimal for subscription currency fields
  • 5276e3d Handle paused subscription status
  • 998849e Conform BitwardenStatusBadge layout to Figma spec
  • e50bdb6 Apply subscription PR feedback

📊 Changes

22 files changed (+1455 additions, -0 deletions)

View changed files

📝 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 (+14 -0)
app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/model/PlanCadence.kt (+9 -0)
app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/model/PremiumSubscriptionStatus.kt (+12 -0)
app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/model/SubscriptionInfo.kt (+36 -0)
app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/model/SubscriptionResult.kt (+20 -0)
app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/util/BitwardenSubscriptionResponseJsonExtensions.kt (+85 -0)
📝 app/src/test/kotlin/com/x8bit/bitwarden/data/billing/repository/BillingRepositoryTest.kt (+81 -0)
app/src/test/kotlin/com/x8bit/bitwarden/data/billing/repository/util/BitwardenSubscriptionResponseJsonExtensionsTest.kt (+219 -0)
core/src/main/kotlin/com/bitwarden/core/data/serializer/BigDecimalSerializer.kt (+44 -0)
📝 core/src/main/kotlin/com/bitwarden/core/di/CoreModule.kt (+2 -0)
core/src/test/kotlin/com/bitwarden/core/data/serializer/BigDecimalSerializerTest.kt (+93 -0)
📝 network/src/main/kotlin/com/bitwarden/network/BitwardenServiceClientImpl.kt (+2 -0)
📝 network/src/main/kotlin/com/bitwarden/network/api/AuthenticatedBillingApi.kt (+7 -0)
network/src/main/kotlin/com/bitwarden/network/model/BitwardenSubscriptionResponseJson.kt (+222 -0)
📝 network/src/main/kotlin/com/bitwarden/network/service/BillingService.kt (+6 -0)
📝 network/src/main/kotlin/com/bitwarden/network/service/BillingServiceImpl.kt (+6 -0)
📝 network/src/test/kotlin/com/bitwarden/network/service/BillingServiceTest.kt (+369 -0)
ui/src/main/kotlin/com/bitwarden/ui/platform/components/badge/BitwardenStatusBadge.kt (+99 -0)
📝 ui/src/main/kotlin/com/bitwarden/ui/platform/theme/color/BitwardenColorScheme.kt (+21 -0)

...and 2 more files

📄 Description

🎟️ Tracking

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

📔 Objective

Introduces the subscription retrieval path (network API, service, repository, domain models) so premium users can soon see their actual billed rate, line items, and next-charge details, plus a reusable BitwardenStatusBadge for rendering subscription status.

No user-visible behavior change in this PR — the new capabilities are consumed by the follow-up PM-35455, which stacks on top of this branch.

  • cadence, estimatedTax, discountAmount, and nextChargeTotal are surfaced through SubscriptionInfo. Currency fields use BigDecimal (not Double) to avoid floating-point precision loss on cart math; a BigDecimalSerializer preserves the server's unquoted JSON number contract. discountAmount and nextChargeTotal are resolved at mapping time since the server does not expose a precomputed total.
  • BitwardenStatusBadge ships with success / error / warning color variants that differentiate light and dark themes per the Figma spec; consumers supply the label and variant.

📸 Screenshots


🔄 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/6818 **Author:** [@SaintPatrck](https://github.com/SaintPatrck) **Created:** 4/21/2026 **Status:** ✅ Merged **Merged:** 4/27/2026 **Merged by:** [@SaintPatrck](https://github.com/SaintPatrck) **Base:** `main` ← **Head:** `premium-upgrade/PM-35454-subscription-backend` --- ### 📝 Commits (6) - [`6a3421b`](https://github.com/bitwarden/android/commit/6a3421b3db739320a2df2b50e0b50f8290fef3d3) [PM-35454] feat: Add subscription API, domain models, and status badge component - [`488f21a`](https://github.com/bitwarden/android/commit/488f21a16d3dd0aaa8713da2a94b55944926c908) Align status badge primitives with Figma and differentiate dark theme - [`e8e202f`](https://github.com/bitwarden/android/commit/e8e202fa1ddd9fd556f4d5ca4dd90ff3ce9f7cb7) Use BigDecimal for subscription currency fields - [`5276e3d`](https://github.com/bitwarden/android/commit/5276e3dae3649d6f2d15d9d11607e1b723614d0e) Handle paused subscription status - [`998849e`](https://github.com/bitwarden/android/commit/998849e37a1446f596c04931baf59d9a07ae3f83) Conform BitwardenStatusBadge layout to Figma spec - [`e50bdb6`](https://github.com/bitwarden/android/commit/e50bdb68027971bbde64fe7c2670de5034a89919) Apply subscription PR feedback ### 📊 Changes **22 files changed** (+1455 additions, -0 deletions) <details> <summary>View changed files</summary> 📝 `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` (+14 -0) ➕ `app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/model/PlanCadence.kt` (+9 -0) ➕ `app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/model/PremiumSubscriptionStatus.kt` (+12 -0) ➕ `app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/model/SubscriptionInfo.kt` (+36 -0) ➕ `app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/model/SubscriptionResult.kt` (+20 -0) ➕ `app/src/main/kotlin/com/x8bit/bitwarden/data/billing/repository/util/BitwardenSubscriptionResponseJsonExtensions.kt` (+85 -0) 📝 `app/src/test/kotlin/com/x8bit/bitwarden/data/billing/repository/BillingRepositoryTest.kt` (+81 -0) ➕ `app/src/test/kotlin/com/x8bit/bitwarden/data/billing/repository/util/BitwardenSubscriptionResponseJsonExtensionsTest.kt` (+219 -0) ➕ `core/src/main/kotlin/com/bitwarden/core/data/serializer/BigDecimalSerializer.kt` (+44 -0) 📝 `core/src/main/kotlin/com/bitwarden/core/di/CoreModule.kt` (+2 -0) ➕ `core/src/test/kotlin/com/bitwarden/core/data/serializer/BigDecimalSerializerTest.kt` (+93 -0) 📝 `network/src/main/kotlin/com/bitwarden/network/BitwardenServiceClientImpl.kt` (+2 -0) 📝 `network/src/main/kotlin/com/bitwarden/network/api/AuthenticatedBillingApi.kt` (+7 -0) ➕ `network/src/main/kotlin/com/bitwarden/network/model/BitwardenSubscriptionResponseJson.kt` (+222 -0) 📝 `network/src/main/kotlin/com/bitwarden/network/service/BillingService.kt` (+6 -0) 📝 `network/src/main/kotlin/com/bitwarden/network/service/BillingServiceImpl.kt` (+6 -0) 📝 `network/src/test/kotlin/com/bitwarden/network/service/BillingServiceTest.kt` (+369 -0) ➕ `ui/src/main/kotlin/com/bitwarden/ui/platform/components/badge/BitwardenStatusBadge.kt` (+99 -0) 📝 `ui/src/main/kotlin/com/bitwarden/ui/platform/theme/color/BitwardenColorScheme.kt` (+21 -0) _...and 2 more files_ </details> ### 📄 Description ## 🎟️ Tracking https://bitwarden.atlassian.net/browse/PM-35454 ## 📔 Objective Introduces the subscription retrieval path (network API, service, repository, domain models) so premium users can soon see their actual billed rate, line items, and next-charge details, plus a reusable `BitwardenStatusBadge` for rendering subscription status. No user-visible behavior change in this PR — the new capabilities are consumed by the follow-up PM-35455, which stacks on top of this branch. - `cadence`, `estimatedTax`, `discountAmount`, and `nextChargeTotal` are surfaced through `SubscriptionInfo`. Currency fields use `BigDecimal` (not `Double`) to avoid floating-point precision loss on cart math; a `BigDecimalSerializer` preserves the server's unquoted JSON number contract. `discountAmount` and `nextChargeTotal` are resolved at mapping time since the server does not expose a precomputed total. - `BitwardenStatusBadge` ships with success / error / warning color variants that differentiate light and dark themes per the Figma spec; consumers supply the label and variant. ## 📸 Screenshots <img width="365" src="https://github.com/user-attachments/assets/645e2c7a-9db9-40d3-95a5-f7b7c441bec8" /> --- <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-05-01 21:04: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#55109