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 java.util.Locale import ai.picovoice.porcupine.PorcupineManager import ai.picovoice.porcupine.PorcupineManagerCallback import ai.picovoice.porcupine.Porcupine class MainActivity : AppCompatActivity(), TextToSpeech.OnInitListener { private lateinit var tts: TextToSpeech private lateinit var tvStatus: TextView private lateinit var etUrl: EditText private lateinit var spinnerVoices: Spinner private var porcupineManager: PorcupineManager? = null private val client = OkHttpClient() private var webSocket: WebSocket? = null // Liste für die Stimmen-Objekte und deren Namen private var availableVoices = mutableListOf() private var voiceNames = mutableListOf() private val speechRecognizerLauncher = registerForActivityResult( ActivityResultContracts.StartActivityForResult() ) { result -> 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) } } private val speechRecognizerLauncher = registerForActivityResult( ActivityResultContracts.StartActivityForResult() ) { result -> // Wenn Google fertig ist, starten wir das Wake-word wieder try { porcupineManager?.start() } catch (e: Exception) { Log.e("JARVIS", "Neustart nach Spracheingabe fehlgeschlagen") } 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-Elemente initialisieren tvStatus = findViewById(R.id.tvStatus) etUrl = findViewById(R.id.etUrl) spinnerVoices = findViewById(R.id.spinnerVoices) // Hier fehlten wahrscheinlich diese Definitionen: val btnConnect = findViewById