Skip to content

Instantly share code, notes, and snippets.

@dimsuz
dimsuz / button_bar_android.xml
Created November 6, 2013 11:01
Android Button Bar
<LinearLayout
android:id="@+id/buttonArea"
style="?android:attr/buttonBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="bottom|right"
android:orientation="horizontal"
android:padding="5dp" >
package com.example.observable_queue;
import android.support.annotation.Nullable;
import java.util.Arrays;
import rx.Observable;
import rx.Scheduler;
import rx.android.schedulers.AndroidSchedulers;
import rx.subjects.BehaviorSubject;
@dimsuz
dimsuz / Optional.kt
Created May 15, 2017 10:04
Optional in Kotlin
sealed class Optional<out T> {
data class Just<out T>(val element: T): Optional<T>()
object None: Optional<Nothing>()
}
@dimsuz
dimsuz / image.svg
Created July 27, 2017 11:42
image.svg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@dimsuz
dimsuz / RenameIds.hs
Created January 10, 2018 22:14
Refactoring script to port to kotlin view extensions
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Turtle
import Prelude hiding (FilePath)
import qualified Data.Text as T
import qualified Control.Foldl as Fold
import Data.Maybe
import Control.Monad (filterM)
@dimsuz
dimsuz / ObservableLceFilterDelay.kt
Last active November 6, 2019 18:08
RxJava2 operator which adjusts items of an LCE (loading-content-error) stream so that L (loading) and C/E (content/error) items are not emitted close to each other. This is a reactive state alternative to Android's ContentLoadingProgressBar: https://developer.android.com/reference/android/support/v4/widget/ContentLoadingProgressBar.html
package com.dimsuz.lcefilterdelay
import io.reactivex.Observable
import io.reactivex.ObservableSource
import io.reactivex.Observer
import io.reactivex.Scheduler
import io.reactivex.disposables.Disposable
import io.reactivex.exceptions.Exceptions
import io.reactivex.internal.disposables.DisposableHelper
import io.reactivex.internal.fuseable.SimpleQueue
@dimsuz
dimsuz / test_layout.xml
Created February 9, 2018 14:18
ConstraintLayout-beta5 bug
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:background="#f2f2f2"
android:layout_height="wrap_content">
<!-- notice margin top + bottom here -->
<ImageView
package com.dimsuz.diffdispatcher.sample;
import java.lang.Override;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public final class UserInfoViewStateDiffDispatcher_Generated implements UserInfoViewStateDiffDispatcher {
private final UserInfoRenderer receiver;
public UserInfoViewStateDiffDispatcher_Generated(UserInfoRenderer receiver) {
@dimsuz
dimsuz / ViewStateDispatcher.kt
Last active March 18, 2018 16:30
Example of generated ViewStateDispatcher
class ViewStateRendererDispatcher(private val receiver: ViewStateRenderer) {
fun dispatch(viewState: ViewState, previousViewState: ViewState?) {
if (viewState.users != previousViewState?.users) {
receiver.renderUsers(viewState.users)
}
if (viewState.categories != previousViewState?.categories
|| viewState.users != previuosViewState?.users) {
receiver.renderCategories(viewState.categories, viewState.users)
}
if (viewState.showProgressBar != previousViewState?.showProgressBar
@dimsuz
dimsuz / MyFragmentOrActivity.kt
Last active March 18, 2018 16:30
Example of generated dispatcher usage
class MyFragmentOrActivity : BaseActivityOrFragment, ViewStateRenderer {
private val renderDispatcher = ViewStateDiffDispatcher.Builder()
.target(this) // <-- a class wich implements ViewStateRenderer and will receive render calls
.build()
private var previousViewState: ViewState? = null
fun render(viewState: ViewState) {
renderDispatcher.dispatch(viewState, previousViewState)