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

Open
opened 2026-04-23 22:39:26 -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: 🔄 Open

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


📝 Commits (5)

  • cc8f9e8 [PM-35454] feat: Add subscription API, domain models, and status badge component
  • 9337fa8 Align status badge primitives with Figma and differentiate dark theme
  • 0cb83ba Use BigDecimal for subscription currency fields
  • 933db77 Handle paused subscription status
  • 049e150 Conform BitwardenStatusBadge layout to Figma spec

📊 Changes

22 files changed (+1419 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 (+56 -0)
app/src/test/kotlin/com/x8bit/bitwarden/data/billing/repository/util/BitwardenSubscriptionResponseJsonExtensionsTest.kt (+215 -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 (+362 -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:** 🔄 Open **Base:** `main` ← **Head:** `premium-upgrade/PM-35454-subscription-backend` --- ### 📝 Commits (5) - [`cc8f9e8`](https://github.com/bitwarden/android/commit/cc8f9e83a54fa201606193d9217b0fc93a43a075) [PM-35454] feat: Add subscription API, domain models, and status badge component - [`9337fa8`](https://github.com/bitwarden/android/commit/9337fa83184aab9d774af2d2318676994f62182e) Align status badge primitives with Figma and differentiate dark theme - [`0cb83ba`](https://github.com/bitwarden/android/commit/0cb83ba481d48569400849b88671451485d4e8e9) Use BigDecimal for subscription currency fields - [`933db77`](https://github.com/bitwarden/android/commit/933db7753fb36e63ada7f9f3bf0d23750aa9549b) Handle paused subscription status - [`049e150`](https://github.com/bitwarden/android/commit/049e1500c8b4382ea6fc59cb71168491b6e67a70) Conform BitwardenStatusBadge layout to Figma spec ### 📊 Changes **22 files changed** (+1419 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` (+56 -0) ➕ `app/src/test/kotlin/com/x8bit/bitwarden/data/billing/repository/util/BitwardenSubscriptionResponseJsonExtensionsTest.kt` (+215 -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` (+362 -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-04-23 22:39:26 -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#43983