Skip to content

Instantly share code, notes, and snippets.

Avatar
💭
I may be slow to respond.

Osip Fatkullin osipxd

💭
I may be slow to respond.
View GitHub Profile
@osipxd
osipxd / .editorconfig
Last active June 3, 2023 09:29
EditorConfig for Android projects with mapping to IntelliJ IDEA's config
View .editorconfig
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
max_line_length = 120
@osipxd
osipxd / paper-versions.json
Last active May 28, 2023 17:58
Paper versions links
View paper-versions.json
{
"latest": "1.19.4",
"versions": {
"1.19.4": "https://api.papermc.io/v2/projects/paper/versions/1.19.4/builds/519/downloads/paper-1.19.4-519.jar",
"1.19.3": "https://api.papermc.io/v2/projects/paper/versions/1.19.3/builds/448/downloads/paper-1.19.3-448.jar",
"1.19.2": "https://api.papermc.io/v2/projects/paper/versions/1.19.2/builds/307/downloads/paper-1.19.2-307.jar",
"1.19.1": "https://api.papermc.io/v2/projects/paper/versions/1.19.1/builds/111/downloads/paper-1.19.1-111.jar",
"1.19": "https://api.papermc.io/v2/projects/paper/versions/1.19/builds/81/downloads/paper-1.19-81.jar",
"1.18.2": "https://api.papermc.io/v2/projects/paper/versions/1.18.2/builds/388/downloads/paper-1.18.2-388.jar",
"1.18.1": "https://api.papermc.io/v2/projects/paper/versions/1.18.1/builds/216/downloads/paper-1.18.1-216.jar",
@osipxd
osipxd / MakeDebuggableTask.kt
Last active March 6, 2023 11:18
The task to add debuggable=true to obfuscated Android builds
View MakeDebuggableTask.kt
package com.example.build
import org.gradle.api.DefaultTask
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction
/** Adds `android:debuggable="true"` to the manifest. */
abstract class MakeDebuggableTask : DefaultTask() {
@osipxd
osipxd / 1. Автоматизации и инфраструктура вместо рутины и бойлерплейта.md
Last active February 13, 2023 09:05
Автоматизации и инфраструктура вместо рутины и бойлерплейта
View 1. Автоматизации и инфраструктура вместо рутины и бойлерплейта.md

Автоматизации и инфраструктура вместо рутины и бойлерплейта

Материалы к докладу на митап red_mad_robot 15.12.2022

YouTube | Презентация

1. Качество кода

@osipxd
osipxd / DataStoreNullableSerializer.kt
Last active November 21, 2022 10:17
Base Serializer class to store nullable values in DataStore
View DataStoreNullableSerializer.kt
import androidx.datastore.core.DataStore
import androidx.datastore.core.Serializer
import java.io.InputStream
import java.io.OutputStream
abstract class NullableSerializer<T : Any> : Serializer<T?> {
override val defaultValue: T? = null
final override suspend fun readFrom(input: InputStream): T? {
@osipxd
osipxd / DataStoreSerializer.kt
Created November 21, 2022 10:13
DataStore Serializer using kotlinx-serialization
View DataStoreSerializer.kt
import androidx.datastore.core.DataStore
import androidx.datastore.core.Serializer
import kotlinx.coroutines.flow.first
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream
import kotlinx.serialization.json.encodeToStream
import java.io.InputStream
import java.io.OutputStream
/**
@osipxd
osipxd / CachingRxJava2CallAdapterFactory.kt
Last active September 15, 2022 07:41
Caching RxJava2 call adapter for Retrofit2
View CachingRxJava2CallAdapterFactory.kt
package retrofit2.adapter.rxjava2
import io.reactivex.Completable
import io.reactivex.Flowable
import io.reactivex.Maybe
import io.reactivex.Observable
import io.reactivex.Single
import retrofit2.Call
import retrofit2.CallAdapter
import retrofit2.Retrofit
View ServerErrorsInterceptor.kt
package io.example
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream
import okhttp3.Interceptor
import okhttp3.Response
import retrofit2.HttpException
import retrofit2.Invocation
import java.io.IOException
@osipxd
osipxd / 1. sign-app.sh
Last active August 13, 2022 21:23
Script to sign APK and AAB from command line
View 1. sign-app.sh
#!/usr/bin/env bash
#
# Script for APK and AAB signing.
#
# Usage: ./sign-app.sh <format> <path_to_app> <keystore_base64> <properties_base64>
#
# format - should be one of: apk or aab
# path_to_app - path to apk/aab file or '--auto' to automatically detect path
# keystore_base64 - Base64 encoded keystore file
# properties_base64 - Base64 encoded properties file. This file should contain:
@osipxd
osipxd / setLocale.kt
Last active March 31, 2022 09:49
Set locale in Android application
View setLocale.kt
import android.app.Activity
import android.app.Application
import android.content.ComponentCallbacks
import android.content.Context
import android.content.res.Configuration
import android.os.Build
import android.os.Bundle
import java.util.Locale
private const val LANGUAGE_RU = "ru"