Fix clock is low in new picker customization UI
Bug: 387534445
Test: manual test on Cheetah and Felix that UDFPS/device entry icon
doesn't overlap with clock
Flag: com.android.systemui.shared.new_customization_picker_ui
Change-Id: I98ab7195a7332b66ac3d0ada633556e344addd29
diff --git a/src/com/android/customization/picker/clock/domain/interactor/ClockPickerInteractor.kt b/src/com/android/customization/picker/clock/domain/interactor/ClockPickerInteractor.kt
index 7996055..27b8b26 100644
--- a/src/com/android/customization/picker/clock/domain/interactor/ClockPickerInteractor.kt
+++ b/src/com/android/customization/picker/clock/domain/interactor/ClockPickerInteractor.kt
@@ -24,6 +24,7 @@
import com.android.customization.picker.clock.shared.model.ClockMetadataModel
import com.android.customization.picker.clock.shared.model.ClockSnapshotModel
import com.android.systemui.plugins.clocks.ClockFontAxisSetting
+import com.android.wallpaper.picker.customization.data.repository.CustomizationRuntimeValuesRepository
import javax.inject.Inject
import javax.inject.Singleton
import kotlinx.coroutines.flow.Flow
@@ -41,6 +42,7 @@
constructor(
private val repository: ClockPickerRepository,
private val snapshotRestorer: ClockPickerSnapshotRestorer,
+ private val customizationRuntimeValuesRepository: CustomizationRuntimeValuesRepository,
) {
val allClocks: Flow<List<ClockMetadataModel>> = repository.allClocks
@@ -114,6 +116,10 @@
)
}
+ suspend fun getIsShadeLayoutWide() = customizationRuntimeValuesRepository.getIsShadeLayoutWide()
+
+ suspend fun getUdfpsLocation() = customizationRuntimeValuesRepository.getUdfpsLocation()
+
private suspend fun setClockOption(clockSnapshotModel: ClockSnapshotModel) {
// [ClockCarouselViewModel] is monitoring the [ClockPickerInteractor.setSelectedClock] job,
// so it needs to finish last.
diff --git a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
index 7dda5cc..a1d560c 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
@@ -413,23 +413,26 @@
if (Flags.newCustomizationPickerUi()) {
clockViewFactory.getController(clock.clockId).let { clockController
->
- addClockViews(clockController, clockHostView, size)
- val cs = ConstraintSet()
- // TODO(b/379348167): get correct isShadeLayoutWide from picker
- clockController.largeClock.layout.applyPreviewConstraints(
+ val udfpsTop =
+ clockPickerViewModel.getUdfpsLocation()?.let {
+ it.centerY - it.radius
+ }
+ val previewConfig =
ClockPreviewConfig(
context = context,
- isShadeLayoutWide = false,
+ isShadeLayoutWide =
+ clockPickerViewModel.getIsShadeLayoutWide(),
isSceneContainerFlagEnabled = false,
- ),
+ udfpsTop = udfpsTop,
+ )
+ addClockViews(clockController, clockHostView, size)
+ val cs = ConstraintSet()
+ clockController.largeClock.layout.applyPreviewConstraints(
+ previewConfig,
cs,
)
clockController.smallClock.layout.applyPreviewConstraints(
- ClockPreviewConfig(
- context = context,
- isShadeLayoutWide = false,
- isSceneContainerFlagEnabled = false,
- ),
+ previewConfig,
cs,
)
cs.applyTo(clockHostView)
diff --git a/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt b/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt
index 6de560e..f3be2eb 100644
--- a/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt
+++ b/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt
@@ -131,6 +131,10 @@
}
.shareIn(viewModelScope, SharingStarted.WhileSubscribed(), 1)
+ suspend fun getIsShadeLayoutWide() = clockPickerInteractor.getIsShadeLayoutWide()
+
+ suspend fun getUdfpsLocation() = clockPickerInteractor.getUdfpsLocation()
+
data class ClockStyleModel(val thumbnail: Drawable, val showEditButton: StateFlow<Boolean>)
@OptIn(ExperimentalCoroutinesApi::class)
diff --git a/tests/robotests/src/com/android/customization/picker/clock/domain/interactor/ClockPickerInteractorTest.kt b/tests/robotests/src/com/android/customization/picker/clock/domain/interactor/ClockPickerInteractorTest.kt
index 43910ff..4bb542c 100644
--- a/tests/robotests/src/com/android/customization/picker/clock/domain/interactor/ClockPickerInteractorTest.kt
+++ b/tests/robotests/src/com/android/customization/picker/clock/domain/interactor/ClockPickerInteractorTest.kt
@@ -3,6 +3,8 @@
import androidx.test.filters.SmallTest
import com.android.customization.picker.clock.data.repository.FakeClockPickerRepository
import com.android.customization.picker.clock.shared.ClockSize
+import com.android.systemui.shared.customization.data.content.FakeCustomizationProviderClient
+import com.android.wallpaper.picker.customization.data.repository.CustomizationRuntimeValuesRepository
import com.android.wallpaper.testing.FakeSnapshotStore
import com.android.wallpaper.testing.collectLastValue
import com.google.common.truth.Truth
@@ -31,6 +33,7 @@
val testDispatcher = StandardTestDispatcher()
Dispatchers.setMain(testDispatcher)
val repository = FakeClockPickerRepository()
+ val customizationProviderClient = FakeCustomizationProviderClient()
underTest =
ClockPickerInteractor(
repository = repository,
@@ -38,6 +41,7 @@
ClockPickerSnapshotRestorer(repository = repository).apply {
runBlocking { setUpSnapshotRestorer(store = FakeSnapshotStore()) }
},
+ CustomizationRuntimeValuesRepository(customizationProviderClient),
)
}
diff --git a/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModelTest.kt b/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModelTest.kt
index 64efed6..0386c85 100644
--- a/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModelTest.kt
+++ b/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModelTest.kt
@@ -26,6 +26,8 @@
import com.android.customization.picker.clock.shared.model.ClockMetadataModel
import com.android.customization.picker.clock.ui.FakeClockViewFactory
import com.android.customization.picker.clock.ui.view.ClockViewFactory
+import com.android.systemui.shared.customization.data.content.FakeCustomizationProviderClient
+import com.android.wallpaper.picker.customization.data.repository.CustomizationRuntimeValuesRepository
import com.android.wallpaper.testing.FakeSnapshotStore
import com.android.wallpaper.testing.collectLastValue
import com.google.common.truth.Truth.assertThat
@@ -103,12 +105,15 @@
}
private fun getClockPickerInteractor(repository: ClockPickerRepository): ClockPickerInteractor {
+ val customizationProviderClient = FakeCustomizationProviderClient()
return ClockPickerInteractor(
repository = repository,
snapshotRestorer =
ClockPickerSnapshotRestorer(repository = repository).apply {
runBlocking { setUpSnapshotRestorer(store = FakeSnapshotStore()) }
},
+ customizationRuntimeValuesRepository =
+ CustomizationRuntimeValuesRepository(customizationProviderClient),
)
.also { interactor = it }
}
diff --git a/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt b/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt
index dd68589..8c067b5 100644
--- a/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt
+++ b/tests/robotests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt
@@ -13,6 +13,8 @@
import com.android.customization.picker.color.data.repository.FakeColorPickerRepository
import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor
import com.android.customization.picker.color.domain.interactor.ColorPickerSnapshotRestorer
+import com.android.systemui.shared.customization.data.content.FakeCustomizationProviderClient
+import com.android.wallpaper.picker.customization.data.repository.CustomizationRuntimeValuesRepository
import com.android.wallpaper.testing.FakeSnapshotStore
import com.android.wallpaper.testing.collectLastValue
import com.google.common.truth.Truth.assertThat
@@ -62,6 +64,7 @@
context = InstrumentationRegistry.getInstrumentation().targetContext
testScope = TestScope(testDispatcher)
val repository = FakeClockPickerRepository()
+ val customizationProviderClient = FakeCustomizationProviderClient()
clockPickerInteractor =
ClockPickerInteractor(
repository = repository,
@@ -69,6 +72,7 @@
ClockPickerSnapshotRestorer(repository = repository).apply {
runBlocking { setUpSnapshotRestorer(store = FakeSnapshotStore()) }
},
+ CustomizationRuntimeValuesRepository(customizationProviderClient),
)
val colorPickerRepository = FakeColorPickerRepository(context = context)
colorPickerInteractor =
diff --git a/tests/robotests/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModelTest.kt b/tests/robotests/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModelTest.kt
index 50da94f..482af7e 100644
--- a/tests/robotests/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModelTest.kt
+++ b/tests/robotests/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModelTest.kt
@@ -28,10 +28,12 @@
import com.android.customization.picker.clock.ui.viewmodel.ClockSettingsViewModel
import com.android.customization.picker.color.data.repository.FakeColorPickerRepository2
import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor2
+import com.android.systemui.shared.customization.data.content.FakeCustomizationProviderClient
import com.android.themepicker.R
import com.android.wallpaper.customization.ui.viewmodel.ClockPickerViewModel.Tab
import com.android.wallpaper.picker.common.icon.ui.viewmodel.Icon
import com.android.wallpaper.picker.common.text.ui.viewmodel.Text
+import com.android.wallpaper.picker.customization.data.repository.CustomizationRuntimeValuesRepository
import com.android.wallpaper.picker.customization.ui.viewmodel.FloatingToolbarTabViewModel
import com.android.wallpaper.testing.FakeSnapshotStore
import com.android.wallpaper.testing.collectLastValue
@@ -78,6 +80,7 @@
hiltRule.inject()
Dispatchers.setMain(testDispatcher)
val repository = FakeClockPickerRepository()
+ val customizationProviderClient = FakeCustomizationProviderClient()
val clockPickerInteractor =
ClockPickerInteractor(
repository = repository,
@@ -85,6 +88,7 @@
ClockPickerSnapshotRestorer(repository = repository).apply {
runBlocking { setUpSnapshotRestorer(store = FakeSnapshotStore()) }
},
+ CustomizationRuntimeValuesRepository(customizationProviderClient),
)
val colorPickerRepository = FakeColorPickerRepository2()
val colorPickerInteractor = ColorPickerInteractor2(repository = colorPickerRepository)