Ref(DeviceInfo-PaymentResult-WebView):
- Refactor `PaymentResultEntity` to include a nested `PaymentResultDataEntity` and companion factory methods for success and failure. - Update `PaymentResultStatus` enum members from `OK`/`ERROR` to `SUCCESS`/`FAILURE`. - Modify `PspService` and its implementations (`P3`, `PS4`, `Stage`) to return a non-nullable `PaymentResultEntity`. - Enhance `PspWebView` with improved instance lifecycle management, `rememberUpdatedState` for callbacks, and new `onWebViewReady` and `onPageFinished` hooks. - Optimize `PspWebView` to prevent redundant `loadUrl` calls during recomposition. - Add `README.md` and `AGENT.md` to provide project architecture overviews and hardware-specific development guidelines. - Update `TisWebViewScreen` and `StageWebViewScreen` to handle the refactored result models and utilize new WebView callbacks.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
# PSP (Payment Service Provider) Project
|
||||
|
||||
This project is a multi-module Android application designed to provide payment and printing services on specialized POS hardware. It uses a modular architecture to separate core logic, hardware SDKs, and different application variants.
|
||||
|
||||
## Module Structure
|
||||
|
||||
### Core Modules
|
||||
* **`:core`**: The backbone of the project. Contains shared domain models (`PaymentResultEntity`, `PrintEntity`), interfaces for services (`PspService`, `Printer`), and common utilities. It has no dependencies on other modules.
|
||||
* **`:design_system`**: Contains shared UI components and utilities. The most critical component is `PspWebView`, a highly optimized WebView wrapper used across all app variants for rendering the web-based POS interface. It depends on `:core`.
|
||||
|
||||
### Hardware Implementation Modules
|
||||
These modules contain the specific SDK integrations for different POS hardware.
|
||||
* **`:p3`**: Implementation of `PspService` and `Printer` for P3 hardware. Includes SDK-specific logic for handling payments and thermal printing.
|
||||
* **`:ps4`**: Implementation for PS4 hardware variants.
|
||||
|
||||
### Application Variants
|
||||
* **`:app`**: The primary production application.
|
||||
* **`:tis_app`**: A specialized version of the application targeting the TIS environment (`https://tis.shift-am.ir`).
|
||||
* **`:stage_app`**: A development and staging variant used for testing. It often uses mock implementations (like `StageViewModel`) to simulate POS behavior without requiring physical hardware.
|
||||
|
||||
## Architecture & Relationships
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph Apps
|
||||
tis_app --> core
|
||||
tis_app --> design_system
|
||||
stage_app --> core
|
||||
stage_app --> design_system
|
||||
app --> core
|
||||
app --> design_system
|
||||
end
|
||||
|
||||
subgraph Hardware SDKs
|
||||
p3 --> core
|
||||
ps4 --> core
|
||||
end
|
||||
|
||||
design_system --> core
|
||||
```
|
||||
|
||||
1. **Dependency Inversion**: Apps depend on interfaces defined in `:core`. The actual hardware implementation (`:p3` or `:ps4`) is injected via Hilt, allowing the same app logic to run on different devices.
|
||||
2. **Web-Native Bridge**: The `design_system` module provides `PspJavaScriptInterface`, which allows the Web POS (running inside `PspWebView`) to communicate with native hardware features like the printer and payment terminal.
|
||||
3. **Hardware Performance**: The WebView is optimized for weak POS hardware with features like pooled instances, hardware acceleration, and lean rendering profiles.
|
||||
|
||||
## Key Features
|
||||
* **Thermal Printing**: Optimized for RTL (Persian) text and high-performance bitmap rendering for logos (including VectorDrawable support).
|
||||
* **Payment Integration**: Standardized bridge for processing payments and returning structured results to the web-front-end.
|
||||
* **Weak Hardware Optimization**: Custom WebView configurations to handle smooth animations (drawers/sheets) on low-spec devices.
|
||||
Reference in New Issue
Block a user