Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View osipxd's full-sized avatar
💭
I may be slow to respond.

Osip Fatkullin osipxd

💭
I may be slow to respond.
View GitHub Profile
@osipxd
osipxd / FragmentContainerActivity.kt
Last active January 16, 2020 13:11
Activity wrapper for any fragment
package com.example
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import com.example.R
import com.example.BaseActivity
class FragmentContainerActivity : BaseActivity() {
@osipxd
osipxd / DI.kt
Last active April 12, 2020 10:07
Dagger AssistedInject + ViewModel
import com.squareup.inject.assisted.dagger2.AssistedModule
import dagger.Module
@Component(
modules = [ViewModelAssistedFactoriesModule::class] // <--- Add assisted module
)
interface SampleComponent {
fun inject(fragment: SampleFragment)
@osipxd
osipxd / paper-versions.json
Created May 14, 2018 06:39
Paper versions builds
{
"latest": "1.12.2",
"versions": {
"1.12.2": "lastSuccessfulBuild",
"1.11.2": "1104",
"1.10.2": "916",
"1.9.4": "773",
"1.8.8": "443"
}
}
@osipxd
osipxd / ViewModelFactory.kt
Created March 27, 2020 14:48
Dagger ViewModel Multibinding
class ViewModelFactory @Inject constructor(
private val providers: Map<Class<out ViewModel>, @JvmSuppressWildcards Provider<ViewModel>>
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
val provider = providers[modelClass]
?: providers.asIterable().find { modelClass.isAssignableFrom(it.key) }?.value
?: error("Unknown ViewModel class $modelClass")
return try {
@osipxd
osipxd / DetailsFragment.kt
Last active May 13, 2020 11:46
Partial view state rendering with LiveData transformations
class DetailsFragment : BaseFragment(R.layout.fragment_details) {
lateinit val viewModel: DetailsViewModel
// ...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onVewCreated(view, savedInstanceState)
// Assumed that viewModel initialized here
@osipxd
osipxd / ViewBinding.kt
Last active May 20, 2020 05:04
View binding extensions + delegate
/**
* Инфлейт ViewBinding заданного типа [T].
*
* В качестве родителя используется [ViewGroup], по умолчанию view прикрепляется к корню родителя.
* **ВАЖНО!** Для инфлейта вьюх с `merge` в корне нужно использовать только этот метод.
*/
inline fun <reified T : ViewBinding> ViewGroup.inflateViewBinding(
context: Context = this.context,
attachToRoot: Boolean = true
): T {
@osipxd
osipxd / SharedPreferencesMigration.kt
Last active May 27, 2020 14:36
SharedPreferences migration
import android.content.SharedPreferences
import androidx.core.content.edit
/**
* Бридж для обеспечения обратной совместимости при переименовании полей или файла [SharedPreferences].
*
* @param preferences Основной [SharedPreferences].
* @param migratingPreferences Дополнительный [SharedPreferences], поля из которого будут переноситься в
* [preferences], при чтении. По умолчанию используется [preferences], что соответствует случаю
* переименования полей внутри одного [SharedPreferences].
@osipxd
osipxd / idea_configs.sh
Created June 11, 2020 12:07
Simple scrimp to track/untrack .idea folder
#!/usr/bin/env bash
#
# Скрипт для работы со стандартным конфигом в папке .idea
#
# Использование:
# ./idea_configs <команда>
#
# Возможные команды:
# u, untrack - Git не будет учитывать изменения в папке .idea
# t, track - Git будет учитывать изменения в папке .idea
@osipxd
osipxd / Tooling.Tips&Tricks.key
Last active June 22, 2020 16:23
Tooling. Tips&Tricks - Presentation
This file has been truncated, but you can view the full file.
@osipxd
osipxd / AsyncPagingDataDifferTest.kt
Last active December 9, 2020 09:20
The snippet to show when update callback is called.
import androidx.paging.AsyncPagingDataDiffer
import androidx.paging.PagingData
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListUpdateCallback
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
val differ: AsyncPagingDataDiffer<String> by lazy {
AsyncPagingDataDiffer(
diffCallback = diffCallback,