UI Customization
MineSec Pay 7 can be branded at two levels:
- Level 1: you choose your brand colour and MineSec derives the full palette from it. MineSec builds and delivers the branded app; you write no code. You can preview your brand in the Brand Preview tool before the build.
- Level 2: the full colour palette (38 colour values), fonts, logos and app name, plus the UIKit source to redesign the screens.
This section is for Level 2. Branding is set per build. Only the merchant logo and name vary inside one build, and they come from the backend.
Two Modules
MineSec Pay 7 is split into a payment engine and a presentation layer:
msa-core | msa-uikit | |
|---|---|---|
| Role | Payment processing, navigation, state and business logic | The screens and the design system |
| Contains | Transactions, settlement, POS integration, kiosk mode, login, device checks, the Embedded Payment SDK | Every stock screen, MsaTheme, MsaBrand, shared components such as MsaButton |
| Delivery | Closed binary, inside the PCI MPoC scope | Library you build on. Level 2 customers also receive its source |
| You change it? | No. You configure it (environment, licence, Koin bindings) | Yes. Re-theme it, replace any screen, or both |
You depend only on msa-uikit. It brings in msa-core of the same version, and msa-core brings in the Embedded
Payment SDK.
How It Works
msa-core owns navigation, state and business logic. It never draws a screen itself. For every screen, it asks a
ScreenProviders for a Composable, hands it the current State, and listens for Actions:
Every screen has the same shape:
fun interface ComposableScreen<S, A> {
@Composable
fun Content(state: S, triggerAction: (A) -> Unit)
}msa-uikit provides DefaultScreenProviders, which fills every slot with a stock screen. You subclass it and
override only the screens you redesign. Every slot you leave alone keeps the stock screen, including slots added in
later versions.
class MyScreenProviders : DefaultScreenProviders(MyBrandTheme) {
override val startup: StartupScreens = object : DefaultStartupScreens() {
override val login = ComposableScreen { state, triggerAction ->
MyLoginScreen(state, triggerAction) // your Compose UI
}
}
}The screens are organised in groups: startup, home, payment, history, settlement, settings, idle, plus
the App2App screens. A screen only decides how things look. msa-core validates every operation, whatever the UI
offers.
What msa-core Provides
| Capability | Details |
|---|---|
| Payment Processing | Sale, void, refund, pre-auth, auth completion and incremental auth via NFC card tap; tips, installment, DCC and multi-currency |
| QR Payments | Consumer scan, merchant scan, multiple schemes |
| Transaction Management | History, details, receipts |
| Settlement | Batch settlement and reporting |
| POS Integration | App2App, Local PayServer and Cloud POS Connector |
| Kiosk Mode | Self-service operation with idle signage |
| Authentication | Passcode login, biometric support |
| Device Management | NFC, attestation, environment config |
What msa-uikit Provides
| Part | Details |
|---|---|
| Stock screens | DefaultScreenProviders and one open default class per group, such as DefaultPaymentScreens |
| Design system | MsaTheme: 20 colour tokens, 13 type styles, spacing, icon sizes, radius and shapes |
| Theme form | MsaBrand: every value you can re-brand, including colours, fonts, logos and sizes |
| Components | Shared building blocks such as MsaButton, so your screens match the stock ones |
| Customer display | The cardholder-facing screen on dual-screen terminals, drawn in the same theme |
What You Build
| Goal | What you write |
|---|---|
| Re-theme only | One MsaBrand theme. The stock screens draw in it. |
| Redesign some screens | Your theme, plus Compose screens for the slots you replace |
| Redesign everything | Your theme, plus a screen for every slot. Start from the uikit source. |
In every case you also write an Application class and a MainActivity, a few lines each. See the Quickstart.
MineSec provides Level 2 customers with an example project that implements all screens.
Next Steps
- Installation: add
msa-uikitto your project - Quickstart: set up your app and replace your first screen
- Theming & Branding: colours, typography, sizes, shapes and logos
- Screen Providers Reference: every screen with its State and Action classes