No longer require a viewgroup to use FenixSnackbar

nightly-build-test
Jeff Boek 6 years ago
parent b6abccfb91
commit cd75b28b8f

@ -339,10 +339,8 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope {
val guid = requireComponents.core.bookmarksStorage val guid = requireComponents.core.bookmarksStorage
.addItem(BookmarkRoot.Mobile.id, session!!.url, session.title, null) .addItem(BookmarkRoot.Mobile.id, session!!.url, session.title, null)
launch(Main) { launch(Main) {
context?.asActivity()?.window?.decorView
?.findViewById<View>(android.R.id.content)?.let { view ->
FenixSnackbar.make( FenixSnackbar.make(
view as ViewGroup, view!!,
Snackbar.LENGTH_LONG Snackbar.LENGTH_LONG
) )
.setAction(getString(R.string.edit_bookmark_snackbar_action)) { .setAction(getString(R.string.edit_bookmark_snackbar_action)) {
@ -355,7 +353,7 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope {
) )
} }
.setText(getString(R.string.bookmark_created_snackbar)) .setText(getString(R.string.bookmark_created_snackbar))
}!!.show() .show()
} }
} }
} }

@ -9,7 +9,10 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import com.google.android.material.snackbar.BaseTransientBottomBar import com.google.android.material.snackbar.BaseTransientBottomBar
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.FrameLayout
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.widget.TextViewCompat import androidx.core.widget.TextViewCompat
import com.google.android.material.snackbar.Snackbar
import kotlinx.android.synthetic.main.fenix_snackbar.view.* import kotlinx.android.synthetic.main.fenix_snackbar.view.*
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.ext.increaseTapArea import org.mozilla.fenix.ext.increaseTapArea
@ -48,13 +51,20 @@ class FenixSnackbar private constructor(
} }
} }
companion object { companion object {
private const val minTextSize = 12 private const val minTextSize = 12
private const val maxTextSize = 18 private const val maxTextSize = 18
private const val actionButtonIncreaseDps = 16 private const val actionButtonIncreaseDps = 16
private const val stepGranularity = 1 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 inflater = LayoutInflater.from(parent.context)
val content = inflater.inflate(R.layout.fenix_snackbar, parent, false) val content = inflater.inflate(R.layout.fenix_snackbar, parent, false)
@ -63,6 +73,32 @@ class FenixSnackbar private constructor(
it.duration = duration 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
}
} }
} }

@ -13,7 +13,6 @@ import org.mozilla.fenix.ext.asActivity
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
class ItsNotBrokenSnack(val context: Context) { class ItsNotBrokenSnack(val context: Context) {
fun showSnackbar(issueNumber: String) { fun showSnackbar(issueNumber: String) {
val rootView = val rootView =
context.asActivity()?.window?.decorView?.findViewById<View>(android.R.id.content) as ViewGroup context.asActivity()?.window?.decorView?.findViewById<View>(android.R.id.content) as ViewGroup

@ -33,6 +33,7 @@
android:letterSpacing="0.05" android:letterSpacing="0.05"
android:gravity="center" android:gravity="center"
tools:text="This is a custom Snackbar text" tools:text="This is a custom Snackbar text"
android:textAlignment="textStart"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/snackbar_btn" app:layout_constraintEnd_toStartOf="@id/snackbar_btn"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"

Loading…
Cancel
Save