Skip to content

Instantly share code, notes, and snippets.

View Jeevuz's full-sized avatar

Vasili Chyrvon Jeevuz

View GitHub Profile
@Jeevuz
Jeevuz / RxPM vs MVP
Last active April 5, 2017 19:36
Real project's part converted from MVP (with Moxy) into RxPM (with Outlast). See revisions diff.
This is real project screen with complex UI that was switched
from using the MVP with Moxy library
to the use of RxPM pattern (Reactive Presentation Model) with Outlast library (persistent PM layer).
I was doing it to see pros and cons of the RxPM pattern.
Pros:
- easy integration with RxBindings for complex UI.
- nice saved states in PM (for PM and MVVM lovers).
- easy combining of reactive streams coming from network, db, etc. in PM.
@Jeevuz
Jeevuz / SpinnerWithHintAdapter.java
Created June 20, 2017 14:47
Adapter for spinner with hint
/**
* @author Vasili Chyrvon (vasili.chyrvon@gmail.com)
*/
class SpinnerWithHintAdapter(context: Context, @LayoutRes resource: Int, @StringRes hintResId: Int) : ArrayAdapter<String>(context, resource) {
private val hintColor by lazy { getHintColorAttribute() }
private var textColors: ColorStateList? = null
private val hint by lazy { context.getString(hintResId) }
override fun isEnabled(position: Int): Boolean {
@Jeevuz
Jeevuz / CurlLoggingInterceptor.java
Last active January 16, 2018 05:36 — forked from jgilfelt/CurlLoggingInterceptor.java
An OkHttp interceptor that logs requests as curl shell commands
/*
* Copyright (C) 2016 Jeff Gilfelt.
*
* 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
*
* Unless required by applicable law or agreed to in writing, software
@Jeevuz
Jeevuz / KoinExtensions.kt
Last active June 25, 2018 15:58
Helpers for Koin (0.9.3)
package ru.mobileup.midhub.extension
import org.koin.android.ext.koin.androidApplication
import org.koin.core.bean.BeanDefinition
import org.koin.core.bean.Definition
import org.koin.dsl.context.Context
import org.koin.dsl.module.Module
import org.koin.dsl.module.applicationContext
/**
class NullableBooleansTest {
enum class Result { OK, NOT }
private fun testNullableBooleanWhen(
nullableBoolean: Boolean?,
check: (Boolean?) -> Boolean,
resulting: Result
) {
val result = if (check(nullableBoolean)) {
@Jeevuz
Jeevuz / SchedulersRule
Last active December 17, 2019 10:24
Test Rule to test the classes with rx shedulers
class SchedulersRule(private val useTestScheduler: Boolean = false) : ExternalResource() {
private lateinit var _testScheduler: TestScheduler
val testScheduler: TestScheduler
get() {
if (!useTestScheduler) throw IllegalStateException("TestScheduler is switched off.")
return _testScheduler
}
@Jeevuz
Jeevuz / EnterStringDialogFragment.kt
Last active October 26, 2020 09:10
Universal DialogFragments
package ru.mobileup.businessnavigator.ui.base.dialog
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.support.annotation.LayoutRes
import android.support.annotation.StringRes
import android.support.v7.app.AlertDialog
import android.support.v7.app.AppCompatDialogFragment
import android.text.Editable
import android.content.Context
import android.util.AttributeSet
import android.view.View
import androidx.core.content.withStyledAttributes
class MyCustomView(
context: Context,
attrs: AttributeSet? = null
) : View(context, attrs) {
init {
@Jeevuz
Jeevuz / Extensions.kt
Last active January 3, 2023 10:25
Here I collect some of my most useful Kotlin extensions
inline fun SharedPreferences.edit(changes: SharedPreferences.Editor.() -> SharedPreferences.Editor) {
edit().changes().apply()
}
fun ImageView.tintSrc(@ColorRes colorRes: Int) {
val drawable = DrawableCompat.wrap(drawable)
DrawableCompat.setTint(drawable, ContextCompat.getColor(context, colorRes))
setImageDrawable(drawable)
if (drawable is TintAwareDrawable) invalidate() // Because in this case setImageDrawable will not call invalidate()
}
@Jeevuz
Jeevuz / isDeviceLocked.java
Created September 20, 2016 10:41
Check device is currently locked
/**
* Returns true if the device is locked or screen turned off (in case password not set)
*/
public static boolean isDeviceLocked(Context context) {
boolean isLocked = false;
// First we check the locked state
KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
boolean inKeyguardRestrictedInputMode = keyguardManager.inKeyguardRestrictedInputMode();