diff --git a/app/src/main/java/com/tangem/tap/common/haptic/DefaultHapticManager.kt b/app/src/main/java/com/tangem/tap/common/haptic/DefaultHapticManager.kt new file mode 100644 index 0000000000..8afeba9a48 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/haptic/DefaultHapticManager.kt @@ -0,0 +1,31 @@ +package com.tangem.tap.common.haptic + +import android.os.Build +import android.os.VibrationEffect +import android.os.Vibrator +import com.tangem.core.ui.haptic.HapticManager + +class DefaultHapticManager(private val vibrator: Vibrator) : HapticManager { + + override fun vibrateShort() { + vibrate(VIBRATION_SHORT_DURATION) + } + + override fun vibrateLong() { + vibrate(VIBRATION_MEDIUM_DURATION) + } + + private fun vibrate(durationMs: Long) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + vibrator.vibrate(VibrationEffect.createOneShot(durationMs, VibrationEffect.DEFAULT_AMPLITUDE)) + } else { + vibrator.vibrate(durationMs) + } + } + + companion object { + const val VIBRATION_SHORT_DURATION = 50L + const val VIBRATION_MEDIUM_DURATION = 100L + const val VIBRATION_LONG_DURATION = 200L + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/di/HapticModule.kt b/app/src/main/java/com/tangem/tap/di/HapticModule.kt new file mode 100644 index 0000000000..bf8439f09e --- /dev/null +++ b/app/src/main/java/com/tangem/tap/di/HapticModule.kt @@ -0,0 +1,37 @@ +package com.tangem.tap.di + +import android.content.Context +import android.os.Build +import android.os.Vibrator +import android.os.VibratorManager +import com.tangem.tap.common.haptic.DefaultHapticManager +import com.tangem.core.ui.haptic.HapticManager +import com.tangem.core.ui.haptic.MockHapticManager +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +class HapticModule { + + @Provides + @Singleton + fun provideHapticManager(@ApplicationContext context: Context): HapticManager { + val vibrator = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + val vibratorManager = context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager + vibratorManager.defaultVibrator + } else { + context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + return if (vibrator.hasVibrator()) { + DefaultHapticManager(vibrator = vibrator) + } else { + MockHapticManager + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/AddCustomTokenFragment.kt b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/AddCustomTokenFragment.kt index 3900824553..efc9a7ca22 100644 --- a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/AddCustomTokenFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/AddCustomTokenFragment.kt @@ -6,6 +6,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.hilt.navigation.compose.hiltViewModel import com.tangem.core.ui.components.SystemBarsEffect +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder @@ -25,6 +26,9 @@ internal class AddCustomTokenFragment : ComposeFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + @Composable override fun ScreenContent(modifier: Modifier) { val viewModel = hiltViewModel().apply { diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/appcurrency/AppCurrencySelectorFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/appcurrency/AppCurrencySelectorFragment.kt index b9273ef99b..0d0a7622ed 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/appcurrency/AppCurrencySelectorFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/appcurrency/AppCurrencySelectorFragment.kt @@ -6,6 +6,7 @@ import androidx.compose.ui.Modifier import androidx.fragment.app.viewModels import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.tangem.core.ui.components.SystemBarsEffect +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder @@ -18,6 +19,9 @@ internal class AppCurrencySelectorFragment : ComposeFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + private val viewModel: AppCurrencySelectorViewModel by viewModels() @Composable diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsFragment.kt index 61e02daeda..22f7523945 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsFragment.kt @@ -7,6 +7,7 @@ import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.tangem.core.navigation.NavigationAction +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.domain.appcurrency.repository.AppCurrencyRepository @@ -21,6 +22,9 @@ internal class AppSettingsFragment : ComposeFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + @Inject lateinit var appCurrencyRepository: AppCurrencyRepository diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsFragment.kt index 82431ec211..d9e740b39b 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsFragment.kt @@ -5,6 +5,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.fragment.app.viewModels import com.tangem.core.navigation.NavigationAction +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.tap.features.details.redux.DetailsAction @@ -18,6 +19,9 @@ internal class CardSettingsFragment : ComposeFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + private val viewModel: CardSettingsViewModel by viewModels() @Composable diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/AccessCodeRecoveryFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/AccessCodeRecoveryFragment.kt index 3fa69eebb7..70af8f9ca9 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/AccessCodeRecoveryFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/coderecovery/AccessCodeRecoveryFragment.kt @@ -5,6 +5,7 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.Modifier import com.tangem.core.navigation.NavigationAction +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.tap.features.details.redux.DetailsState @@ -24,6 +25,9 @@ class AccessCodeRecoveryFragment : ComposeFragment(), StoreSubscriber = diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeFragment.kt index 2767f56545..e315a727d3 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeFragment.kt @@ -5,6 +5,7 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.Modifier import com.tangem.core.navigation.NavigationAction +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.tap.features.details.redux.DetailsState @@ -19,6 +20,9 @@ internal class SecurityModeFragment : ComposeFragment(), StoreSubscriber
= diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/WalletConnectFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/WalletConnectFragment.kt index 8528a2ebe0..4e69260a90 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/WalletConnectFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/WalletConnectFragment.kt @@ -8,6 +8,7 @@ import androidx.compose.ui.Modifier import androidx.fragment.app.viewModels import com.tangem.core.analytics.Analytics import com.tangem.core.navigation.NavigationAction +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.tap.common.analytics.events.WalletConnect @@ -23,6 +24,9 @@ internal class WalletConnectFragment : ComposeFragment(), StoreSubscriber? = null diff --git a/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt b/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt index 90bb65ce39..a108298d21 100644 --- a/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt @@ -13,6 +13,7 @@ import com.tangem.core.analytics.Analytics import com.tangem.core.navigation.AppScreen import com.tangem.core.navigation.NavigationAction import com.tangem.core.ui.components.SystemBarsEffect +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.domain.tokens.TokensAction @@ -32,6 +33,9 @@ class HomeFragment : ComposeFragment(), StoreSubscriber { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + private var homeState: MutableState = mutableStateOf(store.state.homeState) override fun onCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/tangem/tap/features/main/ui/ModalNotificationBottomSheetFragment.kt b/app/src/main/java/com/tangem/tap/features/main/ui/ModalNotificationBottomSheetFragment.kt index ec7cb8d416..c6c6c31809 100644 --- a/app/src/main/java/com/tangem/tap/features/main/ui/ModalNotificationBottomSheetFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/main/ui/ModalNotificationBottomSheetFragment.kt @@ -9,6 +9,7 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.fragment.app.activityViewModels import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeBottomSheetFragment import com.tangem.core.ui.theme.AppThemeModeHolder @@ -24,6 +25,9 @@ internal class ModalNotificationBottomSheetFragment : ComposeBottomSheetFragment @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + private val viewModel: MainViewModel by activityViewModels() @Composable diff --git a/app/src/main/java/com/tangem/tap/features/saveWallet/ui/SaveWalletBottomSheetFragment.kt b/app/src/main/java/com/tangem/tap/features/saveWallet/ui/SaveWalletBottomSheetFragment.kt index fe5792ad29..630f9ca789 100644 --- a/app/src/main/java/com/tangem/tap/features/saveWallet/ui/SaveWalletBottomSheetFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/saveWallet/ui/SaveWalletBottomSheetFragment.kt @@ -11,6 +11,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.fragment.app.viewModels import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeBottomSheetFragment import com.tangem.core.ui.theme.AppThemeModeHolder @@ -27,6 +28,9 @@ internal class SaveWalletBottomSheetFragment : ComposeBottomSheetFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + override val expandedHeightFraction: Float = .98f private val viewModel by viewModels() diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/TokensListFragment.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/TokensListFragment.kt index a6f68a2097..27a2ae288c 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/TokensListFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/TokensListFragment.kt @@ -6,6 +6,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.hilt.navigation.compose.hiltViewModel import com.tangem.core.ui.components.SystemBarsEffect +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder @@ -25,6 +26,9 @@ internal class TokensListFragment : ComposeFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + @Composable override fun ScreenContent(modifier: Modifier) { val viewModel = hiltViewModel().apply { diff --git a/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt b/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt index c3197818c0..7e1497ce01 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt @@ -16,6 +16,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.tangem.core.analytics.Analytics import com.tangem.core.ui.components.SystemBarsEffect +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder @@ -33,6 +34,9 @@ internal class WelcomeFragment : ComposeFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + override fun onStart() { super.onStart() Analytics.eraseContext() diff --git a/core/ui/src/main/java/com/tangem/core/ui/haptic/HapticManager.kt b/core/ui/src/main/java/com/tangem/core/ui/haptic/HapticManager.kt new file mode 100644 index 0000000000..c4fa2906f4 --- /dev/null +++ b/core/ui/src/main/java/com/tangem/core/ui/haptic/HapticManager.kt @@ -0,0 +1,11 @@ +package com.tangem.core.ui.haptic + +import androidx.compose.runtime.Stable + +@Stable +interface HapticManager { + + fun vibrateShort() + + fun vibrateLong() +} \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/haptic/MockHapticManager.kt b/core/ui/src/main/java/com/tangem/core/ui/haptic/MockHapticManager.kt new file mode 100644 index 0000000000..475402f21e --- /dev/null +++ b/core/ui/src/main/java/com/tangem/core/ui/haptic/MockHapticManager.kt @@ -0,0 +1,12 @@ +package com.tangem.core.ui.haptic + +object MockHapticManager : HapticManager { + + override fun vibrateShort() { + /** Intentionnaly do nothing */ + } + + override fun vibrateLong() { + /** Intentionnaly do nothing */ + } +} \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/res/TangemTheme.kt b/core/ui/src/main/java/com/tangem/core/ui/res/TangemTheme.kt index 78d91538e0..4f3287a86d 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/res/TangemTheme.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/res/TangemTheme.kt @@ -4,6 +4,8 @@ import androidx.compose.material.Colors import androidx.compose.material.MaterialTheme import androidx.compose.material.ProvideTextStyle import androidx.compose.runtime.* +import com.tangem.core.ui.haptic.HapticManager +import com.tangem.core.ui.haptic.MockHapticManager // TODO: use isSystemInDarkTheme() for automatic color detection internal const val IS_SYSTEM_IN_DARK_THEME: Boolean = false @@ -13,6 +15,7 @@ fun TangemTheme( isDark: Boolean = false, typography: TangemTypography = TangemTheme.typography, dimens: TangemDimens = TangemTheme.dimens, + hapticManager: HapticManager = MockHapticManager, content: @Composable () -> Unit, ) { val themeColors = if (isDark) darkThemeColors() else lightThemeColors() @@ -29,6 +32,7 @@ fun TangemTheme( LocalTangemDimens provides dimens, LocalTangemShapes provides shapes, LocalIsInDarkTheme provides isDark, + LocalHapticManager provides hapticManager, ) { ProvideTextStyle( value = TangemTheme.typography.body1, @@ -196,4 +200,8 @@ private val LocalTangemShapes = staticCompositionLocalOf { error("No TangemShapes provided") } -val LocalIsInDarkTheme = staticCompositionLocalOf { false } \ No newline at end of file +val LocalIsInDarkTheme = staticCompositionLocalOf { false } + +val LocalHapticManager = staticCompositionLocalOf { + error("No HapticManager provided") +} \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/screen/ComposeScreen.kt b/core/ui/src/main/java/com/tangem/core/ui/screen/ComposeScreen.kt index f2eade80ca..8de596d9d4 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/screen/ComposeScreen.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/screen/ComposeScreen.kt @@ -8,6 +8,7 @@ import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.ComposeView +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.domain.apptheme.model.AppThemeMode @@ -26,6 +27,11 @@ internal interface ComposeScreen { */ val appThemeModeHolder: AppThemeModeHolder + /** + * Haptic manager. + */ + val hapticManager: HapticManager + /** * The screen modifier. */ @@ -55,7 +61,10 @@ internal fun ComposeScreen.createComposeView(context: Context): ComposeView { setContent { val appThemeMode by appThemeModeHolder.appThemeMode - TangemTheme(isDark = shouldUseDarkTheme(appThemeMode)) { + TangemTheme( + isDark = shouldUseDarkTheme(appThemeMode), + hapticManager = hapticManager, + ) { ScreenContent(modifier = screenModifier) } } diff --git a/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/QrScanningFragment.kt b/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/QrScanningFragment.kt index f232473da8..9c8667962c 100644 --- a/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/QrScanningFragment.kt +++ b/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/QrScanningFragment.kt @@ -20,6 +20,7 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.google.mlkit.vision.common.InputImage +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder @@ -41,6 +42,9 @@ internal class QrScanningFragment : ComposeFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + @Inject lateinit var router: QrScanningRouter diff --git a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ReferralFragment.kt b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ReferralFragment.kt index e7a122fb45..b009b1ee67 100644 --- a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ReferralFragment.kt +++ b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ReferralFragment.kt @@ -6,6 +6,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.fragment.app.viewModels import com.tangem.core.ui.components.SystemBarsEffect +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder @@ -22,6 +23,9 @@ class ReferralFragment : ComposeFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + private val viewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/SendFragment.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/SendFragment.kt index da17befee3..0de48644db 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/SendFragment.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/SendFragment.kt @@ -7,6 +7,7 @@ import androidx.fragment.app.viewModels import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.core.ui.components.SystemBarsEffect +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder @@ -28,6 +29,9 @@ internal class SendFragment : ComposeFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + @Inject lateinit var router: SendRouter diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt index 3b16f0df21..591d7df1a7 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt @@ -7,6 +7,7 @@ import androidx.compose.ui.Modifier import androidx.fragment.app.viewModels import com.tangem.core.navigation.ReduxNavController import com.tangem.core.ui.components.SystemBarsEffect +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder @@ -27,6 +28,9 @@ class SwapFragment : ComposeFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + @Inject lateinit var reduxNavController: ReduxNavController diff --git a/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/TesterActivity.kt b/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/TesterActivity.kt index 13c5799f38..b5b00b25f0 100644 --- a/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/TesterActivity.kt +++ b/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/TesterActivity.kt @@ -7,6 +7,7 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import com.tangem.core.ui.components.SystemBarsEffect +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeActivity import com.tangem.core.ui.theme.AppThemeModeHolder @@ -29,6 +30,9 @@ internal class TesterActivity : ComposeActivity() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + /** Router for inner feature navigation */ @Inject lateinit var testerRouter: TesterRouter diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/TokenDetailsFragment.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/TokenDetailsFragment.kt index bea2fb5a9f..d1600bfa93 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/TokenDetailsFragment.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/TokenDetailsFragment.kt @@ -5,6 +5,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.hilt.navigation.compose.hiltViewModel import com.tangem.core.ui.components.SystemBarsEffect +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder @@ -21,6 +22,9 @@ internal class TokenDetailsFragment : ComposeFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + @Inject lateinit var tokenDetailsRouter: TokenDetailsRouter diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/WalletFragment.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/WalletFragment.kt index 74df363767..3434ccab80 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/WalletFragment.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/WalletFragment.kt @@ -3,6 +3,7 @@ package com.tangem.feature.wallet.presentation import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import com.tangem.core.ui.components.SystemBarsEffect +import com.tangem.core.ui.haptic.HapticManager import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder @@ -23,6 +24,9 @@ internal class WalletFragment : ComposeFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + override lateinit var hapticManager: HapticManager + @Inject internal lateinit var manageTokensUi: ManageTokensUi