This repository has been archived by the owner on Jan 16, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 34
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
233 additions
and
11 deletions.
There are no files selected for viewing
18 changes: 18 additions & 0 deletions
18
app/src/main/java/com/github/jing332/alistandroid/config/AppConfig.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package com.github.jing332.alistandroid.config | ||
|
||
import com.funny.data_saver.core.DataSaverPreferences | ||
import com.funny.data_saver.core.mutableDataSaverStateOf | ||
import com.github.jing332.alistandroid.app | ||
|
||
object AppConfig { | ||
private val pref = | ||
DataSaverPreferences(app.getSharedPreferences("app", 0)) | ||
|
||
|
||
var isAutoCheckUpdate = mutableDataSaverStateOf( | ||
dataSaverInterface = pref, | ||
key = "isCheckUpdate", | ||
initialValue = true | ||
) | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
8 changes: 7 additions & 1 deletion
8
app/src/main/java/com/github/jing332/alistandroid/ui/nav/config/AListConfigViewModel.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
22 changes: 22 additions & 0 deletions
22
app/src/main/java/com/github/jing332/alistandroid/ui/nav/settings/SettingsScreen.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,30 @@ | ||
package com.github.jing332.alistandroid.ui.nav.settings | ||
|
||
import androidx.compose.foundation.layout.Column | ||
import androidx.compose.foundation.layout.statusBarsPadding | ||
import androidx.compose.material.icons.Icons | ||
import androidx.compose.material.icons.filled.ArrowCircleUp | ||
import androidx.compose.material3.Icon | ||
import androidx.compose.material3.Text | ||
import androidx.compose.runtime.Composable | ||
import androidx.compose.runtime.getValue | ||
import androidx.compose.runtime.remember | ||
import androidx.compose.ui.Modifier | ||
import com.github.jing332.alistandroid.config.AppConfig | ||
|
||
@Composable | ||
fun SettingsScreen() { | ||
Column(Modifier.statusBarsPadding()) { | ||
var checkUpdate by remember { AppConfig.isAutoCheckUpdate } | ||
PreferenceSwitch( | ||
title = { Text("自动检查更新") }, | ||
subTitle = { Text("打开程序主界面时从Github检查更新") }, | ||
checked = checkUpdate, | ||
onCheckedChange = { checkUpdate = it }, | ||
icon = { | ||
Icon(Icons.Default.ArrowCircleUp, contentDescription = null) | ||
} | ||
) | ||
|
||
} | ||
} |
170 changes: 170 additions & 0 deletions
170
app/src/main/java/com/github/jing332/alistandroid/ui/nav/settings/SettingsWidget.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,170 @@ | ||
package com.github.jing332.alistandroid.ui.nav.settings | ||
|
||
import androidx.compose.foundation.clickable | ||
import androidx.compose.foundation.interaction.MutableInteractionSource | ||
import androidx.compose.foundation.layout.Column | ||
import androidx.compose.foundation.layout.ColumnScope | ||
import androidx.compose.foundation.layout.Row | ||
import androidx.compose.foundation.layout.RowScope | ||
import androidx.compose.foundation.layout.fillMaxWidth | ||
import androidx.compose.foundation.layout.padding | ||
import androidx.compose.material.ripple.rememberRipple | ||
import androidx.compose.material3.LocalTextStyle | ||
import androidx.compose.material3.MaterialTheme | ||
import androidx.compose.material3.Surface | ||
import androidx.compose.material3.Switch | ||
import androidx.compose.material3.minimumInteractiveComponentSize | ||
import androidx.compose.runtime.Composable | ||
import androidx.compose.runtime.CompositionLocalProvider | ||
import androidx.compose.runtime.getValue | ||
import androidx.compose.runtime.mutableStateOf | ||
import androidx.compose.runtime.remember | ||
import androidx.compose.runtime.setValue | ||
import androidx.compose.ui.Alignment | ||
import androidx.compose.ui.Modifier | ||
import androidx.compose.ui.draw.clip | ||
import androidx.compose.ui.unit.dp | ||
import androidx.compose.ui.window.Dialog | ||
import com.github.jing332.text_searcher.ui.widgets.LabelSlider | ||
|
||
@Composable | ||
internal fun PreferenceSwitch( | ||
modifier: Modifier = Modifier, | ||
title: @Composable ColumnScope.() -> Unit, | ||
subTitle: @Composable ColumnScope.() -> Unit, | ||
icon: @Composable () -> Unit = {}, | ||
|
||
checked: Boolean, | ||
onCheckedChange: (Boolean) -> Unit | ||
) { | ||
Row(modifier = modifier | ||
.minimumInteractiveComponentSize() | ||
.clip(MaterialTheme.shapes.extraSmall) | ||
.clickable( | ||
interactionSource = remember { MutableInteractionSource() }, | ||
indication = rememberRipple() | ||
) { | ||
onCheckedChange(!checked) | ||
} | ||
.padding(8.dp) | ||
) { | ||
Column(Modifier.align(Alignment.CenterVertically)) { | ||
icon(); | ||
} | ||
|
||
Column( | ||
Modifier | ||
.weight(1f) | ||
.align(Alignment.CenterVertically) | ||
.padding(start = 8.dp) | ||
) { | ||
CompositionLocalProvider(LocalTextStyle provides MaterialTheme.typography.titleMedium) { | ||
title() | ||
} | ||
|
||
CompositionLocalProvider(LocalTextStyle provides MaterialTheme.typography.titleSmall) { | ||
subTitle() | ||
} | ||
} | ||
Switch(checked = checked, onCheckedChange = onCheckedChange) | ||
} | ||
} | ||
|
||
@Composable | ||
internal fun BasePreferenceWidget( | ||
modifier: Modifier = Modifier, | ||
onClick: () -> Unit, | ||
title: @Composable () -> Unit, | ||
subTitle: @Composable () -> Unit, | ||
icon: @Composable () -> Unit = {}, | ||
content: @Composable RowScope.() -> Unit, | ||
) { | ||
Row(modifier = modifier | ||
.minimumInteractiveComponentSize() | ||
.clip(MaterialTheme.shapes.extraSmall) | ||
.clickable( | ||
interactionSource = remember { MutableInteractionSource() }, | ||
indication = rememberRipple() | ||
) { | ||
onClick() | ||
} | ||
.padding(8.dp) | ||
) { | ||
icon() | ||
|
||
Column( | ||
Modifier | ||
.weight(1f) | ||
.align(Alignment.CenterVertically) | ||
) { | ||
CompositionLocalProvider(LocalTextStyle provides MaterialTheme.typography.titleLarge) { | ||
title() | ||
} | ||
|
||
CompositionLocalProvider(LocalTextStyle provides MaterialTheme.typography.titleSmall) { | ||
subTitle() | ||
} | ||
} | ||
|
||
Row(Modifier.align(Alignment.CenterVertically)) { | ||
content() | ||
} | ||
} | ||
} | ||
|
||
@Composable | ||
internal fun PreferenceSlider( | ||
title: @Composable () -> Unit, | ||
subTitle: @Composable () -> Unit, | ||
value: Float, | ||
onValueChange: (Float) -> Unit, | ||
valueRange: ClosedFloatingPointRange<Float> = 0f..1f, | ||
steps: Int = 0, | ||
label: @Composable (title: @Composable () -> Unit) -> Unit, | ||
) { | ||
PreferenceDialog(title = title, subTitle = subTitle, dialogContent = { | ||
LabelSlider( | ||
value = value, | ||
onValueChange = onValueChange, | ||
valueRange = valueRange, | ||
steps = steps | ||
) { | ||
label(title) | ||
} | ||
}, | ||
endContent = { | ||
label(title) | ||
} | ||
) | ||
} | ||
|
||
@Composable | ||
internal fun PreferenceDialog( | ||
modifier: Modifier = Modifier, | ||
title: @Composable () -> Unit, | ||
subTitle: @Composable () -> Unit, | ||
|
||
dialogContent: @Composable ColumnScope.() -> Unit, | ||
endContent: @Composable RowScope.() -> Unit = {}, | ||
) { | ||
var showDialog by remember { mutableStateOf(false) } | ||
if (showDialog) { | ||
Dialog(onDismissRequest = { showDialog = false }) { | ||
Surface( | ||
modifier = Modifier.fillMaxWidth(), | ||
tonalElevation = 4.dp, | ||
shape = MaterialTheme.shapes.small, | ||
) { | ||
Column(Modifier.padding(8.dp)) { | ||
title() | ||
dialogContent() | ||
} | ||
} | ||
} | ||
} | ||
BasePreferenceWidget(modifier, onClick = { | ||
showDialog = true | ||
}, title = title, subTitle = subTitle) { | ||
endContent() | ||
} | ||
} |