feat: Haptic on Lawnchair settings (#6470)
* feat: Haptic on Lawnchair settings Signed-off-by: Pun Butrach <pun.butrach@gmail.com> * chore: Spotlessified Signed-off-by: Pun Butrach <pun.butrach@gmail.com> --------- Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
+5
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user