diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SliderPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SliderPreference.kt index ffe88f283d..4922032c79 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SliderPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SliderPreference.kt @@ -35,6 +35,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameterProvider @@ -46,6 +47,8 @@ import app.lawnchair.ui.theme.LawnchairTheme import app.lawnchair.ui.util.preview.PreferenceGroupPreviewContainer import app.lawnchair.ui.util.preview.PreviewLawnchair import com.android.launcher3.R +import com.android.launcher3.util.MSDLPlayerWrapper +import com.google.android.msdl.data.model.MSDLToken import kotlin.math.roundToInt @Composable @@ -112,6 +115,12 @@ private fun SliderPreference( showUnit: String = "", ) { var sliderValue by remember { mutableFloatStateOf(value) } + val mMSDLPlayerWrapper = MSDLPlayerWrapper.INSTANCE.get(LocalContext.current) + val getAppropriateHaptic = if (step == 0f) { + MSDLToken.DRAG_INDICATOR_CONTINUOUS + } else { + MSDLToken.DRAG_INDICATOR_DISCRETE + } DisposableEffect(value) { sliderValue = value @@ -156,7 +165,10 @@ private fun SliderPreference( description = { Slider( value = sliderValue, - onValueChange = { newValue -> sliderValue = newValue }, + onValueChange = { newValue -> + sliderValue = newValue + mMSDLPlayerWrapper.playToken(getAppropriateHaptic) + }, onValueChangeFinished = { onValueChangeFinished(sliderValue) }, valueRange = valueRange, steps = getSteps(valueRange, step), diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SwitchPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SwitchPreference.kt index 2acc682580..02ccfee797 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SwitchPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SwitchPreference.kt @@ -36,6 +36,7 @@ import androidx.compose.material3.ripple import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.unit.dp @@ -45,6 +46,8 @@ import app.lawnchair.ui.theme.LawnchairTheme import app.lawnchair.ui.theme.dividerColor import app.lawnchair.ui.util.preview.PreferenceGroupPreviewContainer import app.lawnchair.ui.util.preview.PreviewLawnchair +import com.android.launcher3.util.MSDLPlayerWrapper +import com.google.android.msdl.data.model.MSDLToken @Composable fun SwitchPreference( @@ -81,6 +84,12 @@ fun SwitchPreference( onClick: (() -> Unit)? = null, ) { val interactionSource = remember { MutableInteractionSource() } + val mMSDLPlayerWrapper = MSDLPlayerWrapper.INSTANCE.get(LocalContext.current) + + val wrappedOnCheckedChange: (Boolean) -> Unit = { newValue -> + mMSDLPlayerWrapper.playToken(if (newValue) MSDLToken.SWITCH_ON else MSDLToken.SWITCH_OFF) + onCheckedChange(newValue) + } PreferenceTemplate( modifier = modifier.clickable( @@ -91,7 +100,7 @@ fun SwitchPreference( if (onClick != null) { onClick() } else { - onCheckedChange(!checked) + wrappedOnCheckedChange(!checked) } }, contentModifier = Modifier @@ -115,7 +124,7 @@ fun SwitchPreference( .padding(all = 16.dp) .height(24.dp), checked = checked, - onCheckedChange = onCheckedChange, + onCheckedChange = wrappedOnCheckedChange, enabled = enabled, interactionSource = interactionSource, thumbContent = { diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt index e10b8c97d8..3e0802ba19 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt @@ -37,7 +37,9 @@ import app.lawnchair.util.FileAccessState import app.lawnchair.util.isGestureNavContractCompatible import com.android.launcher3.R import com.android.launcher3.Utilities +import com.android.launcher3.util.MSDLPlayerWrapper import com.android.systemui.shared.system.BlurUtils +import com.google.android.msdl.data.model.MSDLToken @Composable fun ExperimentalFeaturesPreferences( @@ -45,6 +47,8 @@ fun ExperimentalFeaturesPreferences( ) { val prefs = preferenceManager() val prefs2 = preferenceManager2() + + val mMSDLPlayerWrapper = MSDLPlayerWrapper.INSTANCE.get(LocalContext.current) PreferenceLayout( label = stringResource(id = R.string.experimental_features_label), backArrowVisible = !LocalIsExpandedScreen.current, @@ -93,6 +97,7 @@ fun ExperimentalFeaturesPreferences( Switch( checked = enabled, onCheckedChange = { + mMSDLPlayerWrapper.playToken(if (it) MSDLToken.SWITCH_ON else MSDLToken.SWITCH_OFF) enableFolderIconShapeCustomizationAdapter.onChange(it) // Clean-up when user disables folder shape customisation. if (!it) {