refactor(settings): replace SimpleDateFormat with kotlinx-datetime (#5992)

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
James Rich
2026-06-28 09:37:46 -05:00
committed by GitHub
parent 23c6d2402e
commit 0b81257b50
2 changed files with 36 additions and 11 deletions

View File

@@ -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 {

View File

@@ -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()) {