Skip to content

Instantly share code, notes, and snippets.

@fleficher
fleficher / layout.xml
Created March 12, 2021 15:53
ViewBinding with include
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
android:id="@+id/mergeLayout"
layout="@layout/layout_merge" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include layout="@layout/layout_merge" />
</LinearLayout>
@fleficher
fleficher / layout_merge.xml
Last active March 12, 2021 15:50
Simple merge layout
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/titleLbl"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</merge>
@fleficher
fleficher / FragmentAutoClearedValueBinding.kt
Last active January 25, 2022 13:17
Fragment View Binding Delegate
class FragmentAutoClearedValueBinding<T : ViewBinding>(
val binder: (View) -> T
) : ReadOnlyProperty<Fragment, T>,
DefaultLifecycleObserver {
private var value: T? = null
override fun onDestroy(owner: LifecycleOwner) {
value = null // Clear reference.
}
@fleficher
fleficher / MainActivity.kt
Created March 12, 2021 13:56
Activity ViewBinding advanced
class MainActivity : AppCompatActivity() {
private val binding by viewBinding(ActivityMainBinding::inflate)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
}
}
@fleficher
fleficher / ActivityViewBinding.kt
Last active March 12, 2021 13:56
Activity ViewBinding simple
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
@fleficher
fleficher / CustomTask.kt
Created January 26, 2020 13:20
custom task with KTS
// Our custom task inside buildSrc folder
open class PingUrlTask : DefaultTask() {
@Input
lateinit var url: String
@TaskAction
fun updateTranslations() {
println("Begin task")
// In your buildSrc folder
sealed class BuildType(val secret: String) {
object DebugBuildType : BuildType(secret = "sword")
object ReleaseBuildType : BuildType(secret = "shield")
}
@fleficher
fleficher / BuildConfigFields.kt
Created December 24, 2019 17:18
build config fields KTX
// For flavors usage
fun BaseFlavor.buildConfigBoolean(name: String, value: Boolean) =
buildConfigField("Boolean", name, value.toString())
fun BaseFlavor.buildConfigString(name: String, value: String) =
buildConfigField("String", name, "\"$value\"")
// For build types usage
fun BuildType.buildConfigString(name: String, value: String) =
buildConfigField("String", name, "\"$value\"")
@fleficher
fleficher / Plugins.kt
Created December 24, 2019 16:47
Plugins declaration
fun PluginDependenciesSpec.androidApp(): PluginDependencySpec =
id("com.android.application")
fun PluginDependenciesSpec.androidLibrary(): PluginDependencySpec =
id("com.android.library")
fun PluginDependenciesSpec.kotlinAndroid(): PluginDependencySpec =
kotlin("android")
fun PluginDependenciesSpec.kotlinAndroidExt(): PluginDependencySpec =