Files
2025-06-16 09:37:26 +02:00

130 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Android challenge
## The task
We would like you to build an app to search for flights.
You are provided with a codebase containing a bit of code so that you can start working on the task
faster. It
includes some parts of the UI, basic network layer implementation with DTOs & DI setup. Feel free to
modify any file
you find in the repo this is only there to help you out.
Please develop an Android app with the following requirements:
---
### Search screen
* User can search for flights with the following criteria:
* Origin & destination station
* Departure date
* Number of adults, teen & children
* Destination can only be selected after picking origin
* All fields need to be filled to make a search
* Number of adults must be greater than 0
### Station search screen
* User can select a station from a list
* Stations are grouped by country (country name to be shown before each group)
* User can use search field to filter the airports list
* Screen works with 2 configurations
* Origin selection all stations are available for selection
* Destination selection only stations to which we can travel from origin selection are
available for selection
### Results screen
* A list of results for the specified search criteria is shown
* Show only the crucial information about the trip
* Make sure to handle network errors and empty results
___
**URLs:**
* for `AirportService` and `RoutesService`: <https://services-api.ryanair.com/>
* for `FlightService`: <https://nativeapps.ryanair.com/api/>
*Tip: For test purposes try DUB (Dublin) STN (London Stansted) route it has flights every day.*
---
### What we expect from you
* Architecture for both domain and UI layer. Please avoid using framework libraries if possible.
* Use `kotlinx.coroutines` library. Do not use Live Data.
* Squeeze all the best from Kotlin!
* UI part is not crucial, we would more appreciate better code than great design in this task.
* Creativity - shine in areas you are best!
* Understanding of your solution.
### Questions for you
Please submit the answers to the following questions in the README.md file
* _How long did you spend on the task?_
~16h
* _Rate from 0-10, how would you assess the complexity of the task? _0 - very trivial_, _10 -
extremely complex__
Difficulty - 2
Complexity - 7
* _If you had more time (or if you were doing it in production) what would you have
changed/improved?_
* I would remove hardcoded text values.
* I would add more tests.
* Improve `Cache`, to use also Room as cache e.g. for Airports, instead of memory cache. Right
there is no refresh mechanism for cache.
* Improve sort and group logic for Stations
* Of course UI, it can be more adaptive. Split UI implementation into smaller reusable
Composables.
* _Which parts of the code would you like to highlight?_
* App architecture - multimodularity, separation of concerns, etc.
* _In your opinion, which Google library was the best addition to the Android Dev world in the last
years?_
* In my opinion, Jetpack Compose has been the most impactful and transformative Google library
added to Android development in recent years.
> If you have the need to comment the provided task, we would love to hear that from you 🙂
>
> The idea behind the task was quite straightforward, and I didnt encounter any major difficulties
> during the implementation.
> However, given the limited time, I had to make some compromises, and the current solution is
> certainly not perfect — a keen eye might spot some flaws. That said, I hope to demonstrate that the
> application is well thought out in terms of its architecture, which was my main focus.
> Each area — UI, Domain, and Model — has its own dedicated space with appropriate layers of
> abstraction and dependency injection. In short, its a compact example of applying SOLID principles
> in practice.
### Time frame
You have __4 days__ to submit your solution. There is no need to spend more than 12 hours on the
task as we don't seek perfection.
Focus on the key areas of Android development
---
#### Please fork this repository. After finishing a task, create pull request to the parent repository
``main`` branch.
You are allowed to use AI tools to assist with this programming task. However, you will be asked to
explain your solutions in detail.
---
In case of any questions feel free to drop us an email at _AndroidDevelopers@ryanair.com_ any time.
<img src="https://4.bp.blogspot.com/-NnAkV5vpYuw/XNMYF4RtLvI/AAAAAAAAI70/kdgLm3cnTO4FB4rUC0v9smscN3zHJPlLgCLcBGAs/s1600/Jetpack_logo%2B%25282%2529.png" height=150 width=150>
Fly high!
___
### COPYRIGHTS
Copyright licensed by &copy; Ryanair Labs