Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.flipcash.app.core

import android.os.Parcelable
import androidx.navigation3.runtime.NavKey
import com.flipcash.app.core.chat.ChatIdentifier
import com.flipcash.app.core.deposit.DepositResult
import com.flipcash.app.core.deposit.DepositStep
import com.flipcash.app.core.tokens.CurrencyCreatorResult
Expand All @@ -19,7 +20,6 @@ import com.flipcash.app.core.onboarding.OnboardingStep
import com.getcode.navigation.flow.FlowRoute
import com.getcode.navigation.flow.FlowRouteWithResult
import com.getcode.opencode.model.financial.Fiat
import com.flipcash.services.models.chat.ChatId
import com.getcode.solana.keys.Mint
import com.getcode.ui.core.RestrictionType
import kotlinx.parcelize.Parcelize
Expand Down Expand Up @@ -238,24 +238,6 @@ sealed interface AppRoute : NavKey, Parcelable {
data object NavBarSettings : Menu, com.getcode.navigation.Sheet, com.getcode.navigation.WrapContentSheet
}

@Serializable
@Parcelize
sealed interface ChatIdentifier : Parcelable {
val key: String

@Serializable
@Parcelize
data class ByChatId(val chatId: ChatId) : ChatIdentifier {
override val key: String get() = chatId.toString()
}

@Serializable
@Parcelize
data class ByContact(val e164: String, val displayName: String, val chatId: ChatId? = null) : ChatIdentifier {
override val key: String get() = e164
}
}

