diff --git a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/LiveGenerativeModel.kt b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/LiveGenerativeModel.kt index 8ee07ac3211..218ad441379 100644 --- a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/LiveGenerativeModel.kt +++ b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/LiveGenerativeModel.kt @@ -24,10 +24,10 @@ import com.google.firebase.vertexai.common.APIController import com.google.firebase.vertexai.common.AppCheckHeaderProvider import com.google.firebase.vertexai.type.BidiGenerateContentClientMessage import com.google.firebase.vertexai.type.Content -import com.google.firebase.vertexai.type.GeminiConnectionHandshakeFailed import com.google.firebase.vertexai.type.LiveGenerationConfig import com.google.firebase.vertexai.type.LiveSession import com.google.firebase.vertexai.type.RequestOptions +import com.google.firebase.vertexai.type.ServiceConnectionHandshakeFailedException import com.google.firebase.vertexai.type.Tool import io.ktor.websocket.Frame import io.ktor.websocket.close @@ -103,7 +103,7 @@ internal constructor( LiveSession(session = webSession, backgroundDispatcher = backgroundDispatcher) } else { webSession.close() - throw GeminiConnectionHandshakeFailed() + throw ServiceConnectionHandshakeFailedException() } } diff --git a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/AudioHelper.kt b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/AudioHelper.kt index 25c70db3e29..b2c5acab12a 100644 --- a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/AudioHelper.kt +++ b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/AudioHelper.kt @@ -16,12 +16,14 @@ package com.google.firebase.vertexai.type +import android.Manifest import android.media.AudioFormat import android.media.AudioManager import android.media.AudioRecord import android.media.AudioTrack import android.media.MediaRecorder import android.media.audiofx.AcousticEchoCanceler +import androidx.annotation.RequiresPermission import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow @@ -66,7 +68,8 @@ internal class AudioHelper { } } - suspend fun startRecording(): Flow { + @RequiresPermission(Manifest.permission.RECORD_AUDIO) + fun startRecording(): Flow { val bufferSize = AudioRecord.getMinBufferSize( @@ -79,7 +82,9 @@ internal class AudioHelper { bufferSize == AudioRecord.ERROR_BAD_VALUE || bufferSize <= 0 ) { - throw AudioRecordInitializationFailedException("Audio Record buffer size is invalid") + throw AudioRecordInitializationFailedException( + "Audio Record buffer size is invalid (${bufferSize})" + ) } audioRecord = AudioRecord( @@ -90,7 +95,9 @@ internal class AudioHelper { bufferSize ) if (audioRecord.state != AudioRecord.STATE_INITIALIZED) { - throw AudioRecordInitializationFailedException("Audio Record initialization has failed.") + throw AudioRecordInitializationFailedException( + "Audio Record initialization has failed. State: ${audioRecord.state}" + ) } if (AcousticEchoCanceler.isAvailable()) { val echoCanceler = AcousticEchoCanceler.create(audioRecord.audioSessionId) diff --git a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/Exceptions.kt b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/Exceptions.kt index a9facdaa1bf..7bfb6f9f8a7 100644 --- a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/Exceptions.kt +++ b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/Exceptions.kt @@ -186,7 +186,7 @@ public class AudioRecordInitializationFailedException(message: String) : FirebaseVertexAIException(message) /** Handshake failed with the server */ -public class GeminiConnectionHandshakeFailed : +public class ServiceConnectionHandshakeFailedException : FirebaseVertexAIException("Handshake failed with the server.") /** Catch all case for exceptions not explicitly expected. */