Skip to content

Commit 1b9ffbe

Browse files
committed
feature: added new string resources
1 parent 996e543 commit 1b9ffbe

28 files changed

Lines changed: 414 additions & 248 deletions

File tree

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,14 @@
11
package com.androidvip.sysctlgui
22

3-
import android.app.Activity
43
import android.content.Context
5-
import android.content.res.ColorStateList
6-
import android.net.Uri
74
import android.os.Bundle
85
import android.os.Handler
96
import android.os.Looper
10-
import android.view.View
117
import android.widget.Toast
12-
import androidx.annotation.AttrRes
13-
import androidx.core.view.ViewCompat
14-
import androidx.fragment.app.Fragment
158
import com.androidvip.sysctlgui.receivers.TaskerReceiver
16-
import com.google.android.material.color.ColorRoles
17-
import com.google.android.material.color.MaterialColors
18-
import com.google.android.material.snackbar.Snackbar
19-
import kotlinx.coroutines.Dispatchers
20-
import kotlinx.coroutines.withContext
21-
import java.io.InputStream
229
import kotlin.contracts.ExperimentalContracts
2310
import kotlin.contracts.contract
2411

25-
fun View.goAway() { this.visibility = View.GONE }
26-
fun View.hide() { this.visibility = View.INVISIBLE }
27-
fun View.show() { this.visibility = View.VISIBLE }
28-
29-
fun View.getColorRoles(@AttrRes colorAttrRes: Int = androidx.appcompat.R.attr.colorPrimary): ColorRoles {
30-
val color = MaterialColors.getColor(this, colorAttrRes)
31-
return MaterialColors.getColorRoles(context, color)
32-
}
33-
34-
fun Snackbar.showAsLight() {
35-
val roles = view.getColorRoles()
36-
ViewCompat.setBackgroundTintList(view, ColorStateList.valueOf(roles.accentContainer))
37-
setTextColor(roles.accent)
38-
show()
39-
}
40-
41-
fun Fragment.toast(messageRes: Int, length: Int = Toast.LENGTH_SHORT) {
42-
if (!isAdded) return
43-
requireContext().toast(getString(messageRes), length)
44-
}
45-
4612
fun Context?.toast(messageRes: Int, length: Int = Toast.LENGTH_SHORT) {
4713
if (this == null) return
4814
toast(getString(messageRes), length)
@@ -61,34 +27,10 @@ fun Context.runOnUiThread(f: Context.() -> Unit) {
6127
}
6228
}
6329

64-
fun Uri.readLines(context: Context?, forEachLine: (String) -> Unit) {
65-
context?.contentResolver?.openInputStream(this).readLines(forEachLine)
66-
}
67-
68-
fun InputStream?.readLines(forEachLine: (String) -> Unit) {
69-
this?.use { inputStream ->
70-
inputStream.bufferedReader().use {
71-
it.readLines().forEach { line ->
72-
forEachLine(line)
73-
}
74-
}
75-
}
76-
}
77-
7830
@ExperimentalContracts
7931
fun Bundle?.isValidTaskerBundle() : Boolean {
8032
contract {
8133
returns(true) implies (this@isValidTaskerBundle != null)
8234
}
8335
return this != null && containsKey(TaskerReceiver.BUNDLE_EXTRA_LIST_NUMBER)
8436
}
85-
86-
suspend inline fun Activity?.runSafeOnUiThread(crossinline uiBlock: () -> Unit) {
87-
this?.let {
88-
if (!it.isFinishing && !it.isDestroyed) {
89-
withContext(Dispatchers.Main) {
90-
runCatching(uiBlock)
91-
}
92-
}
93-
}
94-
}

app/src/main/kotlin/com/androidvip/sysctlgui/ui/components/ErrorContainer.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ import androidx.compose.runtime.remember
2626
import androidx.compose.runtime.setValue
2727
import androidx.compose.ui.Alignment
2828
import androidx.compose.ui.Modifier
29+
import androidx.compose.ui.res.stringResource
2930
import androidx.compose.ui.unit.dp
31+
import com.androidvip.sysctlgui.R
3032

3133
private const val ERROR_CONTAINER_ANIMATION_DURATION = 4000
3234

