commit 83aea35e6110655d42e7bb57670d9e9aedef5a69
parent 554039f55ad7f844d041bbb4b45739ec6f168459
Author: MTRNord <MTRNord@users.noreply.github.com>
Date: Fri, 1 Aug 2025 21:12:45 +0200
Ensure things are translatable
Diffstat:
5 files changed, 67 insertions(+), 58 deletions(-)
diff --git a/app/src/main/java/space/midnightthoughts/nordiccalendar/MainActivity.kt b/app/src/main/java/space/midnightthoughts/nordiccalendar/MainActivity.kt
@@ -294,7 +294,9 @@ fun IntroScreen(navController: NavHostController, onFinish: (() -> Unit)? = null
if (pagerState.currentPage < pagerState.pageCount - 1 || (pagerState.currentPage == pagerState.pageCount - 1 && hasPermissions.value)) Text(
- text = if (pagerState.currentPage == pagerState.pageCount - 1) "Finish" else "Next",
+ text = if (pagerState.currentPage == pagerState.pageCount - 1) stringResource(
+ R.string.onboarding_finish
+ ) else stringResource(R.string.onboarding_next),
style = TextStyle(
fontSize = 14.sp,
fontWeight = FontWeight.Normal,
diff --git a/app/src/main/java/space/midnightthoughts/nordiccalendar/notifications/NotificationHelper.kt b/app/src/main/java/space/midnightthoughts/nordiccalendar/notifications/NotificationHelper.kt
@@ -27,16 +27,6 @@ object NotificationHelper {
private const val CHANNEL_ID = "calendar_event_reminders"
/**
- * Notification channel name (displayed to the user).
- */
- private const val CHANNEL_NAME = "Calendar Reminders"
-
- /**
- * Notification channel description (displayed to the user).
- */
- private const val CHANNEL_DESC = "Notifications for calendar events with reminders"
-
- /**
* Shows a notification for a calendar event reminder.
*
* @param context The application context.
@@ -94,51 +84,55 @@ object NotificationHelper {
startCal.get(java.util.Calendar.DAY_OF_YEAR) == endCal.get(java.util.Calendar.DAY_OF_YEAR)
val timeFormat = android.text.format.DateFormat.getTimeFormat(context)
val dateFormat = android.text.format.DateFormat.getDateFormat(context)
- val timeText = if (sameDay) {
- "${timeFormat.format(startCal.time)} — ${timeFormat.format(endCal.time)} $eventDescription"
- } else {
- "${dateFormat.format(startCal.time)} ${timeFormat.format(startCal.time)} — ${
- dateFormat.format(
- endCal.time
- )
- } ${timeFormat.format(endCal.time)} $eventDescription"
- }
val builder = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.outline_calendar_clock_24)
- .setContentTitle(eventTitle)
- .setContentText(timeText)
- .setPriority(NotificationCompat.PRIORITY_HIGH)
+ .setContentTitle(eventTitle.ifEmpty { context.getString(R.string.notification_default_title) })
+ .setContentText(
+ if (sameDay) {
+ "${timeFormat.format(startCal.time)} — ${timeFormat.format(endCal.time)} $eventDescription"
+ } else {
+ "${dateFormat.format(startCal.time)} ${timeFormat.format(startCal.time)} — ${
+ dateFormat.format(endCal.time)
+ } ${timeFormat.format(endCal.time)} $eventDescription"
+ }
+ )
.setContentIntent(pendingIntent)
- .setCategory(CATEGORY_EVENT)
.setAutoCancel(true)
- .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
- .setColor(ContextCompat.getColor(context, R.color.teal_700))
- // Action for link or address
- val location = eventLocation
- if (android.util.Patterns.WEB_URL.matcher(location).matches()) {
- val linkIntent = Intent(Intent.ACTION_VIEW, location.toUri())
- val linkPendingIntent = PendingIntent.getActivity(
- context,
- (eventId + 1000).toInt(),
- linkIntent,
- PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
- )
- builder.addAction(0, "Open", linkPendingIntent)
- } else if (location.isNotBlank()) {
- val mapsIntent = Intent(
- Intent.ACTION_VIEW,
- ("geo:0,0?q=" + java.net.URLEncoder.encode(
- location,
- "UTF-8"
- )).toUri()
- )
- val mapsPendingIntent = PendingIntent.getActivity(
- context,
- (eventId + 2000).toInt(),
- mapsIntent,
- PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
+ .setCategory(CATEGORY_EVENT)
+ .setPriority(NotificationCompat.PRIORITY_DEFAULT)
+
+ if (eventLocation.isNotBlank()) {
+ try {
+ val mapsIntent = Intent(Intent.ACTION_VIEW, "geo:0,0?q=${eventLocation}".toUri())
+ val mapsPendingIntent = PendingIntent.getActivity(
+ context,
+ (eventId + 1000).toInt(),
+ mapsIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
+ )
+ builder.addAction(
+ 0,
+ context.getString(R.string.notification_action_open),
+ pendingIntent
+ )
+ builder.addAction(
+ 0,
+ context.getString(R.string.notification_action_show_route),
+ mapsPendingIntent
+ )
+ } catch (e: Exception) {
+ builder.addAction(
+ 0,
+ context.getString(R.string.notification_action_open),
+ pendingIntent
+ )
+ }
+ } else {
+ builder.addAction(
+ 0,
+ context.getString(R.string.notification_action_open),
+ pendingIntent
)
- builder.addAction(0, "Show route", mapsPendingIntent)
}
try {
@@ -148,7 +142,6 @@ object NotificationHelper {
}
} catch (e: SecurityException) {
Log.e("NotificationHelper", "SecurityException: ${e.message}")
- e.printStackTrace()
}
}
@@ -156,10 +149,10 @@ object NotificationHelper {
Log.d("NotificationHelper", "Creating notification channel: $CHANNEL_ID")
val channel = NotificationChannel(
CHANNEL_ID,
- CHANNEL_NAME,
- NotificationManager.IMPORTANCE_HIGH
+ context.getString(R.string.notification_channel_name),
+ NotificationManager.IMPORTANCE_DEFAULT
).apply {
- description = CHANNEL_DESC
+ description = context.getString(R.string.notification_channel_desc)
}
val notificationManager: NotificationManager =
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
diff --git a/app/src/main/java/space/midnightthoughts/nordiccalendar/notifications/NotificationReceiver.kt b/app/src/main/java/space/midnightthoughts/nordiccalendar/notifications/NotificationReceiver.kt
@@ -4,6 +4,7 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log
+import space.midnightthoughts.nordiccalendar.R
/**
* NotificationReceiver is a BroadcastReceiver that receives alarm broadcasts for calendar event reminders
@@ -19,7 +20,8 @@ class NotificationReceiver : BroadcastReceiver() {
*/
override fun onReceive(context: Context, intent: Intent) {
val eventId = intent.getLongExtra("eventId", -1)
- val eventTitle = intent.getStringExtra("eventTitle") ?: "Calendar event"
+ val eventTitle = intent.getStringExtra("eventTitle")
+ ?: context.getString(R.string.notification_default_title)
val eventDescription = intent.getStringExtra("eventDescription")
val eventTime = intent.getLongExtra("eventTime", 0L)
val eventEndTime = intent.getLongExtra("eventEndTime", 0L)
diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml
@@ -42,5 +42,11 @@
<string name="nominatim_url_label">OpenStreetMap Nominatim URL</string>
<string name="save">Save</string>
<string name="event_duration">Duration: %1$s</string>
-</resources>
+ <!-- Notification strings -->
+ <string name="notification_channel_name">Calendar Reminders</string>
+ <string name="notification_channel_desc">Notifications for calendar events with reminders</string>
+ <string name="notification_default_title">Calendar event</string>
+ <string name="notification_action_open">Open</string>
+ <string name="notification_action_show_route">Show route</string>
+</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
@@ -42,5 +42,11 @@
<string name="nominatim_url_label">OpenStreetMap Nominatim URL</string>
<string name="save">Speichern</string>
<string name="event_duration">Dauer: %1$s</string>
-</resources>
+ <!-- Notification strings -->
+ <string name="notification_channel_name">Kalender-Erinnerungen</string>
+ <string name="notification_channel_desc">Benachrichtigungen für Kalender-Events mit Erinnerungen</string>
+ <string name="notification_default_title">Kalender-Event</string>
+ <string name="notification_action_open">Öffnen</string>
+ <string name="notification_action_show_route">Route anzeigen</string>
+</resources>