Skip to content

Instantly share code, notes, and snippets.

View dmersiyanov's full-sized avatar

Dmitry Mersiyanov dmersiyanov

  • Moscow
View GitHub Profile
@dmersiyanov
dmersiyanov / Solution.java
Last active June 13, 2017 15:00
Решение задачи task1809 - Реверс файла. Считать с консоли 2 имени файла: файл1, файл2. Записать в файл2 все байты из файл1, но в обратном порядке. Закрыть потоки.
package com.javarush.task.task18.task1809;
/*
Реверс файла
*/
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
@dmersiyanov
dmersiyanov / Solution.java
Created June 16, 2017 10:45
Решение задачи task1821 - Встречаемость символов. Программа запускается с одним параметром — именем файла, который содержит английский текст. Посчитать частоту встречания каждого символа. Отсортировать результат по возрастанию кода ASCII.
package com.javarush.task.task18.task1821;
/*
Встречаемость символов
*/
import java.io.FileInputStream;
import java.util.Map;
import java.util.TreeMap;
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.InternalCoroutinesApi
import kotlinx.coroutines.channels.BroadcastChannel
@dmersiyanov
dmersiyanov / NonRemovePrefixTextChangedListener
Last active July 24, 2020 16:15
Handy solution to support non-removable prefix for https://github.com/RedMadRobot/input-mask-android library
import android.text.Editable
import android.text.TextWatcher
import android.widget.EditText
import com.redmadrobot.inputmask.MaskedTextChangedListener
import com.redmadrobot.inputmask.helper.AffinityCalculationStrategy
import com.redmadrobot.inputmask.model.Notation
class NonRemovePrefixTextChangedListener(
primaryFormat: String,
affineFormats: List<String> = emptyList(),
@dmersiyanov
dmersiyanov / InputModeLifecycleHelper.kt
Created May 23, 2020 10:10
Lifecycle-aware observer to change and preserve Android activity softInputMode
import android.view.Window
import android.view.WindowManager
import android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
fun Window?.getSoftInputMode(): Int {
return this?.attributes?.softInputMode ?: SOFT_INPUT_STATE_UNSPECIFIED
}
@dmersiyanov
dmersiyanov / PercentVisibleCardView.kt
Created April 28, 2022 10:17
PercentVisibleCardView
import android.content.Context
import android.util.AttributeSet
import android.view.ViewTreeObserver
import androidx.cardview.widget.CardView
import ru.dpd.core.extension.getViewVisibilityPercent
class PercentVisibleCardView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : CardView(context, attrs) {
@dmersiyanov
dmersiyanov / ConnectionStateManager.kt
Created May 25, 2022 08:29
ConnectionStateManager help observe network state on android with kotlin flow
import android.annotation.SuppressLint
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import android.os.Build
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
@dmersiyanov
dmersiyanov / RxRetryExtensions.kt
Last active May 25, 2022 08:31
Rx retry with delay operator
private const val REPO_DEFAULT_RETRY_COUNT = 5 // 62 sec total ~1 min
private val zipper = BiFunction { t: Throwable, u: Int -> Pair(t, u) }
fun Completable.networkStateRetry(retryAttempts: Int = REPO_DEFAULT_RETRY_COUNT): Completable =
retryWhen {
// retryAttempts + 1 для того чтобы была выброшена ошибка
it.zipWith(Flowable.range(1, retryAttempts + 1), zipper)
.flatMap { result ->
val delayTime = 1L * 2.0.pow(result.second.toDouble()).roundToLong()
return@flatMap (
@dmersiyanov
dmersiyanov / Manifest.xml
Last active May 25, 2022 08:32
Android sharing with image preview
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="appPackage">
<application
android:name=".app.App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
@dmersiyanov
dmersiyanov / RxConnectionChecker.kt
Last active May 25, 2022 08:35
RxConnectionCheckehelp observe network state on android with RxJava Subjects
import android.annotation.SuppressLint
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import android.os.Build
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.subjects.BehaviorSubject
import timber.log.Timber
import java.util.concurrent.atomic.AtomicInteger