Android-CleanArchitecture-Kotlin
Android-CleanArchitecture-Kotlin copied to clipboard
This is a movies sample app in Kotlin, which is part of a serie of blog posts I have written about architecting android application using different approaches.
[Here](https://medium.com/@trionkidnapper/recyclerview-more-animations-with-less-code-using-support-library-listadapter-62e65126acdb) is some explanation about why we must use **ListAdapter**. This project is so good. Thanks for this project and explanations. But if you use diffutil in adapter, you can...
For me this project is interesting because it is based on viewmodel pattern I see it uses livedata, observe: very cool! But I would have expected to see the binding...
Hello. The example here covers only fetching immutable data. But for me, the most challenging is creating and updating existing data. How to handle validation of mutable data, when there...
I learned a lot by reading this architecture. But in my real life project, viewmodel needs to run 2 or more usecases in prallel and join the result to update...
Do we need to cancel coroutine job in UseCase when ViewModel destroyed (onCleared())? As was done in previous implementation with Rx observables, which was disposed in Presenter.stop()
What do you think about returning LiveData instances directly from domain Layer? I'm asking it because the one of the best features of Room framework is the hability to observe...
Assertions made inside the observeForever block are always successful, even when they shouldn't. For example in MoviesViewModelTest, if i say that the first element poster is equals to "IronMannnn", it...
Regarding `NavigatorTest`: ```kotlin @Test fun `should forward user to movies screen`() { whenever(authenticator.userLoggedIn()).thenReturn(true) navigator.showMain(activityContext()) verify(authenticator).userLoggedIn() RouteActivity::class shouldNavigateTo MoviesActivity::class } ``` if you switch `MoviesActivity` with `LoginActivity` the test still passes
I like the approach overall. I have implemented a very similar pattern in my app and has been working fine. However, there is one use case that I never know...