Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6c0482eb authored by Mohammed Althaf T's avatar Mohammed Althaf T 😊 Committed by Nishith Khanna
Browse files

SettingsLib: Use android.widget switch for compose

Change-Id: Id328dcb58829458e28090ed01e3b8b9f0a88f91b
parent 7bff6d6b
Loading
Loading
Loading
Loading
+30 −3
Original line number Diff line number Diff line
@@ -16,10 +16,13 @@

package com.android.settingslib.spa.widget.ui

import android.widget.Switch
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.material3.Switch
import androidx.compose.foundation.layout.wrapContentWidth
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.AndroidView
import com.android.settingslib.spa.framework.util.wrapOnSwitchWithLog

@Composable
@@ -30,14 +33,14 @@ internal fun SettingsSwitch(
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
) {
    if (checked != null) {
        Switch(
        ESwitch(
            checked = checked,
            onCheckedChange = wrapOnSwitchWithLog(onCheckedChange),
            enabled = changeable(),
            interactionSource = interactionSource,
        )
    } else {
        Switch(
        ESwitch(
            checked = false,
            onCheckedChange = null,
            enabled = false,
@@ -45,3 +48,27 @@ internal fun SettingsSwitch(
        )
    }
}

@Composable
fun ESwitch(
    checked: Boolean,
    onCheckedChange: ((Boolean) -> Unit)?,
    enabled: Boolean = true,
    interactionSource: MutableInteractionSource // Unused interactionSource, keep for consistency
) {
    AndroidView(
        factory = { context ->
            Switch(context)
        },
        update = { view ->
            view.isChecked = checked
            view.isEnabled = enabled
            view.setOnCheckedChangeListener { _, newChecked ->
                if (newChecked != checked && onCheckedChange != null) {
                    onCheckedChange(newChecked)
                }
            }
        },
        modifier = Modifier.wrapContentWidth()
    )
}