Loading packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/domain/interactor/WallpaperFocalAreaInteractorTest.kt +55 −1 Original line number Diff line number Diff line Loading @@ -21,10 +21,12 @@ import android.content.res.Resources import android.graphics.PointF import android.graphics.RectF import android.util.DisplayMetrics import android.view.View import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.domain.interactor.keyguardSmartspaceInteractor import com.android.systemui.kosmos.currentValue import com.android.systemui.kosmos.testScope import com.android.systemui.res.R Loading Loading @@ -52,13 +54,19 @@ class WallpaperFocalAreaInteractorTest : SysuiTestCase() { private val testScope = kosmos.testScope lateinit var shadeRepository: ShadeRepository private lateinit var mockedResources: Resources lateinit var underTest: WallpaperFocalAreaInteractor private var underTest = kosmos.wallpaperFocalAreaInteractor @Before fun setup() { MockitoAnnotations.initMocks(this) mockedResources = mock<Resources>() whenever(kosmos.mockedContext.resources).thenReturn(mockedResources) whenever( kosmos.mockedContext.resources.getDimensionPixelSize( com.android.systemui.customization.clocks.R.dimen.enhanced_smartspace_height ) ) .thenReturn(200) whenever( mockedResources.getFloat( Resources.getSystem() Loading @@ -75,6 +83,7 @@ class WallpaperFocalAreaInteractorTest : SysuiTestCase() { context = kosmos.mockedContext, wallpaperFocalAreaRepository = kosmos.wallpaperFocalAreaRepository, shadeRepository = kosmos.shadeRepository, smartspaceInteractor = kosmos.keyguardSmartspaceInteractor, ) } Loading Loading @@ -253,6 +262,51 @@ class WallpaperFocalAreaInteractorTest : SysuiTestCase() { .isEqualTo(PointF(0F, 0F)) } @Test fun onBcSmartspaceVisible_boundsUnderBcSmartspace() = testScope.runTest { overrideMockedResources( mockedResources, OverrideResources( screenWidth = 1000, screenHeight = 2000, centerAlignFocalArea = false, ), ) val bounds by collectLastValue(underTest.wallpaperFocalAreaBounds) kosmos.shadeRepository.setShadeLayoutWide(false) kosmos.wallpaperFocalAreaRepository.setShortcutAbsoluteTop(1800F) kosmos.wallpaperFocalAreaRepository.setNotificationDefaultTop(400F) kosmos.wallpaperFocalAreaRepository.setNotificationStackAbsoluteBottom(400F) kosmos.keyguardSmartspaceInteractor.setBcSmartspaceVisibility(View.VISIBLE) assertThat(bounds?.top).isEqualTo(800F) assertThat(bounds?.bottom).isEqualTo(1400F) } @Test fun onBcSmartspaceNotVisible_boundsNotUnderBcSmartspace() = testScope.runTest { overrideMockedResources( mockedResources, OverrideResources( screenWidth = 1000, screenHeight = 2000, centerAlignFocalArea = false, ), ) val bounds by collectLastValue(underTest.wallpaperFocalAreaBounds) kosmos.shadeRepository.setShadeLayoutWide(false) kosmos.wallpaperFocalAreaRepository.setShortcutAbsoluteTop(1800F) kosmos.wallpaperFocalAreaRepository.setNotificationDefaultTop(400F) kosmos.wallpaperFocalAreaRepository.setNotificationStackAbsoluteBottom(400F) kosmos.keyguardSmartspaceInteractor.setBcSmartspaceVisibility(View.INVISIBLE) assertThat(bounds?.top).isEqualTo(700F) assertThat(bounds?.bottom).isEqualTo(1400F) } data class OverrideResources( val screenWidth: Int, val screenHeight: Int, Loading packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/ui/viewmodel/WallpaperFocalAreaViewModelTest.kt +2 −7 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import com.android.systemui.statusbar.notification.data.repository.activeNotific import com.android.systemui.statusbar.notification.data.repository.setActiveNotifs import com.android.systemui.testKosmos import com.android.systemui.wallpapers.data.repository.wallpaperFocalAreaRepository import com.android.systemui.wallpapers.domain.interactor.WallpaperFocalAreaInteractor import com.android.systemui.wallpapers.domain.interactor.WallpaperFocalAreaInteractorTest.Companion.overrideMockedResources import com.android.systemui.wallpapers.domain.interactor.WallpaperFocalAreaInteractorTest.OverrideResources import com.android.systemui.wallpapers.domain.interactor.wallpaperFocalAreaInteractor Loading Loading @@ -67,6 +66,7 @@ class WallpaperFocalAreaViewModelTest : SysuiTestCase() { mockedResources, OverrideResources(screenWidth = 1000, screenHeight = 2000, centerAlignFocalArea = false), ) whenever(kosmos.mockedContext.resources).thenReturn(mockedResources) whenever( mockedResources.getFloat( Loading @@ -79,12 +79,7 @@ class WallpaperFocalAreaViewModelTest : SysuiTestCase() { ) ) .thenReturn(1f) kosmos.wallpaperFocalAreaInteractor = WallpaperFocalAreaInteractor( context = kosmos.mockedContext, wallpaperFocalAreaRepository = kosmos.wallpaperFocalAreaRepository, shadeRepository = kosmos.shadeRepository, ) kosmos.wallpaperFocalAreaInteractor.context = kosmos.mockedContext underTest = WallpaperFocalAreaViewModel( wallpaperFocalAreaInteractor = kosmos.wallpaperFocalAreaInteractor, Loading packages/SystemUI/src/com/android/systemui/wallpapers/domain/interactor/WallpaperFocalAreaInteractor.kt +30 −5 Original line number Diff line number Diff line Loading @@ -21,8 +21,11 @@ import android.content.res.Resources import android.graphics.PointF import android.graphics.RectF import android.util.Log import android.view.View import com.android.app.animation.MathUtils import com.android.systemui.customization.clocks.R as customR import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.domain.interactor.KeyguardSmartspaceInteractor import com.android.systemui.res.R import com.android.systemui.shade.data.repository.ShadeRepository import com.android.systemui.wallpapers.data.repository.WallpaperFocalAreaRepository Loading @@ -31,28 +34,50 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map @SysUISingleton class WallpaperFocalAreaInteractor @Inject constructor( private val context: Context, var context: Context, private val wallpaperFocalAreaRepository: WallpaperFocalAreaRepository, shadeRepository: ShadeRepository, smartspaceInteractor: KeyguardSmartspaceInteractor, ) { val hasFocalArea = wallpaperFocalAreaRepository.hasFocalArea val smartspaceBottom = combine( wallpaperFocalAreaRepository.notificationDefaultTop, smartspaceInteractor.bcSmartspaceVisibility, ::Pair, ) .map { (notificationDefaultTop, bcSmartspaceVisibility) -> when (bcSmartspaceVisibility) { View.VISIBLE -> { notificationDefaultTop + context.resources .getDimensionPixelSize(customR.dimen.enhanced_smartspace_height) .toFloat() } else -> { notificationDefaultTop } } } val wallpaperFocalAreaBounds: Flow<RectF> = combine( shadeRepository.isShadeLayoutWide, wallpaperFocalAreaRepository.notificationStackAbsoluteBottom, wallpaperFocalAreaRepository.shortcutAbsoluteTop, wallpaperFocalAreaRepository.notificationDefaultTop, smartspaceBottom, ) { isShadeLayoutWide, notificationStackAbsoluteBottom, shortcutAbsoluteTop, notificationDefaultTop -> smartspaceBottom -> // Wallpaper will be zoomed in with config_wallpaperMaxScale in lockscreen // so we need to give a bounds taking this scale in consideration val wallpaperZoomedInScale = getSystemWallpaperMaximumScale(context) Loading Loading @@ -91,11 +116,11 @@ constructor( // unfold foldable landscape else if (isShadeLayoutWide) { // For all landscape, we should use bottom of smartspace to constrain scaledBounds.top + notificationDefaultTop / wallpaperZoomedInScale scaledBounds.top + smartspaceBottom / wallpaperZoomedInScale // handheld / portrait } else { scaledBounds.top + MathUtils.max(notificationDefaultTop, notificationStackAbsoluteBottom) / MathUtils.max(smartspaceBottom, notificationStackAbsoluteBottom) / wallpaperZoomedInScale } val bottom = scaledBounds.bottom - scaledBottomMargin Loading packages/SystemUI/tests/utils/src/com/android/systemui/wallpapers/domain/interactor/WallpaperFocalAreaInteractor.kt +2 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.systemui.wallpapers.domain.interactor import android.content.applicationContext import com.android.systemui.keyguard.domain.interactor.keyguardSmartspaceInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.shade.data.repository.shadeRepository import com.android.systemui.wallpapers.data.repository.wallpaperFocalAreaRepository Loading @@ -27,5 +28,6 @@ var Kosmos.wallpaperFocalAreaInteractor by context = applicationContext, wallpaperFocalAreaRepository = wallpaperFocalAreaRepository, shadeRepository = shadeRepository, smartspaceInteractor = keyguardSmartspaceInteractor, ) } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/domain/interactor/WallpaperFocalAreaInteractorTest.kt +55 −1 Original line number Diff line number Diff line Loading @@ -21,10 +21,12 @@ import android.content.res.Resources import android.graphics.PointF import android.graphics.RectF import android.util.DisplayMetrics import android.view.View import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.domain.interactor.keyguardSmartspaceInteractor import com.android.systemui.kosmos.currentValue import com.android.systemui.kosmos.testScope import com.android.systemui.res.R Loading Loading @@ -52,13 +54,19 @@ class WallpaperFocalAreaInteractorTest : SysuiTestCase() { private val testScope = kosmos.testScope lateinit var shadeRepository: ShadeRepository private lateinit var mockedResources: Resources lateinit var underTest: WallpaperFocalAreaInteractor private var underTest = kosmos.wallpaperFocalAreaInteractor @Before fun setup() { MockitoAnnotations.initMocks(this) mockedResources = mock<Resources>() whenever(kosmos.mockedContext.resources).thenReturn(mockedResources) whenever( kosmos.mockedContext.resources.getDimensionPixelSize( com.android.systemui.customization.clocks.R.dimen.enhanced_smartspace_height ) ) .thenReturn(200) whenever( mockedResources.getFloat( Resources.getSystem() Loading @@ -75,6 +83,7 @@ class WallpaperFocalAreaInteractorTest : SysuiTestCase() { context = kosmos.mockedContext, wallpaperFocalAreaRepository = kosmos.wallpaperFocalAreaRepository, shadeRepository = kosmos.shadeRepository, smartspaceInteractor = kosmos.keyguardSmartspaceInteractor, ) } Loading Loading @@ -253,6 +262,51 @@ class WallpaperFocalAreaInteractorTest : SysuiTestCase() { .isEqualTo(PointF(0F, 0F)) } @Test fun onBcSmartspaceVisible_boundsUnderBcSmartspace() = testScope.runTest { overrideMockedResources( mockedResources, OverrideResources( screenWidth = 1000, screenHeight = 2000, centerAlignFocalArea = false, ), ) val bounds by collectLastValue(underTest.wallpaperFocalAreaBounds) kosmos.shadeRepository.setShadeLayoutWide(false) kosmos.wallpaperFocalAreaRepository.setShortcutAbsoluteTop(1800F) kosmos.wallpaperFocalAreaRepository.setNotificationDefaultTop(400F) kosmos.wallpaperFocalAreaRepository.setNotificationStackAbsoluteBottom(400F) kosmos.keyguardSmartspaceInteractor.setBcSmartspaceVisibility(View.VISIBLE) assertThat(bounds?.top).isEqualTo(800F) assertThat(bounds?.bottom).isEqualTo(1400F) } @Test fun onBcSmartspaceNotVisible_boundsNotUnderBcSmartspace() = testScope.runTest { overrideMockedResources( mockedResources, OverrideResources( screenWidth = 1000, screenHeight = 2000, centerAlignFocalArea = false, ), ) val bounds by collectLastValue(underTest.wallpaperFocalAreaBounds) kosmos.shadeRepository.setShadeLayoutWide(false) kosmos.wallpaperFocalAreaRepository.setShortcutAbsoluteTop(1800F) kosmos.wallpaperFocalAreaRepository.setNotificationDefaultTop(400F) kosmos.wallpaperFocalAreaRepository.setNotificationStackAbsoluteBottom(400F) kosmos.keyguardSmartspaceInteractor.setBcSmartspaceVisibility(View.INVISIBLE) assertThat(bounds?.top).isEqualTo(700F) assertThat(bounds?.bottom).isEqualTo(1400F) } data class OverrideResources( val screenWidth: Int, val screenHeight: Int, Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/ui/viewmodel/WallpaperFocalAreaViewModelTest.kt +2 −7 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import com.android.systemui.statusbar.notification.data.repository.activeNotific import com.android.systemui.statusbar.notification.data.repository.setActiveNotifs import com.android.systemui.testKosmos import com.android.systemui.wallpapers.data.repository.wallpaperFocalAreaRepository import com.android.systemui.wallpapers.domain.interactor.WallpaperFocalAreaInteractor import com.android.systemui.wallpapers.domain.interactor.WallpaperFocalAreaInteractorTest.Companion.overrideMockedResources import com.android.systemui.wallpapers.domain.interactor.WallpaperFocalAreaInteractorTest.OverrideResources import com.android.systemui.wallpapers.domain.interactor.wallpaperFocalAreaInteractor Loading Loading @@ -67,6 +66,7 @@ class WallpaperFocalAreaViewModelTest : SysuiTestCase() { mockedResources, OverrideResources(screenWidth = 1000, screenHeight = 2000, centerAlignFocalArea = false), ) whenever(kosmos.mockedContext.resources).thenReturn(mockedResources) whenever( mockedResources.getFloat( Loading @@ -79,12 +79,7 @@ class WallpaperFocalAreaViewModelTest : SysuiTestCase() { ) ) .thenReturn(1f) kosmos.wallpaperFocalAreaInteractor = WallpaperFocalAreaInteractor( context = kosmos.mockedContext, wallpaperFocalAreaRepository = kosmos.wallpaperFocalAreaRepository, shadeRepository = kosmos.shadeRepository, ) kosmos.wallpaperFocalAreaInteractor.context = kosmos.mockedContext underTest = WallpaperFocalAreaViewModel( wallpaperFocalAreaInteractor = kosmos.wallpaperFocalAreaInteractor, Loading
packages/SystemUI/src/com/android/systemui/wallpapers/domain/interactor/WallpaperFocalAreaInteractor.kt +30 −5 Original line number Diff line number Diff line Loading @@ -21,8 +21,11 @@ import android.content.res.Resources import android.graphics.PointF import android.graphics.RectF import android.util.Log import android.view.View import com.android.app.animation.MathUtils import com.android.systemui.customization.clocks.R as customR import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.domain.interactor.KeyguardSmartspaceInteractor import com.android.systemui.res.R import com.android.systemui.shade.data.repository.ShadeRepository import com.android.systemui.wallpapers.data.repository.WallpaperFocalAreaRepository Loading @@ -31,28 +34,50 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map @SysUISingleton class WallpaperFocalAreaInteractor @Inject constructor( private val context: Context, var context: Context, private val wallpaperFocalAreaRepository: WallpaperFocalAreaRepository, shadeRepository: ShadeRepository, smartspaceInteractor: KeyguardSmartspaceInteractor, ) { val hasFocalArea = wallpaperFocalAreaRepository.hasFocalArea val smartspaceBottom = combine( wallpaperFocalAreaRepository.notificationDefaultTop, smartspaceInteractor.bcSmartspaceVisibility, ::Pair, ) .map { (notificationDefaultTop, bcSmartspaceVisibility) -> when (bcSmartspaceVisibility) { View.VISIBLE -> { notificationDefaultTop + context.resources .getDimensionPixelSize(customR.dimen.enhanced_smartspace_height) .toFloat() } else -> { notificationDefaultTop } } } val wallpaperFocalAreaBounds: Flow<RectF> = combine( shadeRepository.isShadeLayoutWide, wallpaperFocalAreaRepository.notificationStackAbsoluteBottom, wallpaperFocalAreaRepository.shortcutAbsoluteTop, wallpaperFocalAreaRepository.notificationDefaultTop, smartspaceBottom, ) { isShadeLayoutWide, notificationStackAbsoluteBottom, shortcutAbsoluteTop, notificationDefaultTop -> smartspaceBottom -> // Wallpaper will be zoomed in with config_wallpaperMaxScale in lockscreen // so we need to give a bounds taking this scale in consideration val wallpaperZoomedInScale = getSystemWallpaperMaximumScale(context) Loading Loading @@ -91,11 +116,11 @@ constructor( // unfold foldable landscape else if (isShadeLayoutWide) { // For all landscape, we should use bottom of smartspace to constrain scaledBounds.top + notificationDefaultTop / wallpaperZoomedInScale scaledBounds.top + smartspaceBottom / wallpaperZoomedInScale // handheld / portrait } else { scaledBounds.top + MathUtils.max(notificationDefaultTop, notificationStackAbsoluteBottom) / MathUtils.max(smartspaceBottom, notificationStackAbsoluteBottom) / wallpaperZoomedInScale } val bottom = scaledBounds.bottom - scaledBottomMargin Loading
packages/SystemUI/tests/utils/src/com/android/systemui/wallpapers/domain/interactor/WallpaperFocalAreaInteractor.kt +2 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.systemui.wallpapers.domain.interactor import android.content.applicationContext import com.android.systemui.keyguard.domain.interactor.keyguardSmartspaceInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.shade.data.repository.shadeRepository import com.android.systemui.wallpapers.data.repository.wallpaperFocalAreaRepository Loading @@ -27,5 +28,6 @@ var Kosmos.wallpaperFocalAreaInteractor by context = applicationContext, wallpaperFocalAreaRepository = wallpaperFocalAreaRepository, shadeRepository = shadeRepository, smartspaceInteractor = keyguardSmartspaceInteractor, ) }