Skip to content

Commit 8f1dddc

Browse files
committed
feature: compose param item list
1 parent f56d682 commit 8f1dddc

19 files changed

Lines changed: 660 additions & 190 deletions

File tree

app/src/main/kotlin/com/androidvip/sysctlgui/di/PresentationModule.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ import com.androidvip.sysctlgui.widgets.FavoriteWidgetParamUpdater
99
import kotlinx.coroutines.Dispatchers
1010
import org.koin.android.ext.koin.androidContext
1111
import org.koin.androidx.viewmodel.dsl.viewModel
12+
import org.koin.androidx.viewmodel.dsl.viewModelOf
1213
import org.koin.dsl.module
1314

1415
internal val presentationModules = module {
1516
viewModel { BrowseParamsViewModel(get(), Dispatchers.IO, get()) }
16-
viewModel { ListParamsViewModel(get()) }
17-
viewModel { UserParamsViewModel(get(), get(), get()) }
18-
viewModel { MainViewModel() }
17+
viewModelOf(::ListParamsViewModel)
18+
viewModelOf(::UserParamsViewModel)
19+
viewModelOf(::MainViewModel)
1920
viewModel { ExportOptionsViewModel(get(), get(), get()) }
2021

2122
single { FavoriteWidgetParamUpdater(androidContext()).getListener() }

app/src/main/kotlin/com/androidvip/sysctlgui/ui/params/OnParamItemClickedListener.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ package com.androidvip.sysctlgui.ui.params
33
import android.view.View
44
import com.androidvip.sysctlgui.data.models.KernelParam
55

6-
interface OnParamItemClickedListener {
6+
fun interface OnParamItemClickedListener {
77
fun onParamItemClicked(param: KernelParam, itemLayout: View)
88
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package com.androidvip.sysctlgui.ui.params.browse
2+
3+
import androidx.compose.foundation.Canvas
4+
import androidx.compose.foundation.background
5+
import androidx.compose.foundation.clickable
6+
import androidx.compose.foundation.layout.Arrangement
7+
import androidx.compose.foundation.layout.Box
8+
import androidx.compose.foundation.layout.Row
9+
import androidx.compose.foundation.layout.fillMaxWidth
10+
import androidx.compose.foundation.layout.padding
11+
import androidx.compose.foundation.layout.size
12+
import androidx.compose.material3.Icon
13+
import androidx.compose.material3.MaterialTheme
14+
import androidx.compose.material3.Text
15+
import androidx.compose.runtime.Composable
16+
import androidx.compose.ui.Alignment
17+
import androidx.compose.ui.Modifier
18+
import androidx.compose.ui.res.painterResource
19+
import androidx.compose.ui.text.font.FontWeight
20+
import androidx.compose.ui.text.style.TextOverflow
21+
import androidx.compose.ui.tooling.preview.Preview
22+
import androidx.compose.ui.unit.dp
23+
import com.androidvip.sysctlgui.R
24+
import com.androidvip.sysctlgui.data.models.KernelParam
25+
import com.androidvip.sysctlgui.design.theme.md_theme_light_background
26+
import java.io.File
27+
28+
@Composable
29+
fun ParamBrowseItem(
30+
onParamClick: (KernelParam) -> Unit,
31+
onDirectoryChanged: (File) -> Unit,
32+
param: KernelParam,
33+
paramFile: File
34+
) {
35+
val isDir = paramFile.isDirectory
36+
val primaryContainerColor = MaterialTheme.colorScheme.primaryContainer
37+
val surfaceColor = MaterialTheme.colorScheme.surfaceVariant
38+
val tintColor = if (isDir) {
39+
MaterialTheme.colorScheme.onPrimaryContainer
40+
} else {
41+
MaterialTheme.colorScheme.onSurfaceVariant
42+
}
43+
44+
Box(
45+
modifier = Modifier
46+
.clickable {
47+
if (isDir) onDirectoryChanged(paramFile) else onParamClick(param)
48+
}
49+
) {
50+
Row(
51+
modifier = Modifier
52+
.fillMaxWidth()
53+
.padding(16.dp),
54+
verticalAlignment = Alignment.CenterVertically,
55+
horizontalArrangement = Arrangement.spacedBy(16.dp)
56+
) {
57+
Box(contentAlignment = Alignment.Center) {
58+
Canvas(modifier = Modifier.size(42.dp), onDraw = {
59+
drawCircle(color = if (isDir) primaryContainerColor else surfaceColor)
60+
})
61+
62+
val iconResource = if (isDir) {
63+
R.drawable.ic_folder_outline
64+
} else {
65+
R.drawable.ic_file_outline
66+
}
67+
Icon(
68+
painter = painterResource(id = iconResource),
69+
tint = tintColor,
70+
contentDescription = ""
71+
)
72+
}
73+
Text(
74+
text = param.shortName,
75+
maxLines = 1,
76+
overflow = TextOverflow.Ellipsis,
77+
style = if (isDir) {
78+
MaterialTheme.typography.bodyLarge.copy(fontWeight = FontWeight.Medium)
79+
} else {
80+
MaterialTheme.typography.bodyMedium
81+
}
82+
)
83+
}
84+
}
85+
}
86+
87+
@Preview
88+
@Composable
89+
fun ParamItemPreview() {
90+
val param = KernelParam(name = "test", value = "success")
91+
Box(modifier = Modifier.background(md_theme_light_background)) {
92+
ParamBrowseItem(
93+
onParamClick = {},
94+
onDirectoryChanged = {},
95+
param = param,
96+
paramFile = File("/")
97+
)
98+
}
99+
}

app/src/main/kotlin/com/androidvip/sysctlgui/ui/params/list/KernelParamListAdapter.kt

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)