diff --git a/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/PlatformUI.kt b/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/PlatformUI.kt index 83da60c..3629870 100644 --- a/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/PlatformUI.kt +++ b/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/PlatformUI.kt @@ -34,7 +34,7 @@ import com.open.pin.ui.utils.PinDimensions import com.open.pin.ui.utils.modifiers.ProvideSnapCoordinator import com.open.pin.ui.utils.modifiers.SnapCoordinator import com.penumbraos.mabl.aipincore.view.TouchInterceptor -import com.penumbraos.mabl.aipincore.view.model.ConversationsNav +import com.penumbraos.mabl.aipincore.view.model.ConversationDisplayNav import com.penumbraos.mabl.aipincore.view.model.NavViewModel import com.penumbraos.mabl.aipincore.view.model.PlatformViewModel import com.penumbraos.mabl.aipincore.view.nav.Navigation @@ -75,7 +75,11 @@ fun PlatformUI(uiComponents: UIComponents) { LaunchedEffect(Unit) { actualViewModel.openCurrentConversationEvent.collect { - actualViewModel.navViewModel.pushView(ConversationsNav) + val currentConversation = + actualViewModel.conversationRepository.getLastActiveConversation() + if (currentConversation != null) { + actualViewModel.navViewModel.pushView(ConversationDisplayNav(currentConversation.id)) + } } } @@ -108,23 +112,6 @@ fun PlatformUI(uiComponents: UIComponents) { } } -@Composable -fun ConversationDisplay( - modifier: Modifier = Modifier, - messages: List, -) { - Box( - modifier = modifier - .fillMaxSize() - .background(color = PinTheme.colors.background) - ) { - ConversationList( - messages = messages, - modifier = Modifier.fillMaxSize() - ) - } -} - @Composable fun ConversationList( modifier: Modifier = Modifier, @@ -203,7 +190,7 @@ fun ConversationDisplayPreview() { PinTheme { ProvideSnapCoordinator(coordinator = snapCoordinator.value) { - ConversationDisplay(messages = messages) +// ConversationDisplay(messages = messages) } } } \ No newline at end of file diff --git a/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/model/NavViewModel.kt b/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/model/NavViewModel.kt index 3670b22..d2540d3 100644 --- a/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/model/NavViewModel.kt +++ b/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/model/NavViewModel.kt @@ -7,6 +7,7 @@ import androidx.lifecycle.ViewModel data object HomeNav data object MenuNav data object ConversationsNav +data class ConversationDisplayNav(val conversationId: String) data object SettingsNav data object DummyNav diff --git a/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/model/PlatformViewModel.kt b/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/model/PlatformViewModel.kt index 3195f93..678c7d1 100644 --- a/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/model/PlatformViewModel.kt +++ b/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/model/PlatformViewModel.kt @@ -7,6 +7,7 @@ import com.penumbraos.mabl.aipincore.SETTING_APP_ID import com.penumbraos.mabl.aipincore.SETTING_DEBUG_CATEGORY import com.penumbraos.mabl.aipincore.SETTING_DEBUG_CURSOR import com.penumbraos.mabl.data.AppDatabase +import com.penumbraos.mabl.data.repository.ConversationRepository import com.penumbraos.sdk.PenumbraClient import com.penumbraos.sdk.api.BooleanSettingListener import kotlinx.coroutines.CoroutineScope @@ -30,6 +31,11 @@ class PlatformViewModel( private val _debugChannel = Channel() val debugChannel = _debugChannel.receiveAsFlow() + val conversationRepository = ConversationRepository( + database.conversationDao(), + database.conversationMessageDao() + ) + init { coroutineScope.launch { val client = PenumbraClient(context) diff --git a/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/nav/ConversationDisplay.kt b/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/nav/ConversationDisplay.kt new file mode 100644 index 0000000..eb29d44 --- /dev/null +++ b/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/nav/ConversationDisplay.kt @@ -0,0 +1,30 @@ +package com.penumbraos.mabl.aipincore.view.nav + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Modifier +import androidx.lifecycle.viewmodel.compose.viewModel +import com.open.pin.ui.PinTheme +import com.penumbraos.mabl.aipincore.ConversationList +import com.penumbraos.mabl.aipincore.view.model.PlatformViewModel + +@Composable +fun ConversationDisplay(conversationId: String) { + val viewModel = viewModel() + val messages = viewModel.conversationRepository.getConversationMessagesFlow(conversationId) + .collectAsState(emptyList()) + + Box( + modifier = Modifier + .fillMaxSize() + .background(color = PinTheme.colors.background) + ) { + ConversationList( + messages = messages.value, + modifier = Modifier.fillMaxSize() + ) + } +} \ No newline at end of file diff --git a/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/nav/Navigation.kt b/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/nav/Navigation.kt index 6b06d6c..70ae68d 100644 --- a/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/nav/Navigation.kt +++ b/mabl/src/aipincore/java/com/penumbraos/mabl/aipincore/view/nav/Navigation.kt @@ -20,6 +20,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation3.runtime.NavEntry import androidx.navigation3.ui.NavDisplay import com.open.pin.ui.components.text.PinText +import com.penumbraos.mabl.aipincore.view.model.ConversationDisplayNav import com.penumbraos.mabl.aipincore.view.model.ConversationsNav import com.penumbraos.mabl.aipincore.view.model.HomeNav import com.penumbraos.mabl.aipincore.view.model.MenuNav @@ -70,6 +71,10 @@ fun Navigation(navViewModel: NavViewModel = viewModel()) { Conversations() } + is ConversationDisplayNav -> NavEntry(key) { + ConversationDisplay(key.conversationId) + } + SettingsNav -> NavEntry(key) { Settings() } diff --git a/mabl/src/main/java/com/penumbraos/mabl/data/dao/ConversationDao.kt b/mabl/src/main/java/com/penumbraos/mabl/data/dao/ConversationDao.kt index 4133d9b..76fb8c3 100644 --- a/mabl/src/main/java/com/penumbraos/mabl/data/dao/ConversationDao.kt +++ b/mabl/src/main/java/com/penumbraos/mabl/data/dao/ConversationDao.kt @@ -5,6 +5,7 @@ import androidx.room.Insert import androidx.room.Query import androidx.room.Update import com.penumbraos.mabl.data.types.Conversation +import kotlinx.coroutines.flow.Flow @Dao interface ConversationDao { @@ -15,7 +16,7 @@ interface ConversationDao { suspend fun getConversation(id: String): Conversation? @Query("SELECT * FROM conversations ORDER BY lastActivity DESC LIMIT 1") - suspend fun getLastActiveConversation(): Conversation? + fun getLastActiveConversation(): Flow @Insert suspend fun insertConversation(conversation: Conversation) diff --git a/mabl/src/main/java/com/penumbraos/mabl/data/repository/ConversationRepository.kt b/mabl/src/main/java/com/penumbraos/mabl/data/repository/ConversationRepository.kt index 4274ee0..06b9cbd 100644 --- a/mabl/src/main/java/com/penumbraos/mabl/data/repository/ConversationRepository.kt +++ b/mabl/src/main/java/com/penumbraos/mabl/data/repository/ConversationRepository.kt @@ -5,6 +5,7 @@ import com.penumbraos.mabl.data.dao.ConversationMessageDao import com.penumbraos.mabl.data.types.Conversation import com.penumbraos.mabl.data.types.ConversationMessage import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.first class ConversationRepository( private val conversationDao: ConversationDao, @@ -18,6 +19,9 @@ class ConversationRepository( suspend fun getConversation(id: String): Conversation? = conversationDao.getConversation(id) suspend fun getLastActiveConversation(): Conversation? = + conversationDao.getLastActiveConversation().first() + + fun getLastActiveConversationFlow(): Flow = conversationDao.getLastActiveConversation() suspend fun createNewConversation(title: String = "New Conversation"): Conversation {