Currency Converter

Simple Android app with Modern Android Development practice with openexchangerates api

✨ Demo

Main Screen AutoCompleteBox History Screen
  • It calculates currency conversion from selected currency to all other currencies.
  • Every currency conversion calculation will be recorded as history conversion.
  • It support offline mode and to limit bandwidth, the app won’t refetch remote data within 30 minutes.

? Stacks

  • Coroutines – Performing asynchronous code with sequential manner.
  • Kotlin Flow – Reactive streams based on coroutines that can emit multiple values sequentially.
  • Dagger Hilt – The DI framework which reduces the boilerplate.
  • ViewModel – Presenter with its semi data persistence behavior.
  • Jetpack Compose – Android modern toolkit for building native UI.
  • Compose Material 3 – Helping me present Material Design.
  • Compose Navigation Component – For single-activity architecture with Compose.
  • Retrofit – A type-safe HTTP client for Android.
  • Room – Save data in a local database and support to Kotlin Extensions and Coroutines.

? Architecture and Design Principles

This app adopts MVVM with Unidirectional flow (UDF) pattern. It follows S.O.L.I.D and The Clean Architecture to achieve maintainable, scalable and testable code base. Also the code base has been structured in multi-module project. Thanks to this architecture-template repository because initiation of this project used that template.


  • Delete history
  • Click history to load the conversion
  • Pagination in history screen
  • Integration Test
  • Splash screen

✍️ Author

? Stefanus Anggara

Feel free to ping me ?

? License

Copyright © 2023 - Stefanus Anggara

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
See the License for the specific language governing permissions and
limitations under the License.


View Github