package com.example.jarvis_stts import android.Manifest import android.content.Intent import android.content.pm.PackageManager import android.os.Bundle import android.speech.RecognizerIntent import android.speech.tts.TextToSpeech import android.speech.tts.Voice import android.util.Log import android.view.View import android.widget.* import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import okhttp3.* import org.vosk.Model import org.vosk.Recognizer import org.vosk.android.RecognitionListener import org.vosk.android.SpeechService import org.vosk.android.StorageService import java.io.IOException import java.util.Locale class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnInitListener { // UI Elemente private lateinit var tvStatus: TextView private lateinit var etUrl: EditText private lateinit var spinnerVoices: Spinner private lateinit var tts: TextToSpeech // Vosk & Netzwerk private var voskService: SpeechService? = null private var voskModel: Model? = null private val client = OkHttpClient() private var webSocket: WebSocket? = null // TTS Stimmen private var availableVoices = mutableListOf() private var voiceNames = mutableListOf() // Launcher für Google Spracherkennung private val speechRecognizerLauncher = registerForActivityResult( ActivityResultContracts.StartActivityForResult() ) { result -> // Nach der Google-Eingabe starten wir Vosk wieder startVosk() if (result.resultCode == RESULT_OK && result.data != null) { val spokenText = result.data!!.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)?.get(0) ?: "" tvStatus.text = "Ich: $spokenText" webSocket?.send(spokenText) } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 1. UI initialisieren tvStatus = findViewById(R.id.tvStatus) etUrl = findViewById(R.id.etUrl) spinnerVoices = findViewById(R.id.spinnerVoices) val btnConnect = findViewById