Skip to content

Instantly share code, notes, and snippets.

View Skyyo's full-sized avatar
🇺🇦

Denis Rudenko Skyyo

🇺🇦
View GitHub Profile
@Skyyo
Skyyo / DensityExt.kt
Last active November 18, 2020 20:31
#extensions
package com.skyyo.ext
import android.content.res.Resources
fun Float.dp(): Float = this * density + 0.5f
fun Int.dp(): Int = (this * density + 0.5f).toInt()
fun Int.sp(): Float = (this * scaledDensity + 0.5f)
@Skyyo
Skyyo / appbar_auto_elevation.txt
Last active August 8, 2020 16:46
Simple way to auto elevate app bar on content scroll using material styles. #elevation
implementation 'com.google.android.material:material:1.3.0-alpha01'
<CoordinatorLayout
<AppBarLayout
style="@style/Widget.MaterialComponents.AppBarLayout.Surface"
app:liftOnScroll="true"/>
<RecyclerView
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
@Skyyo
Skyyo / view_auto_elevation.txt
Created August 8, 2020 17:43
Solution for dynamic elevation using RV/ScrollView state. #elevation
<View
android:id="@+id/view"
android:background="@color/colorAccent"
android:stateListAnimator="@animator/toolbar_elevator"/>
<-- res/animator/toolbar_elevator.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<objectAnimator
android:duration="350"
@Skyyo
Skyyo / InternetConnectionTracker.kt
Created August 10, 2020 17:43
Simple network tracker. #network_connection
object InternetConnectionTracker : LiveData<Boolean>() {
private val manager: ConnectivityManager by lazy {
Injector.get().appContext()
.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
}
private val netCallback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
postValue(true)
super.onAvailable(network)
@Skyyo
Skyyo / InternetConnectionTracker2.kt
Created August 10, 2020 17:45
Tracker for internet connection updates. #network_connection
object NetworkUtils : ConnectivityManager.NetworkCallback() {
private val networkLiveData: MutableLiveData<Boolean> = MutableLiveData()
override fun onAvailable(network: Network) {
networkLiveData.postValue(true)
}
override fun onLost(network: Network) {
networkLiveData.postValue(false)
@Skyyo
Skyyo / FragmentViewBindingDelegate.kt
Last active February 1, 2021 10:28
ViewBindingExtension
import android.view.View
import androidx.fragment.app.Fragment
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.Observer
import androidx.viewbinding.ViewBinding
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
@Skyyo
Skyyo / MiscExt.kt
Last active August 16, 2020 11:17
uncategorized extensions #extensions
fun String.emoji(): String =
String(Character.toChars(Integer.parseInt(replace("U+", ""), 16)))
inline fun <T> tryOrNull(f: () -> T) =
try {
f()
} catch (_: Exception) {
null
}
@Skyyo
Skyyo / FragmentExt.kt
Last active August 16, 2020 11:17
#extensions
import android.util.Log
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.fragment.app.Fragment
fun Fragment.shortToast(text: String) {
context ?: return
Toast.makeText(requireContext(), text, Toast.LENGTH_SHORT).show()
}
@Skyyo
Skyyo / CustomButtonGroup.kt
Last active August 16, 2020 11:21
Custom shaped Bottom Navigation element. Middle button doesn't have any graph attached, and the tap is handled inside NavExtensions.kt line 73. #navigation #view
import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import androidx.annotation.IdRes
import com.google.android.material.button.MaterialButton
@Skyyo
Skyyo / rvBottomSheet.kt
Last active August 16, 2020 11:21
rv as bottom sheet #bottom_sheet
val behavior = from(bottomSheetRv)
behavior.addBottomSheetCallback(object : BottomSheetCallback() {
override fun onStateChanged(
@NonNull bottomSheet: View,
newState: Int
) {
if (newState == STATE_EXPANDED) {
// In the EXPANDED STATE apply a new MaterialShapeDrawable with rounded cornes
val newMaterialShapeDrawable: MaterialShapeDrawable = createMaterialShapeDrawable(bottomSheetRv)
ViewCompat.setBackground(