A lot has happened since the last update on KDE Itinerary, with the transition to Qt 6 finally completed, public transport coverage extended to more countries, a new journey map view and many more fixes and improvements.

New Features

Journey map view

Mathis added a map view to the journey details page, so besides a list view of all stops you can now alternatively look at the route of a bus or train trip on a map as well.

Screenshot showing a map of the route of a train connection from Zürich HB to Visp.
Map view of a train connection.

Clicking on intermediate or final stops will show additional information such as the platform and provides access to the detailed station map.

Extended public transport coverage

Jonah has put quite some effort into filling the gaps in public transport data coverage in Europe, adding support for the following providers to the KPublicTransport library:

  • Pasažieru vilciens (Latvia)
  • LTG Link (Lithuania)
  • Željeznički prevoz Crne Gore (ŽPCG) (Montenegro)
  • Srbijavoz (Serbia)
Screenshot showing a train connection between Riga and Vilnius.
Journey search result for a train connections between Latvia and Lithuania.

This not only benefits Itinerary but also KTrip.

Swapping arrival and departure location

A small but often requested convenience feature for the journey search has been added, the ability to swap arrival and departure stations with a single action.

Screenshot showing a swap button between the arrival and departure station search fields.
Arrival/departure swap button in the upper right.

Infrastructure Work

Qt 6 port

Itinerary and all its dependencies finally completed the switch to Qt 6 in December. Despite the lengthy preparations for this a number of issues were only uncovered in the final steps of that process:

  • Kirigami’s new way of displaying context actions clashes with Itinerary’s custom navigation bottom bar.
  • Subtle changes in QVariant comparison behavior resulted in excessive timeline updates.
  • Various default values in Kirigami and/or the Qt Quick Controls styles changed affecting list elements, ListView clipping, dialog/overlay placements, etc.
  • There’s a behavior change for file dialog file type filters that lead to several support file types not being selectable on Android.
  • Behavior changes in how Kirigami handles non-square icons required changes in how we display public transport line icons.

There’s also immediate benefits from this of course:

  • Itinerary now uses the Breeze style on Android, which not only looks better but also reduces differences with the Linux version simplifying development and testing.
  • Qt 6 allowed us to optimize the initial data loading by skipping expensive CBOR/JSON compatibility checks.

Qt 6 based Flatpak and Android nightly builds

Users of the nightly builds already get the new Qt 6 based version. For Android that has been a seamless switch, Flaptpaks moved to a new location though:

flatpak install https://cdn.kde.org/flatpak/itinerary-nightly/org.kde.itinerary.flatpakref

With Itineray being one of the more complex Android apps of KDE switching that to Qt 6 also exposed a number of remaining issues in the entire stack:

  • Temporary content: URIs like used when sharing attachments from an email program to Itinerary were not readable by Qt anymore (fixed in Qt).
  • Timezone lookup by IANA id performance is rather poor with Qt 6, which affects startup time if you have lot of data in Itinerary (partially worked around, fix for Qt pending).
  • Reporting of flipped video frames in Qt Multimedia now works correctly on Android, resulting in a previous workaround for that causing upside-down barcode geometries (workaround removed in KF::Prison).
  • Qt Multimedia camera access crashed when being used after an app had been suspended (fixed in Qt).
  • Kirigami Addon’s new date and time picker didn’t correctly use Android’s native controls (fixed in Kirigami Addons).
  • Remaining uses of Qt5Compat andQt.labs.platform components in Kirigami and Kirigami Addons were removed, decreasing the APK size noticeably.

All of this also benefits other KDE Android apps.

Accessibility

Motivated by getting automated UI tests set up using the AT-SPI Selenium driver, interaction with Itinerary using the accessibility interface has been improved in many places. Besides changes in the application itself this has also resulted in improvements in Kirigami and Kirigami Addons and thus helping all apps using those.

There’s more work to do though, around combo boxes and the date picker for example.

And even though this is not yet integrated in the CI pipeline, the first few automated tests created that way have already caught regressions in the application and in the Kirigami framework.

OSM raw data tile server update

The fixes for OSM raw data tile server powering e.g. Itinerary’s train station maps addressing node order loss on directional lines as well as improving tile generation performance have now finally been deployed on maps.kde.org. This unblocks work on rendering directional features, and it’s also crucial for the investigations around routing mentioned below.

Indoor map routing

As mentioned in my report from 37C3 we now have a very promising looking approach for routing in our train station maps. Compared to “outdoor” routing this is challenging as this has to work with areas rather than graphs, and on multiple floors.

Implementation of a proof of concept continued and is meanwhile running integrated in our indoor map demo application.

Screenshot showing two parts of a route through Berlin central station, left side floor level 0 right side floor level 1, connected via escalators and stairs.
Multi-floor route through Berlin central station.

Fixes & Improvements

Travel document extractor

  • New or improved travel document extractors for Accor, B&B Hotels, BlaBlaBus, Deutsche Bahn, Egencia, Emirates, Hilton, Iberia, IRCTC, Lufthansa, Meininger, NS, Pretix, SNCB, SpiceJet.
  • Improved generic extractor for RCT2 tickets crossing the end-of-year boundary.
  • Improved generic extractor for schema.org JSON-LD or Microdata events.
  • Fix crash on action-less PDF links.
  • Improved support for full-day events.
  • Added schema.org annotations on foss.events making events from there directly importable.

All of this has been made possible thanks to your travel document donations!

Itinerary app

  • Improved support for actions defined by providers via schema.org annotations, such as registering for an event or reserving a table at an restaurants.
  • Onboard live data is now merged into the current journey state when available.
  • Automatically pick an appropriate text color for Apple Wallet passes that don’t specify a text color themselves but use a background image. This fixes passes sometimes being rendered unreadable under these conditions.
  • Fix manually selecting transfers in the timeline.
  • Request camera runtime permissions on Android when using the barcode scanner.
  • Move loading indicator out of the way once the first results of a public transport search are displayed.
  • Fixed public transport stop searches after changing the country combo box.
  • Fixed seat section in train page not sometimes showing up correctly.
  • Added average speed statistics on the journey page.
  • Fixed import of large backups on Android.

FOSDEM

FOSDEM 2024

If you are at FOSDEM tomorrow or the day after don’t miss to meet us at the KDE stand, in building H this time!

How you can help

Feedback and travel document samples are very much welcome, as are all other forms of contributions. The KDE Itinerary workboard or the more specialized indoor map workboard show what’s on the todo list, and are a good place for collecting new ideas. For questions and suggestions, please feel free to join us in the KDE Itinerary Matrix channel.