Giter VIP home page Giter VIP logo

airborne's Introduction

Airborne

android ios linux windows

Minimal aircraft management app for small groups.

Get it on Google Play Download on the App Store

Features

  • Aircraft reservations (booking)
  • Flight logbook

Screenshots

Android

Bookings - Agenda Bookings - Month Bookings - Edit Logbook - List Logbook - Edit Onboarding - Pilot

iOS

Bookings - Agenda Bookings - Month Bookings - Edit [Logbook - List [Logbook - Edit Onboarding - Pilot

Build

You can refer to Flutter documentation for build instructions. Currently supported platforms are:

  • Android
  • iOS
  • Linux
  • Windows

Backend

Everything is stored in the Google cloud and data access is achieved through Google API directly:

  • A Google Calendar for booking flights
  • A Google Sheets for logging flights

The app needs a specially crafted zip file containing, among other information, credentials for accessing to Google services. Documentation (in a very draft state) can be found in our backend guide (you can also track progress in the related issue).

Privacy

Airborne only uses Google services to store data on behalf of a service account you need to create in order to use the app. You can learn more at our very small privacy policy.

airborne's People

Contributors

daniele-athome avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

airborne's Issues

Disconnecting aircraft causes unchecked null value

[AppConfig] Selecting no aircraft

======== Exception caught by widgets library =======================================================
The following _CastError was thrown building Builder:
Null check operator used on a null value

The relevant error-causing widget was: 
  PlatformApp PlatformApp:file:///home/daniele/Development/flyroma/airborne-flutter/airborne/lib/main.dart:103:47
When the exception was thrown, this was the stack: 
#0      AppConfig.googleServiceAccountJson (package:airborne/helpers/config.dart:54:28)
#1      _MainNavigationState._rebuildServices (package:airborne/main.dart:190:34)
#2      _MainNavigationState.didUpdateWidget (package:airborne/main.dart:183:5)
#3      StatefulElement.update (package:flutter/src/widgets/framework.dart:4778:57)

Refresh aircraft data

A feature to download aircraft data again from the URL that was provided at install time. Maybe just ask for the password again (if it was previously provided or the server responds with 401).

Scheduling view progress and initial loading

  • progress spinner should be really blocking (e.g. a semi-opaque overlay should be applied)
  • initial loading and scrolling is really frustrating when there are few events
  • use month name fancy backgrounds (see library examples)

Flight log book view

  • read API for Google Spreadsheets + log book abstraction
  • basic list UI
  • aircraft data integration (google sheet ID and name, "no-name pilot", fuel types, ...)
  • real event loading
  • better handling of long pilot names in list view (especially the "no-name pilot")
  • helper indicators and error handling (first time error, infinite loading error)
  • be defensive when reading sheets data
  • i18n

Improve event box widget

  • Use a different color for each pilot (generated from name or photo or configured from aircraft data?) or maybe the avatar?
  • Show event notes in schedule (and day view?)
  • Show event times in week and day views

We'll need an appointmentBuilder. Be careful to overflows and text size and color.

Refine platform projects metadata

Fix and improve metadata in the platform-specific projects (app title and description, versions, icons, etc.).

  • Android
  • iOS
  • Linux
  • Windows

MacOS is not available yet.

Locale fixes

There are still some TODOs left about locale (e.g. dates, time, some numbers...).

iOS screenshots for iPad Pro (3rd gen) 12.9''

Just use the iPad screenshots, but we need to find a way to automate it (device is not supported by screenshots utility).

Also, divide the screenshots.yaml file into two files (one per platform, the screenshots utility doesn't like it).

Problems handling aircraft cache

There are some issues when refreshing an aircraft. Look out for "/tmp/aircrafts/aircraft" directory being read over and over.

Time zone issues

And the first time zone issues begin to appear :-)
Bookings made from the old app are not time zone compatible with the new app. Determine if it's our problem or a calendar's problem (or both).

About screen

A screen showing:

  • aircraft picture
  • aircraft picture takes some time loading: show something while loading
  • aircraft callsign
  • aircraft parking location with link for maps to the place
  • pilot names and avatars
  • logout/disconnect button (for returning to the install aircraft screen; it might require a full provider integration with AppConfig)
  • version information and links
  • Cupertino version
  • i18n

Activity journal

Split this issue into smaller ones after preliminary analysis and create a milestone.

A daily (as in timeline-like view) journal for maintenance notes, stuff to do, problems to solve (with a "solved" marker). Probably backed by a Google Sheet.

  • #60
  • Timeline view
  • Card list view
  • Backend storage
  • Show entry details (popup or full screen dialog)
  • Edit entry
  • Create entry
  • Mark entry as done
  • Filter entries
  • Due dates view (how? Maybe same as timeline view but sorted by due date?)
  • Expiration indicator in items (use specific colors for expired/not expired)
  • Server-side: automatic sort by date
  • Server-side: automatic sort by priority desc, date asc

More automated tests

Unit:

  • backend services
  • models (mainly bean tests, e.g. equality)

Widget:

  • hour meter widgets (mainly behavior)
  • ...?

Integration:

  • modal issue in book flight test (with conflict)
  • book flight: form fields
  • flight log: list view + create button appearance
  • flight log modal

Consider using golden tests.

Warn when booking is outside allowed hours

Use AIP notation (e.g. H24, HJ, HJ30, SR-SS ...) or some other notation in aircraft configuration to limit flight hours and warn the user when booking a flight. Beware events spanning multiple days (overnight hours should not be taken into consideration of course).
Calendar start and end times should be affected by this setting as well (approximately, e.g. before minimum sunrise and after maximum sunset).

Use a more Cupertino way for progress dialogs

  • investigate on a way to do this in a more iOS way (e.g. spinner only, no text)
  • there is a damn shadow below the dialog that I can't get rid of

This is a common feature so I'm not adding any feature label (but it is somewhat a bug).


https://api.flutter.dev/flutter/cupertino/CupertinoActivityIndicator-class.html
https://api.flutter.dev/flutter/cupertino/CupertinoPopupSurface/CupertinoPopupSurface.html
https://api.flutter.dev/flutter/cupertino/CupertinoAlertDialog-class.html
https://stackoverflow.com/a/59660740/1045199

Proper error handling

An error dialog showing "Future not completed" is really misterious (it's the TimeoutException).

  • loading events
  • save/update event
  • delete event
  • aircraft data download

Hour meter checks on input

When editing or adding a flight, if hour meter values don't match with previous and next flights (if any), warn the user before saving.
Beware of paging issues (a previous flight might have not been fetched yet).

Animation scale in Android

Flutter won't use provided value by the operating system for setting time dilation (see flutter/flutter#10101). Although there is a way to get these values apparently, starting API level 17:

I'm not sure which one to apply directly to timeDilation... and the transition scale should probably be applied only to transition animations (manually?)

Also open another bug to Flutter for this.


https://titanwolf.org/Network/Articles/Article?AID=304f1ee4-07a2-4138-85fb-a843c9ddb4bf

Go to booked date

After booking a new flight, move the calendar to the day/week/month of the booking that was just created (highlighting the new item would be a plus), keeping the current view mode.

Implicit scroll on iOS for fullscreen dialogs

Actually there isn't any explicit scroll either for CupertinoScaffolds (Material works though). Does it mean we always need a (SingleChild)ScrollView? What about pages with an implicitly scrollable view (e.g. ListView)?

Multiday events

The new appointment builder doesn't handle events spanning multiple days.

Flight log book editor

  • write API for Google Spreadsheets + log book abstraction
  • basic modal with form
  • fancy odometer fields
  • odometer popup dialog (Material)
  • Material form
  • Cupertino form
  • odometer popup dialog (Cupertino)
  • validation and save logic (+ admin checks)
  • delete logic
  • i18n

Smart booking start and end times

After activating the booking modal directly from a time slot in the calendar, when selecting a partially occupied slot, be sure to set the start and end time to avoid any conflict (and notify the user of the change with a tooltip or something).

Hide and show optional features

Aircraft data can be used to determine which features of the app to show. Already partially implemented, it needs to be refined and tested with all features.

Aircraft data account creation checklist

Soon to be developed into a nice tool ๐Ÿ˜Ž

Write down a checklist of stuff to do for creating the necessary account, API key, cloud objects and all for making the app work for a new aircraft. A preliminary checklist could be:

  • create management Google account (will be used for all of the following actions)
  • Google Cloud: API key for calendar and sheets
  • Google Cloud: service account
  • Google Calendar: new calendar owned by the management account or one the users (writable by service account)
  • Google Sheets: new spreadsheet owned by the management account or one the users (writable by service account)
  • Google Sheets: sheet automation (for now just #56)

These actions could probably be automated via some service account doing all the work... but one step at a time :-)

The Google Sheet has some stuff to be initialized... we could use a template or program it in the (future) tool:

  • create flight log sheet
    • first row (in bold): A1 should contain count formula, other colums are simple title headers
    • hour meter continuity check
    • automation scripts (just #56 for now)

Aircraft data file stricter validation

Use JSON Schema for the JSON parts and use stricter validation rules.

Also take the opportunity to refactor the download and parse code, especially the validation and open methods. There is also duplicate code between the about screen and the aircraft data screen.

Pilot background color

Give the chance to pilots to be assigned a color from the aircraft data file and use it to paint the background of events and maybe flights in the log book one day.

Filter flights

A filter view, opened from the right side, allowing filtering flights by:

  • pilot
  • start/end location
  • duration
  • date interval

Support for web platform

Some stuff needs to be refactored for web.

  • TZ data
  • use of dart:io for files
  • use of dart:io for HTTP
  • ...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.