Skip to content

Commit

Permalink
feat: added in lyricist for localisation and migrated usage of string…
Browse files Browse the repository at this point in the history
…s.xml in composables to use lyricist
  • Loading branch information
t-regbs committed Jun 30, 2024
1 parent 7819602 commit 6a0cda1
Show file tree
Hide file tree
Showing 23 changed files with 474 additions and 218 deletions.
28 changes: 28 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 9 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ plugins {
id("com.google.gms.google-services")
id("org.jetbrains.kotlin.plugin.parcelize")
id("com.google.firebase.crashlytics")
id("com.google.devtools.ksp")
}

ksp {
arg("lyricist.generateStringsProperty", "true")
}

android {
Expand Down Expand Up @@ -54,7 +59,7 @@ android {
}

composeOptions {
kotlinCompilerExtensionVersion = "1.5.3"
kotlinCompilerExtensionVersion = "1.5.8"
}

packagingOptions {
Expand Down Expand Up @@ -132,4 +137,7 @@ dependencies {
implementation(libs.androidx.compose.runtime.saveable)
implementation(libs.androidx.compose.runtime.livedata)
androidTestImplementation(libs.androidx.compose.ui.test)

implementation(libs.lyricist)
ksp(libs.lyricist.processor)
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,16 @@ import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.graphics.toArgb
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.view.WindowInsetsControllerCompat
import cafe.adriel.lyricist.Lyricist
import cafe.adriel.lyricist.ProvideStrings
import cafe.adriel.lyricist.rememberStrings
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
import com.timilehinaregbesola.mathalarm.navigation.NavGraph
import com.timilehinaregbesola.mathalarm.presentation.appsettings.AlarmPreferencesImpl
import com.timilehinaregbesola.mathalarm.presentation.appsettings.shouldUseDarkColors
import com.timilehinaregbesola.mathalarm.presentation.ui.MathAlarmTheme
import com.timilehinaregbesola.mathalarm.presentation.ui.darkPrimary
import com.timilehinaregbesola.mathalarm.utils.strings.Strings
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.InternalCoroutinesApi
import javax.inject.Inject
Expand All @@ -30,6 +34,7 @@ import javax.inject.Inject
class MainActivity : AppCompatActivity() {
@Inject
lateinit var preferences: AlarmPreferencesImpl
private lateinit var lyricist: Lyricist<Strings>

@OptIn(ExperimentalMaterialNavigationApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
Expand All @@ -46,10 +51,13 @@ class MainActivity : AppCompatActivity() {
// }
// }
setContent {
lyricist = rememberStrings()
val isDarkTheme = preferences.shouldUseDarkColors()
updateTheme(isDarkTheme)
MathAlarmTheme(darkTheme = isDarkTheme) {
NavGraph(preferences)
ProvideStrings(lyricist) {
MathAlarmTheme(darkTheme = isDarkTheme) {
NavGraph(preferences)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,19 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CornerSize
import androidx.compose.material3.Card
import androidx.compose.material3.Divider
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Edit
import androidx.compose.material.icons.filled.KeyboardArrowDown
import androidx.compose.material.icons.filled.KeyboardArrowUp
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.CardElevation
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
Expand All @@ -42,6 +41,7 @@ import androidx.compose.ui.text.font.FontWeight.Companion.Normal
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import cafe.adriel.lyricist.strings
import com.timilehinaregbesola.mathalarm.domain.model.Alarm
import com.timilehinaregbesola.mathalarm.presentation.alarmlist.components.AlarmItem.ACTUAL_TIME_FONT_SIZE
import com.timilehinaregbesola.mathalarm.presentation.alarmlist.components.AlarmItem.ALARM_INFO_FONT_SIZE
Expand All @@ -53,8 +53,6 @@ import com.timilehinaregbesola.mathalarm.presentation.alarmlist.components.Alarm
import com.timilehinaregbesola.mathalarm.presentation.alarmlist.components.AlarmItem.DIVIDER_THICKNESS
import com.timilehinaregbesola.mathalarm.presentation.alarmlist.components.AlarmItem.EQUAL_WEIGHT
import com.timilehinaregbesola.mathalarm.presentation.alarmlist.components.AlarmItem.EXPANDED_SECTION_DIVIDER_SPACING
import com.timilehinaregbesola.mathalarm.presentation.alarmlist.components.AlarmItem.FIVE_OCLOCK
import com.timilehinaregbesola.mathalarm.presentation.alarmlist.components.AlarmItem.NOON
import com.timilehinaregbesola.mathalarm.presentation.alarmlist.components.AlarmItem.THREE_QUARTERS_WEIGHT
import com.timilehinaregbesola.mathalarm.presentation.alarmlist.components.AlarmItem.TIME_LENGTH_INDEX
import com.timilehinaregbesola.mathalarm.presentation.alarmlist.components.AlarmItem.TIME_OF_DAY_FONT_SIZE
Expand Down Expand Up @@ -177,20 +175,10 @@ fun AlarmItem(
val alarmInfoText = if (daysSet < DAYS_SET_LIMIT) {
sb.dropLast(TWO).toString()
} else {
"Multiple Days"
strings.multipleDays
}

val moreInfo = when {
alarm.hour < NOON -> {
"Good morning"
}
alarm.hour in NOON..FIVE_OCLOCK -> {
"Afternoon"
}
else -> {
"Good Evening"
}
}
val moreInfo = strings.greeting(alarm.hour)

Text(
text = "$alarmInfoText | $moreInfo",
Expand All @@ -200,7 +188,7 @@ fun AlarmItem(
if (!expandItem) {
Icon(
imageVector = Icons.Default.KeyboardArrowDown,
contentDescription = "Expand",
contentDescription = strings.expand,
modifier = Modifier
.weight(EQUAL_WEIGHT)
.align(CenterVertically)
Expand Down Expand Up @@ -232,7 +220,7 @@ private fun AlarmItemExpandableSection(
with(MaterialTheme.spacing) {
Column {
Spacer(modifier = Modifier.height(small))
Divider(
HorizontalDivider(
thickness = DIVIDER_THICKNESS,
modifier = Modifier
.padding(
Expand All @@ -256,13 +244,13 @@ private fun AlarmItemExpandableSection(
) {
Icon(
imageVector = Icons.Outlined.Delete,
contentDescription = "Delete",
contentDescription = strings.delete,
modifier = Modifier
.padding(end = extraSmall)
.clickable(onClick = onDeleteAlarm),
)
Text(
text = "Delete",
text = strings.delete,
modifier = Modifier
.align(CenterVertically),
)
Expand All @@ -272,20 +260,20 @@ private fun AlarmItemExpandableSection(
) {
Icon(
imageVector = Icons.Default.Edit,
contentDescription = "Edit",
contentDescription = strings.edit,
modifier = Modifier
.padding(end = extraSmall),
)
Text(
text = "Edit",
text = strings.edit,
modifier = Modifier
.align(CenterVertically),
)
}
}
Icon(
imageVector = Icons.Default.KeyboardArrowUp,
contentDescription = "Collapse",
contentDescription = strings.collapse,
modifier = Modifier
.weight(EQUAL_WEIGHT)
.align(CenterVertically)
Expand Down Expand Up @@ -326,8 +314,6 @@ private object AlarmItem {
const val TIME_LENGTH_INDEX = 5
const val EQUAL_WEIGHT = 1f
const val ALARM_ITEM_LIGHT_BACKGROUND_HEX = 0x99FFFFFF
const val NOON = 12
const val FIVE_OCLOCK = 17
const val THREE_QUARTERS_WEIGHT = 3f
val ALARM_ITEM_ELEVATION = 4.dp
val ALARM_TITLE_FONT_SIZE = 15.sp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import androidx.compose.ui.graphics.Color.Companion.LightGray
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import cafe.adriel.lyricist.strings
import com.timilehinaregbesola.mathalarm.domain.model.Alarm
import com.timilehinaregbesola.mathalarm.presentation.alarmlist.components.AlarmListHeader.LIST_HEADER_ALPHA
import com.timilehinaregbesola.mathalarm.presentation.alarmlist.components.AlarmListHeader.LIST_HEADER_ELEVATION
Expand Down Expand Up @@ -59,9 +60,9 @@ fun ListHeader(
with(MaterialTheme.spacing) {
Text(
text = if (enabled && nearestAlarmMessage != null) {
"Next alarm in $nearestAlarmMessage"
"${strings.nextAlarmText} $nearestAlarmMessage"
} else {
"No upcoming alarms"
strings.noUpcomingAlarms
},
modifier = Modifier
.padding(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color.Companion.LightGray
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
import androidx.navigation.NavHostController
import cafe.adriel.lyricist.strings
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import com.timilehinaregbesola.mathalarm.R
Expand Down Expand Up @@ -210,6 +210,7 @@ fun ListDisplayScreen(
),
contentAlignment = TopStart,
) {
val alarmSetText = strings.alarmSet
AlarmListContent(
alarmList = alarmList,
calendar = viewModel.calender.getCurrentCalendar(),
Expand Down Expand Up @@ -241,7 +242,7 @@ fun ListDisplayScreen(
viewModel.scheduleAlarm(
alarm = curAlarm,
reschedule = b,
message = "Alarm set for ${
message = "$alarmSetText ${
curAlarm.getTimeLeft(
getCalendarFromAlarm(
curAlarm,
Expand Down Expand Up @@ -368,10 +369,10 @@ private fun AlarmPermissionDialog(
onCloseDialog: () -> Unit,
) {
val arguments = DialogArguments(
title = stringResource(id = R.string.task_alarm_permission_dialog_title),
text = stringResource(id = R.string.task_alarm_permission_dialog_text),
confirmText = stringResource(id = R.string.task_alarm_permission_dialog_confirm),
dismissText = stringResource(id = R.string.task_alarm_permission_dialog_cancel),
title = strings.alarms,
text = strings.taskAlarmPermissionDialogText,
confirmText = strings.taskAlarmPermissionDialogConfirm,
dismissText = strings.taskAlarmPermissionDialogCancel,
onConfirmAction = {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
val intent = Intent().apply {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,29 @@ fun MathAlarmDialog(
onDismissRequest: () -> Unit,
) {
if (isDialogOpen) {
AlertDialog(
onDismissRequest = onDismissRequest,
title = { Text(text = arguments.title) },
text = { Text(text = arguments.text) },
confirmButton = {
Button(onClick = arguments.onConfirmAction) {
Text(text = arguments.confirmText)
}
},
dismissButton = {
Button(onClick = onDismissRequest) {
Text(text = arguments.dismissText)
}
},
)
with(arguments) {
AlertDialog(
onDismissRequest = onDismissRequest,
title = if (title != null) {
{ Text(text = title) }
} else {
null
},
text = { Text(text = text) },
confirmButton = {
Button(onClick = onConfirmAction) {
Text(text = confirmText)
}
},
dismissButton = if (dismissText != null) {
{
Button(onClick = onDismissRequest) {
Text(text = dismissText)
}
}
} else null,
)
}
}
}

Expand All @@ -49,10 +57,10 @@ fun MathAlarmDialog(
* @property onConfirmAction the action to be executed when the user confirms the dialog
*/
data class DialogArguments(
val title: String,
val title: String?,
val text: String,
val confirmText: String,
val dismissText: String,
val dismissText: String?,
val onConfirmAction: () -> Unit,
)

Expand Down
Loading

0 comments on commit 6a0cda1

Please sign in to comment.