diff --git a/duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/inputscreen/ui/InputScreenConfigResolver.kt b/duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/inputscreen/ui/InputScreenConfigResolver.kt index 1912bfe68b2a..3fba0794156c 100644 --- a/duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/inputscreen/ui/InputScreenConfigResolver.kt +++ b/duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/inputscreen/ui/InputScreenConfigResolver.kt @@ -16,7 +16,10 @@ package com.duckduckgo.duckchat.impl.inputscreen.ui +import android.content.Context import android.content.Intent +import android.content.res.Configuration +import com.duckduckgo.app.di.ActivityContext import com.duckduckgo.di.scopes.ActivityScope import com.duckduckgo.duckchat.api.inputscreen.InputScreenActivityParams import com.duckduckgo.duckchat.impl.DuckChatInternal @@ -37,6 +40,7 @@ interface InputScreenConfigResolver { @SingleInstanceIn(scope = ActivityScope::class) class InputScreenConfigResolverImpl @Inject constructor( private val duckChatInternal: DuckChatInternal, + @ActivityContext private val activityContext: Context, ) : InputScreenConfigResolver { companion object { fun useTopBar( @@ -59,5 +63,5 @@ class InputScreenConfigResolverImpl @Inject constructor( useTopBar( isTopOmnibar = isTopOmnibar, duckChatInternal = duckChatInternal, - ) + ) || activityContext.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE } diff --git a/duckchat/duckchat-impl/src/test/kotlin/com/duckduckgo/duckchat/impl/inputscreen/ui/InputScreenConfigResolverTest.kt b/duckchat/duckchat-impl/src/test/kotlin/com/duckduckgo/duckchat/impl/inputscreen/ui/InputScreenConfigResolverTest.kt index e7fcad817410..c915f69f527d 100644 --- a/duckchat/duckchat-impl/src/test/kotlin/com/duckduckgo/duckchat/impl/inputscreen/ui/InputScreenConfigResolverTest.kt +++ b/duckchat/duckchat-impl/src/test/kotlin/com/duckduckgo/duckchat/impl/inputscreen/ui/InputScreenConfigResolverTest.kt @@ -16,7 +16,10 @@ package com.duckduckgo.duckchat.impl.inputscreen.ui +import android.content.Context import android.content.Intent +import android.content.res.Configuration +import android.content.res.Resources import androidx.test.ext.junit.runners.AndroidJUnit4 import com.duckduckgo.duckchat.api.inputscreen.InputScreenActivityParams import com.duckduckgo.duckchat.impl.DuckChatInternal @@ -33,13 +36,19 @@ import org.mockito.kotlin.whenever class InputScreenConfigResolverTest { private val duckChatInternal: DuckChatInternal = mock() private val inputScreenBottomBarEnabled = MutableStateFlow(false) + private val mockActivityContext: Context = mock() + private val mockResources: Resources = mock() + private val configuration = Configuration() private lateinit var inputScreenConfigResolver: InputScreenConfigResolverImpl @Before fun setup() { whenever(duckChatInternal.inputScreenBottomBarEnabled).thenReturn(inputScreenBottomBarEnabled) - inputScreenConfigResolver = InputScreenConfigResolverImpl(duckChatInternal) + whenever(mockActivityContext.resources).thenReturn(mockResources) + whenever(mockResources.configuration).thenReturn(configuration) + configuration.orientation = Configuration.ORIENTATION_PORTRAIT + inputScreenConfigResolver = InputScreenConfigResolverImpl(duckChatInternal, mockActivityContext) } @Test @@ -118,4 +127,68 @@ class InputScreenConfigResolverTest { assertFalse(inputScreenConfigResolver.useTopBar()) } + + @Test + fun `when landscape and isTopOmnibar true and bottom bar enabled then useTopBar returns true`() { + configuration.orientation = Configuration.ORIENTATION_LANDSCAPE + + val intent = Intent().apply { + putExtra( + "ACTIVITY_SERIALIZABLE_PARAMETERS_ARG", + InputScreenActivityParams(query = "", isTopOmnibar = true), + ) + } + inputScreenConfigResolver.onInputScreenCreated(intent) + inputScreenBottomBarEnabled.value = true + + assertTrue(inputScreenConfigResolver.useTopBar()) + } + + @Test + fun `when landscape and isTopOmnibar true and bottom bar disabled then useTopBar returns true`() { + configuration.orientation = Configuration.ORIENTATION_LANDSCAPE + + val intent = Intent().apply { + putExtra( + "ACTIVITY_SERIALIZABLE_PARAMETERS_ARG", + InputScreenActivityParams(query = "", isTopOmnibar = true), + ) + } + inputScreenConfigResolver.onInputScreenCreated(intent) + inputScreenBottomBarEnabled.value = false + + assertTrue(inputScreenConfigResolver.useTopBar()) + } + + @Test + fun `when landscape and isTopOmnibar false and bottom bar enabled then useTopBar returns true`() { + configuration.orientation = Configuration.ORIENTATION_LANDSCAPE + + val intent = Intent().apply { + putExtra( + "ACTIVITY_SERIALIZABLE_PARAMETERS_ARG", + InputScreenActivityParams(query = "", isTopOmnibar = false), + ) + } + inputScreenConfigResolver.onInputScreenCreated(intent) + inputScreenBottomBarEnabled.value = true + + assertTrue(inputScreenConfigResolver.useTopBar()) + } + + @Test + fun `when landscape and isTopOmnibar false and bottom bar disabled then useTopBar returns true`() { + configuration.orientation = Configuration.ORIENTATION_LANDSCAPE + + val intent = Intent().apply { + putExtra( + "ACTIVITY_SERIALIZABLE_PARAMETERS_ARG", + InputScreenActivityParams(query = "", isTopOmnibar = false), + ) + } + inputScreenConfigResolver.onInputScreenCreated(intent) + inputScreenBottomBarEnabled.value = false + + assertTrue(inputScreenConfigResolver.useTopBar()) + } }