Skip to content

Instantly share code, notes, and snippets.

View almozavr's full-sized avatar

Oleksii Malovanyi almozavr

  • Lviv, UA
View GitHub Profile
almozavr / DelegatingPagingSource.Kt
Created October 8, 2021 13:26
Link ContainerHost intent capabilities with the Paging library
package com.example.paging
import androidx.paging.PagingSource
import androidx.paging.PagingState
import org.orbitmvi.orbit.ContainerHost
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.simple.intent
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.coroutines.suspendCoroutine
almozavr / jacoco.gradle
Last active January 5, 2021 12:37
Gradle Jacoco config for Android (3.x plugin) with kotlin and custom excludes support
apply plugin: "jacoco"
jacoco {
toolVersion = deps.test.jacocoVersion
tasks.withType(Test) {
jacoco.includeNoLocationClasses = true
almozavr / UnsafeCast.kt
Created February 5, 2018 11:21
Custom UnsafeCast rule for detekt
package io.techery.detekt.extensions.rules
import io.gitlab.arturbosch.detekt.api.*
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.*
* Whitelist-able unsafe cast check. E.g.
* UnsafeCast:
#!/usr/bin/env groovy
def runBuild(String nodeName = null, notifyGithub = true, Closure<Void> job) {
if (nodeName) node(nodeName) { runBuildInternally(job, notifyGithub) }
else runBuildInternally(job, notifyGithub)
private def runBuildInternally(Closure<Void> job, boolean notifyGithub) {
withGithubNotifier(notifyGithub) {
decorateBuild {
almozavr /
Last active May 17, 2016 08:17
Timber logger service wrapper for Janet ActionService
public class TimberServiceWrapper extends ActionServiceWrapper {
private final String serviceTag;
public TimberServiceWrapper(ActionService actionService) {
this(actionService, null);
public TimberServiceWrapper(ActionService actionService, String tag) {
almozavr / build.gradle
Created May 5, 2016 12:14
AndroidTDDBootStrap app Flavor Dimensions test
* The MIT License (MIT)
* Copyright (c) 2016 Piasy
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
almozavr / gist:fc76f605c03822a3ee14
Created July 13, 2015 17:36
Sms intent builder
public static Intent newSmsIntent(Context context, String body, String... phoneNumber) {
Uri smsUri;
if (phoneNumber == null) {
smsUri = Uri.parse("smsto:");
} else {
smsUri = Uri.parse("smsto:" + Uri.encode(TextUtils.join(",", phoneNumber)));
Intent intent;
intent = new Intent(Intent.ACTION_SENDTO, smsUri);
almozavr / ModalUrl
Last active August 29, 2015 14:19
Modal which preserves unique url via query, best with with routeProvider's reloadOnSearch: false
angular.module("services").factory('ModalUrl', [
'$rootScope', '$modal', '$location', '$routeParams', '$window', '$timeout',
($rootScope, $modal, $location, $routeParams, $window, $timeout) ->
modalInstance = null
checkModal = () ->
modalParam = decodeURIComponent($routeParams.modal)
if (modalParam != 'undefined')
optionsParam = decodeURIComponent($routeParams.options)
if (optionsParam != 'undefined')
options = JSON.parse(optionsParam)
almozavr / AndroidPaletteCallback
Last active August 29, 2015 14:19 — forked from imminent/
Gist for a modified approach to integrating Palette with Picasso proposed by Jake Wharton for the interim while Picasso doesn't have a supported way to pass meta data along the pipeline. Fork provides diff RoundedImageView support
package your.package;
import android.widget.ImageView;
public abstract class AndroidPaletteCallback extends PaletteCallback<ImageView> {
public AndroidPaletteCallback(@NonNull ImageView imageView) {
almozavr /
Last active September 30, 2020 16:53
Parcelable helper to wrap object convertable with gson
public class ObjectGsonParceler {
private final Gson gson;
public ObjectGsonParceler(Gson gson) {
this.gson = gson;
public Parcelable wrap(Object instance) {
try {
String json = encode(instance);