package com.alorma.github.emoji; import core.datasource.CacheDataSource; import core.datasource.CloudDataSource; import core.datasource.SdkItem; import core.repository.GenericRepository; import core.usecase.GenericUseCase; import java.util.List; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class EmojisPresenter { public EmojisPresenter() { } public Observable<List<Emoji>> getEmojis() { CacheDataSource<Void, List<Emoji>> cache = new EmojisCacheDataSource(); CloudDataSource<Void, List<Emoji>> api = new EmojisApiDataSource(null); GenericRepository<Void, List<Emoji>> repository = new GenericRepository<>(cache, api); GenericUseCase<Void, List<Emoji>> useCase = new GenericUseCase<>(repository); return useCase.execute(new SdkItem<>(null)) .map(SdkItem::getK) .filter(emojis -> emojis.size() > 0) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } public Observable<List<Emoji>> getEmojis(String filter) { Observable<List<Emoji>> emojis = getEmojis(); if (filter != null) { return emojis.flatMap(Observable::from).filter(emoji -> emoji.getKey().contains(filter.toLowerCase())).toList(); } return emojis; } }