From f3e8deb60aabba354131580c03933d79a460a0bd Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 29 Aug 2023 09:42:37 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../apptheme/MutableAppThemeModeHolder.kt | 17 ++++ .../java/com/tangem/tap/di/ThemeModule.kt | 18 +++++ .../disclaimer/ui/DisclaimerFragment.kt | 2 +- .../products/twins/ui/TwinsCardsFragment.kt | 2 +- .../ui/SaveWalletBottomSheetFragment.kt | 29 ++++--- .../features/sprinklr/ui/SprinklrActivity.kt | 30 ++++--- .../tap/features/wallet/ui/WalletFragment.kt | 2 +- .../ui/WalletSelectorBottomSheetFragment.kt | 17 ++-- .../features/welcome/ui/WelcomeFragment.kt | 38 +++++---- app/src/main/res/values-v29/styles.xml | 6 -- app/src/main/res/values/styles.xml | 9 +-- core/ui/build.gradle.kts | 1 + .../FragmentExt.kt => extensions/Fragment.kt} | 2 +- .../core/ui/fragments/ComposeActivity.kt | 11 --- .../core/ui/fragments/ComposeFragment.kt | 13 --- .../tangem/core/ui/fragments/ComposeScreen.kt | 44 ----------- .../tangem/core/ui/screen/ComposeActivity.kt | 17 ++++ .../ComposeBottomSheetFragment.kt | 54 +++++++------ .../tangem/core/ui/screen/ComposeFragment.kt | 37 +++++++++ .../tangem/core/ui/screen/ComposeScreen.kt | 79 +++++++++++++++++++ .../core/ui/theme/AppThemeModeHolder.kt | 17 ++++ .../tester/presentation/TesterActivity.kt | 30 ++++--- .../presentation/TokenDetailsFragment.kt | 40 +++++----- .../wallet/presentation/WalletFragment.kt | 40 ++++------ 24 files changed, 334 insertions(+), 221 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/apptheme/MutableAppThemeModeHolder.kt create mode 100644 app/src/main/java/com/tangem/tap/di/ThemeModule.kt delete mode 100644 app/src/main/res/values-v29/styles.xml rename core/ui/src/main/java/com/tangem/core/ui/{fragments/FragmentExt.kt => extensions/Fragment.kt} (92%) delete mode 100644 core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeActivity.kt delete mode 100644 core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeFragment.kt delete mode 100644 core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeScreen.kt create mode 100644 core/ui/src/main/java/com/tangem/core/ui/screen/ComposeActivity.kt rename core/ui/src/main/java/com/tangem/core/ui/{fragments => screen}/ComposeBottomSheetFragment.kt (55%) create mode 100644 core/ui/src/main/java/com/tangem/core/ui/screen/ComposeFragment.kt create mode 100644 core/ui/src/main/java/com/tangem/core/ui/screen/ComposeScreen.kt create mode 100644 core/ui/src/main/java/com/tangem/core/ui/theme/AppThemeModeHolder.kt diff --git a/app/src/main/java/com/tangem/tap/common/apptheme/MutableAppThemeModeHolder.kt b/app/src/main/java/com/tangem/tap/common/apptheme/MutableAppThemeModeHolder.kt new file mode 100644 index 0000000000..c1b0f942c5 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/apptheme/MutableAppThemeModeHolder.kt @@ -0,0 +1,17 @@ +package com.tangem.tap.common.apptheme + +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.mutableStateOf +import com.tangem.core.ui.theme.AppThemeModeHolder +import com.tangem.domain.apptheme.model.AppThemeMode + +internal object MutableAppThemeModeHolder : AppThemeModeHolder { + + override val appThemeMode: MutableState = mutableStateOf(AppThemeMode.DEFAULT) + + var value: AppThemeMode + set(value) { + appThemeMode.value = value + } + get() = appThemeMode.value +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/di/ThemeModule.kt b/app/src/main/java/com/tangem/tap/di/ThemeModule.kt new file mode 100644 index 0000000000..af2732b2d9 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/di/ThemeModule.kt @@ -0,0 +1,18 @@ +package com.tangem.tap.di + +import com.tangem.core.ui.theme.AppThemeModeHolder +import com.tangem.tap.common.apptheme.MutableAppThemeModeHolder +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent + +@Module +@InstallIn(ActivityComponent::class) +internal object ThemeModule { + + @Provides + fun provideAppThemeModeHolder(): AppThemeModeHolder { + return MutableAppThemeModeHolder + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/disclaimer/ui/DisclaimerFragment.kt b/app/src/main/java/com/tangem/tap/features/disclaimer/ui/DisclaimerFragment.kt index ab1ec2715d..930f33afe6 100644 --- a/app/src/main/java/com/tangem/tap/features/disclaimer/ui/DisclaimerFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/disclaimer/ui/DisclaimerFragment.kt @@ -7,7 +7,7 @@ import android.webkit.WebView import androidx.transition.TransitionInflater import by.kirich1409.viewbindingdelegate.viewBinding import com.tangem.core.navigation.AppScreen -import com.tangem.core.ui.fragments.setStatusBarColor +import com.tangem.core.ui.extensions.setStatusBarColor import com.tangem.tap.common.extensions.beginDelayedTransition import com.tangem.tap.common.extensions.hide import com.tangem.tap.common.extensions.show diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/TwinsCardsFragment.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/TwinsCardsFragment.kt index de763ef778..a4b12b434c 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/TwinsCardsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/TwinsCardsFragment.kt @@ -16,7 +16,7 @@ import com.tangem.blockchain.common.Blockchain import com.tangem.common.extensions.VoidCallback import com.tangem.core.analytics.Analytics import com.tangem.core.navigation.ShareElement -import com.tangem.core.ui.fragments.setStatusBarColor +import com.tangem.core.ui.extensions.setStatusBarColor import com.tangem.datasource.asset.AssetReader import com.tangem.domain.common.TwinCardNumber import com.tangem.domain.models.scan.ScanResponse 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 0a6a076bff..fe5792ad29 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 @@ -6,24 +6,27 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.SnackbarHost import androidx.compose.material.SnackbarHostState -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.State -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.fragment.app.viewModels -import com.tangem.core.ui.fragments.ComposeBottomSheetFragment +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.tangem.core.ui.res.TangemTheme +import com.tangem.core.ui.screen.ComposeBottomSheetFragment +import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.tap.features.details.ui.cardsettings.resolveReference import com.tangem.tap.features.saveWallet.ui.components.EnrollBiometricsDialogContent import com.tangem.tap.features.saveWallet.ui.components.SaveWalletScreenContent import com.tangem.tap.features.saveWallet.ui.models.EnrollBiometricsDialog +import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject + +@AndroidEntryPoint +internal class SaveWalletBottomSheetFragment : ComposeBottomSheetFragment() { + + @Inject + override lateinit var appThemeModeHolder: AppThemeModeHolder -internal class SaveWalletBottomSheetFragment : ComposeBottomSheetFragment() { override val expandedHeightFraction: Float = .98f private val viewModel by viewModels() @@ -34,12 +37,8 @@ internal class SaveWalletBottomSheetFragment : ComposeBottomSheetFragment { - return viewModel.state.collectAsState() - } - - @Composable - override fun ScreenContent(state: SaveWalletScreenState, modifier: Modifier) { + override fun ScreenContent(modifier: Modifier) { + val state by viewModel.state.collectAsStateWithLifecycle() val snackbarHostState = remember { SnackbarHostState() } val errorMessage by rememberUpdatedState(newValue = state.error?.resolveReference()) val enrollBiometricsDialog by rememberUpdatedState(newValue = state.enrollBiometricsDialog) diff --git a/app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrActivity.kt b/app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrActivity.kt index b567dce03b..7ddbf49c68 100644 --- a/app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrActivity.kt +++ b/app/src/main/java/com/tangem/tap/features/sprinklr/ui/SprinklrActivity.kt @@ -6,14 +6,24 @@ 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.runtime.getValue import androidx.compose.ui.Modifier +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.tangem.core.analytics.Analytics -import com.tangem.core.ui.fragments.ComposeActivity +import com.tangem.core.ui.components.SystemBarsEffect +import com.tangem.core.ui.res.TangemTheme +import com.tangem.core.ui.screen.ComposeActivity +import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.tap.common.analytics.events.Chat +import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject + +@AndroidEntryPoint +internal class SprinklrActivity : ComposeActivity() { + + @Inject + override lateinit var appThemeModeHolder: AppThemeModeHolder -internal class SprinklrActivity : ComposeActivity() { private val viewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { @@ -25,12 +35,14 @@ internal class SprinklrActivity : ComposeActivity() { } @Composable - override fun provideState(): State { - return viewModel.state.collectAsState() - } + override fun ScreenContent(modifier: Modifier) { + val state by viewModel.state.collectAsStateWithLifecycle() + + val systemBarsColor = TangemTheme.colors.background.primary + SystemBarsEffect { + setSystemBarsColor(systemBarsColor) + } - @Composable - override fun ScreenContent(state: SprinklrScreenState, modifier: Modifier) { BackHandler(onBack = state.onNavigateBack) SprinklrScreenContent( modifier = modifier diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt index af1d2100aa..cec1e05dd8 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt @@ -25,7 +25,7 @@ import com.badoo.mvicore.modelWatcher import com.tangem.core.analytics.Analytics import com.tangem.core.navigation.AppScreen import com.tangem.core.navigation.NavigationAction -import com.tangem.core.ui.fragments.setStatusBarColor +import com.tangem.core.ui.extensions.setStatusBarColor import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.utils.OneTouchClickListener import com.tangem.datasource.connection.NetworkConnectionManager diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorBottomSheetFragment.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorBottomSheetFragment.kt index e631d96a83..2e80036cd4 100644 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorBottomSheetFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorBottomSheetFragment.kt @@ -13,19 +13,26 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.rememberNestedScrollInteropConnection import androidx.fragment.app.viewModels +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.tangem.core.analytics.Analytics import com.tangem.core.ui.components.wallets.RenameWalletDialogContent -import com.tangem.core.ui.fragments.ComposeBottomSheetFragment import com.tangem.core.ui.res.TangemTheme +import com.tangem.core.ui.screen.ComposeBottomSheetFragment +import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.tap.common.analytics.events.MyWallets import com.tangem.tap.features.details.ui.cardsettings.resolveReference import com.tangem.tap.features.walletSelector.ui.components.* import com.tangem.tap.features.walletSelector.ui.model.DialogModel import com.tangem.tap.features.walletSelector.ui.model.WarningModel import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject @AndroidEntryPoint -internal class WalletSelectorBottomSheetFragment : ComposeBottomSheetFragment() { +internal class WalletSelectorBottomSheetFragment : ComposeBottomSheetFragment() { + + @Inject + override lateinit var appThemeModeHolder: AppThemeModeHolder + private val viewModel by viewModels() override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { @@ -35,10 +42,8 @@ internal class WalletSelectorBottomSheetFragment : ComposeBottomSheetFragment = viewModel.state.collectAsState() - - @Composable - override fun ScreenContent(state: WalletSelectorScreenState, modifier: Modifier) { + override fun ScreenContent(modifier: Modifier) { + val state by viewModel.state.collectAsStateWithLifecycle() val snackbarHostState = remember { SnackbarHostState() } val errorMessage by rememberUpdatedState(newValue = state.error?.resolveReference()) val dialog by rememberUpdatedState(newValue = state.dialog) 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 0554bdf27c..9e2c09d0d5 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 @@ -1,35 +1,36 @@ package com.tangem.tap.features.welcome.ui import androidx.activity.compose.BackHandler +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.material.SnackbarHost import androidx.compose.material.SnackbarHostState -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.State -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.colorResource import androidx.fragment.app.viewModels +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.tangem.core.analytics.Analytics import com.tangem.core.ui.components.SystemBarsEffect -import com.tangem.core.ui.fragments.ComposeFragment import com.tangem.core.ui.res.TangemTheme +import com.tangem.core.ui.screen.ComposeFragment +import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.tap.common.analytics.events.SignIn import com.tangem.tap.common.extensions.eraseContext import com.tangem.tap.features.details.ui.cardsettings.resolveReference import com.tangem.tap.features.welcome.ui.components.WarningDialog import com.tangem.tap.features.welcome.ui.components.WelcomeScreenContent -import com.tangem.wallet.R +import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject -internal class WelcomeFragment : ComposeFragment() { +@AndroidEntryPoint +internal class WelcomeFragment : ComposeFragment() { + + @Inject + override lateinit var appThemeModeHolder: AppThemeModeHolder private val viewModel by viewModels() @@ -40,19 +41,15 @@ internal class WelcomeFragment : ComposeFragment() { } @Composable - override fun provideState(): State { - return viewModel.state.collectAsState() - } - - @Composable - override fun ScreenContent(state: WelcomeScreenState, modifier: Modifier) { + override fun ScreenContent(modifier: Modifier) { + val state by viewModel.state.collectAsStateWithLifecycle() val snackbarHostState = remember { SnackbarHostState() } val errorMessage by rememberUpdatedState(newValue = state.error?.resolveReference()) val warning by rememberUpdatedState(newValue = state.warning) - val backgroundColor = colorResource(id = R.color.background_primary) + val backgroundColor = TangemTheme.colors.background.primary SystemBarsEffect { - setSystemBarsColor(color = backgroundColor) + setSystemBarsColor(backgroundColor) } BackHandler { @@ -61,7 +58,8 @@ internal class WelcomeFragment : ComposeFragment() { Box( modifier = modifier - .systemBarsPadding(), + .systemBarsPadding() + .background(backgroundColor), ) { WelcomeScreenContent( showUnlockProgress = state.showUnlockWithBiometricsProgress, diff --git a/app/src/main/res/values-v29/styles.xml b/app/src/main/res/values-v29/styles.xml deleted file mode 100644 index 7032bb8f84..0000000000 --- a/app/src/main/res/values-v29/styles.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a6d3f7e6d4..70af1872c5 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,7 +1,8 @@ - - -