diff --git a/app/src/main/java/com/lahsuak/apps/geminiai/data/model/ChatMessageEntity.kt b/app/src/main/java/com/lahsuak/apps/geminiai/data/model/ChatMessageEntity.kt index 715d6e3..14ba46b 100644 --- a/app/src/main/java/com/lahsuak/apps/geminiai/data/model/ChatMessageEntity.kt +++ b/app/src/main/java/com/lahsuak/apps/geminiai/data/model/ChatMessageEntity.kt @@ -26,6 +26,7 @@ data class ChatMessageEntity( class ListConverters { private var gson: Gson = Gson() + @TypeConverter fun stringToStringList(data: String): List { val listType = object : TypeToken>() {}.type diff --git a/app/src/main/java/com/lahsuak/apps/geminiai/ui/MainActivity.kt b/app/src/main/java/com/lahsuak/apps/geminiai/ui/MainActivity.kt index dd230f2..bb6a764 100644 --- a/app/src/main/java/com/lahsuak/apps/geminiai/ui/MainActivity.kt +++ b/app/src/main/java/com/lahsuak/apps/geminiai/ui/MainActivity.kt @@ -12,6 +12,8 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.lahsuak.apps.geminiai.ui.screen.ChatRoute import com.lahsuak.apps.geminiai.ui.screen.MenuScreen import com.lahsuak.apps.geminiai.ui.theme.GeminiAITheme @@ -59,4 +61,4 @@ class MainActivity : ComponentActivity() { } } } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/lahsuak/apps/geminiai/ui/component/LinkifyText.kt b/app/src/main/java/com/lahsuak/apps/geminiai/ui/component/LinkifyText.kt new file mode 100644 index 0000000..3e3b1bd --- /dev/null +++ b/app/src/main/java/com/lahsuak/apps/geminiai/ui/component/LinkifyText.kt @@ -0,0 +1,32 @@ +package com.lahsuak.apps.geminiai.ui.component + +import android.text.method.LinkMovementMethod +import android.text.util.Linkify +import android.widget.TextView +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.viewinterop.AndroidView +import androidx.core.text.util.LinkifyCompat + +@Composable +fun LinkifyText( + text: AnnotatedString?, color: Color, + modifier: Modifier = Modifier, +) { + val context = LocalContext.current + val customLinkifyTextView = remember { + TextView(context) + } + AndroidView(modifier = modifier, factory = { customLinkifyTextView }) { textView -> + textView.text = text ?: "" + + textView.setTextColor(color.hashCode()) + textView.setLinkTextColor(Color.Blue.hashCode()) + LinkifyCompat.addLinks(textView, Linkify.ALL) + textView.movementMethod = LinkMovementMethod.getInstance() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lahsuak/apps/geminiai/ui/screen/ChatScreen.kt b/app/src/main/java/com/lahsuak/apps/geminiai/ui/screen/ChatScreen.kt index ce9b9f1..0d3bf7e 100644 --- a/app/src/main/java/com/lahsuak/apps/geminiai/ui/screen/ChatScreen.kt +++ b/app/src/main/java/com/lahsuak/apps/geminiai/ui/screen/ChatScreen.kt @@ -84,6 +84,7 @@ import com.google.ai.sample.util.UriSaver import com.lahsuak.apps.geminiai.R import com.lahsuak.apps.geminiai.data.mapper.toChatMessageEntity import com.lahsuak.apps.geminiai.data.model.ChatMessageEntity +import com.lahsuak.apps.geminiai.ui.component.LinkifyText import com.lahsuak.apps.geminiai.ui.component.RoundedTextField import com.lahsuak.apps.geminiai.ui.model.ChatMessage import com.lahsuak.apps.geminiai.ui.model.Role @@ -294,9 +295,9 @@ fun ChatBubbleItem( } } } - Text( - text = formatCode(chatMessage.text), - modifier = Modifier.padding(16.dp) + LinkifyText(text = formatCode(chatMessage.text), + modifier = Modifier.padding(16.dp), + color = MaterialTheme.colorScheme.onSurface ) Row( Modifier.fillMaxWidth(), @@ -431,6 +432,7 @@ fun MessageInput( onSendMessage(userMessage, imageUris) onValueChange("") resetScroll() + keyboard?.hide() isMessageSent = true } else { context.speakToAdd(speakLauncher) diff --git a/app/src/main/java/com/lahsuak/apps/geminiai/ui/viewmodel/ChatViewModel.kt b/app/src/main/java/com/lahsuak/apps/geminiai/ui/viewmodel/ChatViewModel.kt index 7d0a6e6..bde8258 100644 --- a/app/src/main/java/com/lahsuak/apps/geminiai/ui/viewmodel/ChatViewModel.kt +++ b/app/src/main/java/com/lahsuak/apps/geminiai/ui/viewmodel/ChatViewModel.kt @@ -118,7 +118,7 @@ class ChatViewModel( } val generativeModel = geminiAIRepo.getGenerativeModel( - "gemini-pro-vision", + "gemini-1.5-flash", geminiAIRepo.provideConfig() ) var outputContent = ""