@@ -80,7 +82,7 @@ internal fun ErrorContainer(message: String, onAnimationEnd: () -> Unit) {
8082
)
8183
Column(verticalArrangement = Arrangement.spacedBy(4.dp)) {
8284
Text(
83-
text = "Error",
85+
text = stringResource(R.string.error),
8486
style = MaterialTheme.typography.titleMedium,
8587
color = MaterialTheme.colorScheme.onErrorContainer
8688
)

app/src/main/kotlin/com/androidvip/sysctlgui/ui/main/MainTopBar.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ fun MainTopBar(
3535
IconButton(onClick = onBackPressed) {
3636
Icon(
3737
imageVector = Icons.AutoMirrored.Rounded.ArrowBack,
38-
contentDescription = "Back"
38+
contentDescription = stringResource(R.string.go_back)
3939
)
4040
}
4141
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import androidx.compose.ui.Alignment
1818
import androidx.compose.ui.Modifier
1919
import androidx.compose.ui.platform.LocalContext
2020
import androidx.compose.ui.res.painterResource
21+
import androidx.compose.ui.res.stringResource
2122
import androidx.compose.ui.text.AnnotatedString
2223
import androidx.compose.ui.text.TextLinkStyles
2324
import androidx.compose.ui.text.font.FontWeight
@@ -109,7 +110,7 @@ private fun DocumentationBottomSheetContent(
109110
contentDescription = null,
110111
modifier = Modifier.padding(end = 8.dp)
111112
)
112-
Text(text = "Read more")
113+
Text(text = stringResource(R.string.read_more))
113114
}
114115
}
115116
}

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import androidx.compose.ui.Modifier
4343
import androidx.compose.ui.graphics.painter.Painter
4444
import androidx.compose.ui.platform.LocalContext
4545
import androidx.compose.ui.res.painterResource
46+
import androidx.compose.ui.res.stringResource
4647
import androidx.compose.ui.semantics.Role
4748
import androidx.compose.ui.semantics.contentDescription
4849
import androidx.compose.ui.semantics.semantics
@@ -151,7 +152,8 @@ private fun ParamBrowseScreenContent(
151152
onRefresh: () -> Unit
152153
) {
153154
val listState = rememberLazyListState()
154-
val pullRefreshState = rememberPullRefreshState(refreshing = isRefreshing, onRefresh = onRefresh)
155+
val pullRefreshState =
156+
rememberPullRefreshState(refreshing = isRefreshing, onRefresh = onRefresh)
155157
var headerVisible by remember { mutableStateOf(backEnabled) }
156158

157159
BackHandler(enabled = backEnabled, onBack = onBackPressed)
@@ -236,7 +238,10 @@ private fun ParamBrowseScreenContent(
236238
modifier = Modifier.align(Alignment.BottomCenter)
237239
) {
238240
InfoItem(
239-
text = "Read documentation for \"${documentation?.title}\"",
241+
text = stringResource(
242+
R.string.read_documentation_format,
243+
documentation?.title.orEmpty()
244+
),
240245
textStyle = MaterialTheme.typography.titleSmall.copy(
241246
textDecoration = TextDecoration.Underline,
242247
color = MaterialTheme.colorScheme.primary

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import androidx.compose.ui.Alignment
2323
import androidx.compose.ui.Modifier
2424
import androidx.compose.ui.draw.clip
2525
import androidx.compose.ui.res.painterResource
26+
import androidx.compose.ui.res.stringResource
2627
import androidx.compose.ui.semantics.contentDescription
2728
import androidx.compose.ui.semantics.semantics
2829
import androidx.compose.ui.text.font.FontWeight
@@ -43,9 +44,9 @@ fun ParamFileRow(
4344
) {
4445
Box(modifier = Modifier.clickable { onParamClicked(param) }) {
4546
val rowDescription = if (param.isDirectory) {
46-
"Directory: ${param.name}"
47+
stringResource(R.string.acessibility_directory_description_format, param.name)
4748
} else {
48-
"Parameter: ${param.name}"
49+
stringResource(R.string.acessibility_param_description_format, param.name)
4950
}
5051
Row(
5152
modifier = modifier
@@ -101,7 +102,7 @@ private fun ParamIcon(param: UiKernelParam) {
101102
}
102103
}
103104

104-
val iconId = if (param.isDirectory) R.drawable.ic_folder else R.drawable.ic_file
105+
val iconId = if (param.isDirectory) R.drawable.ic_folder else R.drawable.ic_file
105106

106107
Box(
107108
modifier = Modifier
@@ -112,7 +113,7 @@ private fun ParamIcon(param: UiKernelParam) {
112113
) {
113114
Icon(
114115
painter = painterResource(iconId),
115-
contentDescription = "Parameter icon",
116+
contentDescription = stringResource(R.string.acessibility_param_icon_description),
116117
modifier = Modifier.size(24.dp),
117118
tint = iconColor
118119
)
@@ -124,14 +125,14 @@ private fun TrailingIcon(param: UiKernelParam, showFavoriteIcon: Boolean) {
124125
if (param.isDirectory) {
125126
Icon(
126127
imageVector = Icons.AutoMirrored.Rounded.KeyboardArrowRight,
127-
contentDescription = "Navigate do directory",
128+
contentDescription = stringResource(R.string.acessibility_davegate_to_directory_description),
128129
modifier = Modifier.size(24.dp),
129130
tint = MaterialTheme.colorScheme.onSurfaceVariant
130131
)
131132
} else if (param.isFavorite && showFavoriteIcon) {
132133
Icon(
133134
imageVector = Icons.Rounded.Favorite,
134-
contentDescription = "Favorite",
135+
contentDescription = stringResource(R.string.favorites),
135136
tint = MaterialTheme.colorScheme.primary,
136137
modifier = Modifier.size(18.dp)
137138
)

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@ import androidx.compose.material3.Text
1717
import androidx.compose.runtime.Composable
1818
import androidx.compose.ui.Alignment
1919
import androidx.compose.ui.Modifier
20+
import androidx.compose.ui.res.stringResource
2021
import androidx.compose.ui.semantics.contentDescription
2122
import androidx.compose.ui.semantics.semantics
2223
import androidx.compose.ui.semantics.stateDescription
2324
import androidx.compose.ui.text.font.FontWeight
2425
import androidx.compose.ui.text.style.TextOverflow
2526
import androidx.compose.ui.tooling.preview.PreviewLightDark
2627
import androidx.compose.ui.unit.dp
28+
import com.androidvip.sysctlgui.R
2729
import com.androidvip.sysctlgui.design.theme.SysctlGuiTheme
2830
import com.androidvip.sysctlgui.models.UiKernelParam
2931

@@ -34,8 +36,11 @@ fun ParamRow(
3436
onParamClicked: (UiKernelParam) -> Unit,
3537
showFullName: Boolean = false
3638
) {
37-
val rowDescription = "Parameter: ${param.name}"
38-
val rowState = if (param.isFavorite) "Marked as favorite" else ""
39+
val rowDescription = stringResource(
40+
R.string.acessibility_param_description_format,
41+
param.name
42+
)
43+
val rowState = if (param.isFavorite) stringResource(R.string.marked_as_favorite) else ""
3944

4045
Row(
4146
modifier = modifier
@@ -100,7 +105,7 @@ private fun ParamRowPreview() {
100105
SysctlGuiTheme(contrastLevel = 1) {
101106
Column(modifier = Modifier.background(MaterialTheme.colorScheme.background)) {
102107
ParamRow(param = param, onParamClicked = {}, showFullName = true)
103-
ParamRow(param = param.copy(isFavorite = true), onParamClicked = {},)
108+
ParamRow(param = param.copy(isFavorite = true), onParamClicked = {})
104109
}
105110
}
106111
}

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

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import androidx.compose.runtime.setValue
2828
import androidx.compose.ui.Modifier
2929
import androidx.compose.ui.graphics.painter.Painter
3030
import androidx.compose.ui.res.painterResource
31+
import androidx.compose.ui.res.stringResource
3132
import androidx.compose.ui.tooling.preview.PreviewDynamicColors
3233
import androidx.compose.ui.tooling.preview.PreviewLightDark
3334
import androidx.compose.ui.unit.dp
@@ -95,7 +96,10 @@ internal fun ActionToggleButton(
9596

9697
Icon(
9798
painter = if (isCurrentlyActive) iconOnActive else iconOnInactive,
98-
contentDescription = "Toggle $contentDescription",
99+
contentDescription = stringResource(
100+
R.string.toggle_format,
101+
contentDescription.orEmpty()
102+
),
99103
tint = iconTint
100104
)
101105
}
@@ -113,10 +117,11 @@ internal fun FavoriteButton(
113117
isActive = isFavorite,
114118
iconOnActive = painterResource(R.drawable.ic_favorite),
115119
iconOnInactive = painterResource(R.drawable.ic_favorite_outlined),
116-
contentDescription = "favorite",
120+
contentDescription = stringResource(R.string.mark_as_favorite),
117121
onToggle = onFavoriteClick
118122
)
119123
}
124+
120125
@Composable
121126
internal fun TaskerButton(
122127
modifier: Modifier = Modifier,
@@ -128,7 +133,7 @@ internal fun TaskerButton(
128133
isActive = isTaskerParam,
129134
iconOnActive = painterResource(R.drawable.ic_tasker),
130135
iconOnInactive = painterResource(R.drawable.ic_tasker_outlined),
131-
contentDescription = "tasker param",
136+
contentDescription = stringResource(R.string.toggle_tasker_param),
132137
onToggle = onToggle
133138
)
134139
}
@@ -142,22 +147,10 @@ private fun FavoriteButtonStatesPreview() {
142147
modifier = Modifier.padding(16.dp),
143148
horizontalArrangement = Arrangement.spacedBy(16.dp)
144149
) {
145-
FavoriteButton(
146-
isFavorite = false,
147-
onFavoriteClick = {}
148-
)
149-
FavoriteButton(
150-
isFavorite = true,
151-
onFavoriteClick = {}
152-
)
153-
TaskerButton(
154-
isTaskerParam = false,
155-
onToggle = {}
156-
)
157-
TaskerButton(
158-
isTaskerParam = true,
159-
onToggle = {}
160-
)
150+
FavoriteButton(isFavorite = false, onFavoriteClick = {})
151+
FavoriteButton(isFavorite = true, onFavoriteClick = {})
152+
TaskerButton(isTaskerParam = false, onToggle = {})
153+
TaskerButton(isTaskerParam = true, onToggle = {})
161154
}
162155
}
163156
}

0 commit comments

Comments
 (0)