diff --git a/mobile/src/main/java/net/activitywatch/android/RustInterface.kt b/mobile/src/main/java/net/activitywatch/android/RustInterface.kt index cac41c9a..18196bb6 100644 --- a/mobile/src/main/java/net/activitywatch/android/RustInterface.kt +++ b/mobile/src/main/java/net/activitywatch/android/RustInterface.kt @@ -172,8 +172,16 @@ class RustInterface(context: Context? = null) { } fun getDeviceName(context: Context): String { - return Settings.Global.getString(context.contentResolver, Settings.Global.DEVICE_NAME) - ?: android.os.Build.MODEL ?: "Unknown" + val raw = Settings.Global.getString(context.contentResolver, Settings.Global.DEVICE_NAME) + ?.trim() + ?.takeIf { it.isNotEmpty() } + ?: android.os.Build.DEVICE + ?: "unknown" + return raw.trim() + .lowercase(java.util.Locale.ROOT) + .replace(Regex("[^a-z0-9_-]+"), "_") + .trim('_') + .ifEmpty { "unknown" } } } diff --git a/mobile/src/main/java/net/activitywatch/android/SyncInterface.kt b/mobile/src/main/java/net/activitywatch/android/SyncInterface.kt index a7d9372d..481ae8ab 100644 --- a/mobile/src/main/java/net/activitywatch/android/SyncInterface.kt +++ b/mobile/src/main/java/net/activitywatch/android/SyncInterface.kt @@ -60,10 +60,16 @@ class SyncInterface(context: Context) { external fun getSyncDir(): String private fun getDeviceName(): String { - return android.provider.Settings.Global.getString( - appContext.contentResolver, + val raw = android.provider.Settings.Global.getString( + appContext.contentResolver, android.provider.Settings.Global.DEVICE_NAME - ) ?: android.os.Build.MODEL ?: "Unknown" + )?.trim()?.takeIf { it.isNotEmpty() } + ?: android.os.Build.DEVICE ?: "unknown" + return raw.trim() + .lowercase(java.util.Locale.ROOT) + .replace(Regex("[^a-z0-9_-]+"), "_") + .trim('_') + .ifEmpty { "unknown" } } // Async wrapper for syncPullAll