Skip to content

Instantly share code, notes, and snippets.

Anton Averin AAverin

Block or report user

Report or block AAverin

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View CleanAndroidCode :: Error Handling :: ResolvedSubscriber.kt
class ResolvedSubscriber<T> constructor(
val resolution: Resolution,
val onNextFunc: (T) -> Unit,
val onCompletedFunc: () -> Unit = {},
val onErrorFunc: (Throwable?) -> Unit = {}) : Subscriber<T>() {
override fun onNext(p0: T) {
if (!isUnsubscribed) {
onNextFunc(p0)
}
View CleanAndroidCode :: Error Handling :: 0 UIResolution.kt
open class UIResolution @Inject constructor(val uiResolver: UIResolver) : ResolutionByCase() {
override fun onConnectivityAvailable() {
uiResolver.hidePersistentSnackBar()
}
override fun onConnectivityUnavailable() {
uiResolver.showPersistentSnackBar(R.string.error_no_network_connection)
}
View CleanAndroidCode :: Error Handling :: Resolution.kt
interface RxHttpResolution {
fun onHttpException(httpException: HttpException)
fun onGenericRxException(t: Throwable)
}
interface NetworkConnectivityResolution {
fun onConnectivityAvailable()
fun onConnectivityUnavailable()
}
View CleanAndroidCode :: EventBus :: BusSubscriberTest.kt
@RunWith(PowerMockRunner::class)
@PrepareForTest(RxBus::class, CompositeSubscription::class, Observable::class)
class BusSubscriberTest {
@Mock lateinit var subscription: Subscription
@Mock lateinit var bus: RxBus
@Mock lateinit var observable: Observable<Any>
@Captor var subscriptionCaptor = ArgumentCaptor.forClass(Subscription::class.java)
View CleanAndroidCode :: EventBus :: 0 BusSubscriber.kt
interface BusSubscriberContract {
fun bus(bus: RxBus)
fun <T : Any> subscribe(clazz: KClass<T>, callback: (T) -> Unit)
fun unsubscribe()
}
open class BusSubscriber @Inject constructor() : BusSubscriberContract {
val subscriptions = mutableListOf<Subscription>()
View CleanAndroidCode :: EventBus :: RxBus.kt
open class RxBus {
private val bus = SerializedSubject<BusEvent, BusEvent>(PublishSubject.create());
fun post(event: BusEvent) {
bus.onNext(event)
}
fun <T> events(type: Class<T>): Observable<T> {
return events().ofType(type)
}
@AAverin
AAverin / KotlinRxExt.kt
Last active Apr 15, 2019
Kotlin Rx Extensions
View KotlinRxExt.kt
import rx.Observable
import rx.Observer
import rx.Subscriber
import rx.Subscription
import rx.functions.Action0
import rx.functions.Action1
fun <T> Observable<T>.uiSubscribe(schedulers: Schedulers, subscriber: Subscriber<in T>): Subscription {
return subscribeOn(schedulers.io)
.observeOn(schedulers.mainThread)
@AAverin
AAverin / ConsistencyManager.kt
Last active Oct 6, 2017
A simple consistency manager implementation on Kotlin. You can subscribe on some class changes, and notify subscribers about that class being updated. Convinient when you have data being displayed in many different places and you need it up to date any time it changes, eg. somebody is making item favorite and 'star' icons should update everywhere
View ConsistencyManager.kt
interface ConsistencyManagerContract {
fun notifyUpdateModel(model: Any)
fun notifyUpdateClass(kclass: KClass<*>)
fun subscribe(modelClass: KClass<*>, callback: WeakReference<(Any?) -> Unit>)
}
class ConsistencyManager : ConsistencyManagerContract {
private val subscriptionsMap: MutableMap<KClass<*>, MutableList<WeakReference<(Any?) -> Unit>>> = mutableMapOf()
override fun notifyUpdateModel(model: Any) {
@AAverin
AAverin / ConsistencyManager.kt
Created Jun 13, 2016
A simple consistency manager implementation on Kotlin.
View ConsistencyManager.kt
interface ConsistencyManagerContract {
fun notifyUpdateModel(model: Any)
fun notifyUpdateClass(kclass: KClass<*>)
fun subscribe(modelClass: KClass<*>, callback: WeakReference<(Any?) -> Unit>)
}
class ConsistencyManager : ConsistencyManagerContract {
private val subscriptionsMap: MutableMap<KClass<*>, MutableList<WeakReference<(Any?) -> Unit>>> = mutableMapOf()
override fun notifyUpdateModel(model: Any) {
You can’t perform that action at this time.