Dragon Guard Handheld WMS is a .NET MAUI Android client designed for warehouse operators working directly on rugged handheld devices. It covers the four core operational flows — Items, Receipts, Shipments, and Movements — and communicates with a Dragon Guard backend over JWT-authenticated HTTP. This page explains what the app is, what it deliberately excludes, and the foundational patterns that run through every layer of the codebase.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/CodexaCP/DG_APK/llms.txt
Use this file to discover all available pages before exploring further.
What the app does
Dragon Guard Handheld gives warehouse staff a touch-optimised interface on Android scanners and rugged terminals. Operators can look up item details and RFID tags, open and post receiving documents, manage outbound shipments, and browse inventory movement journals — all scoped to a single active company per session.Quick Start
Clone, configure a base URL, and deploy your first build to an Android device.
Architecture
Deep-dive into the MVVM structure, DI wiring, HTTP pipelines, and startup flow.
Login & Session
Understand JWT auth, device registration, and the single-company constraint.
Receipts
Walk through the receiving header and line detail flows, posting, and status badges.
Active operational scope
The home screen exposes exactly four modules. Other flows (Users, Companies, Picks, admin shortcuts) are hidden on the handheld to keep the interface focused on daily warehouse work. The underlying code is preserved for future use — it is not deleted.| Module | Purpose |
|---|---|
| Items | Product inquiry, RFID EPC resolution, item detail |
| Receipts | Receiving header list, line detail, post receipt |
| Shipments | Outbound shipment headers, line detail, post shipment |
| Movements | Inventory movement list and journal detail |
Primary target platform
The active build target isnet8.0-android with a minimum SDK of API 21 (Android 5.0). Windows, iOS, MacCatalyst, and Tizen are listed as potential targets in project tooling but are untested and unsupported in the current release. Debug APKs are built as self-contained (EmbedAssembliesIntoApk = true) because some rugged Android firmware breaks MAUI’s fast-deployment assembly override mechanism.
The app locks screen orientation to Portrait in
MainActivity. This matches the ergonomics of most rugged Android handhelds and should not be changed without testing on physical devices.Tech stack at a glance
| Layer | Technology |
|---|---|
| UI framework | .NET 8 MAUI — single project, net8.0-android active |
| Pattern | MVVM — BaseViewModel : INotifyPropertyChanged, ICommand on all user actions |
| Dependency injection | MauiProgram.cs — singletons for session/nav/scan, transients for ViewModels and HttpClients |
| HTTP | IHttpClientFactory — two named pipelines (public and protected) |
| Session persistence | SecureStorage, falling back to Preferences on older Android |
| Serialisation | System.Text.Json with a custom FlexibleGuidJsonConverter |
Navigation: NavigationPage, not Shell
App.xaml.cs constructs the window with a NavigationPage root painted in Dragon Guard navy (#15325B). NavigationService is the only safe place to push or pop pages — it holds a SemaphoreSlim to prevent concurrent navigation and redirects to LoginPage if the session token is missing.
Two HTTP client pipelines
Every service that talks to the backend uses one of two typed-client pipelines registered inMauiProgram.cs:
| Pipeline | Handler chain | Used by |
|---|---|---|
| Public | DynamicBaseUrlMessageHandler | AuthService (login, register) |
| Protected | DynamicBaseUrlMessageHandler → AuthenticatedHttpMessageHandler | All operational services |
DynamicBaseUrlMessageHandler rewrites the placeholder base URL at runtime so the backend host can change without recompiling the APK. AuthenticatedHttpMessageHandler injects Authorization: Bearer <token> and X-Company-Id: <guid> headers on every outbound request.