diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f09883d42e..0680d8b5e1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -138,9 +138,12 @@
-
+
+
String) {
val opener = openers.getOrPut(config) {
when (config) {
- is SprinklrConfig -> SprinklrChatOpener(getSprinklrUserId(), config, store)
+ is SprinklrConfig -> SprinklrChatOpener(getSprinklrUserId(), config, store, foregroundActivityObserver)
is ZendeskConfig -> ZendeskChatOpener(getZendeskUserId(), config, foregroundActivityObserver)
}
}
diff --git a/app/src/main/java/com/tangem/tap/common/chat/opener/implementation/SprinklrChatOpener.kt b/app/src/main/java/com/tangem/tap/common/chat/opener/implementation/SprinklrChatOpener.kt
index e7be1411f6..d5923097f4 100644
--- a/app/src/main/java/com/tangem/tap/common/chat/opener/implementation/SprinklrChatOpener.kt
+++ b/app/src/main/java/com/tangem/tap/common/chat/opener/implementation/SprinklrChatOpener.kt
@@ -1,22 +1,27 @@
package com.tangem.tap.common.chat.opener.implementation
import android.content.Context
+import android.content.Intent
+import com.tangem.tap.ForegroundActivityObserver
import com.tangem.tap.common.chat.SprinklrConfig
import com.tangem.tap.common.chat.opener.ChatOpener
-import com.tangem.tap.common.extensions.dispatchOnMain
import com.tangem.tap.common.redux.AppState
-import com.tangem.tap.common.redux.navigation.AppScreen
-import com.tangem.tap.common.redux.navigation.NavigationAction
import com.tangem.tap.features.sprinklr.redux.SprinklrAction
+import com.tangem.tap.features.sprinklr.ui.SprinklrActivity
+import com.tangem.tap.withForegroundActivity
import org.rekotlin.Store
internal class SprinklrChatOpener(
private val userId: String,
private val config: SprinklrConfig,
private val store: Store,
+ private val foregroundActivityObserver: ForegroundActivityObserver,
) : ChatOpener {
override fun open(feedbackDataBuilder: (Context) -> String) {
store.dispatch(SprinklrAction.Init(userId, config))
- store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.Sprinklr))
+ foregroundActivityObserver.withForegroundActivity { activity ->
+ val intent = Intent(activity, SprinklrActivity::class.java)
+ activity.startActivity(intent)
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt b/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt
index 21dd970381..711e7ed172 100644
--- a/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt
+++ b/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt
@@ -25,7 +25,6 @@ import com.tangem.tap.features.onboarding.products.wallet.ui.OnboardingWalletFra
import com.tangem.tap.features.saveWallet.ui.SaveWalletBottomSheetFragment
import com.tangem.tap.features.send.ui.SendFragment
import com.tangem.tap.features.shop.ui.ShopFragment
-import com.tangem.tap.features.sprinklr.ui.SprinklrFragment
import com.tangem.tap.features.tokens.addCustomToken.AddCustomTokenFragment
import com.tangem.tap.features.tokens.ui.AddTokensFragment
import com.tangem.tap.features.wallet.ui.WalletDetailsFragment
@@ -121,6 +120,5 @@ private fun fragmentFactory(screen: AppScreen): Fragment {
AppScreen.Welcome -> WelcomeFragment()
AppScreen.SaveWallet -> SaveWalletBottomSheetFragment()
AppScreen.WalletSelector -> WalletSelectorBottomSheetFragment()
- AppScreen.Sprinklr -> SprinklrFragment()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationState.kt b/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationState.kt
index 3f313ef210..cf60dc79f6 100644
--- a/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationState.kt
+++ b/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationState.kt
@@ -26,5 +26,4 @@ enum class AppScreen(
Welcome,
SaveWallet(isDialogFragment = true),
WalletSelector(isDialogFragment = true),
- Sprinklr,
}
\ No newline at end of file
diff --git a/app/src/main/java/com/tangem/tap/features/sprinklr/redux/model/SprinklrUrl.kt b/app/src/main/java/com/tangem/tap/features/sprinklr/redux/model/SprinklrUrl.kt
index 2a76172029..2d1eb1be87 100644
--- a/app/src/main/java/com/tangem/tap/features/sprinklr/redux/model/SprinklrUrl.kt
+++ b/app/src/main/java/com/tangem/tap/features/sprinklr/redux/model/SprinklrUrl.kt
@@ -6,8 +6,8 @@ internal sealed class SprinklrUrl {
class Prod(userId: String, baseUrl: String, appId: String) : SprinklrUrl() {
private val locale = java.util.Locale.getDefault().language
- override val url: String = "$baseUrl/page?" +
- "appId=$appId" +
+ override val url: String = "$baseUrl/page" +
+ "?appId=$appId" +
"&device=$Device" +
"&enableClose=$CloseEnabled" +
"&zoom=$ZoomEnabled" +
diff --git a/app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrFragment.kt b/app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrActivity.kt
similarity index 83%
rename from app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrFragment.kt
rename to app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrActivity.kt
index 3e7e7b824e..28b3053441 100644
--- a/app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrFragment.kt
+++ b/app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrActivity.kt
@@ -2,23 +2,26 @@ package com.tangem.tap.features.sprinklr.ui
import android.os.Bundle
import androidx.activity.compose.BackHandler
+import androidx.activity.viewModels
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Modifier
-import androidx.fragment.app.viewModels
import com.tangem.core.analytics.Analytics
-import com.tangem.core.ui.fragments.ComposeFragment
+import com.tangem.core.ui.fragments.ComposeActivity
import com.tangem.tap.common.analytics.events.Chat
-internal class SprinklrFragment : ComposeFragment() {
+internal class SprinklrActivity : ComposeActivity() {
private val viewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Analytics.send(Chat.ScreenOpened())
+ viewModel.setNavigateBackCallback {
+ this.finish()
+ }
}
@Composable
diff --git a/app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrViewModel.kt b/app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrViewModel.kt
index 1c23eef584..989b813d19 100644
--- a/app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrViewModel.kt
+++ b/app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrViewModel.kt
@@ -24,7 +24,6 @@ internal class SprinklrViewModel : ViewModel(), StoreSubscriber {
prevState.copy(
initialUrl = state.url,
sprinklrDomains = state.sprinklrDomains,
- onNavigateBack = this::navigateBack,
onNewUrl = { updateWebContentOrOpenExternalUrl(it) },
)
}
@@ -34,6 +33,14 @@ internal class SprinklrViewModel : ViewModel(), StoreSubscriber {
store.unsubscribe(this)
}
+ fun setNavigateBackCallback(callback: () -> Unit) {
+ stateInternal.update { prevState ->
+ prevState.copy(
+ onNavigateBack = callback,
+ )
+ }
+ }
+
private fun subscribeToStoreChanges() {
store.subscribe(this) { appState ->
appState.skip { old, new -> old.sprinklrState == new.sprinklrState }
@@ -41,10 +48,6 @@ internal class SprinklrViewModel : ViewModel(), StoreSubscriber {
}
}
- private fun navigateBack() {
- store.dispatchOnMain(NavigationAction.PopBackTo())
- }
-
private fun WebContent.updateWebContentOrOpenExternalUrl(url: String): WebContent {
return if (isExternalUrl(url)) {
store.dispatchOnMain(NavigationAction.OpenUrl(url))
diff --git a/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeActivity.kt b/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeActivity.kt
new file mode 100644
index 0000000000..b14a8f3c9d
--- /dev/null
+++ b/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeActivity.kt
@@ -0,0 +1,11 @@
+package com.tangem.core.ui.fragments
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+
+abstract class ComposeActivity : AppCompatActivity(), ComposeScreen {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(createComposeView(context = this))
+ }
+}
\ No newline at end of file
diff --git a/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeBottomSheetFragment.kt b/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeBottomSheetFragment.kt
index 35dab6bca0..3161add9a8 100644
--- a/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeBottomSheetFragment.kt
+++ b/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeBottomSheetFragment.kt
@@ -10,8 +10,6 @@ import androidx.annotation.FloatRange
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.State
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import com.google.android.material.bottomsheet.BottomSheetBehavior
@@ -20,7 +18,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.tangem.core.ui.R
import com.tangem.core.ui.res.TangemTheme
-abstract class ComposeBottomSheetFragment : BottomSheetDialogFragment() {
+abstract class ComposeBottomSheetFragment : BottomSheetDialogFragment(), ComposeScreen {
open val initialBottomSheetState = BottomSheetBehavior.STATE_EXPANDED
@FloatRange(from = 0.0, to = 1.0)
@@ -47,7 +45,7 @@ abstract class ComposeBottomSheetFragment : BottomSheetDialogFragme
return dialog
}
- private fun createComposeView(context: Context): View {
+ override fun createComposeView(context: Context): View {
return ComposeView(context).apply {
setContent {
TangemTheme {
@@ -67,13 +65,4 @@ abstract class ComposeBottomSheetFragment : BottomSheetDialogFragme
}
}
}
-
- @Composable
- protected abstract fun provideState(): State
-
- @Composable
- protected abstract fun ScreenContent(
- modifier: Modifier,
- state: ScreenState,
- )
}
\ No newline at end of file
diff --git a/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeFragment.kt b/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeFragment.kt
index 863f22f185..d7ab04a268 100644
--- a/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeFragment.kt
+++ b/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeFragment.kt
@@ -1,21 +1,12 @@
package com.tangem.core.ui.fragments
-import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import androidx.compose.foundation.background
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.State
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.Fragment
-import com.tangem.core.ui.components.SystemBarsEffect
-import com.tangem.core.ui.res.TangemTheme
-abstract class ComposeFragment : Fragment() {
+abstract class ComposeFragment : Fragment(), ComposeScreen {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -23,35 +14,4 @@ abstract class ComposeFragment : Fragment() {
): View {
return createComposeView(inflater.context)
}
-
- private fun createComposeView(context: Context): View {
- return ComposeView(context).apply {
- setContent {
- TangemTheme {
- val backgroundColor = TangemTheme.colors.background.primary
- SystemBarsEffect {
- setSystemBarsColor(
- color = backgroundColor,
- )
- }
-
- ScreenContent(
- modifier = Modifier
- .fillMaxSize()
- .background(color = backgroundColor),
- state = provideState().value,
- )
- }
- }
- }
- }
-
- @Composable
- protected abstract fun provideState(): State
-
- @Composable
- protected abstract fun ScreenContent(
- modifier: Modifier,
- state: ScreenState,
- )
}
\ No newline at end of file
diff --git a/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeScreen.kt b/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeScreen.kt
new file mode 100644
index 0000000000..8404a4867d
--- /dev/null
+++ b/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeScreen.kt
@@ -0,0 +1,45 @@
+package com.tangem.core.ui.fragments
+
+import android.content.Context
+import android.view.View
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.ComposeView
+import com.tangem.core.ui.components.SystemBarsEffect
+import com.tangem.core.ui.res.TangemTheme
+
+internal interface ComposeScreen {
+ fun createComposeView(context: Context): View {
+ return ComposeView(context).apply {
+ setContent {
+ TangemTheme {
+ val backgroundColor = TangemTheme.colors.background.primary
+ SystemBarsEffect {
+ setSystemBarsColor(
+ color = backgroundColor,
+ )
+ }
+
+ ScreenContent(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(color = backgroundColor),
+ state = provideState().value,
+ )
+ }
+ }
+ }
+ }
+
+ @Composable
+ fun provideState(): State
+
+ @Composable
+ fun ScreenContent(
+ modifier: Modifier,
+ state: ScreenState,
+ )
+}
\ No newline at end of file