Skip to content

Instantly share code, notes, and snippets.

@vorobeij
vorobeij / screenshot.sh
Created October 8, 2018 17:17
adb screenshot
adb exec-out screencap -p > ~/Pictures/screen.png
@vorobeij
vorobeij / ConfigGson.kt
Last active October 27, 2020 09:13
Gson interface adapter for "Register an InstanceCreator with Gson for this type may fix this problem"
object ConfigGson {
fun getGson() = GsonBuilder().apply {
registerTypeAdapter(Launchable::class.java, InterfaceAdapter<Launchable>())
registerTypeAdapter(Trigger::class.java, InterfaceAdapter<Trigger>())
}.create()
}
@vorobeij
vorobeij / CompundButton.kt
Last active August 25, 2018 21:00
State animations
class CompoundButton : BaseCompoundView {
override fun loadAttrs(attrs: AttributeSet) {
val styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.CompoundButton, 0, 0)
val iconStyleableId = R.styleable.CompoundButton_xxx
imageView.setImageDrawable(StateListDrawable().apply {
setFadeDuration(FADE_DURATION)
addState(STATE_ACTIVE, getDrawable(styledAttrs, iconStyleableId, colorActive))
addState(STATE_PRESSED, getDrawable(styledAttrs, iconStyleableId, colorLeftIconBacgroundPressed))
})
@vorobeij
vorobeij / BrowserTabsFragment.kt
Created August 20, 2018 14:38
RecyclerView swipe to delete behavior
val swipeCallback = object : ItemTouchHelper.Callback() {
override fun getMovementFlags(recyclerView: RecyclerView?, viewHolder: RecyclerView.ViewHolder?): Int {
return makeFlag(ItemTouchHelper.ACTION_STATE_SWIPE, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT)
}
override fun onMove(recyclerView: RecyclerView?, viewHolder: RecyclerView.ViewHolder?, target: RecyclerView.ViewHolder?): Boolean {
return true
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
@vorobeij
vorobeij / Translator.java
Created August 11, 2018 11:03
Google translator
package default;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import org.json.JSONArray;
public class Translator {
@vorobeij
vorobeij / RedditActivity.kt
Last active August 11, 2018 10:50
Swipe Refresh + OverScrollDecorator
import me.everything.android.ui.overscroll.IOverScrollState
import me.everything.android.ui.overscroll.OverScrollDecoratorHelper
OverScrollDecoratorHelper
.setUpOverScroll(list, OverScrollDecoratorHelper.ORIENTATION_VERTICAL).apply {
setOverScrollStateListener { decor, oldState, newState ->
when (newState) {
IOverScrollState.STATE_IDLE -> {
}
IOverScrollState.STATE_BOUNCE_BACK -> {
@vorobeij
vorobeij / SearchFragment.kt
Created August 9, 2018 12:51
ConstraintLayout transition animations
private val transition = AutoTransition().apply {
duration = 250
interpolator = AccelerateInterpolator()
}
private var cs = ConstraintSet()
override fun showSearchEngineIcon() {
cs.clone(searchViewConstraintLayout)
cs.connect(searchView.id, ConstraintSet.START, searchEngineIconImageView.id, ConstraintSet.END)
cs.setAlpha(searchEngineIconImageView.id, 1F)
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView 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:layout_height="wrap_content"
android:layout_marginBottom="@dimen/size_xsmall"
android:layout_marginEnd="@dimen/size_small"
android:layout_marginStart="@dimen/size_small"
package au.sj.sparrow.adblockwebview
import android.webkit.WebResourceRequest
import android.webkit.WebResourceResponse
import android.webkit.WebView
import android.webkit.WebViewClient
import okhttp3.HttpUrl
import java.io.ByteArrayInputStream
/**
open class BaseDiffCallback<T>(
var itemsOld: List<T> = listOf(),
var itemsNew: List<T> = listOf()
) : DiffUtil.Callback() {
lateinit var areItemsTheSame: ((oldItemPosition: Int, newItemPosition: Int) -> Boolean)
lateinit var areContentTheSame: ((oldItemPosition: Int, newItemPosition: Int) -> Boolean)
override fun getOldListSize(): Int = itemsOld.size