@Serializable
@Parcelize
sealed interface Messaging : AppRoute {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.flipcash.app.core.chat

import android.os.Parcelable
import com.flipcash.services.models.chat.ChatId
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable

@Serializable
@Parcelize
sealed interface ChatIdentifier : Parcelable {
val key: String

@Serializable
@Parcelize
data class ByChatId(val chatId: ChatId) : ChatIdentifier {
override val key: String get() = chatId.toString()
}

@Serializable
@Parcelize
data class ByContact(val e164: String, val displayName: String, val chatId: ChatId? = null) : ChatIdentifier {
override val key: String get() = e164
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.flipcash.app.contacts.ContactCoordinator.ContactState
import com.flipcash.app.contacts.device.DeviceContact
import com.flipcash.app.contacts.device.PickedContactData
import com.flipcash.app.core.AppRoute
import com.flipcash.app.core.chat.ChatIdentifier
import com.flipcash.app.core.send.SendStep
import com.flipcash.app.featureflags.FeatureFlag
import com.flipcash.app.featureflags.FeatureFlagController
Expand Down Expand Up @@ -43,7 +44,6 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.take
import kotlinx.coroutines.launch
import javax.inject.Inject
import kotlin.time.Duration.Companion.seconds

Expand Down Expand Up @@ -89,7 +89,7 @@ internal class SendFlowViewModel @Inject constructor(
data class ContactRemoved(val e164: String) : Event
data class SendInvite(val contact: DeviceContact) : Event

data class NavigateToChat(val identifier: AppRoute.ChatIdentifier) : Event
data class NavigateToChat(val identifier: ChatIdentifier) : Event
data class NavigateToDirectSend(val contact: DeviceContact) : Event
data object PresentDepositOptions : Event
data class NavigateToUsdfDepositOption(val route: AppRoute): Event
Expand Down Expand Up @@ -182,9 +182,9 @@ internal class SendFlowViewModel @Inject constructor(
if (isOnFlipcash) {
if (featureFlags.get(FeatureFlag.Messenger)) {
val identifier = if (contact.e164.isNotEmpty()) {
AppRoute.ChatIdentifier.ByContact(contact.e164, contact.displayName, row.chatId)
ChatIdentifier.ByContact(contact.e164, contact.displayName, row.chatId)
} else {
AppRoute.ChatIdentifier.ByChatId(row.chatId!!)
ChatIdentifier.ByChatId(row.chatId!!)
}
dispatchEvent(Event.NavigateToChat(identifier))
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import androidx.compose.animation.togetherWith
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
Expand All @@ -24,34 +23,23 @@ import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.GroupAdd
import androidx.compose.material.icons.filled.Person
import androidx.compose.material.icons.rounded.PersonRemove
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewWrapper
import androidx.compose.ui.unit.dp
import androidx.core.net.toUri
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil3.compose.AsyncImage
import coil3.request.ImageRequest
import coil3.request.crossfade
import com.flipcash.app.contacts.device.DeviceContact
import com.flipcash.app.core.AppRoute
import com.flipcash.app.core.send.SendResult
Expand All @@ -71,15 +59,11 @@ import com.getcode.ui.components.AppBarDefaults
import com.getcode.ui.components.AppBarWithTitle
import com.getcode.ui.components.CircularIconButton
import com.getcode.ui.components.SearchInput
import com.getcode.ui.components.SwipeAction
import com.getcode.ui.components.SwipeActionRow
import androidx.compose.foundation.clickable
import com.flipcash.app.contacts.ui.ContactAvatar
import com.flipcash.app.core.chat.ChatIdentifier
import com.getcode.ui.core.verticalScrollStateGradient
import com.getcode.ui.theme.CodeCircularProgressIndicator
import com.getcode.ui.theme.CodeScaffold
import com.getcode.view.LoadingSuccessState
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.map

Expand Down Expand Up @@ -117,7 +101,7 @@ internal fun ContactListScreen() {
.collect { contact ->
flowNavigator.navigate(
AppRoute.Messaging.AmountEntry(
identifier = AppRoute.ChatIdentifier.ByContact(
identifier = ChatIdentifier.ByContact(
e164 = contact.e164,
displayName = contact.displayName,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import androidx.compose.runtime.getValue
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.flipcash.app.core.AppRoute
import com.flipcash.app.core.chat.ChatIdentifier
import com.flipcash.app.core.tokens.TokenPurpose
import com.flipcash.app.core.ui.TokenSelectionPill
import com.flipcash.app.messenger.internal.ChatViewModel
Expand All @@ -29,7 +30,7 @@ import kotlinx.coroutines.flow.onEach
* (messenger disabled). Creates its own [ChatViewModel] scoped to this nav entry.
*/
@Composable
fun ChatAmountEntryScreen(identifier: AppRoute.ChatIdentifier) {
fun ChatAmountEntryScreen(identifier: ChatIdentifier) {
val viewModel = hiltViewModel<ChatViewModel>()
val state by viewModel.stateFlow.collectAsStateWithLifecycle()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import androidx.navigation3.runtime.NavEntry
import androidx.navigation3.runtime.NavKey
import androidx.navigation3.runtime.entryProvider
import com.flipcash.app.core.AppRoute
import com.flipcash.app.core.chat.ChatIdentifier
import com.flipcash.app.core.chat.ChatStep
import com.flipcash.app.messenger.internal.ChatViewModel
import com.flipcash.app.messenger.internal.screens.MessengerScreen
Expand Down Expand Up @@ -40,7 +41,7 @@ fun ChatFlowScreen(

@Composable
private fun chatEntryProvider(
identifier: AppRoute.ChatIdentifier,
identifier: ChatIdentifier,
): (NavKey) -> NavEntry<NavKey> = entryProvider {
annotatedEntry<ChatStep.Conversation> {
FlowConversationScreen(identifier)
Expand All @@ -51,7 +52,7 @@ private fun chatEntryProvider(
}

@Composable
private fun FlowConversationScreen(identifier: AppRoute.ChatIdentifier) {
private fun FlowConversationScreen(identifier: ChatIdentifier) {
val viewModel = flowSharedViewModel<ChatViewModel>()
val flowNavigator = rememberFlowNavigator<ChatStep, Parcelable>()

Expand Down
Loading
Loading