From cd75b28b8f34714fda34552688af0af4dd817270 Mon Sep 17 00:00:00 2001 From: Jeff Boek Date: Tue, 9 Apr 2019 16:10:27 -0700 Subject: [PATCH] No longer require a viewgroup to use FenixSnackbar --- .../mozilla/fenix/browser/BrowserFragment.kt | 6 +-- .../mozilla/fenix/components/FenixSnackbar.kt | 38 ++++++++++++++++++- .../mozilla/fenix/utils/ItsNotBrokenSnack.kt | 1 - app/src/main/res/layout/fenix_snackbar.xml | 1 + 4 files changed, 40 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index 937ac60ef..b784d3c53 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -339,10 +339,8 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope { val guid = requireComponents.core.bookmarksStorage .addItem(BookmarkRoot.Mobile.id, session!!.url, session.title, null) launch(Main) { - context?.asActivity()?.window?.decorView - ?.findViewById(android.R.id.content)?.let { view -> FenixSnackbar.make( - view as ViewGroup, + view!!, Snackbar.LENGTH_LONG ) .setAction(getString(R.string.edit_bookmark_snackbar_action)) { @@ -355,7 +353,7 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope { ) } .setText(getString(R.string.bookmark_created_snackbar)) - }!!.show() + .show() } } } diff --git a/app/src/main/java/org/mozilla/fenix/components/FenixSnackbar.kt b/app/src/main/java/org/mozilla/fenix/components/FenixSnackbar.kt index 4bf69447d..7e5d14a82 100644 --- a/app/src/main/java/org/mozilla/fenix/components/FenixSnackbar.kt +++ b/app/src/main/java/org/mozilla/fenix/components/FenixSnackbar.kt @@ -9,7 +9,10 @@ import android.view.View import android.view.ViewGroup import com.google.android.material.snackbar.BaseTransientBottomBar import android.view.LayoutInflater +import android.widget.FrameLayout +import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.widget.TextViewCompat +import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.fenix_snackbar.view.* import org.mozilla.fenix.R import org.mozilla.fenix.ext.increaseTapArea @@ -48,13 +51,20 @@ class FenixSnackbar private constructor( } } + companion object { private const val minTextSize = 12 private const val maxTextSize = 18 private const val actionButtonIncreaseDps = 16 private const val stepGranularity = 1 - fun make(parent: ViewGroup, duration: Int): FenixSnackbar { + fun make(view: View, duration: Int): FenixSnackbar { + val parent = findSuitableParent(view) ?: run { + throw IllegalArgumentException( + "No suitable parent found from the given view. Please provide a valid view." + ) + } + val inflater = LayoutInflater.from(parent.context) val content = inflater.inflate(R.layout.fenix_snackbar, parent, false) @@ -63,6 +73,32 @@ class FenixSnackbar private constructor( it.duration = duration } } + + private fun findSuitableParent(_view: View?): ViewGroup? { + var view = _view + var fallback: ViewGroup? = null + + do { + if (view is CoordinatorLayout) { + return view + } + + if (view is FrameLayout) { + if (view.id == 16908290) { + return view + } + + fallback = view + } + + if (view != null) { + val parent = view.parent + view = if (parent is View) parent else null + } + } while (view != null) + + return fallback + } } } diff --git a/app/src/main/java/org/mozilla/fenix/utils/ItsNotBrokenSnack.kt b/app/src/main/java/org/mozilla/fenix/utils/ItsNotBrokenSnack.kt index 7b928fe68..8c7e3254b 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/ItsNotBrokenSnack.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/ItsNotBrokenSnack.kt @@ -13,7 +13,6 @@ import org.mozilla.fenix.ext.asActivity import org.mozilla.fenix.ext.components class ItsNotBrokenSnack(val context: Context) { - fun showSnackbar(issueNumber: String) { val rootView = context.asActivity()?.window?.decorView?.findViewById(android.R.id.content) as ViewGroup diff --git a/app/src/main/res/layout/fenix_snackbar.xml b/app/src/main/res/layout/fenix_snackbar.xml index 52d48a951..d5ac77ab6 100644 --- a/app/src/main/res/layout/fenix_snackbar.xml +++ b/app/src/main/res/layout/fenix_snackbar.xml @@ -33,6 +33,7 @@ android:letterSpacing="0.05" android:gravity="center" tools:text="This is a custom Snackbar text" + android:textAlignment="textStart" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@id/snackbar_btn" app:layout_constraintTop_toTopOf="parent"