Skip to main content

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.

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.

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.
ModulePurpose
ItemsProduct inquiry, RFID EPC resolution, item detail
ReceiptsReceiving header list, line detail, post receipt
ShipmentsOutbound shipment headers, line detail, post shipment
MovementsInventory movement list and journal detail

Primary target platform

The active build target is net8.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

LayerTechnology
UI framework.NET 8 MAUI — single project, net8.0-android active
PatternMVVM — BaseViewModel : INotifyPropertyChanged, ICommand on all user actions
Dependency injectionMauiProgram.cs — singletons for session/nav/scan, transients for ViewModels and HttpClients
HTTPIHttpClientFactory — two named pipelines (public and protected)
Session persistenceSecureStorage, falling back to Preferences on older Android
SerialisationSystem.Text.Json with a custom FlexibleGuidJsonConverter
Do not use Shell navigation. AppShell.xaml is explicitly excluded from compilation in Handheld.csproj because the legacy Shell/Flyout fragment host crashes on rugged Android firmware. All navigation goes through NavigationService, which wraps a NavigationPage root set in App.xaml.cs.
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 in MauiProgram.cs:
PipelineHandler chainUsed by
PublicDynamicBaseUrlMessageHandlerAuthService (login, register)
ProtectedDynamicBaseUrlMessageHandlerAuthenticatedHttpMessageHandlerAll 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.

Build docs developers (and LLMs) love