summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/res/layout/volume_dialog.xml38
-rw-r--r--packages/SystemUI/res/layout/volume_dialog_bottom_section.xml26
-rw-r--r--packages/SystemUI/res/layout/volume_dialog_top_section.xml (renamed from packages/SystemUI/res/layout/volume_ringer_drawer.xml)5
-rw-r--r--packages/SystemUI/res/values/dimens.xml17
-rw-r--r--packages/SystemUI/res/xml/volume_dialog_constraint_set.xml2
-rw-r--r--packages/SystemUI/res/xml/volume_dialog_half_folded_constraint_set.xml2
-rw-r--r--packages/SystemUI/res/xml/volume_dialog_ringer_drawer_motion_scene.xml29
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogModule.kt15
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/binder/VolumeDialogSettingsButtonViewBinder.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSlidersViewBinder.kt11
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/ViewBinder.kt25
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt13
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinderKosmos.kt8
14 files changed, 132 insertions, 70 deletions
diff --git a/packages/SystemUI/res/layout/volume_dialog.xml b/packages/SystemUI/res/layout/volume_dialog.xml
index 67f620f6fc54..8df389866976 100644
--- a/packages/SystemUI/res/layout/volume_dialog.xml
+++ b/packages/SystemUI/res/layout/volume_dialog.xml
@@ -14,7 +14,6 @@
limitations under the License.
-->
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/volume_dialog_root"
android:layout_width="match_parent"
@@ -30,42 +29,47 @@
android:layout_marginTop="@dimen/volume_dialog_background_top_margin"
android:layout_marginBottom="@dimen/volume_dialog_background_vertical_margin"
android:background="@drawable/volume_dialog_background"
- app:layout_constraintBottom_toBottomOf="@id/volume_dialog_settings"
+ app:layout_constraintBottom_toBottomOf="@id/volume_dialog_bottom_section_container"
app:layout_constraintEnd_toEndOf="@id/volume_dialog_main_slider_container"
app:layout_constraintStart_toStartOf="@id/volume_dialog_main_slider_container"
app:layout_constraintTop_toTopOf="@id/volume_dialog_main_slider_container" />
- <include
- android:id="@id/volume_ringer_drawer"
- layout="@layout/volume_ringer_drawer"
+ <FrameLayout
+ android:id="@+id/volume_dialog_top_section_container"
android:layout_width="0dp"
android:layout_height="0dp"
- android:layout_marginEnd="@dimen/volume_dialog_ringer_drawer_diff_end_margin"
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_constraintHeight_default="spread"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintWidth_default="spread">
+
+ <include layout="@layout/volume_dialog_top_section" />
+ </FrameLayout>
<include
android:id="@+id/volume_dialog_main_slider_container"
layout="@layout/volume_dialog_slider" />
- <ImageButton
- android:id="@+id/volume_dialog_settings"
- android:layout_width="@dimen/volume_dialog_button_size"
- android:layout_height="@dimen/volume_dialog_button_size"
+ <FrameLayout
+ android:id="@+id/volume_dialog_bottom_section_container"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
android:layout_marginTop="@dimen/volume_dialog_components_spacing"
- android:background="@drawable/ripple_drawable_20dp"
- android:contentDescription="@string/accessibility_volume_settings"
- android:scaleType="centerInside"
- android:soundEffectsEnabled="false"
- android:tint="@androidprv:color/materialColorPrimary"
+ android:clipChildren="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/volume_dialog_main_slider_container"
+ app:layout_constraintHeight_default="wrap"
app:layout_constraintStart_toStartOf="@id/volume_dialog_main_slider_container"
app:layout_constraintTop_toBottomOf="@id/volume_dialog_main_slider_container"
- app:layout_constraintVertical_bias="0" />
+ app:layout_constraintVertical_bias="0"
+ app:layout_constraintWidth_default="wrap">
+
+ <include layout="@layout/volume_dialog_bottom_section" />
+ </FrameLayout>
<LinearLayout
android:id="@+id/volume_dialog_floating_sliders_container"
diff --git a/packages/SystemUI/res/layout/volume_dialog_bottom_section.xml b/packages/SystemUI/res/layout/volume_dialog_bottom_section.xml
new file mode 100644
index 000000000000..b94c430e011c
--- /dev/null
+++ b/packages/SystemUI/res/layout/volume_dialog_bottom_section.xml
@@ -0,0 +1,26 @@
+<!--
+ Copyright (C) 2024 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.
+-->
+<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ android:id="@+id/volume_dialog_settings"
+ android:layout_width="@dimen/volume_dialog_button_size"
+ android:layout_height="@dimen/volume_dialog_button_size"
+ android:layout_gravity="center"
+ android:background="@drawable/ripple_drawable_20dp"
+ android:contentDescription="@string/accessibility_volume_settings"
+ android:scaleType="centerInside"
+ android:soundEffectsEnabled="false"
+ android:tint="@androidprv:color/materialColorPrimary" /> \ No newline at end of file
diff --git a/packages/SystemUI/res/layout/volume_ringer_drawer.xml b/packages/SystemUI/res/layout/volume_dialog_top_section.xml
index 8f51dbca2774..4fc20e218c5e 100644
--- a/packages/SystemUI/res/layout/volume_ringer_drawer.xml
+++ b/packages/SystemUI/res/layout/volume_dialog_top_section.xml
@@ -23,16 +23,17 @@
android:clipToPadding="false"
android:gravity="center"
android:layoutDirection="ltr"
+ android:paddingEnd="@dimen/volume_dialog_ringer_drawer_diff_end_margin"
app:layoutDescription="@xml/volume_dialog_ringer_drawer_motion_scene">
<View
android:id="@+id/ringer_buttons_background"
android:layout_width="@dimen/volume_dialog_width"
android:layout_height="0dp"
- android:visibility="gone"
android:layout_marginTop="@dimen/volume_dialog_background_vertical_margin"
android:layout_marginBottom="@dimen/volume_dialog_background_vertical_margin"
- android:background="@drawable/volume_dialog_ringer_background" />
+ android:background="@drawable/volume_dialog_ringer_background"
+ android:visibility="gone" />
<!-- add ringer buttons here -->
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 220d8a99d130..7cf3f4db7e7e 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -2124,18 +2124,25 @@
<dimen name="volume_dialog_width">60dp</dimen>
<dimen name="volume_dialog_background_corner_radius">30dp</dimen>
- <dimen name="volume_dialog_background_vertical_margin">-10dp</dimen>
+ <dimen name="volume_dialog_background_vertical_margin">
+ @dimen/volume_dialog_buttons_margin_negative
+ </dimen>
<!-- top margin covers half the ringer button + components spacing -->
<dimen name="volume_dialog_background_top_margin">-28dp</dimen>
+ <dimen name="volume_dialog_window_margin">14dp</dimen>
<dimen name="volume_dialog_components_spacing">8dp</dimen>
<dimen name="volume_dialog_floating_sliders_spacing">8dp</dimen>
<dimen name="volume_dialog_floating_sliders_vertical_padding">10dp</dimen>
- <dimen name="volume_dialog_floating_sliders_vertical_padding_negative">-10dp</dimen>
+ <dimen name="volume_dialog_floating_sliders_vertical_padding_negative">
+ @dimen/volume_dialog_buttons_margin_negative
+ </dimen>
<dimen name="volume_dialog_floating_sliders_horizontal_padding">4dp</dimen>
<dimen name="volume_dialog_button_size">40dp</dimen>
<dimen name="volume_dialog_slider_width">52dp</dimen>
<dimen name="volume_dialog_slider_height">254dp</dimen>
+ <dimen name="volume_dialog_buttons_margin">10dp</dimen>
+ <dimen name="volume_dialog_buttons_margin_negative">-10dp</dimen>
<!--
A primary goal of this margin is to vertically constraint slider height in the landscape
orientation when the vertical space is limited
@@ -2148,7 +2155,11 @@
<dimen name="volume_dialog_background_square_corner_radius">12dp</dimen>
- <dimen name="volume_dialog_ringer_drawer_margin">10dp</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>
diff --git a/packages/SystemUI/res/xml/volume_dialog_constraint_set.xml b/packages/SystemUI/res/xml/volume_dialog_constraint_set.xml
index a8f616c2427d..dcc5d4f6635f 100644
--- a/packages/SystemUI/res/xml/volume_dialog_constraint_set.xml
+++ b/packages/SystemUI/res/xml/volume_dialog_constraint_set.xml
@@ -8,7 +8,7 @@
android:layout_width="@dimen/volume_dialog_slider_width"
android:layout_height="0dp"
android:layout_marginTop="@dimen/volume_dialog_slider_vertical_margin"
- android:layout_marginEnd="@dimen/volume_dialog_components_spacing"
+ android:layout_marginEnd="@dimen/volume_dialog_window_margin"
android:layout_marginBottom="@dimen/volume_dialog_slider_vertical_margin"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/packages/SystemUI/res/xml/volume_dialog_half_folded_constraint_set.xml b/packages/SystemUI/res/xml/volume_dialog_half_folded_constraint_set.xml
index b4d8ae791f36..3a5e41d5781a 100644
--- a/packages/SystemUI/res/xml/volume_dialog_half_folded_constraint_set.xml
+++ b/packages/SystemUI/res/xml/volume_dialog_half_folded_constraint_set.xml
@@ -8,7 +8,7 @@
android:layout_width="@dimen/volume_dialog_slider_width"
android:layout_height="0dp"
android:layout_marginTop="@dimen/volume_dialog_slider_vertical_margin"
- android:layout_marginEnd="@dimen/volume_dialog_components_spacing"
+ android:layout_marginEnd="@dimen/volume_dialog_window_margin"
android:layout_marginBottom="@dimen/volume_dialog_slider_vertical_margin"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/packages/SystemUI/res/xml/volume_dialog_ringer_drawer_motion_scene.xml b/packages/SystemUI/res/xml/volume_dialog_ringer_drawer_motion_scene.xml
index 1607121f230f..4c3dbd78cc3e 100644
--- a/packages/SystemUI/res/xml/volume_dialog_ringer_drawer_motion_scene.xml
+++ b/packages/SystemUI/res/xml/volume_dialog_ringer_drawer_motion_scene.xml
@@ -20,30 +20,9 @@
android:id="@+id/close_to_open_transition"
app:constraintSetEnd="@+id/volume_dialog_ringer_drawer_open"
app:constraintSetStart="@+id/volume_dialog_ringer_drawer_close"
- app:transitionEasing="cubic(0.05, 0.7, 0.1, 1.0)"
- app:duration="400">
- </Transition>
-
- <ConstraintSet android:id="@+id/volume_dialog_ringer_drawer_close">
- <Constraint
- android:id="@+id/volume_ringer_drawer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"/>
- </ConstraintSet>
-
- <ConstraintSet android:id="@+id/volume_dialog_ringer_drawer_open">
- <Constraint
- android:id="@+id/volume_ringer_drawer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"/>
- </ConstraintSet>
+ app:duration="400"
+ app:transitionEasing="cubic(0.05, 0.7, 0.1, 1.0)" />
+ <ConstraintSet android:id="@+id/volume_dialog_ringer_drawer_close" />
+ <ConstraintSet android:id="@+id/volume_dialog_ringer_drawer_open" />
</MotionScene> \ No newline at end of file
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 025e269b70b6..7b08317d5265 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
@@ -18,8 +18,13 @@ package com.android.systemui.volume.dialog.dagger.module
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.ui.VolumeDialogSlidersViewBinder
+import com.android.systemui.volume.dialog.ui.binder.ViewBinder
import dagger.Binds
import dagger.Module
+import dagger.Provides
/** Dagger module for volume dialog code in the volume package */
@Module
@@ -29,4 +34,14 @@ interface VolumeDialogModule {
fun bindVolumeDialogRingerFeedbackRepository(
ringerFeedbackRepository: VolumeDialogRingerFeedbackRepositoryImpl
): VolumeDialogRingerFeedbackRepository
+
+ companion object {
+
+ @Provides
+ fun provideViewBinders(
+ slidersViewBinder: VolumeDialogSlidersViewBinder,
+ ringerViewBinder: VolumeDialogRingerViewBinder,
+ settingsButtonViewBinder: VolumeDialogSettingsButtonViewBinder,
+ ): List<ViewBinder> = listOf(slidersViewBinder, ringerViewBinder, settingsButtonViewBinder)
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt
index 3d0c7d64b2a4..45fbf1a58cf9 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt
@@ -39,6 +39,7 @@ import com.android.systemui.volume.dialog.ringer.ui.viewmodel.RingerDrawerState
import com.android.systemui.volume.dialog.ringer.ui.viewmodel.RingerViewModel
import com.android.systemui.volume.dialog.ringer.ui.viewmodel.RingerViewModelState
import com.android.systemui.volume.dialog.ringer.ui.viewmodel.VolumeDialogRingerDrawerViewModel
+import com.android.systemui.volume.dialog.ui.binder.ViewBinder
import com.android.systemui.volume.dialog.ui.utils.suspendAnimate
import com.android.systemui.volume.dialog.ui.viewmodel.VolumeDialogViewModel
import javax.inject.Inject
@@ -60,7 +61,7 @@ class VolumeDialogRingerViewBinder
constructor(
private val viewModel: VolumeDialogRingerDrawerViewModel,
private val dialogViewModel: VolumeDialogViewModel,
-) {
+) : ViewBinder {
private val roundnessSpringForce =
SpringForce(1F).apply {
stiffness = 800F
@@ -73,10 +74,11 @@ constructor(
}
private val rgbEvaluator = ArgbEvaluator()
- fun CoroutineScope.bind(view: View) {
+ override fun CoroutineScope.bind(view: View) {
val volumeDialogBackgroundView = view.requireViewById<View>(R.id.volume_dialog_background)
val ringerBackgroundView = view.requireViewById<View>(R.id.ringer_buttons_background)
val drawerContainer = view.requireViewById<MotionLayout>(R.id.volume_ringer_drawer)
+
val unselectedButtonUiModel = RingerButtonUiModel.getUnselectedButton(view.context)
val selectedButtonUiModel = RingerButtonUiModel.getSelectedButton(view.context)
val volumeDialogBgSmallRadius =
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/binder/VolumeDialogSettingsButtonViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/binder/VolumeDialogSettingsButtonViewBinder.kt
index a330685fc6bb..54f04e274c03 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/binder/VolumeDialogSettingsButtonViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/binder/VolumeDialogSettingsButtonViewBinder.kt
@@ -21,6 +21,7 @@ import android.widget.ImageButton
import com.android.systemui.res.R
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogScope
import com.android.systemui.volume.dialog.settings.ui.viewmodel.VolumeDialogSettingsButtonViewModel
+import com.android.systemui.volume.dialog.ui.binder.ViewBinder
import com.android.systemui.volume.dialog.ui.viewmodel.VolumeDialogViewModel
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
@@ -34,9 +35,9 @@ class VolumeDialogSettingsButtonViewBinder
constructor(
private val viewModel: VolumeDialogSettingsButtonViewModel,
private val dialogViewModel: VolumeDialogViewModel,
-) {
+) : ViewBinder {
- fun CoroutineScope.bind(view: View) {
+ override fun CoroutineScope.bind(view: View) {
val button = view.requireViewById<ImageButton>(R.id.volume_dialog_settings)
launch { dialogViewModel.addTouchableBounds(button) }
viewModel.isVisible
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSlidersViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSlidersViewBinder.kt
index 7f58c835094f..0d970e5117c2 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSlidersViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSlidersViewBinder.kt
@@ -25,6 +25,7 @@ import com.android.systemui.res.R
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogScope
import com.android.systemui.volume.dialog.sliders.dagger.VolumeDialogSliderComponent
import com.android.systemui.volume.dialog.sliders.ui.viewmodel.VolumeDialogSlidersViewModel
+import com.android.systemui.volume.dialog.ui.binder.ViewBinder
import com.android.systemui.volume.dialog.ui.viewmodel.VolumeDialogViewModel
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
@@ -38,16 +39,16 @@ class VolumeDialogSlidersViewBinder
constructor(
private val viewModel: VolumeDialogSlidersViewModel,
private val dialogViewModel: VolumeDialogViewModel,
-) {
+) : ViewBinder {
- fun CoroutineScope.bind(view: View) {
+ override fun CoroutineScope.bind(view: View) {
val floatingSlidersContainer: ViewGroup =
view.requireViewById(R.id.volume_dialog_floating_sliders_container)
val mainSliderContainer: View =
view.requireViewById(R.id.volume_dialog_main_slider_container)
val background: View = view.requireViewById(R.id.volume_dialog_background)
- val settingsButton: View = view.requireViewById(R.id.volume_dialog_settings)
- val ringerDrawer: View = view.requireViewById(R.id.volume_ringer_drawer)
+ val bottomSection: View = view.requireViewById(R.id.volume_dialog_bottom_section_container)
+ val topSection: View = view.requireViewById(R.id.volume_dialog_top_section_container)
launch { dialogViewModel.addTouchableBounds(mainSliderContainer, floatingSlidersContainer) }
viewModel.sliders
@@ -55,7 +56,7 @@ constructor(
bindSlider(
uiModel.sliderComponent,
mainSliderContainer,
- arrayOf(mainSliderContainer, background, settingsButton, ringerDrawer),
+ arrayOf(mainSliderContainer, background, bottomSection, topSection),
)
val floatingSliderViewBinders = uiModel.floatingSliderComponent
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/ViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/ViewBinder.kt
new file mode 100644
index 000000000000..4d1af0d71108
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/ViewBinder.kt
@@ -0,0 +1,25 @@
+/*
+ * 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.ui.binder
+
+import android.view.View
+import kotlinx.coroutines.CoroutineScope
+
+interface ViewBinder {
+
+ fun CoroutineScope.bind(view: View)
+}
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 f2d7d956291c..d4a10db1840e 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
@@ -30,10 +30,7 @@ import com.android.systemui.res.R
import com.android.systemui.util.kotlin.awaitCancellationThenDispose
import com.android.systemui.volume.SystemUIInterpolators
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogScope
-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.shared.model.VolumeDialogVisibilityModel
-import com.android.systemui.volume.dialog.sliders.ui.VolumeDialogSlidersViewBinder
import com.android.systemui.volume.dialog.ui.utils.JankListenerFactory
import com.android.systemui.volume.dialog.ui.utils.suspendAnimate
import com.android.systemui.volume.dialog.ui.viewmodel.VolumeDialogViewModel
@@ -60,9 +57,7 @@ constructor(
private val viewModel: VolumeDialogViewModel,
private val jankListenerFactory: JankListenerFactory,
private val tracer: VolumeTracer,
- private val volumeDialogRingerViewBinder: VolumeDialogRingerViewBinder,
- private val slidersViewBinder: VolumeDialogSlidersViewBinder,
- private val settingsButtonViewBinder: VolumeDialogSettingsButtonViewBinder,
+ private val viewBinders: List<@JvmSuppressWildcards ViewBinder>,
) {
private val dialogShowAnimationDurationMs =
@@ -105,9 +100,9 @@ constructor(
.awaitCancellationThenDispose()
}
- with(volumeDialogRingerViewBinder) { bind(root) }
- with(slidersViewBinder) { bind(root) }
- with(settingsButtonViewBinder) { bind(root) }
+ for (viewBinder in viewBinders) {
+ with(viewBinder) { bind(root) }
+ }
}
private fun CoroutineScope.animateVisibility(
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinderKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinderKosmos.kt
index dc09e3233b1e..da32095dce6d 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinderKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinderKosmos.kt
@@ -32,8 +32,10 @@ val Kosmos.volumeDialogViewBinder by
volumeDialogViewModel,
jankListenerFactory,
volumeTracer,
- volumeDialogRingerViewBinder,
- volumeDialogSlidersViewBinder,
- volumeDialogSettingsButtonViewBinder,
+ listOf(
+ volumeDialogSlidersViewBinder,
+ volumeDialogRingerViewBinder,
+ volumeDialogSettingsButtonViewBinder,
+ ),
)
}