diff --git a/app/src/main/java/org/mozilla/fenix/components/FenixSnackbarBehavior.kt b/app/src/main/java/org/mozilla/fenix/components/FenixSnackbarBehavior.kt index d1f3f767d0..8afa5327f4 100644 --- a/app/src/main/java/org/mozilla/fenix/components/FenixSnackbarBehavior.kt +++ b/app/src/main/java/org/mozilla/fenix/components/FenixSnackbarBehavior.kt @@ -60,18 +60,20 @@ class FenixSnackbarBehavior( currentAnchorId = dependency?.id ?: View.NO_ID val params = snackbar.layoutParams as CoordinatorLayout.LayoutParams - if (dependency == null || (dependency.id == R.id.toolbar && toolbarPosition == ToolbarPosition.TOP)) { - // Position the snackbar at the bottom of the screen. - params.anchorId = View.NO_ID - params.anchorGravity = Gravity.NO_GRAVITY - params.gravity = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL - } else { - // Position the snackbar just above the anchor. - params.anchorId = dependency.id - params.anchorGravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL - params.gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL + snackbar.post { + if (dependency == null || (dependency.id == R.id.toolbar && toolbarPosition == ToolbarPosition.TOP)) { + // Position the snackbar at the bottom of the screen. + params.anchorId = View.NO_ID + params.anchorGravity = Gravity.NO_GRAVITY + params.gravity = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL + snackbar.layoutParams = params + } else { + // Position the snackbar just above the anchor. + params.anchorId = dependency.id + params.anchorGravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL + params.gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL + snackbar.layoutParams = params + } } - - snackbar.layoutParams = params } } diff --git a/app/src/test/java/org/mozilla/fenix/components/FenixSnackbarBehaviorTest.kt b/app/src/test/java/org/mozilla/fenix/components/FenixSnackbarBehaviorTest.kt index 45de1cbca8..2607d79ce0 100644 --- a/app/src/test/java/org/mozilla/fenix/components/FenixSnackbarBehaviorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/FenixSnackbarBehaviorTest.kt @@ -9,6 +9,8 @@ import android.view.View import android.view.ViewGroup import android.widget.FrameLayout import androidx.coordinatorlayout.widget.CoordinatorLayout +import io.mockk.every +import io.mockk.mockk import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Before @@ -20,14 +22,20 @@ import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) class FenixSnackbarBehaviorTest { - private val snackbarParams = CoordinatorLayout.LayoutParams(0, 0) - private val snackbarContainer = FrameLayout(testContext) + private val snackbarContainer = mockk(relaxed = true) + private var snackbarLayoutParams = CoordinatorLayout.LayoutParams(0, 0) private val dependency = View(testContext) private val parent = CoordinatorLayout(testContext) @Before fun setup() { - snackbarContainer.layoutParams = snackbarParams + every { snackbarContainer.layoutParams } returns snackbarLayoutParams + every { snackbarContainer.post(any()) } answers { + // Immediately run the given Runnable argument + val action: Runnable = firstArg() + action.run() + true + } parent.addView(dependency) } @@ -235,17 +243,14 @@ class FenixSnackbarBehaviorTest { } private fun assertSnackbarPlacementAboveAnchor(anchor: View = dependency) { - assertEquals(anchor.id, snackbarContainer.params.anchorId) - assertEquals(Gravity.TOP or Gravity.CENTER_HORIZONTAL, snackbarContainer.params.anchorGravity) - assertEquals(Gravity.TOP or Gravity.CENTER_HORIZONTAL, snackbarContainer.params.gravity) + assertEquals(anchor.id, snackbarLayoutParams.anchorId) + assertEquals(Gravity.TOP or Gravity.CENTER_HORIZONTAL, snackbarLayoutParams.anchorGravity) + assertEquals(Gravity.TOP or Gravity.CENTER_HORIZONTAL, snackbarLayoutParams.gravity) } private fun assertSnackbarIsPlacedAtTheBottomOfTheScreen() { - assertEquals(View.NO_ID, snackbarContainer.params.anchorId) - assertEquals(Gravity.NO_GRAVITY, snackbarContainer.params.anchorGravity) - assertEquals(Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL, snackbarContainer.params.gravity) + assertEquals(View.NO_ID, snackbarLayoutParams.anchorId) + assertEquals(Gravity.NO_GRAVITY, snackbarLayoutParams.anchorGravity) + assertEquals(Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL, snackbarLayoutParams.gravity) } - - private val FrameLayout.params - get() = layoutParams as CoordinatorLayout.LayoutParams }