diff options
| author | 2025-02-19 11:20:19 +0000 | |
|---|---|---|
| committer | 2025-03-04 13:01:51 +0000 | |
| commit | 3274fdf149d17fc72da3a2bc9139173f3cdb0d93 (patch) | |
| tree | 0037ea405e9a4dabf8ca2712cccdcc20ff90f7ac | |
| parent | 1c72035d02f77e57043dd8585d4bc2c3bebd298e (diff) | |
Refactor the new Volume Dialog a bit to accomodate Android TV
Android TV needs different set of components for their Volume Dialog to
maintain previous UI. These changes make the Volume Dialog more modular
to allow those components
Flag: com.android.systemui.volume_redesign
Bug: 387284759
Test: manual on foldable. Observe the Volume Dialog appearance
Test: atest VolumeDialogScreenshotTest
Change-Id: I093c48f641501cd2d2109fb5908183d1a7a01a7b
11 files changed, 55 insertions, 15 deletions
diff --git a/packages/SystemUI/res/layout/volume_dialog.xml b/packages/SystemUI/res/layout/volume_dialog.xml index f41eaec8e18b..a1fa54cf592d 100644 --- a/packages/SystemUI/res/layout/volume_dialog.xml +++ b/packages/SystemUI/res/layout/volume_dialog.xml @@ -40,7 +40,7 @@ android:layout_marginBottom="@dimen/volume_dialog_components_spacing" android:clipChildren="false" app:layout_constraintBottom_toTopOf="@id/volume_dialog_main_slider_container" - app:layout_constraintEnd_toEndOf="@id/volume_dialog_main_slider_container" + app:layout_constraintEnd_toEndOf="@id/volume_dialog_background" app:layout_constraintHeight_default="spread" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" @@ -70,9 +70,9 @@ android:layout_marginTop="@dimen/volume_dialog_components_spacing" android:clipChildren="false" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="@id/volume_dialog_main_slider_container" + app:layout_constraintEnd_toEndOf="@id/volume_dialog_background" app:layout_constraintHeight_default="wrap" - app:layout_constraintStart_toStartOf="@id/volume_dialog_main_slider_container" + app:layout_constraintStart_toStartOf="@id/volume_dialog_background" app:layout_constraintTop_toBottomOf="@id/volume_dialog_main_slider_container" app:layout_constraintVertical_bias="0" app:layout_constraintWidth_default="wrap"> diff --git a/packages/SystemUI/res/layout/volume_dialog_top_section.xml b/packages/SystemUI/res/layout/volume_dialog_top_section.xml index 29f52480bfe0..b7455471d9a6 100644 --- a/packages/SystemUI/res/layout/volume_dialog_top_section.xml +++ b/packages/SystemUI/res/layout/volume_dialog_top_section.xml @@ -22,7 +22,7 @@ android:clipChildren="false" android:clipToPadding="false" android:gravity="center" - android:paddingEnd="@dimen/volume_dialog_ringer_drawer_diff_end_margin" + android:paddingEnd="@dimen/volume_dialog_buttons_margin" app:layoutDescription="@xml/volume_dialog_ringer_drawer_motion_scene"> <View diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index c8e31079fca0..8342a9cc244b 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -2189,11 +2189,6 @@ <dimen name="volume_dialog_background_square_corner_radius">12dp</dimen> <dimen name="volume_dialog_ringer_drawer_margin">@dimen/volume_dialog_buttons_margin</dimen> - <!-- - (volume_dialog_slider_width - volume_dialog_button_size) / 2 - This centers ringer drawer against the volume slider - --> - <dimen name="volume_dialog_ringer_drawer_diff_end_margin">6dp</dimen> <dimen name="volume_dialog_ringer_drawer_button_size">@dimen/volume_dialog_button_size</dimen> <dimen name="volume_dialog_ringer_drawer_button_icon_radius">10dp</dimen> <dimen name="volume_dialog_ringer_selected_button_background_radius">20dp</dimen> diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/VolumeDialog.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/VolumeDialog.kt index bb8fe46be5b0..3ac6c7bc0c6b 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/VolumeDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/VolumeDialog.kt @@ -28,7 +28,7 @@ import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.res.R import com.android.systemui.volume.Events -import com.android.systemui.volume.dialog.dagger.VolumeDialogComponent +import com.android.systemui.volume.dialog.dagger.factory.VolumeDialogComponentFactory import com.android.systemui.volume.dialog.domain.interactor.VolumeDialogVisibilityInteractor import javax.inject.Inject import kotlinx.coroutines.awaitCancellation @@ -37,7 +37,7 @@ class VolumeDialog @Inject constructor( @Application context: Context, - private val componentFactory: VolumeDialogComponent.Factory, + private val componentFactory: VolumeDialogComponentFactory, private val visibilityInteractor: VolumeDialogVisibilityInteractor, ) : ComponentDialog(context, R.style.Theme_SystemUI_Dialog_Volume) { diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/VolumeDialogComponent.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/VolumeDialogComponent.kt index 434f6b567048..36b2b48ece21 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/VolumeDialogComponent.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/VolumeDialogComponent.kt @@ -16,6 +16,7 @@ package com.android.systemui.volume.dialog.dagger +import com.android.systemui.volume.dialog.dagger.factory.VolumeDialogComponentFactory import com.android.systemui.volume.dialog.dagger.module.VolumeDialogModule import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogScope @@ -38,9 +39,9 @@ interface VolumeDialogComponent { fun sliderComponentFactory(): VolumeDialogSliderComponent.Factory @Subcomponent.Factory - interface Factory { + interface Factory : VolumeDialogComponentFactory { - fun create( + override fun create( /** * Provides a coroutine scope to use inside [VolumeDialogScope]. * [com.android.systemui.volume.dialog.VolumeDialogPlugin] manages the lifecycle of this diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/factory/VolumeDialogComponentFactory.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/factory/VolumeDialogComponentFactory.kt new file mode 100644 index 000000000000..d909f26dd1dc --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/factory/VolumeDialogComponentFactory.kt @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.volume.dialog.dagger.factory + +import com.android.systemui.volume.dialog.dagger.VolumeDialogComponent +import kotlinx.coroutines.CoroutineScope + +/** Common interface for all dagger Subcomponent.Factory providing [VolumeDialogComponent]. */ +interface VolumeDialogComponentFactory { + + fun create(scope: CoroutineScope): VolumeDialogComponent +} diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogModule.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogModule.kt index 7b08317d5265..fcf4d110f269 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogModule.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogModule.kt @@ -16,10 +16,12 @@ package com.android.systemui.volume.dialog.dagger.module +import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog import com.android.systemui.volume.dialog.ringer.data.repository.VolumeDialogRingerFeedbackRepository import com.android.systemui.volume.dialog.ringer.data.repository.VolumeDialogRingerFeedbackRepositoryImpl import com.android.systemui.volume.dialog.ringer.ui.binder.VolumeDialogRingerViewBinder import com.android.systemui.volume.dialog.settings.ui.binder.VolumeDialogSettingsButtonViewBinder +import com.android.systemui.volume.dialog.sliders.dagger.VolumeDialogSliderComponent import com.android.systemui.volume.dialog.sliders.ui.VolumeDialogSlidersViewBinder import com.android.systemui.volume.dialog.ui.binder.ViewBinder import dagger.Binds @@ -27,7 +29,7 @@ import dagger.Module import dagger.Provides /** Dagger module for volume dialog code in the volume package */ -@Module +@Module(subcomponents = [VolumeDialogSliderComponent::class]) interface VolumeDialogModule { @Binds @@ -38,6 +40,7 @@ interface VolumeDialogModule { companion object { @Provides + @VolumeDialog fun provideViewBinders( slidersViewBinder: VolumeDialogSlidersViewBinder, ringerViewBinder: VolumeDialogRingerViewBinder, diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogPluginModule.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogPluginModule.kt index 547c51d1cefd..35752ae08260 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogPluginModule.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogPluginModule.kt @@ -17,6 +17,7 @@ package com.android.systemui.volume.dialog.dagger.module import com.android.systemui.volume.dialog.dagger.VolumeDialogComponent +import com.android.systemui.volume.dialog.dagger.factory.VolumeDialogComponentFactory import com.android.systemui.volume.dialog.shared.model.CsdWarningConfigModel import com.android.systemui.volume.dialog.utils.VolumeTracer import com.android.systemui.volume.dialog.utils.VolumeTracerImpl @@ -27,6 +28,11 @@ import dagger.Provides @Module(subcomponents = [VolumeDialogComponent::class]) interface VolumeDialogPluginModule { + @Binds + fun bindVolumeDialogComponentFactory( + factory: VolumeDialogComponent.Factory + ): VolumeDialogComponentFactory + @Binds fun bindVolumeTracer(volumeTracer: VolumeTracerImpl): VolumeTracer companion object { diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/dagger/VolumeDialogSliderComponent.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/dagger/VolumeDialogSliderComponent.kt index 577e47bb3b83..d0ed24d0b86d 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/dagger/VolumeDialogSliderComponent.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/dagger/VolumeDialogSliderComponent.kt @@ -19,6 +19,7 @@ package com.android.systemui.volume.dialog.sliders.dagger import com.android.systemui.volume.dialog.sliders.domain.model.VolumeDialogSliderType import com.android.systemui.volume.dialog.sliders.ui.VolumeDialogOverscrollViewBinder import com.android.systemui.volume.dialog.sliders.ui.VolumeDialogSliderViewBinder +import com.android.systemui.volume.dialog.sliders.ui.viewmodel.VolumeDialogSliderViewModel import dagger.BindsInstance import dagger.Subcomponent @@ -34,6 +35,8 @@ interface VolumeDialogSliderComponent { fun overscrollViewBinder(): VolumeDialogOverscrollViewBinder + fun sliderViewModel(): VolumeDialogSliderViewModel + @Subcomponent.Factory interface Factory { diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt index 5de8fe54505f..11d9df4294c0 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt @@ -37,6 +37,7 @@ import com.android.systemui.common.ui.view.onApplyWindowInsets import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.res.R import com.android.systemui.util.kotlin.awaitCancellationThenDispose +import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogScope import com.android.systemui.volume.dialog.shared.model.VolumeDialogVisibilityModel import com.android.systemui.volume.dialog.ui.utils.JankListenerFactory @@ -72,7 +73,7 @@ constructor( private val viewModel: VolumeDialogViewModel, private val jankListenerFactory: JankListenerFactory, private val tracer: VolumeTracer, - private val viewBinders: List<@JvmSuppressWildcards ViewBinder>, + @VolumeDialog private val viewBinders: List<@JvmSuppressWildcards ViewBinder>, ) { private val halfOpenedOffsetPx: Float = diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/dagger/VolumeDialogSliderComponentKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/dagger/VolumeDialogSliderComponentKosmos.kt index 4ca044d60f3f..34218646b818 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/dagger/VolumeDialogSliderComponentKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/dagger/VolumeDialogSliderComponentKosmos.kt @@ -33,6 +33,8 @@ import com.android.systemui.volume.dialog.sliders.domain.model.VolumeDialogSlide import com.android.systemui.volume.dialog.sliders.domain.model.volumeDialogSliderType import com.android.systemui.volume.dialog.sliders.ui.VolumeDialogOverscrollViewBinder import com.android.systemui.volume.dialog.sliders.ui.VolumeDialogSliderViewBinder +import com.android.systemui.volume.dialog.sliders.ui.viewmodel.VolumeDialogSliderViewModel +import com.android.systemui.volume.dialog.sliders.ui.viewmodel.volumeDialogSliderViewModel import com.android.systemui.volume.dialog.sliders.ui.volumeDialogOverscrollViewBinder import com.android.systemui.volume.dialog.sliders.ui.volumeDialogSliderViewBinder import com.android.systemui.volume.mediaControllerRepository @@ -60,6 +62,9 @@ fun Kosmos.volumeDialogSliderComponent(type: VolumeDialogSliderType): VolumeDial } } + override fun sliderViewModel(): VolumeDialogSliderViewModel = + localKosmos.volumeDialogSliderViewModel + override fun sliderViewBinder(): VolumeDialogSliderViewBinder = localKosmos.volumeDialogSliderViewBinder |