pilot-toolkit-android/README-android.md
2026-05-03 13:11:29 -04:00

4.4 KiB
Raw Blame History

Pilot's Toolkit — Android

A collection of aviation utilities for flight crews, built with Kotlin and Jetpack Compose. Designed for practical cockpit use on Android devices.

Not for operational use — verify all calculations independently.


Modules

  • Fuel Order Calculator — Fuel quantity in US/imperial gallons and liters with ASTM D1250 Table 6B density correction and ambient temperature adjustment.
  • Pavement Strength / ESWL — ACN/ACR calculation with PCN/PCR comparison, rigid/flexible pavement types, four subgrade categories. Reverse-solves maximum allowable weight when pavement is exceeded.
  • Crosswind Calculator — Headwind, tailwind, and crosswind components from wind direction/speed and runway heading. Auto-formats five-digit wind input on focus loss.
  • Fuel Buckets — Stage length vs. fuel burn schedule with slider interpolation. Supports operator-specific CSV and JSON profile import.
  • HF Frequencies — Active ARINC HF assignments for Atlantic and Pacific with staleness indicator.
  • Passdown — Crew changeover form with local storage, autocomplete, history, batch .ptz export, email compose via share intent, and tappable phone dialing.
  • Flight Level ↔ Meters — ICAO meters-to-feet conversion table and China RVSM FLAS with directional filtering.
  • Crew Rest — Augmented operations rest calculator for 34 pilots. Equal-division sequential rest rotation with lock toggle to prevent accidental edits mid-flight.

Project Structure

app/src/main/
  assets/
    reference.json                    ← Flight levels, subgrade labels
    aircraft/
      G450.json                       ← Per-airframe data (auto-discovered)
      G500.json
      G650.json
      G700.json
  java/com/harshmallow/pilottoolkit/
    MainActivity.kt                   ← Entry point, DataLoader.init()
    data/
      AircraftData.kt                 ← Data classes, enums, calculations
      DataLoader.kt                   ← JSON parser from assets/
      FlightLevelData.kt              ← FlightLevelEntry class + DataLoader delegates
      FuelProfiles.kt                 ← Fuel profile storage (SharedPreferences)
    ui/
      PilotToolkitApp.kt              ← Navigation, tab bar, hamburger menu
      components/
        SharedComponents.kt           ← ToolkitTextField, ResultCard, ClearButton, etc.
      modules/
        FuelOrderModule.kt
        PavementModule.kt
        CrosswindModule.kt
        FuelBucketsModule.kt
        HFModule.kt
        PassdownModule.kt
        FlightLevelModule.kt
        CrewRestModule.kt
      theme/
        Color.kt                      ← ToolkitColors (light/dark palettes)
        Theme.kt                      ← ToolkitTheme composable

Data Architecture

All aircraft and reference data lives in JSON files under assets/. The DataLoader singleton parses these at app startup.

  • reference.json — Airframe-agnostic: meters-to-feet table (107 entries), China FLAS (50 entries), RVSM direction sets, pavement subgrade labels.
  • aircraft/*.json — One file per airframe: weight limits, ESWL config (formula or thresholds), PCN/PCR linear regression coefficients, fuel bucket schedules. Auto-discovered from the directory — adding a new airframe is just dropping a JSON file in assets/aircraft/.

Each aircraft file loads independently. A malformed file is logged and skipped — it does not crash the app or affect other airframes.

Storage

All persistent data uses SharedPreferences:

  • Default aircraft selection
  • Dark mode toggle
  • Volume unit preference
  • Passdown retention period
  • Passdown records (JSON serialization)
  • Autocomplete lookups (per field)
  • Fuel profiles (per aircraft)

Exchange Formats

  • .ptz — Gzipped JSON array of passdown objects. Exported via GZIPOutputStream, imported via GZIPInputStream. Open format.
  • Fuel profile JSON — Validated on import by format: "pilot-toolkit-fuel-profile" field.
  • Fuel profile CSV — Two columns (stage length, fuel burn), optional header row.

Dependencies

  • Kotlin
  • Jetpack Compose + Material3
  • org.json.JSONObject (built-in Android)
  • java.util.zip.GZIPOutputStream / GZIPInputStream (built-in Java)
  • No third-party libraries beyond standard Android/Compose dependencies

Build

Standard Android Studio project. Open the root directory in Android Studio, sync Gradle, and run.