This is intended to be a simple project to help us get to know your experience with Android development. The goal is to create a simple one screen Android application that can satisfy the following use cases:
- Display a list of transit stops, sorted by proximity to the user's current location, closest stop first.
- If the user's current location cannot be obtained, display the stops alphabetized by stop name.
- For each list item, render what you think is important data from the file. Be prepared to make your case for what should be shown, put yourself in the shoes of a transit user.
- Ensure that TalkBack announces the stop name using the tts_stop_name column.
- Support a refresh button. This button should reload the stops and use the user's latest location (if available).
- Show an error if the stops cannot be loaded.
The transit stops are defined in the included stops.txt file (app/src/main/res/raw/stops.txt). The structure of this file is defined here: https://developers.google.com/transit/gtfs/reference#stopstxt. If you want to use stops from your own local transit system, feel free to replace stops.txt with a different file you downloaded (many transit systems provide a link on their website to download their static GTFS data).
The hope is that this takes you a few hours, feel free to take your time and spread the work over a few days.
- Must be written in Kotlin or Java.
- Must use XML layout.
- Does not need authentication, localization, unit tests, or UI tests.
- The stops file must not be loaded on the main UI thread. Be prepared to show or discuss how you would load the same file (or some other representation of the contents of that file) over a network.
While this is intended to be a relatively simple exercise, carefully consider what libraries, widgets, patterns, and techniques you use. At the same time, avoid over-architecting the application, we consider ourselves pragmatists here at TripShot.
The expectation for the following items is that you search around for some algorithms/approaches. Be prepared to describe an approach you would take, but do not implement them.
- How could you efficiently find the closest stop given a very large data set?
- How could you render a large number of stops on a map?