From 7bee8910ec2df186baa032a87b15b2cc03f3d9ac Mon Sep 17 00:00:00 2001 From: Sweetbread Date: Thu, 22 May 2025 22:09:13 +0300 Subject: [PATCH] feat: add setting sending interval --- app/src/main/java/ru/risdeveau/geotracker/Data.kt | 1 + .../geotracker/LocationForegroundService.kt | 4 ++-- .../java/ru/risdeveau/geotracker/MainActivity.kt | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/ru/risdeveau/geotracker/Data.kt b/app/src/main/java/ru/risdeveau/geotracker/Data.kt index 53883c8..e4e4bb9 100644 --- a/app/src/main/java/ru/risdeveau/geotracker/Data.kt +++ b/app/src/main/java/ru/risdeveau/geotracker/Data.kt @@ -10,4 +10,5 @@ import splitties.preferences.Preferences object SettingsPreferences : Preferences("settings") { var username by stringPref("username", "") var url by stringPref("url", "https://geo.tmp.codrs.ru") + val interval by IntPref("interval", 15) } \ No newline at end of file diff --git a/app/src/main/java/ru/risdeveau/geotracker/LocationForegroundService.kt b/app/src/main/java/ru/risdeveau/geotracker/LocationForegroundService.kt index ef7fca0..ec0cedc 100644 --- a/app/src/main/java/ru/risdeveau/geotracker/LocationForegroundService.kt +++ b/app/src/main/java/ru/risdeveau/geotracker/LocationForegroundService.kt @@ -55,7 +55,7 @@ class LocationForegroundService : Service() { val notification = createNotification() startForeground(1, notification) - locationTracker.startTracking(5000) + locationTracker.startTracking(SettingsPreferences.interval * 1000L) return START_STICKY } @@ -80,7 +80,7 @@ class LocationForegroundService : Service() { private fun createNotification(): Notification { return NotificationCompat.Builder(this, "location_channel") .setContentTitle("Отслеживание местоположения") - .setContentText("Обновление каждые 5 секунд") + .setContentText("Обновление каждые ${SettingsPreferences.interval} секунд") .setSmallIcon(R.drawable.ic_launcher_foreground) .build() } diff --git a/app/src/main/java/ru/risdeveau/geotracker/MainActivity.kt b/app/src/main/java/ru/risdeveau/geotracker/MainActivity.kt index b7ffc1c..9804464 100644 --- a/app/src/main/java/ru/risdeveau/geotracker/MainActivity.kt +++ b/app/src/main/java/ru/risdeveau/geotracker/MainActivity.kt @@ -21,6 +21,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Done import androidx.compose.material3.Button @@ -33,6 +34,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -40,6 +42,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.input.KeyboardType import androidx.core.content.ContextCompat import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -122,6 +125,7 @@ sealed class Screen { fun Settings(modifier: Modifier = Modifier, onConfirm: () -> Unit) { var username by remember { mutableStateOf(SettingsPreferences.username) } var url by remember { mutableStateOf(SettingsPreferences.url) } + var interval by remember { mutableIntStateOf(SettingsPreferences.interval) } var urlIsValid by remember { mutableStateOf(false) } var loading by remember { mutableStateOf(false) } var fineLoc by remember { mutableStateOf(hasPermission(ACCESS_FINE_LOCATION)) } @@ -163,6 +167,17 @@ fun Settings(modifier: Modifier = Modifier, onConfirm: () -> Unit) { } ) + OutlinedTextField( + value = interval.toString(), + onValueChange = { + val newVal = it.toIntOrNull() + if (newVal != null) + interval = newVal.coerceIn(1..300) + }, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), + label = { Text("Интервал отправки") } + ) + GetPermission(ACCESS_FINE_LOCATION) { fineLoc = true; } if (Build.VERSION.SDK_INT >= 33)