blob: 0e6f53abca40af76c1cef17202c4d9038cb9305d [file] [log] [blame]
/*
* Copyright (C) 2022 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.settingslib.spa.widget.preference
import androidx.compose.foundation.clickable
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import com.android.settingslib.spa.framework.compose.stateOf
/**
* The widget model for [Preference] widget.
*/
interface PreferenceModel {
/**
* The title of this [Preference].
*/
val title: String
/**
* The summary of this [Preference].
*/
val summary: State<String>
get() = stateOf("")
/**
* The icon of this [Preference].
*
* Default is `null` which means no icon.
*/
val icon: (@Composable () -> Unit)?
get() = null
/**
* Indicates whether this [Preference] is enabled.
*
* Disabled [Preference] will be displayed in disabled style.
*/
val enabled: State<Boolean>
get() = stateOf(true)
/**
* The on click handler of this [Preference].
*
* This also indicates whether this [Preference] is clickable.
*/
val onClick: (() -> Unit)?
get() = null
}
/**
* Preference widget.
*
* Data is provided through [PreferenceModel].
*/
@Composable
fun Preference(model: PreferenceModel) {
val modifier = remember(model.enabled.value, model.onClick) {
model.onClick?.let { onClick ->
Modifier.clickable(enabled = model.enabled.value, onClick = onClick)
} ?: Modifier
}
BasePreference(
title = model.title,
summary = model.summary,
modifier = modifier,
icon = model.icon,
enabled = model.enabled,
)
}