-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathSettingsScreen.kt
More file actions
102 lines (96 loc) · 3.84 KB
/
SettingsScreen.kt
File metadata and controls
102 lines (96 loc) · 3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package com.rickyhu.hushkeyboard.settings
import android.content.Intent
import android.net.Uri
import androidx.annotation.VisibleForTesting
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.navigation.compose.hiltViewModel
import com.rickyhu.hushkeyboard.data.ThemeOption
import com.rickyhu.hushkeyboard.data.WideNotationOption
import com.rickyhu.hushkeyboard.settings.ui.AddSpaceBetweenNotationSwitchItem
import com.rickyhu.hushkeyboard.settings.ui.AppVersionItem
import com.rickyhu.hushkeyboard.settings.ui.SmartDeleteSwitchItem
import com.rickyhu.hushkeyboard.settings.ui.ThemeOptionDropdownItem
import com.rickyhu.hushkeyboard.settings.ui.VibrateOnTapSwitchItem
import com.rickyhu.hushkeyboard.settings.ui.WideNotationOptionDropdownItem
import com.rickyhu.hushkeyboard.theme.HushKeyboardTheme
@Composable
fun SettingsScreen(
viewModel: SettingsViewModel = hiltViewModel()
) {
val state by viewModel.settingsState.collectAsState(SettingsState())
SettingsContent(
state,
onThemeSelected = viewModel::updateThemeOption,
onWideNotationOptionSelected = viewModel::updateWideNotationOption,
onSmartDeleteChanged = viewModel::updateSmartDelete,
onAddSpaceBetweenNotationChanged = viewModel::updateAddSpaceBetweenNotation,
onVibrateOnTapChanged = viewModel::updateVibrateOnTap
)
}
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SettingsContent(
state: SettingsState,
onThemeSelected: (themeOption: ThemeOption) -> Unit,
onWideNotationOptionSelected: (wideNotationOption: WideNotationOption) -> Unit,
onSmartDeleteChanged: (smartDelete: Boolean) -> Unit,
onAddSpaceBetweenNotationChanged: (addSpaceAfterNotation: Boolean) -> Unit,
onVibrateOnTapChanged: (vibrateOnTap: Boolean) -> Unit
) {
val context = LocalContext.current
Scaffold(
topBar = {
TopAppBar(title = { Text("Settings") })
},
content = { padding ->
Column(modifier = Modifier.padding(padding)) {
ThemeOptionDropdownItem(
currentTheme = state.themeOption,
onThemeSelected = onThemeSelected
)
WideNotationOptionDropdownItem(
currentOption = state.wideNotationOption,
onOptionSelected = onWideNotationOptionSelected
)
SmartDeleteSwitchItem(
value = state.smartDelete,
onValueChanged = onSmartDeleteChanged
)
AddSpaceBetweenNotationSwitchItem(
value = state.addSpaceAfterNotation,
onValueChanged = onAddSpaceBetweenNotationChanged
)
VibrateOnTapSwitchItem(
value = state.vibrateOnTap,
onValueChanged = onVibrateOnTapChanged
)
AppVersionItem(
onClick = {
val url = "https://github.com/ricky9667/HushKeyboard"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
context.startActivity(intent)
}
)
}
}
)
}
@Preview
@Composable
fun SettingsScreenPreview() {
HushKeyboardTheme {
SettingsScreen()
}
}