Skip to content

Instantly share code, notes, and snippets.

View CristianMG's full-sized avatar
🎯
Focusing

Cristian CristianMG

🎯
Focusing
View GitHub Profile
@CristianMG
CristianMG / UseExample.kt
Created September 4, 2019 06:50
ImageLoader use for load from resources
imageLoader.resource {
resource { backgroundDrawable }
}.loadBackground(actionButton)
@CristianMG
CristianMG / TestImageLoader.kt
Last active September 4, 2019 06:52
Image loader from network use
// From resource
imageLoader.resource {
resource { backgroundDrawable }
}.loadBackground(actionButton)
//From network
imageLoader.network {
url { FAKE_IMAGE_URL }
error { PLACE_HOLDER_ID }
@RunWith(AndroidJUnit4::class)
class TestImageLoader : AutoCloseKoinTest() {
private val imageLoader: ImageLoader by inject()
@Before
fun before() {
loadKoinModules(testModule)
}
@CristianMG
CristianMG / ImageLoader.kt
Created August 7, 2019 14:36
Enveloped to load images
class ImageLoader(val context: Context, val networkLoader: LoaderImageNetwork) {
fun network(init: FromNetwork.() -> Unit): FromNetwork {
return FromNetwork(init)
}
fun resource(init: FromResource.() -> Unit): FromResource {
return FromResource(init)
}
@CristianMG
CristianMG / .kt
Last active June 8, 2019 09:15
Android paging Network + Database 1+2 snippet
@Transaction
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertAll(list: List<CharacterEntity>): Completable
@Query("""
SELECT * FROM character ORDER BY name ASC
""")
fun getAllPaged(): DataSource.Factory<Int, CharacterEntity
@CristianMG
CristianMG / .kt
Created June 8, 2019 08:46
Android paging Network + Database 7 snippet
private fun initAdapter() {
rvCharacters.layoutManager = layoutManager
rvCharacters.adapter = adapter
rvCharacters.setHasFixedSize(true)
viewModel.dataSource
.observe(this, Observer {
adapter.submitList(it)
})
@CristianMG
CristianMG / .kt
Created June 8, 2019 08:45
Android paging Network + Database 6 snippet
class MainViewModel(
private val characterRepository: CharacterRepository
) : ViewModel() {
private val listing: LiveData<Listing<CharacterModel>> by lazy {
liveData(characterRepository.getListable())
}
private val boundaryCallback = switchMap(listing) { it.getBoundaryCallback() }!!
@CristianMG
CristianMG / .kt
Created June 8, 2019 08:44
Android paging Network + Database 5 snippet
override fun getListable(): Listing<CharacterModel> {
return object : Listing<CharacterModel> {
/** Create the boundary callback **/
val bc: GenericBoundaryCallback<CharacterModel> by lazy {
GenericBoundaryCallback(
{ dao.deleteAll() },
{ character(it, SIZE_PAGE) },
{ insertCharacters(it) },
SIZE_PAGE
@CristianMG
CristianMG / .kt
Last active June 8, 2019 08:44
Android paging Network + Database 4 snippet
/**
* For a clean architecture
* encapsulated all methods for paginate in this class
*
* For more information
* @see https://github.com/googlesamples/android-architecture-components/blob/master/PagingWithNetworkSample
**/
interface Listing<T> {
fun getBoundaryCallback(): LiveData<GenericBoundaryCallback<T>>
fun getDataSource(): LiveData<PagedList<CharacterModel>>
@CristianMG
CristianMG / .kt
Created June 8, 2019 08:36
Android paging Network + Database 3 snippet
override fun characters(offset: Int, sizePage: Int): Single<List<CharacterEntity>> {
val ts = apiInf.ts
return retrofit.create(NetworkCalls::class.java)
.getCharacters(ts, apiInf.publicApiKey, apiInf.getHash(ts), offset, sizePage,"name")
.subscribeOn(Schedulers.io())
.map { it.getDataOrError().results }
}