summaryrefslogtreecommitdiffstats
path: root/mobile/android/focus-android/app/src/test/java/org/mozilla/focus/browser/integration
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/focus-android/app/src/test/java/org/mozilla/focus/browser/integration')
-rw-r--r--mobile/android/focus-android/app/src/test/java/org/mozilla/focus/browser/integration/FullScreenIntegrationTest.kt134
1 files changed, 131 insertions, 3 deletions
diff --git a/mobile/android/focus-android/app/src/test/java/org/mozilla/focus/browser/integration/FullScreenIntegrationTest.kt b/mobile/android/focus-android/app/src/test/java/org/mozilla/focus/browser/integration/FullScreenIntegrationTest.kt
index 3f9d9270c4..69b7a031b4 100644
--- a/mobile/android/focus-android/app/src/test/java/org/mozilla/focus/browser/integration/FullScreenIntegrationTest.kt
+++ b/mobile/android/focus-android/app/src/test/java/org/mozilla/focus/browser/integration/FullScreenIntegrationTest.kt
@@ -8,7 +8,9 @@ import android.app.Activity
import android.content.res.Resources
import android.view.View
import android.view.Window
+import android.view.WindowInsetsController
import android.view.WindowManager
+import androidx.core.view.WindowInsetsCompat
import androidx.core.view.isVisible
import mozilla.components.browser.engine.gecko.GeckoEngineView
import mozilla.components.browser.toolbar.BrowserToolbar
@@ -33,6 +35,7 @@ import org.mozilla.focus.ext.showAsFixed
import org.mozilla.focus.utils.Settings
import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
@RunWith(RobolectricTestRunner::class)
internal class FullScreenIntegrationTest {
@@ -128,7 +131,8 @@ internal class FullScreenIntegrationTest {
@Test
@Suppress("DEPRECATION")
- fun `WHEN entering immersive mode THEN hide all system bars`() {
+ @Config(sdk = [28])
+ fun `WHEN entering immersive mode THEN hide all system bars in SDK 28`() {
val decorView: View = mock()
val activityWindow: Window = mock()
val activity: Activity = mock()
@@ -159,8 +163,50 @@ internal class FullScreenIntegrationTest {
}
@Test
+ fun `WHEN entering immersive mode THEN hide all system bars`() {
+ val decorView: View = mock()
+ val activityWindow: Window = mock()
+ val activity: Activity = mock()
+ val layoutParams = WindowManager.LayoutParams()
+ val insetsController: WindowInsetsController = mock()
+
+ doReturn(activityWindow).`when`(activity).window
+ doReturn(decorView).`when`(activityWindow).decorView
+ doReturn(layoutParams).`when`(activityWindow).attributes
+ doReturn(insetsController).`when`(activityWindow).insetsController
+
+ val integration = FullScreenIntegration(
+ activity,
+ mock(),
+ null,
+ mock(),
+ mock(),
+ mock(),
+ mock(),
+ mock(),
+ mock(),
+ )
+
+ integration.switchToImmersiveMode()
+
+ // verify hiding system bars
+ verify(insetsController).hide(WindowInsetsCompat.Type.systemBars())
+
+ verify(activityWindow).setFlags(
+ WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
+ WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
+ )
+
+ assertEquals(
+ WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES,
+ layoutParams.layoutInDisplayCutoutMode,
+ )
+ }
+
+ @Test
@Suppress("DEPRECATION")
- fun `GIVEN immersive mode WHEN exitImmersiveModeIfNeeded is called THEN show the system bars`() {
+ @Config(sdk = [28])
+ fun `GIVEN immersive mode WHEN exitImmersiveModeIfNeeded is called THEN show the system bars on SDK 28`() {
val decorView: View = mock()
val activityWindow: Window = mock()
val activity: Activity = mock()
@@ -189,6 +235,43 @@ internal class FullScreenIntegrationTest {
}
@Test
+ fun `GIVEN immersive mode WHEN exitImmersiveModeIfNeeded is called THEN show the system bars`() {
+ val decorView: View = mock()
+ val activityWindow: Window = mock()
+ val activity: Activity = mock()
+ val layoutParams = WindowManager.LayoutParams()
+ val insetsController: WindowInsetsController = mock()
+
+ doReturn(activityWindow).`when`(activity).window
+ doReturn(decorView).`when`(activityWindow).decorView
+ doReturn(layoutParams).`when`(activityWindow).attributes
+ doReturn(insetsController).`when`(activityWindow).insetsController
+
+ val integration = FullScreenIntegration(
+ activity,
+ mock(),
+ null,
+ mock(),
+ mock(),
+ mock(),
+ mock(),
+ mock(),
+ mock(),
+ )
+
+ integration.exitImmersiveMode()
+
+ verify(insetsController).show(WindowInsetsCompat.Type.systemBars())
+ verify(decorView).setOnApplyWindowInsetsListener(null)
+ verify(activityWindow).clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
+
+ assertEquals(
+ WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT,
+ layoutParams.layoutInDisplayCutoutMode,
+ )
+ }
+
+ @Test
fun `GIVEN a11y is enabled WHEN enterBrowserFullscreen THEN hide the toolbar`() {
val toolbar: BrowserToolbar = mock()
val engineView: GeckoEngineView = mock()
@@ -335,7 +418,8 @@ internal class FullScreenIntegrationTest {
}
@Test
- fun `WHEN exiting fullscreen THEN put browser in fullscreen, hide system bars and enter immersive mode`() {
+ @Config(sdk = [28])
+ fun `WHEN exiting fullscreen THEN put browser in fullscreen, hide system bars and enter immersive mode in SDK 28`() {
val toolbar: BrowserToolbar = mock()
val engineView: GeckoEngineView = mock()
doReturn(mock<View>()).`when`(engineView).asView()
@@ -371,4 +455,48 @@ internal class FullScreenIntegrationTest {
verify(integration).exitImmersiveMode()
verify(statusBar).isVisible = true
}
+
+ @Test
+ fun `WHEN exiting fullscreen THEN put browser in fullscreen, hide system bars and enter immersive mode in`() {
+ val toolbar: BrowserToolbar = mock()
+ val engineView: GeckoEngineView = mock()
+ doReturn(mock<View>()).`when`(engineView).asView()
+
+ val settings: Settings = mock()
+ doReturn(false).`when`(settings).isAccessibilityEnabled()
+
+ val resources: Resources = mock()
+ val activityWindow: Window = mock()
+ val decorView: View = mock()
+ val windowAttributes = WindowManager.LayoutParams()
+ val activity: Activity = mock()
+ val insetsController: WindowInsetsController = mock()
+
+ doReturn(activityWindow).`when`(activity).window
+ doReturn(decorView).`when`(activityWindow).decorView
+ doReturn(windowAttributes).`when`(activityWindow).attributes
+ doReturn(resources).`when`(activity).resources
+ doReturn(insetsController).`when`(activityWindow).insetsController
+
+ val statusBar: View = mock()
+ val integration = spy(
+ FullScreenIntegration(
+ activity,
+ mock(),
+ null,
+ mock(),
+ settings,
+ toolbar,
+ statusBar,
+ engineView,
+ mock(),
+ ),
+ )
+
+ integration.fullScreenChanged(false)
+
+ verify(integration).exitBrowserFullscreen()
+ verify(integration).exitImmersiveMode()
+ verify(statusBar).isVisible = true
+ }
}