mirror of
https://github.com/AdrianKuta/android-challange-adrian-kuta.git
synced 2025-07-01 15:47:59 +02:00
130 lines
4.7 KiB
Markdown
130 lines
4.7 KiB
Markdown
# 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 didn’t 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, it’s 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 © Ryanair Labs
|