Release GPS2Audio v2.5.44 POI category fix

This commit is contained in:
Perplexity Computer
2026-05-30 05:42:44 +00:00
parent 18ea77b21d
commit 014e6c1bf1
100 changed files with 28584 additions and 1083 deletions
@@ -2,14 +2,23 @@ package de.waypointaudio.data
import android.content.Context
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.intPreferencesKey
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
/**
* Globale Audio-Routing-Einstellungen für Live/PTT.
* Aufnahmeformat für PTT-Mitschnitt.
* M4A_AAC wird produktiv unterstützt; WAV ist in v2.1.0 absichtlich deaktiviert
* (siehe Handoff). Der enum-Wert bleibt vorhanden für künftige Erweiterung.
*/
enum class PttRecordingFormat { M4A_AAC, WAV }
/**
* Globale Audio-Routing- und PTT-Einstellungen für Live/PTT.
*
* Gerätekennungen (AudioDeviceInfo.id) sind Sitzungs-spezifisch und können sich nach
* einem Neustart oder nach dem Trennen/Verbinden von Bluetooth-Geräten ändern.
@@ -18,22 +27,32 @@ import kotlinx.coroutines.flow.map
*
* @param selectedInputDeviceId ID des Eingabegeräts, null = Systemstandard
* @param selectedOutputDeviceId ID des Ausgabegeräts, null = Systemstandard
* @param liveOutputEnabled Mikrofon-Loop auf Ausgabegerät (klassische PTT).
* Standard: true (rückwärtskompatibel zu v2.0.8).
* @param recordingEnabled PTT-Aufnahme aktiv. Standard: false.
* @param recordingFormat Aufnahmeformat. Standard: M4A_AAC.
*/
data class AudioRoutingSettings(
val selectedInputDeviceId: Int? = null,
val selectedOutputDeviceId: Int? = null
val selectedOutputDeviceId: Int? = null,
val liveOutputEnabled: Boolean = true,
val recordingEnabled: Boolean = false,
val recordingFormat: PttRecordingFormat = PttRecordingFormat.M4A_AAC
)
private val Context.audioRoutingDataStore by preferencesDataStore(name = "audio_routing_settings")
/**
* Persistenz-Schicht für Audio-Routing-Einstellungen via DataStore.
* Persistenz-Schicht für Audio-Routing- und PTT-Einstellungen via DataStore.
*/
class AudioRoutingStore(private val context: Context) {
private companion object {
val KEY_INPUT_DEVICE_ID = intPreferencesKey("selected_input_device_id")
val KEY_OUTPUT_DEVICE_ID = intPreferencesKey("selected_output_device_id")
val KEY_INPUT_DEVICE_ID = intPreferencesKey("selected_input_device_id")
val KEY_OUTPUT_DEVICE_ID = intPreferencesKey("selected_output_device_id")
val KEY_LIVE_OUTPUT = booleanPreferencesKey("ptt_live_output_enabled")
val KEY_RECORDING_ENABLED = booleanPreferencesKey("ptt_recording_enabled")
val KEY_RECORDING_FORMAT = stringPreferencesKey("ptt_recording_format")
// Sentinel: -1 means "use system default" (null cannot be stored as Int)
const val NO_DEVICE = -1
}
@@ -42,14 +61,22 @@ class AudioRoutingStore(private val context: Context) {
.map { prefs ->
AudioRoutingSettings(
selectedInputDeviceId = prefs[KEY_INPUT_DEVICE_ID].takeIf { it != null && it != NO_DEVICE },
selectedOutputDeviceId = prefs[KEY_OUTPUT_DEVICE_ID].takeIf { it != null && it != NO_DEVICE }
selectedOutputDeviceId = prefs[KEY_OUTPUT_DEVICE_ID].takeIf { it != null && it != NO_DEVICE },
liveOutputEnabled = prefs[KEY_LIVE_OUTPUT] ?: true,
recordingEnabled = prefs[KEY_RECORDING_ENABLED] ?: false,
recordingFormat = prefs[KEY_RECORDING_FORMAT]
?.let { runCatching { PttRecordingFormat.valueOf(it) }.getOrNull() }
?: PttRecordingFormat.M4A_AAC
)
}
suspend fun save(settings: AudioRoutingSettings) {
context.audioRoutingDataStore.edit { prefs ->
prefs[KEY_INPUT_DEVICE_ID] = settings.selectedInputDeviceId ?: NO_DEVICE
prefs[KEY_OUTPUT_DEVICE_ID] = settings.selectedOutputDeviceId ?: NO_DEVICE
prefs[KEY_INPUT_DEVICE_ID] = settings.selectedInputDeviceId ?: NO_DEVICE
prefs[KEY_OUTPUT_DEVICE_ID] = settings.selectedOutputDeviceId ?: NO_DEVICE
prefs[KEY_LIVE_OUTPUT] = settings.liveOutputEnabled
prefs[KEY_RECORDING_ENABLED] = settings.recordingEnabled
prefs[KEY_RECORDING_FORMAT] = settings.recordingFormat.name
}
}