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

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 apiroot and 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.