The goal of this challenge is to develop a simple Android application that displays a list of countries and their corresponding currency exchange rates to USD. The application should consist of two main screens:
- Display a list of all available countries.
- Each list item should include:
- Country name
- Country flag
- Currency name
- Currency symbol
- Tapping on an item should navigate to the second screen (Country Exchange Rates).
- Data source: Countries and Currencies API
- Not all countries have currency data available. Handle this case by displaying a placeholder message.
- Display the exchange rate of the selected country's currency to USD.
- Data source: Exchange Rate API
- Not all countries have exchange rate data available. Handle this case by displaying a placeholder message.
You are free to design the UI/UX, but the screens should include the elements mentioned above. The images below illustrate a basic layout concept (feel free to enhance it):
- The app should be built using Kotlin and support Android API level 24 or higher.
- Use any libraries or tools you find suitable.
-
The API for countries is already implemented using Retrofit. Refer to the following classes:
- CountriesApi: Defines the API endpoints for fetching country data.
- CountriesService: The service layer for interacting with the country API.
- CountriesResponse: The data model for parsing the country API response.
-
For the exchange rate API, only the interface and response model are provided. Feel free to implement the necessary functionality:
- ExchangeRateApi: Interface for the exchange rate API endpoints.
- ExchangeRateResponse: The data model for parsing the exchange rate API response.
- Focus on clean code and good architecture. Quality is key.
- Document your design choices, including any trade-offs or compromises due to time constraints.
- If you encounter limitations or areas that could be improved with more time, please note them in a README file.
- We suggest spending around 2 to 4 hours on this task, depending on your experience level.
- If you find yourself exceeding 6 hours, consider whether you are adding unnecessary complexity.
- Include a summary of your work, explaining what was prioritized and any TODOs for future improvements.
- Create a private Git repository from this template and invite the following users as collaborators:
@mohamadjaara
@vitorhugods
- Please ensure the repository remains private and do not share your solution publicly or with third parties.
Good luck! We look forward to seeing your implementation.
Please use this section to document your thought process, decisions made during implementation, and any trade-offs or challenges encountered. Feel free to include details on:
- The architecture pattern you chose and why.
- Any additional libraries or tools you used and their purpose.
- Testing strategy and coverage details.
- Any known issues, limitations, or areas for improvement.