From 1ee8f1b5a5f1ff3a9cfd097c63b6f78e48c725bd Mon Sep 17 00:00:00 2001 From: Kirill Nayduik Date: Tue, 29 Jun 2021 18:30:19 +0300 Subject: [PATCH] Add method findSuitableParent to get suitable parent view for custom snackbar --- .../main/java/ru/touchin/extensions/View.kt | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/kotlin-extensions/src/main/java/ru/touchin/extensions/View.kt b/kotlin-extensions/src/main/java/ru/touchin/extensions/View.kt index 5602cef..48f7085 100644 --- a/kotlin-extensions/src/main/java/ru/touchin/extensions/View.kt +++ b/kotlin-extensions/src/main/java/ru/touchin/extensions/View.kt @@ -2,6 +2,9 @@ package ru.touchin.extensions import android.os.Build import android.view.View +import android.view.ViewGroup +import android.widget.FrameLayout +import androidx.coordinatorlayout.widget.CoordinatorLayout import ru.touchin.utils.ActionThrottler const val RIPPLE_EFFECT_DELAY_MS = 150L @@ -22,3 +25,31 @@ fun View.setOnRippleClickListener(listener: () -> Unit) { setOnClickListener { listener() } } } + + +/** + * Used for finding suitable parent view for snackbar + * Method was taken from com.google.android.material.snackbar.Snackbar.findSuitableParent + */ +fun View?.findSuitableParent(): ViewGroup? { + var view = this + var fallback: ViewGroup? = null + do { + if (view is CoordinatorLayout) { + return view + } else if (view is FrameLayout) { + if (view.id == android.R.id.content) { + return view + } else { + fallback = view + } + } + + if (view != null) { + val parent = view.parent + view = if (parent is View) parent else null + } + } while (view != null) + + return fallback +}