Skip to content

Instantly share code, notes, and snippets.

View sanogueralorenzo's full-sized avatar
👋
Hello everyone!

Mario sanogueralorenzo

👋
Hello everyone!
View GitHub Profile
class UsersPostsUseCaseTest {
private lateinit var usersPostsUseCase: UsersPostsUseCase
private val mockUserRepository: UserRepository = mock()
private val mockPostRepository: PostRepository = mock()
private val userList = listOf(user)
private val postList = listOf(post)
@Singleton
class PostRepositoryImpl @Inject constructor(
private val cacheDataSource: PostCacheDataSource,
private val remoteDataSource: PostRemoteDataSource
) : PostRepository {
override fun get(refresh: Boolean): Single<List<Post>> =
when (refresh) {
true -> remoteDataSource.get()
.flatMap { cacheDataSource.set(it) }
@Module
abstract class RepositoryModule {
@Binds
abstract fun bindPostRepository(repository: PostRepositoryImpl): PostRepository
}
interface PostRepository {
fun get(refresh: Boolean): Single<List<Post>>
}
data class CombinedUserPost(val user: User, val post: Post)
class UsersPostsUseCase @Inject constructor(
private val userRepository: UserRepository,
private val postRepository: PostRepository
) {
fun get(refresh: Boolean): Single<List<CombinedUserPost>> =
Single.zip(userRepository.get(refresh), postRepository.get(refresh),
BiFunction { userList, postList -> map(userList, postList) })
# Android CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-android/ for more details
#
version: 2
jobs:
build:
working_directory: ~/Android-Kotlin-Clean-Architecture
docker:
- image: circleci/android:api-25-alpha
version: 2
jobs:
build:
working_directory: ~/code
docker:
- image: circleci/android:api-25-alpha
environment:
JVM_OPTS: -Xmx3200m
steps:
- checkout
class PostListActivity : AppCompatActivity() {
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_post_list)
getAppInjector().inject(this)
val vm = ViewModelProviders.of(this, viewModelFactory)[PostListViewModel::class.java]
class PostListViewModel @Inject constructor(private val usersPostsUseCase: UsersPostsUseCase) :
ViewModel() {
val posts = MutableLiveData<Resource<List<PostItem>>>()
private val compositeDisposable = CompositeDisposable()
fun get(refresh: Boolean = false) =
compositeDisposable.add(usersPostsUseCase.get(refresh)
.doOnSubscribe { posts.setLoading() }
.subscribeOn(Schedulers.io())
@Singleton
class ViewModelFactory @Inject constructor(private val viewModels: MutableMap<Class<out ViewModel>, Provider<ViewModel>>) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T = viewModels[modelClass]?.get() as T
}
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
@kotlin.annotation.Retention(AnnotationRetention.RUNTIME)
@MapKey
internal annotation class ViewModelKey(val value: KClass<out ViewModel>)