AXIS FPConnector
Completed
Dec 2025 - Mar 2026 (4 months)
AXIS FPConnector is a Kotlin Android payment connector that bridges AXIS QR transaction payloads with FreedomPay execution on POS devices.
The implementation combines scan-to-payment orchestration, encrypted AXIS request/response handling, resilient timeout/cancel/void recovery paths, and operator-focused transaction state UX.
Built with: Kotlin, Android, Jetpack Compose, Navigation Compose, CameraX, ML Kit Barcode Scanning, Hilt, Mavericks (MvRx), Room, Retrofit, OkHttp, Moshi, SimpleXML, AES-CBC encryption, and Android NDK (C++/JNI).
Screenshots
Links
Project Activity
Recent updates for AXIS FPConnector. Completed
March 2026
-
Added final screenshots/documentation artifacts and consolidated project documentation data to support handoff and implementation review.
-
Shipped a broad stabilization pass: portrait-only orientation lock, reusable strings/fonts/util refactors, QA invalid-QR path fix, scanner-screen fixes, and restored the internal history button.
-
Completed code-review cleanup by removing unused imports and verifying CX package identifier correctness for runtime launch checks.
-
Applied review-driven refactors, fixed transaction-details retry attempt counting and FreedomPay error mapping behavior, and added AXIS log submission during save-result operations.
-
Completed scanner UX updates and shipped new app icon plus animated splash flow for the refreshed transaction entry experience.
-
Cut release v1.0.5+5 and completed HomeScreenIntro UX refinements introduced in the new design pass.
February 2026
-
Fixed version metadata shown in state history, normalized apiroot URL parsing (strip http/https), and surfaced the most recent transaction-error details in history logs.
-
Fixed FreedomPay timeout/connection classification by mapping underlying exception causes; corrected CX and CX-UAT package IDs for launch routing; resolved error-screen layout issues (padding and responsive width); improved state-history sheet sizing/scroll behavior; removed unused BASE_URL build config fields; released v1.0.4+4.
-
Added transaction state-history bottom sheet, tuned sheet height behavior, fixed payment-failed UI issues, and corrected payment-success checkmark alignment.
-
Introduced updated payment-failed UX variants and added info-button interactions for clearer error-state guidance.
-
Adjusted transaction-details timeout retry flow and refined CX auto-retry failure handling to present appropriate restart-device/try-again recovery behavior.
-
Fixed requestTimer preference, removed unnecessary UI files, improved CX-to-CX-UAT launch fallback, updated internal flavor applicationId, hardened XML parsing, and fixed AXIS submit payload/network GET error handling.
-
Moved encryption key protection into native C++/JNI, fixed timeout and encryption/decryption issues, and merged sale-request branch work into refactoring branch.
-
Fixed timeout edge case where empty sale/cancel responses were being saved, which caused AXIS save failures.
-
Expanded and updated additional screen states as part of the new UI rollout.
-
Implemented Figma-based Payment Not Processed and Fetching Transaction Details screens, and split composables into dedicated files.
-
Continued redux-style state migration, fixed encryption issues, added scanner/history/home previews, and implemented Home idle + invalid-QR states from Figma.
-
Added error-state info button UX and moved to redux-based state management to simplify viewmodel flow.
-
Created and finalized payment/transaction flow diagrams to align implementation and testing paths.
-
Hardened timeout/void/cancel orchestration with multi-attempt retries, exponential delays, CX reconnect behavior, and invalid-QR/error-state UX fixes.
January 2026
-
Implemented void-on-axis-save-failure recovery and advanced cancel-transaction handling to close timeout/failure loops safely.
-
Verified the VOID transaction request path on POS hardware to confirm post-payment rollback behavior.
-
Added encrypted AXIS save flow for completed payment outcomes, covering success, reject, failure, and error states.
-
Implemented transaction-details use cases, moved network error handling into repository layer, added scan-again UX, and submitted sale requests from decrypted transaction payloads.
-
Added Home screen and progressed full navigation flow with multiple bug fixes to stabilize transaction-state transitions.
-
Ran quick integration tests and introduced encryption/decryption sample implementation for secure payload pipeline validation.
-
Refactored networking boundaries by removing hardcoded CX service URLs from screens/viewmodels and clarifying AXIS-vs-FreedomPay URL sourcing rules.
-
Tested FreedomPay request execution and enabled trust-all certificate handling for controlled integration testing environments.
-
Implemented initial FreedomPay sale-request path with hardcoded payload setup to establish end-to-end payment invocation baseline.
December 2025
-
Applied theme refinements and renamed the app to FPConnector to align project identity.
-
Improved scanner and transaction-result UX, fixed duplicate-navigation scan bug, enhanced payment/history flows, and wired dummy transaction-details/finalize-payment API integration paths.
-
Completed clean-architecture implementation to stabilize domain/data/UI boundaries.
-
Delivered scanner working demo while introducing clean-architecture structure for maintainable feature expansion.
-
Bootstrapped the Android QR scanner codebase, added Android-specific ignore rules, and validated the first working scan baseline.
Objective Link to heading
- Build a production Android connector that bridges AXIS QR transactions with FreedomPay processing on POS devices.
- Ensure each payment attempt can be scanned, decrypted, processed, recovered (retry/cancel/void), and saved back to AXIS with clear operator-visible states.
Transaction flow Link to heading
- Scan QR content and validate payload shape before entering transaction processing.
- Fetch transaction details from AXIS using the QR-provided
apirootand key. - Decrypt sale/cancel/void XML payloads locally using AES-CBC-256.
- Submit the sale request to FreedomPay CX app and track timeout/connection outcomes.
- Execute retry/cancel/void recovery paths based on payment and AXIS-save results.
- Encrypt response payloads and submit final status plus execution logs to AXIS.
Architecture and hardening focus Link to heading
- Clean separation across UI, domain, and data layers with repository-driven network behavior.
- Compose-first UI with explicit state modeling for waiting, processing, success, failed, timeout, and recovery screens.
- Timeout and retry orchestration for transaction-details fetch, sale submission, cancel, void, and AXIS save operations.
- Security hardening through native C++ key storage, XML parser safeguards, and encrypted payload round-tripping.
- Integration reliability via CX/CX-UAT package routing fixes, detailed state-history logging, and release-tagged bug-fix sweeps.