Inspired on both Kotlin + buildSrc for Better Gradle Dependency Management and How to add Gradle dependencies using ‘foreach’
I've used _
as directory separator on file names since gists doesn't support full paths...
class DebounceLiveData<Source>( | |
private val source: LiveData<Source>, | |
private val debounceMs: Long | |
) : LiveData<Source>(), CoroutineScope { | |
private val job = SupervisorJob() | |
override val coroutineContext: CoroutineContext | |
get() = Dispatchers.Main + job | |
private var debounceJob: Job? = null | |
private val observer = Observer<Source> { source -> |
private inline fun <T> createBatchActor(context: CoroutineContext = CommonPool, | |
parent: Job? = null, | |
maxSize: Int = 100, | |
maxTime: Int = 500, | |
crossinline block: (List<T>) -> Unit): SendChannel<T> { | |
return actor(context, parent = parent) { | |
val batch = ArrayList<T>(maxSize) | |
var deadline = 0L // deadline for sending this batch to callback block | |
while(true) { |
class ChatRoomsFragment : Fragment() { | |
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | |
super.onViewCreated(view, savedInstanceState) | |
viewModel = ViewModelProviders.of(this, factory).get(ChatRoomsViewModel::class.java) | |
subscribeUi() | |
} | |
private fun subscribeUi() { |
package com.luciofm.playground | |
import android.text.TextPaint | |
import android.text.style.CharacterStyle | |
import android.text.style.UpdateAppearance | |
class AlphaSpan(var alpha: Int) : CharacterStyle(), UpdateAppearance { | |
override fun updateDrawState(ds: TextPaint) { | |
ds.alpha = alpha |
Inspired on both Kotlin + buildSrc for Better Gradle Dependency Management and How to add Gradle dependencies using ‘foreach’
I've used _
as directory separator on file names since gists doesn't support full paths...
/* | |
* Copyright 2018 Lucio Maciel, Rocket.Chat | |
* Copyright 2016 Serj Lotutovici | |
* | |
* 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 | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* |
import java.io.File; | |
import java.io.IOException; | |
import java.nio.charset.Charset; | |
import java.text.DateFormat; | |
import java.text.SimpleDateFormat; | |
import java.util.Date; | |
import java.util.Locale; | |
import java.util.TimeZone; | |
import okio.BufferedSource; | |
import okio.ByteString; |
apply from: 'versionCode.gradle' | |
android { | |
defaultConfig { | |
versionName VERSION_NAME | |
versionCode Integer.parseInt(VERSION_CODE) | |
} | |
} |
public class Pager<I, O> { | |
private static final Observable FINISH_SEQUENCE = Observable.never(); | |
private PublishSubject<Observable<I>> pages; | |
private Observable<I> nextPage = finish(); | |
private Subscription subscription = Subscriptions.empty(); | |
private final PagingFunction<I> pagingFunction; | |
private final Func1<I, O> pageTransformer; |
E Process: org.lucasr.twowayview.sample, PID: 7606 | |
E java.lang.NullPointerException: Attempt to read from field 'int org.lucasr.twowayview.widget.TWSpannableGridLayoutManager$SpannableItemEntry.rowSpan' on a | |
null object reference | |
E at org.lucasr.twowayview.widget.TWSpannableGridLayoutManager$SpannableItemEntry.access$100(TWSpannableGridLayoutManager.java:40) | |
E at org.lucasr.twowayview.widget.TWSpannableGridLayoutManager.getFirstChildCountInLanes(TWSpannableGridLayoutManager.java:223) | |
E at org.lucasr.twowayview.widget.TWSpannableGridLayoutManager.moveLayoutToPosition(TWSpannableGridLayoutManager.java:262) | |
E at org.lucasr.twowayview.widget.TWLanedLayoutManager.onLayoutChildren(TWLanedLayoutManager.java:236) | |
E at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1461) | |
E at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:1600) | |
E at android.view.View.layout(View.java:15273) |