Skip to content

Commit

Permalink
Merge pull request #2410 from HedvigInsurance/feature/chat-multiple-d…
Browse files Browse the repository at this point in the history
…oc-and-videoplayer-on-top-of-develop

Feature/chat multiple doc and videoplayer on top of develop
  • Loading branch information
panasetskaya authored Feb 4, 2025
2 parents c8ec8f6 + 059d2e6 commit 5a5535d
Show file tree
Hide file tree
Showing 64 changed files with 718 additions and 515 deletions.
5 changes: 0 additions & 5 deletions app/apollo/apollo-octopus-public/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,6 @@ hedvig {
mapScalar("Date", "kotlinx.datetime.LocalDate", "com.apollographql.adapter.datetime.KotlinxLocalDateAdapter")
mapScalar("DateTime", "kotlinx.datetime.Instant", "com.apollographql.adapter.datetime.KotlinxInstantAdapter")
mapScalar("Instant", "kotlinx.datetime.Instant", "com.apollographql.adapter.datetime.KotlinxInstantAdapter")
mapScalar(
"Markdown",
"com.hedvig.android.core.markdown.MarkdownString",
"com.hedvig.android.apollo.octopus.MarkdownStringAdapter",
)
mapScalarToKotlinString("UUID")
mapScalarToKotlinString("Url")
mapScalarToKotlinString("FlowContext")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ extend schema

extend type Member @typePolicy(keyFields: "id")

extend type Chat @typePolicy(keyFields: "id")
extend interface ChatMessage @typePolicy(keyFields: "id")
extend type Contract @typePolicy(keyFields: "id")
extend type Claim @typePolicy(keyFields: "id")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ fragment AddonVariantFragment on AddonVariant {
coverageText
description
title
colorCode
}
documents {
displayName
Expand Down
2 changes: 1 addition & 1 deletion app/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ android {
applicationId = "com.hedvig"

versionCode = 43
versionName = "12.9.8"
versionName = "12.10.1"

vectorDrawables.useSupportLibrary = true

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.hedvig.app.debug.impersonation
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.annotation.OptIn
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.getValue
Expand All @@ -15,7 +14,6 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.viewModelScope
import androidx.media3.common.util.UnstableApi
import com.hedvig.android.app.MainActivity
import com.hedvig.android.auth.AuthTokenService
import com.hedvig.android.design.system.hedvig.HedvigText
Expand All @@ -41,7 +39,6 @@ import org.koin.core.parameter.parametersOf
import org.koin.dsl.module

class ImpersonationReceiverActivity : ComponentActivity() {
@OptIn(UnstableApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
loadKoinModules(module)
Expand Down
3 changes: 2 additions & 1 deletion app/app/src/debug/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
<resources>
<string name="APP_NAME" translatable="false">Hedvig Dev</string>

<string name="DEEP_LINK_DOMAIN_HOST" translatable="false">hedvigdevelop.page.link</string>
<string name="DEEP_LINK_DOMAIN_HOST_OLD" translatable="false">hedvigdevelop.page.link</string>
<string name="DEEP_LINK_DOMAIN_HOST" translatable="false">dev.hedvigit.com</string>

<string name="OCTOPUS_GRAPHQL_URL" translatable="false">https://apollo-router.dev.hedvigit.com</string>
<string name="WEB_BASE_URL" translatable="false">https://www.dev.hedvigit.com</string>
Expand Down
13 changes: 12 additions & 1 deletion app/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,20 @@
<category android:name="android.intent.category.BROWSABLE" />

<data
android:host="@string/DEEP_LINK_DOMAIN_HOST"
android:host="@string/DEEP_LINK_DOMAIN_HOST_OLD"
android:scheme="https" />
</intent-filter>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data
android:host="@string/DEEP_LINK_DOMAIN_HOST"
android:scheme="https"
android:pathPrefix="@string/DEEP_LINK_DOMAIN_PATH_PREFIX" />
</intent-filter>
</activity>

<meta-data
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LifecycleStartEffect
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.media3.common.util.UnstableApi
import androidx.media3.datasource.cache.SimpleCache
import androidx.navigation.NavController
import androidx.navigation.compose.rememberNavController
Expand Down Expand Up @@ -59,7 +58,6 @@ import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import org.koin.android.ext.android.inject

@UnstableApi
class MainActivity : AppCompatActivity() {
private val applicationScope: ApplicationScope by inject()
private val authTokenService: AuthTokenService by inject()
Expand All @@ -75,7 +73,7 @@ class MainActivity : AppCompatActivity() {
private val tabNotificationBadgeService: TabNotificationBadgeService by inject()
private val waitUntilAppReviewDialogShouldBeOpenedUseCase: WaitUntilAppReviewDialogShouldBeOpenedUseCase by inject()
private val languageAndMarketLaunchCheckUseCase: LanguageAndMarketLaunchCheckUseCase by inject()
private val simpleVideoCache: SimpleCache by inject() // todo: unstable API
private val simpleVideoCache: SimpleCache by inject()

private var navController: NavController? = null

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ import com.hedvig.android.database.di.databaseModule
import com.hedvig.android.datadog.core.addDatadogConfiguration
import com.hedvig.android.datadog.core.di.datadogModule
import com.hedvig.android.datadog.demo.tracking.di.datadogDemoTrackingModule
import com.hedvig.android.design.system.hedvig.pdfrenderer.PdfDecoder
import com.hedvig.android.feature.addon.purchase.di.addonPurchaseModule
import com.hedvig.android.feature.change.tier.di.chooseTierModule
import com.hedvig.android.feature.chat.di.chatModule
Expand Down Expand Up @@ -206,7 +207,10 @@ private val buildConstantsModule = module {
override val urlOdyssey: String = context.getString(R.string.ODYSSEY_URL)
override val urlBotService: String = context.getString(R.string.BOT_SERVICE)
override val urlClaimsService: String = context.getString(R.string.CLAIMS_SERVICE)
override val deepLinkHost: String = context.getString(R.string.DEEP_LINK_DOMAIN_HOST)
override val deepLinkHosts: List<String> = listOf(
context.getString(R.string.DEEP_LINK_DOMAIN_HOST) + context.getString(R.string.DEEP_LINK_DOMAIN_PATH_PREFIX),
context.getString(R.string.DEEP_LINK_DOMAIN_HOST_OLD),
)

override val appVersionName: String = BuildConfig.VERSION_NAME
override val appVersionCode: String = BuildConfig.VERSION_CODE.toString()
Expand Down Expand Up @@ -301,6 +305,7 @@ private val coilModule = module {
} else {
add(GifDecoder.Factory())
}
add(PdfDecoder.Factory())
}.memoryCache {
MemoryCache.Builder(applicationContext).build()
}.diskCache {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package com.hedvig.android.app.navigation

import androidx.annotation.OptIn
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Density
import androidx.media3.common.util.UnstableApi
import androidx.media3.datasource.cache.SimpleCache
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavGraphBuilder
Expand Down Expand Up @@ -79,7 +77,6 @@ import com.hedvig.android.navigation.compose.typedPopUpTo
import com.hedvig.android.navigation.core.HedvigDeepLinkContainer
import com.hedvig.android.navigation.core.Navigator

@OptIn(UnstableApi::class)
@Composable
internal fun HedvigNavHost(
hedvigAppState: HedvigAppState,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ import android.app.PendingIntent
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationCompat.MessagingStyle
import androidx.core.app.Person
import androidx.core.content.getSystemService
import androidx.core.graphics.drawable.IconCompat
import androidx.core.net.toUri
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.navigation.NavDestination
Expand Down Expand Up @@ -117,13 +117,11 @@ class ChatNotificationSender(
private fun sendChatNotificationInner(context: Context, style: MessagingStyle, remoteMessage: RemoteMessage) {
val conversationId = remoteMessage.data.conversationIdFromCustomerIoData()
val isValidUuid = conversationId.isValidUuid()
val intentUri = Uri.parse(
if (conversationId != null && isValidUuid) {
hedvigDeepLinkContainer.conversation.replace("{conversationId}", conversationId)
} else {
hedvigDeepLinkContainer.inbox
},
)
val intentUri = if (conversationId != null && isValidUuid) {
hedvigDeepLinkContainer.conversation.first().replace("{conversationId}", conversationId)
} else {
hedvigDeepLinkContainer.inbox.first()
}.toUri()
logcat { "ChatNotificationSender sending notification with deeplink uri:$intentUri" }
val chatIntent = Intent().apply {
action = Intent.ACTION_VIEW
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class ContactInfoSender(
override suspend fun sendNotification(type: String, remoteMessage: RemoteMessage) {
val contactInfoIntent = Intent().apply {
action = Intent.ACTION_VIEW
data = Uri.parse(deepLinkContainer.contactInfo)
data = Uri.parse(deepLinkContainer.contactInfo.first())
component = ComponentName(buildConstants.appId, MainActivityFullyQualifiedName)
}
val pendingIntent = PendingIntent.getActivity(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@ package com.hedvig.android.app.notification.senders
import android.app.Notification
import android.app.PendingIntent
import android.content.Context
import androidx.annotation.OptIn
import androidx.core.app.NotificationCompat
import androidx.core.app.TaskStackBuilder
import androidx.media3.common.util.UnstableApi
import com.google.firebase.messaging.RemoteMessage
import com.hedvig.android.app.MainActivity
import com.hedvig.android.app.notification.DATA_MESSAGE_BODY
Expand Down Expand Up @@ -53,7 +51,6 @@ class CrossSellNotificationSender(

override fun handlesNotificationType(notificationType: String) = notificationType == NOTIFICATION_CROSS_SELL

@OptIn(UnstableApi::class)
private fun createInsuranceTabIntent(context: Context): PendingIntent? {
val builder = TaskStackBuilder.create(context)
// todo: Consider opening some cross sell detail screen here instead
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@ package com.hedvig.android.app.notification.senders

import android.content.Context
import android.content.Intent
import androidx.annotation.OptIn
import androidx.core.app.NotificationCompat
import androidx.core.app.TaskStackBuilder
import androidx.media3.common.util.UnstableApi
import com.google.firebase.messaging.RemoteMessage
import com.hedvig.android.app.MainActivity
import com.hedvig.android.app.notification.DATA_MESSAGE_BODY
Expand All @@ -23,7 +21,6 @@ class GenericNotificationSender(
) : NotificationSender {
private val id = AtomicInteger(100)

@OptIn(UnstableApi::class)
override suspend fun sendNotification(type: String, remoteMessage: RemoteMessage) {
val title = remoteMessage.data[DATA_MESSAGE_TITLE]
val body = remoteMessage.data[DATA_MESSAGE_BODY]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@ package com.hedvig.android.app.notification.senders
import android.app.Notification
import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.annotation.OptIn
import androidx.core.app.NotificationCompat
import androidx.core.app.TaskStackBuilder
import androidx.media3.common.util.UnstableApi
import androidx.core.net.toUri
import com.google.firebase.messaging.RemoteMessage
import com.hedvig.android.app.MainActivity
import com.hedvig.android.app.notification.getImmutablePendingIntentFlags
Expand All @@ -26,7 +24,6 @@ class PaymentNotificationSender(
private val hedvigDeepLinkContainer: HedvigDeepLinkContainer,
private val notificationChannel: HedvigNotificationChannel,
) : NotificationSender {
@OptIn(UnstableApi::class)
override suspend fun sendNotification(type: String, remoteMessage: RemoteMessage) {
when (type) {
NOTIFICATION_TYPE_CONNECT_DIRECT_DEBIT -> sendConnectDirectDebitNotification()
Expand All @@ -43,7 +40,10 @@ class PaymentNotificationSender(

private fun sendConnectDirectDebitNotification() {
applicationScope.launch(Dispatchers.IO) {
val connectPaymentDeepLinkIntent = Intent(Intent.ACTION_VIEW, Uri.parse(hedvigDeepLinkContainer.connectPayment))
val connectPaymentDeepLinkIntent = Intent(
Intent.ACTION_VIEW,
hedvigDeepLinkContainer.connectPayment.first().toUri(),
)
val pendingIntent = TaskStackBuilder
.create(context)
.addNextIntent(connectPaymentDeepLinkIntent)
Expand All @@ -63,8 +63,6 @@ class PaymentNotificationSender(
}
}

@androidx.media3.common.util.UnstableApi
@OptIn(UnstableApi::class)
private fun sendPaymentFailedNotification() {
val pendingIntent = TaskStackBuilder
.create(context)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@ import android.app.Notification
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.annotation.OptIn
import androidx.core.app.NotificationCompat
import androidx.core.app.PendingIntentCompat
import androidx.core.app.TaskStackBuilder
import androidx.media3.common.util.UnstableApi
import androidx.core.net.toUri
import com.google.firebase.messaging.RemoteMessage
import com.hedvig.android.app.MainActivity
import com.hedvig.android.app.notification.DATA_MESSAGE_BODY
Expand Down Expand Up @@ -41,7 +39,7 @@ class ReferralsNotificationSender(
}

private fun sendReferralSuccessfulNotification(remoteMessage: RemoteMessage) {
val foreverIntent = Intent(Intent.ACTION_VIEW, Uri.parse(hedvigDeepLinkContainer.forever))
val foreverIntent = Intent(Intent.ACTION_VIEW, hedvigDeepLinkContainer.forever.first().toUri())
val pendingIntent = PendingIntentCompat.getBroadcast(
context,
0,
Expand Down Expand Up @@ -69,7 +67,6 @@ class ReferralsNotificationSender(
sendNotificationInner(REFERRAL_NOTIFICATION_ID, notificationBuilder.build())
}

@OptIn(UnstableApi::class)
private fun sendReferralCampaignNotification(remoteMessage: RemoteMessage) {
val pendingIntent: PendingIntent? = TaskStackBuilder
.create(context)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.repeatOnLifecycle
import androidx.media3.common.util.UnstableApi
import androidx.media3.datasource.cache.SimpleCache
import androidx.navigation.NavDestination.Companion.hierarchy
import androidx.navigation.NavHostController
Expand Down Expand Up @@ -56,7 +55,6 @@ import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.receiveAsFlow

@androidx.annotation.OptIn(UnstableApi::class)
@OptIn(ExperimentalSharedTransitionApi::class)
@Composable
internal fun HedvigApp(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.coerceAtLeast
import androidx.compose.ui.unit.dp
import androidx.media3.common.util.UnstableApi
import androidx.media3.datasource.cache.SimpleCache
import coil.ImageLoader
import com.hedvig.android.app.navigation.HedvigNavHost
Expand All @@ -38,7 +37,6 @@ import com.hedvig.android.market.Market
import com.hedvig.android.navigation.activity.ExternalNavigator
import com.hedvig.android.navigation.core.HedvigDeepLinkContainer

@androidx.annotation.OptIn(UnstableApi::class)
@Composable
internal fun HedvigAppUi(
hedvigAppState: HedvigAppState,
Expand Down
4 changes: 4 additions & 0 deletions app/app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="DEEP_LINK_DOMAIN_PATH_PREFIX" translatable="false">/deeplink</string>
</resources>
3 changes: 2 additions & 1 deletion app/app/src/release/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
<resources>
<string name="APP_NAME" translatable="false">Hedvig</string>

<string name="DEEP_LINK_DOMAIN_HOST" translatable="false">hedvig.page.link</string>
<string name="DEEP_LINK_DOMAIN_HOST_OLD" translatable="false">hedvig.page.link</string>
<string name="DEEP_LINK_DOMAIN_HOST" translatable="false">www.hedvig.com</string>

<string name="OCTOPUS_GRAPHQL_URL" translatable="false">https://apollo-router.prod.hedvigit.com</string>
<string name="WEB_BASE_URL" translatable="false">https://www.hedvig.com</string>
Expand Down
3 changes: 2 additions & 1 deletion app/app/src/staging/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
<resources>
<string name="APP_NAME" translatable="false">Hedvig Test</string>

<string name="DEEP_LINK_DOMAIN_HOST" translatable="false">hedvigtest.page.link</string>
<string name="DEEP_LINK_DOMAIN_HOST_OLD" translatable="false">hedvigtest.page.link</string>
<string name="DEEP_LINK_DOMAIN_HOST" translatable="false">dev.hedvigit.com</string>

<string name="OCTOPUS_GRAPHQL_URL" translatable="false">https://apollo-router.dev.hedvigit.com</string>
<string name="WEB_BASE_URL" translatable="false">https://www.dev.hedvigit.com</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ fun Modifier.globalSharedElement(
} else {
with(sharedTransitionScope) {
this@globalSharedElement.sharedElement(
state = state,
sharedContentState = state,
animatedVisibilityScope = animatedVisibilityScope,
boundsTransform = boundsTransform,
placeHolderSize = placeHolderSize,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ interface HedvigBuildConstants {
val urlClaimsService: String

/**
* The base host used for all deep links.
* The base hosts used for all deep links. It's a list to support the legacy firebase base link too
*/
val deepLinkHost: String
val deepLinkHosts: List<String>

/**
* e.g. 11.3.2
Expand Down
Loading

0 comments on commit 5a5535d

Please sign in to comment.