Updated on 2026-08-14

This commit is contained in:
Tangem 2024-06-11 15:00:57 +04:00
parent 768b44f44f
commit e4039b220c
10 changed files with 64 additions and 22 deletions

View file

@ -1,11 +1,11 @@
package com.tangem.tap.common.extensions
import com.tangem.core.navigation.NavigationAction
import com.tangem.core.navigation.StateDialog
import com.tangem.domain.common.extensions.withMainContext
import com.tangem.domain.wallets.models.UserWallet
import com.tangem.tap.common.redux.AppState
import com.tangem.tap.common.redux.global.GlobalAction
import com.tangem.tap.common.share.shareManager
import com.tangem.tap.common.url.urlOpener
import com.tangem.tap.domain.TapError
import com.tangem.tap.proxy.redux.DaggerGraphState
@ -88,7 +88,7 @@ fun Store<*>.dispatchOpenUrl(url: String) {
}
fun Store<*>.dispatchShare(url: String) {
dispatch(NavigationAction.Share(url))
shareManager.shareText(url)
}
inline fun <reified T> Store<AppState>.inject(getDependency: DaggerGraphState.() -> T?): T {

View file

@ -3,7 +3,10 @@
package com.tangem.tap.common.extensions
import android.app.Activity
import android.content.*
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.ContextWrapper
import android.graphics.drawable.Drawable
import android.view.View
import androidx.annotation.*
@ -78,16 +81,6 @@ fun Context.getFromClipboard(default: CharSequence? = null): CharSequence? {
return clipData.getItemAt(0).text
}
fun Context.shareText(text: String) {
val sendIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, text)
type = "text/plain"
}
val shareIntent = Intent.createChooser(sendIntent, null)
startActivity(shareIntent)
}
fun View.getString(resId: Int, vararg formatArgs: Any?): String {
return context.getString(resId, *formatArgs)
}

View file

@ -7,7 +7,10 @@ import android.provider.Settings
import com.tangem.core.navigation.AppScreen
import com.tangem.core.navigation.NavigationAction
import com.tangem.tap.activityResultCaller
import com.tangem.tap.common.extensions.*
import com.tangem.tap.common.extensions.dispatchDialogShow
import com.tangem.tap.common.extensions.dispatchOnMain
import com.tangem.tap.common.extensions.openFragment
import com.tangem.tap.common.extensions.popBackTo
import com.tangem.tap.common.redux.AppState
import com.tangem.tap.store
import org.rekotlin.Middleware
@ -71,9 +74,6 @@ val navigationMiddleware: Middleware<AppState> = { _, state ->
}
activityResultCaller.activityResultLauncher?.launch(intent)
}
is NavigationAction.Share -> {
navState?.activity?.get()?.shareText(action.data)
}
is NavigationAction.ActivityCreated,
is NavigationAction.ActivityDestroyed,
-> Unit

View file

@ -0,0 +1,24 @@
package com.tangem.tap.common.share
import android.content.Intent
import com.tangem.core.navigation.share.ShareManager
import com.tangem.tap.foregroundActivityObserver
import com.tangem.tap.withForegroundActivity
internal val shareManager = IntentShareManager
internal object IntentShareManager : ShareManager {
override fun shareText(text: String) {
foregroundActivityObserver.withForegroundActivity { activity ->
val sendIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, text)
type = "text/plain"
}
val shareIntent = Intent.createChooser(sendIntent, null)
activity.startActivity(shareIntent)
}
}
}

View file

@ -1,8 +1,10 @@
package com.tangem.tap.di
import com.tangem.core.navigation.feedback.FeedbackManager
import com.tangem.core.navigation.share.ShareManager
import com.tangem.core.navigation.url.UrlOpener
import com.tangem.tap.common.feedback.ProxyFeedbackManager
import com.tangem.tap.common.share.IntentShareManager
import com.tangem.tap.common.url.CustomTabsUrlOpener
import dagger.Module
import dagger.Provides
@ -14,6 +16,10 @@ import javax.inject.Singleton
@InstallIn(SingletonComponent::class)
internal object UtilsModule {
@Provides
@Singleton
fun provideShareManager(): ShareManager = IntentShareManager
@Provides
@Singleton
fun provideUrlOpener(): UrlOpener = CustomTabsUrlOpener

View file

@ -23,8 +23,6 @@ sealed class NavigationAction : Action {
data class OpenDialog(val stateDialog: StateDialog) : NavigationAction()
data class Share(val data: String) : NavigationAction()
data class ActivityCreated(val activity: WeakReference<AppCompatActivity>) : NavigationAction()
data class ActivityDestroyed(val activity: WeakReference<AppCompatActivity>) : NavigationAction()

View file

@ -0,0 +1,8 @@
package com.tangem.core.navigation.share
class DummyShareManager : ShareManager {
override fun shareText(text: String) {
/* no-op */
}
}

View file

@ -0,0 +1,6 @@
package com.tangem.core.navigation.share
interface ShareManager {
fun shareText(text: String)
}

View file

@ -1,6 +1,7 @@
package com.tangem.feature.tokendetails.di
import com.tangem.core.navigation.ReduxNavController
import com.tangem.core.navigation.share.ShareManager
import com.tangem.core.navigation.url.UrlOpener
import com.tangem.feature.tokendetails.presentation.router.DefaultTokenDetailsRouter
import com.tangem.features.tokendetails.navigation.TokenDetailsRouter
@ -16,7 +17,11 @@ internal object TokenDetailsRouterModule {
@Provides
@ActivityScoped
fun provideTokenDetailsRouter(reduxNavController: ReduxNavController, urlOpener: UrlOpener): TokenDetailsRouter {
return DefaultTokenDetailsRouter(reduxNavController, urlOpener)
fun provideTokenDetailsRouter(
reduxNavController: ReduxNavController,
urlOpener: UrlOpener,
shareManager: ShareManager,
): TokenDetailsRouter {
return DefaultTokenDetailsRouter(reduxNavController, urlOpener, shareManager)
}
}

View file

@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment
import com.tangem.core.navigation.AppScreen
import com.tangem.core.navigation.NavigationAction
import com.tangem.core.navigation.ReduxNavController
import com.tangem.core.navigation.share.ShareManager
import com.tangem.core.navigation.url.UrlOpener
import com.tangem.domain.tokens.model.CryptoCurrency
import com.tangem.domain.wallets.models.UserWalletId
@ -14,6 +15,7 @@ import com.tangem.features.tokendetails.navigation.TokenDetailsRouter
internal class DefaultTokenDetailsRouter(
private val reduxNavController: ReduxNavController,
private val urlOpener: UrlOpener,
private val shareManager: ShareManager,
) : InnerTokenDetailsRouter {
override fun getEntryFragment(): Fragment = TokenDetailsFragment()
@ -27,7 +29,7 @@ internal class DefaultTokenDetailsRouter(
}
override fun share(text: String) {
reduxNavController.navigate(NavigationAction.Share(text))
shareManager.shareText(text)
}
override fun openTokenDetails(userWalletId: UserWalletId, currency: CryptoCurrency) {