diff --git a/app/src/main/java/com/afkanerd/deku/RemoteListeners/RMQ/RMQLongRunningConnectionWorker.kt b/app/src/main/java/com/afkanerd/deku/RemoteListeners/RMQ/RMQLongRunningConnectionWorker.kt index d3ee5b8d7..6de89e40a 100644 --- a/app/src/main/java/com/afkanerd/deku/RemoteListeners/RMQ/RMQLongRunningConnectionWorker.kt +++ b/app/src/main/java/com/afkanerd/deku/RemoteListeners/RMQ/RMQLongRunningConnectionWorker.kt @@ -36,14 +36,16 @@ class RMQLongRunningConnectionWorker(context: Context, parameters: WorkerParamet notificationIntent, PendingIntent.FLAG_IMMUTABLE) - val title = "Long running..." + val title = applicationContext + .getString(R.string.remote_listeners_long_running_notification_title) val description = "" val notification = NotificationCompat.Builder( applicationContext, applicationContext.getString(R.string.running_gateway_clients_channel_id)) .setContentTitle(title) - .setContentText("Status") + .setContentText(applicationContext + .getString(R.string.remote_listeners_notification_status)) .setSmallIcon(R.drawable.ic_stat_name) .setPriority(NotificationCompat.PRIORITY_LOW) .setSilent(true) diff --git a/app/src/main/java/com/afkanerd/deku/RemoteListeners/RemoteListenerConnectionService.kt b/app/src/main/java/com/afkanerd/deku/RemoteListeners/RemoteListenerConnectionService.kt index b26992aff..f507fee90 100644 --- a/app/src/main/java/com/afkanerd/deku/RemoteListeners/RemoteListenerConnectionService.kt +++ b/app/src/main/java/com/afkanerd/deku/RemoteListeners/RemoteListenerConnectionService.kt @@ -225,23 +225,24 @@ class RemoteListenerConnectionService : Service() { notificationIntent, PendingIntent.FLAG_IMMUTABLE) - val title = "$numberOfActiveRemoteListeners Active..." - val description = "" - .plus("# Failed to start: ") - .plus("$numberFailedToStart\n") - .plus("# Waiting to start: ") - .plus("$numberWaitingToStart\n") - .plus("# Starting: ") - .plus("$numberStarting\n") - .plus("# Connected: ") - .plus(numberStarted) + val title = getString( + R.string.remote_listeners_active_notification_title, + numberOfActiveRemoteListeners + ) + val description = getString( + R.string.remote_listeners_notification_body, + numberFailedToStart, + numberWaitingToStart, + numberStarting, + numberStarted + ) val notification = NotificationCompat.Builder( applicationContext, getString(R.string.running_gateway_clients_channel_id)) .setContentTitle(title) - .setContentText("Status") + .setContentText(getString(R.string.remote_listeners_notification_status)) .setSmallIcon(R.drawable.ic_stat_name) .setPriority(NotificationCompat.PRIORITY_LOW) .setSilent(true) diff --git a/app/src/main/java/com/afkanerd/deku/RemoteListeners/components/Permissions.kt b/app/src/main/java/com/afkanerd/deku/RemoteListeners/components/Permissions.kt index cb8224304..b583ed271 100644 --- a/app/src/main/java/com/afkanerd/deku/RemoteListeners/components/Permissions.kt +++ b/app/src/main/java/com/afkanerd/deku/RemoteListeners/components/Permissions.kt @@ -22,7 +22,9 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import com.afkanerd.deku.DefaultSMS.R import com.afkanerd.deku.RemoteListeners.ui.requiredNotificationsPermissions import com.afkanerd.deku.RemoteListeners.ui.requiredReadPhoneStatePermissions import com.afkanerd.deku.RemoteListeners.ui.requiredReceiveSMSPermission @@ -39,10 +41,11 @@ fun NotificationPermissionComposable() { rememberLauncherForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted -> if(isGranted) { - Toast.makeText(context, "Well done!", Toast.LENGTH_LONG).show() + Toast.makeText(context, R.string.permission_notification_granted_toast, + Toast.LENGTH_LONG).show() } else { - Toast.makeText(context, "We cannot do without this one...", Toast.LENGTH_LONG) - .show() + Toast.makeText(context, R.string.permission_notification_denied_toast, + Toast.LENGTH_LONG).show() } } @@ -63,7 +66,7 @@ fun NotificationPermissionComposable() { ) { Icon(imageVector = Icons.Outlined.Info, "", tint=MaterialTheme.colorScheme.secondary) Text( - "When not default SMS app, you need to grant permissions for listeners to show notifications when changing.", + stringResource(R.string.permission_notification_rationale), style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onTertiaryContainer, modifier = Modifier.padding(start=16.dp, end=16.dp, top=8.dp) @@ -78,7 +81,7 @@ fun NotificationPermissionComposable() { TextButton(onClick = { getNotificationsPermissionsLauncher.launch(requiredNotificationsPermissions) }) { - Text("Grant notification permission") + Text(stringResource(R.string.permission_grant_notification)) } } } @@ -93,9 +96,11 @@ fun PhoneStatePermissionComposable() { rememberLauncherForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted -> if(isGranted) { - Toast.makeText(context, "Well done, carry on!", Toast.LENGTH_LONG).show() + Toast.makeText(context, R.string.permission_phone_state_granted_toast, + Toast.LENGTH_LONG).show() } else { - Toast.makeText(context, "You can at anytime...", Toast.LENGTH_LONG).show() + Toast.makeText(context, R.string.permission_phone_state_denied_toast, + Toast.LENGTH_LONG).show() } } @@ -116,7 +121,7 @@ fun PhoneStatePermissionComposable() { ) { Icon(imageVector = Icons.Outlined.Info, "", tint=MaterialTheme.colorScheme.secondary) Text( - "When not default SMS app, you need to grant permissions for listeners to check for sim status and dual sim information.", + stringResource(R.string.permission_phone_state_rationale), style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onTertiaryContainer, modifier = Modifier.padding(start=16.dp, end=16.dp, top=8.dp) @@ -132,7 +137,7 @@ fun PhoneStatePermissionComposable() { getReadPhoneStatePermissionsLauncher .launch(requiredReadPhoneStatePermissions) }) { - Text("Grant phone state permission") + Text(stringResource(R.string.permission_grant_phone_state)) } } } @@ -148,9 +153,11 @@ fun SMSPermissionComposable() { rememberLauncherForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted -> if(isGranted) { - Toast.makeText(context, "Carry on activating...", Toast.LENGTH_LONG).show() + Toast.makeText(context, R.string.permission_sms_granted_toast, + Toast.LENGTH_LONG).show() } else { - Toast.makeText(context, "I'd be back!", Toast.LENGTH_LONG).show() + Toast.makeText(context, R.string.permission_sms_denied_toast, + Toast.LENGTH_LONG).show() } } @@ -174,7 +181,7 @@ fun SMSPermissionComposable() { ) { Icon(imageVector = Icons.Outlined.Info, "", tint=MaterialTheme.colorScheme.secondary) Text( - "When not default SMS app, you need to grant permissions for listeners to send and receive delivery reports.", + stringResource(R.string.permission_sms_rationale), style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onTertiaryContainer, modifier = Modifier.padding(start=16.dp, end=16.dp, top=8.dp) @@ -190,14 +197,14 @@ fun SMSPermissionComposable() { TextButton(onClick = { getSMSPermissionLauncher.launch(requiredSendSMSPermission) }) { - Text("Grant send sms permission") + Text(stringResource(R.string.permission_grant_send_sms)) } } if(!smsReadSMSState.status.isGranted || LocalInspectionMode.current) { TextButton(onClick = { getSMSPermissionLauncher.launch(requiredReceiveSMSPermission) }) { - Text("Grant read sms permission") + Text(stringResource(R.string.permission_grant_read_sms)) } } } diff --git a/app/src/main/java/com/afkanerd/deku/RemoteListeners/modals/RemoteListenerModal.kt b/app/src/main/java/com/afkanerd/deku/RemoteListeners/modals/RemoteListenerModal.kt index 1e8527a11..e524215ae 100644 --- a/app/src/main/java/com/afkanerd/deku/RemoteListeners/modals/RemoteListenerModal.kt +++ b/app/src/main/java/com/afkanerd/deku/RemoteListeners/modals/RemoteListenerModal.kt @@ -18,9 +18,11 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.afkanerd.deku.DefaultSMS.BuildConfig +import com.afkanerd.deku.DefaultSMS.R import com.example.compose.AppTheme import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue @@ -57,18 +59,22 @@ fun RemoteListenerModal( verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { - Text("Configure Remote listener", + Text(stringResource(R.string.remote_listener_configure_title), style = MaterialTheme.typography.titleMedium) Spacer(modifier = Modifier.padding(8.dp)) Button(onClick = connectionCallback, modifier = Modifier.fillMaxWidth()) { - Text(if(activated) "Deactivate" else "Activate") + Text(stringResource( + if(activated) R.string.gateway_client_customization_deactivate + else R.string.gateway_client_customization_activate + )) } Text( - if(activated) - "Deactivating stops the remote listener and tries to kill all remote connections." - else "Activating begins the service that tries to connect this remote listener", + stringResource( + if(activated) R.string.remote_listener_deactivate_description + else R.string.remote_listener_activate_description + ), style = MaterialTheme.typography.labelSmall, textAlign = TextAlign.Center, color = MaterialTheme.colorScheme.secondary @@ -76,11 +82,11 @@ fun RemoteListenerModal( Spacer(modifier = Modifier.padding(16.dp)) Button(onClick = editCallback, modifier = Modifier.fillMaxWidth()) { - Text("Edit" ) + Text(stringResource(R.string.edit)) } TextButton(onClick = deleteCallback) { - Text("Delete", color = MaterialTheme.colorScheme.error) + Text(stringResource(R.string.delete), color = MaterialTheme.colorScheme.error) } } } diff --git a/app/src/main/java/com/afkanerd/deku/RemoteListeners/modals/RemoteListenerReadPhoneStatePermissionModal.kt b/app/src/main/java/com/afkanerd/deku/RemoteListeners/modals/RemoteListenerReadPhoneStatePermissionModal.kt index 8184ad5b1..c1e57c295 100644 --- a/app/src/main/java/com/afkanerd/deku/RemoteListeners/modals/RemoteListenerReadPhoneStatePermissionModal.kt +++ b/app/src/main/java/com/afkanerd/deku/RemoteListeners/modals/RemoteListenerReadPhoneStatePermissionModal.kt @@ -20,10 +20,12 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.afkanerd.deku.DefaultSMS.BuildConfig +import com.afkanerd.deku.DefaultSMS.R import com.example.compose.AppTheme @OptIn(ExperimentalMaterial3Api::class) @@ -55,20 +57,20 @@ fun RemoteListenersReadPhoneStatePermissionModal( horizontalAlignment = Alignment.CenterHorizontally ) { Text( - "Permission required!", + stringResource(R.string.permission_required_title), style = MaterialTheme.typography.titleMedium ) Spacer(Modifier.padding(16.dp)) Text( - "Grant permission to detect how many SIM cards you have on your device", + stringResource(R.string.remote_listener_phone_state_permission_description), textAlign = TextAlign.Center ) Spacer(Modifier.padding(8.dp)) Text( - "This would also auto fill useful information which can help you identify your various queues.", + stringResource(R.string.remote_listener_phone_state_permission_hint), style = MaterialTheme.typography.labelMedium, textAlign = TextAlign.Center, color = MaterialTheme.colorScheme.secondary @@ -76,7 +78,7 @@ fun RemoteListenersReadPhoneStatePermissionModal( Spacer(Modifier.padding(12.dp)) Button(onClick = grantPermissionsCallback) { - Text("Grant permission") + Text(stringResource(R.string.permission_grant)) } } } diff --git a/app/src/main/java/com/afkanerd/deku/RemoteListeners/modals/RemoteListenerSMSPermissionsModal.kt b/app/src/main/java/com/afkanerd/deku/RemoteListeners/modals/RemoteListenerSMSPermissionsModal.kt index 39b5433a3..40fef7d2f 100644 --- a/app/src/main/java/com/afkanerd/deku/RemoteListeners/modals/RemoteListenerSMSPermissionsModal.kt +++ b/app/src/main/java/com/afkanerd/deku/RemoteListeners/modals/RemoteListenerSMSPermissionsModal.kt @@ -20,10 +20,12 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.afkanerd.deku.DefaultSMS.BuildConfig +import com.afkanerd.deku.DefaultSMS.R import com.example.compose.AppTheme @OptIn(ExperimentalMaterial3Api::class) @@ -55,20 +57,20 @@ fun RemoteListenerSMSPermissionsModal( horizontalAlignment = Alignment.CenterHorizontally ) { Text( - "Permission required!", + stringResource(R.string.permission_required_title), style = MaterialTheme.typography.titleMedium ) Spacer(Modifier.padding(16.dp)) Text( - "Remote listeners sends messages and listen for delivery reports. This requires permission to read and write SMS messages.", + stringResource(R.string.remote_listener_sms_permission_description), textAlign = TextAlign.Center ) Spacer(Modifier.padding(8.dp)) Text( - "You can make the app your default SMS app, or choose to grant the necessary permissions", + stringResource(R.string.remote_listener_sms_permission_hint), style = MaterialTheme.typography.labelMedium, textAlign = TextAlign.Center, color = MaterialTheme.colorScheme.secondary @@ -76,7 +78,7 @@ fun RemoteListenerSMSPermissionsModal( Spacer(Modifier.padding(16.dp)) Button(onClick = makeDefaultCallback) { - Text("Make default") + Text(stringResource(R.string.remote_listener_make_default)) } } } diff --git a/app/src/main/java/com/afkanerd/deku/Router/ui/GatewayClientsMainView.kt b/app/src/main/java/com/afkanerd/deku/Router/ui/GatewayClientsMainView.kt index fe0a8ab66..7eb968234 100644 --- a/app/src/main/java/com/afkanerd/deku/Router/ui/GatewayClientsMainView.kt +++ b/app/src/main/java/com/afkanerd/deku/Router/ui/GatewayClientsMainView.kt @@ -94,7 +94,7 @@ fun GatewayClientsMainView( DropdownMenuItem( text = { Text( - text = "Add SMTP forwarder", + text = stringResource(R.string.add_smtp_forwarders), color = MaterialTheme.colorScheme.onBackground ) }, @@ -113,7 +113,7 @@ fun GatewayClientsMainView( IconButton(onClick = { navController.popBackStack() }) { Icon( Icons.AutoMirrored.Filled.ArrowBack, - contentDescription = "go back" + contentDescription = stringResource(R.string.go_back) ) } }, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3c8d88b92..cf7534814 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -456,4 +456,40 @@ Secure message accepted Enter subject + + Permission required! + Grant permission + Grant notification permission + Grant phone state permission + Grant send sms permission + Grant read sms permission + When not default SMS app, you need to grant permissions for listeners to show notifications when changing. + When not default SMS app, you need to grant permissions for listeners to check for sim status and dual sim information. + When not default SMS app, you need to grant permissions for listeners to send and receive delivery reports. + Well done! + We cannot do without this one… + Well done, carry on! + You can at anytime… + Carry on activating… + I\'d be back! + + + Remote listeners sends messages and listen for delivery reports. This requires permission to read and write SMS messages. + You can make the app your default SMS app, or choose to grant the necessary permissions + Make default + Grant permission to detect how many SIM cards you have on your device + This would also auto fill useful information which can help you identify your various queues. + Configure Remote listener + Activating begins the service that tries to connect this remote listener + Deactivating stops the remote listener and tries to kill all remote connections. + + + %1$d active… + Long running… + Status + # Failed to start: %1$d\n# Waiting to start: %2$d\n# Starting: %3$d\n# Connected: %4$d + + + Add SMTP forwarder + \ No newline at end of file