diff --git a/feature/settings/src/androidMain/kotlin/org/meshtastic/feature/settings/SettingsScreen.kt b/feature/settings/src/androidMain/kotlin/org/meshtastic/feature/settings/SettingsScreen.kt index d4d93410b..6b319a638 100644 --- a/feature/settings/src/androidMain/kotlin/org/meshtastic/feature/settings/SettingsScreen.kt +++ b/feature/settings/src/androidMain/kotlin/org/meshtastic/feature/settings/SettingsScreen.kt @@ -36,12 +36,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.eygraber.uri.toKmpUri +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.TimeZone +import kotlinx.datetime.format +import kotlinx.datetime.toLocalDateTime import org.jetbrains.compose.resources.stringResource import org.koin.compose.koinInject import org.koin.core.qualifier.named import org.meshtastic.core.common.util.nowMillis -import org.meshtastic.core.common.util.toDate -import org.meshtastic.core.common.util.toInstant import org.meshtastic.core.navigation.DiscoveryRoute import org.meshtastic.core.navigation.Route import org.meshtastic.core.navigation.SettingsRoute @@ -85,8 +87,7 @@ import org.meshtastic.feature.settings.radio.component.EditDeviceProfileDialog import org.meshtastic.feature.settings.util.LanguageUtils import org.meshtastic.feature.settings.util.LanguageUtils.languageMap import org.meshtastic.proto.DeviceProfile -import java.text.SimpleDateFormat -import java.util.Locale +import kotlin.time.Instant.Companion.fromEpochMilliseconds @Suppress("LongMethod", "CyclomaticComplexMethod") @Composable @@ -142,8 +143,16 @@ fun SettingsScreen( } else { deviceProfile = it val nodeName = (it.short_name ?: "").ifBlank { "node" } - val dateFormat = SimpleDateFormat("yyyyMMdd", Locale.getDefault()) - val dateStr = dateFormat.format(nowMillis.toInstant().toDate()) + val dateStr = + fromEpochMilliseconds(nowMillis) + .toLocalDateTime(TimeZone.currentSystemDefault()) + .format( + LocalDateTime.Format { + year() + monthNumber() + day() + }, + ) val fileName = "Meshtastic_${nodeName}_${dateStr}_nodeConfig.cfg" val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply { diff --git a/feature/settings/src/androidMain/kotlin/org/meshtastic/feature/settings/component/PersistenceSection.kt b/feature/settings/src/androidMain/kotlin/org/meshtastic/feature/settings/component/PersistenceSection.kt index 2c72a745e..128befc1d 100644 --- a/feature/settings/src/androidMain/kotlin/org/meshtastic/feature/settings/component/PersistenceSection.kt +++ b/feature/settings/src/androidMain/kotlin/org/meshtastic/feature/settings/component/PersistenceSection.kt @@ -23,10 +23,13 @@ import androidx.appcompat.app.AppCompatActivity.RESULT_OK import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.Preview +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.TimeZone +import kotlinx.datetime.format +import kotlinx.datetime.format.char +import kotlinx.datetime.toLocalDateTime import org.jetbrains.compose.resources.stringResource import org.meshtastic.core.common.util.nowMillis -import org.meshtastic.core.common.util.toDate -import org.meshtastic.core.common.util.toInstant import org.meshtastic.core.database.DatabaseConstants import org.meshtastic.core.resources.Res import org.meshtastic.core.resources.app_settings @@ -39,8 +42,18 @@ import org.meshtastic.core.ui.component.ListItem import org.meshtastic.core.ui.icon.MeshtasticIcons import org.meshtastic.core.ui.icon.Output import org.meshtastic.core.ui.theme.AppTheme -import java.text.SimpleDateFormat -import java.util.Locale +import kotlin.time.Instant.Companion.fromEpochMilliseconds + +private val EXPORT_TIMESTAMP_FORMAT = + LocalDateTime.Format { + year() + monthNumber() + day() + char('_') + hour() + minute() + second() + } /** Section for settings related to data persistence and exports. */ @Composable @@ -50,7 +63,10 @@ fun PersistenceSection( nodeShortName: String, onExportData: (android.net.Uri) -> Unit, ) { - val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(nowMillis.toInstant().toDate()) + val timestamp = + fromEpochMilliseconds(nowMillis) + .toLocalDateTime(TimeZone.currentSystemDefault()) + .format(EXPORT_TIMESTAMP_FORMAT) val exportRangeTestLauncher = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) {