diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 87f540fc6b..f8efc046b2 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -49,6 +49,7 @@ import com.tangem.tap.domain.walletStores.repository.WalletManagersRepository import com.tangem.tap.domain.walletStores.repository.WalletStoresRepository import com.tangem.tap.domain.walletStores.repository.di.provideDefaultImplementation import com.tangem.tap.domain.walletconnect.WalletConnectRepository +import com.tangem.tap.features.customtoken.api.featuretoggles.CustomTokenFeatureToggles import com.tangem.tap.features.tokens.api.featuretoggles.TokensListFeatureToggles import com.tangem.tap.persistence.PreferencesStorage import com.tangem.tap.proxy.AppStateHolder @@ -130,6 +131,9 @@ class TapApplication : Application(), ImageLoaderFactory { @Inject lateinit var tokensListFeatureToggles: TokensListFeatureToggles + @Inject + lateinit var customTokenFeatureToggles: CustomTokenFeatureToggles + override fun onCreate() { super.onCreate() @@ -179,6 +183,7 @@ class TapApplication : Application(), ImageLoaderFactory { assetReader = assetReader, networkConnectionManager = networkConnectionManager, tokensListFeatureToggles = tokensListFeatureToggles, + customTokenFeatureToggles = customTokenFeatureToggles, ), ) diff --git a/app/src/main/java/com/tangem/tap/common/compose/ComposeDialogManager.kt b/app/src/main/java/com/tangem/tap/common/compose/ComposeDialogManager.kt index e762a3dabe..617f2f2c46 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/ComposeDialogManager.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/ComposeDialogManager.kt @@ -36,7 +36,7 @@ import com.tangem.domain.redux.domainStore import com.tangem.domain.redux.global.DomainGlobalAction import com.tangem.domain.redux.global.DomainGlobalState import com.tangem.tap.domain.moduleMessage.ModuleMessageConverter -import com.tangem.tap.features.addCustomToken.compose.SelectTokenNetworkDialog +import com.tangem.tap.features.customtoken.legacy.compose.SelectTokenNetworkDialog import com.tangem.wallet.R import org.rekotlin.StoreSubscriber 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 42d6017a42..efd80355aa 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 @@ -9,7 +9,7 @@ import com.tangem.feature.referral.ReferralFragment import com.tangem.feature.swap.presentation.SwapFragment import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.FragmentShareTransition -import com.tangem.tap.features.addCustomToken.AddCustomTokenFragment +import com.tangem.tap.features.customtoken.legacy.AddCustomTokenFragment import com.tangem.tap.features.details.ui.appsettings.AppSettingsFragment import com.tangem.tap.features.details.ui.cardsettings.CardSettingsFragment import com.tangem.tap.features.details.ui.cardsettings.coderecovery.AccessCodeRecoveryFragment @@ -37,6 +37,7 @@ import com.tangem.tap.proxy.redux.DaggerGraphState import com.tangem.tap.store import com.tangem.wallet.R import timber.log.Timber +import com.tangem.tap.features.customtoken.impl.presentation.AddCustomTokenFragment as RedesignedAddCustomTokenFragment fun FragmentActivity.openFragment( screen: AppScreen, @@ -118,7 +119,16 @@ private fun fragmentFactory(screen: AppScreen): Fragment { ) if (featureToggles.isRedesignedScreenEnabled) TokensListFragment() else AddTokensFragment() } - AppScreen.AddCustomToken -> AddCustomTokenFragment() + AppScreen.AddCustomToken -> { + val featureToggles = store.state.daggerGraphState.get( + getDependency = DaggerGraphState::customTokenFeatureToggles, + ) + if (featureToggles.isRedesignedScreenEnabled) { + RedesignedAddCustomTokenFragment() + } else { + AddCustomTokenFragment() + } + } AppScreen.WalletDetails -> WalletDetailsFragment() AppScreen.WalletConnectSessions -> WalletConnectFragment() AppScreen.QrScan -> QrScanFragment() diff --git a/app/src/main/java/com/tangem/tap/features/customtoken/api/featuretoggles/CustomTokenFeatureToggles.kt b/app/src/main/java/com/tangem/tap/features/customtoken/api/featuretoggles/CustomTokenFeatureToggles.kt new file mode 100644 index 0000000000..6de26f4bd2 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/customtoken/api/featuretoggles/CustomTokenFeatureToggles.kt @@ -0,0 +1,12 @@ +package com.tangem.tap.features.customtoken.api.featuretoggles + +/** + * Add custom token feature toggles + * +[REDACTED_AUTHOR] + */ +interface CustomTokenFeatureToggles { + + /** Availability of redesigned screen (internal feature) */ + val isRedesignedScreenEnabled: Boolean +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/customtoken/impl/di/CustomTokenFeatureTogglesModule.kt b/app/src/main/java/com/tangem/tap/features/customtoken/impl/di/CustomTokenFeatureTogglesModule.kt new file mode 100644 index 0000000000..5648aa592d --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/customtoken/impl/di/CustomTokenFeatureTogglesModule.kt @@ -0,0 +1,24 @@ +package com.tangem.tap.features.customtoken.impl.di + +import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.tap.features.customtoken.api.featuretoggles.CustomTokenFeatureToggles +import com.tangem.tap.features.customtoken.impl.featuretoggles.DefaultCustomTokenFeatureToggles +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +/** +[REDACTED_AUTHOR] + */ +@Module +@InstallIn(SingletonComponent::class) +internal object CustomTokenFeatureTogglesModule { + + @Provides + @Singleton + fun providesCustomTokenFeatureToggles(featureTogglesManager: FeatureTogglesManager): CustomTokenFeatureToggles { + return DefaultCustomTokenFeatureToggles(featureTogglesManager) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/customtoken/impl/featuretoggles/DefaultCustomTokenFeatureToggles.kt b/app/src/main/java/com/tangem/tap/features/customtoken/impl/featuretoggles/DefaultCustomTokenFeatureToggles.kt new file mode 100644 index 0000000000..fbdc41b2c0 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/customtoken/impl/featuretoggles/DefaultCustomTokenFeatureToggles.kt @@ -0,0 +1,19 @@ +package com.tangem.tap.features.customtoken.impl.featuretoggles + +import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.tap.features.customtoken.api.featuretoggles.CustomTokenFeatureToggles + +/** + * Default implementation of CustomToken feature toggles + * + * @property featureTogglesManager manager for getting information about the availability of feature toggles + * +[REDACTED_AUTHOR] + */ +internal class DefaultCustomTokenFeatureToggles( + private val featureTogglesManager: FeatureTogglesManager, +) : CustomTokenFeatureToggles { + + override val isRedesignedScreenEnabled: Boolean + get() = featureTogglesManager.isFeatureEnabled(name = "REDESIGNED_CUSTOM_TOKEN_SCREEN_ENABLED") +} \ 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 new file mode 100644 index 0000000000..e08097076b --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/AddCustomTokenFragment.kt @@ -0,0 +1,12 @@ +package com.tangem.tap.features.customtoken.impl.presentation + +import androidx.fragment.app.Fragment +import dagger.hilt.android.AndroidEntryPoint + +/** + * Add custom token screen + * +[REDACTED_AUTHOR] + */ +@AndroidEntryPoint +internal class AddCustomTokenFragment : Fragment() \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/addCustomToken/AddCustomTokenFragment.kt b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/AddCustomTokenFragment.kt similarity index 95% rename from app/src/main/java/com/tangem/tap/features/addCustomToken/AddCustomTokenFragment.kt rename to app/src/main/java/com/tangem/tap/features/customtoken/legacy/AddCustomTokenFragment.kt index 39689b35e5..21567f588c 100644 --- a/app/src/main/java/com/tangem/tap/features/addCustomToken/AddCustomTokenFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/AddCustomTokenFragment.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.features.addCustomToken +package com.tangem.tap.features.customtoken.legacy import android.os.Bundle import android.view.View @@ -19,7 +19,7 @@ import com.tangem.tap.common.compose.ClosePopupTrigger import com.tangem.tap.features.BaseStoreFragment import com.tangem.tap.features.FragmentOnBackPressedHandler import com.tangem.tap.features.addBackPressHandler -import com.tangem.tap.features.addCustomToken.compose.AddCustomTokenScreen +import com.tangem.tap.features.customtoken.legacy.compose.AddCustomTokenScreen import com.tangem.wallet.R import org.rekotlin.StoreSubscriber diff --git a/app/src/main/java/com/tangem/tap/features/addCustomToken/compose/AddCustomTokenScreen.kt b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/AddCustomTokenScreen.kt similarity index 97% rename from app/src/main/java/com/tangem/tap/features/addCustomToken/compose/AddCustomTokenScreen.kt rename to app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/AddCustomTokenScreen.kt index 9342b868d1..88ba8be37d 100644 --- a/app/src/main/java/com/tangem/tap/features/addCustomToken/compose/AddCustomTokenScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/AddCustomTokenScreen.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.features.addCustomToken.compose +package com.tangem.tap.features.customtoken.legacy.compose import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -52,8 +52,8 @@ import com.tangem.tap.common.compose.AddCustomTokenWarning import com.tangem.tap.common.compose.ClosePopupTrigger import com.tangem.tap.common.compose.ComposeDialogManager import com.tangem.tap.domain.moduleMessage.ModuleMessageConverter -import com.tangem.tap.features.addCustomToken.compose.test.TestCase -import com.tangem.tap.features.addCustomToken.compose.test.TestCasesList +import com.tangem.tap.features.customtoken.legacy.compose.test.TestCase +import com.tangem.tap.features.customtoken.legacy.compose.test.TestCasesList import com.tangem.wallet.R import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/tangem/tap/features/addCustomToken/compose/FormFieldViews.kt b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/FormFieldViews.kt similarity index 99% rename from app/src/main/java/com/tangem/tap/features/addCustomToken/compose/FormFieldViews.kt rename to app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/FormFieldViews.kt index 069d9f6823..9b5c87e6b7 100644 --- a/app/src/main/java/com/tangem/tap/features/addCustomToken/compose/FormFieldViews.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/FormFieldViews.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.features.addCustomToken.compose +package com.tangem.tap.features.customtoken.legacy.compose import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.runtime.Composable diff --git a/app/src/main/java/com/tangem/tap/features/addCustomToken/compose/HangingOverKeyboardView.kt b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/HangingOverKeyboardView.kt similarity index 94% rename from app/src/main/java/com/tangem/tap/features/addCustomToken/compose/HangingOverKeyboardView.kt rename to app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/HangingOverKeyboardView.kt index 54f0d74243..6aa2994210 100644 --- a/app/src/main/java/com/tangem/tap/features/addCustomToken/compose/HangingOverKeyboardView.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/HangingOverKeyboardView.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.features.addCustomToken.compose +package com.tangem.tap.features.customtoken.legacy.compose import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope diff --git a/app/src/main/java/com/tangem/tap/features/addCustomToken/compose/SelectTokenNetworkDialog.kt b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/SelectTokenNetworkDialog.kt similarity index 92% rename from app/src/main/java/com/tangem/tap/features/addCustomToken/compose/SelectTokenNetworkDialog.kt rename to app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/SelectTokenNetworkDialog.kt index b30ab3c9e9..fd824e960f 100644 --- a/app/src/main/java/com/tangem/tap/features/addCustomToken/compose/SelectTokenNetworkDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/SelectTokenNetworkDialog.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.features.addCustomToken.compose +package com.tangem.tap.features.customtoken.legacy.compose import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource diff --git a/app/src/main/java/com/tangem/tap/features/addCustomToken/compose/test/ContractAddressTests.kt b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/test/ContractAddressTests.kt similarity index 98% rename from app/src/main/java/com/tangem/tap/features/addCustomToken/compose/test/ContractAddressTests.kt rename to app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/test/ContractAddressTests.kt index 6ba18d8a22..3ba171f427 100644 --- a/app/src/main/java/com/tangem/tap/features/addCustomToken/compose/test/ContractAddressTests.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/test/ContractAddressTests.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.features.addCustomToken.compose.test +package com.tangem.tap.features.customtoken.legacy.compose.test import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth diff --git a/app/src/main/java/com/tangem/tap/features/addCustomToken/compose/test/TestCasesList.kt b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/test/TestCasesList.kt similarity index 96% rename from app/src/main/java/com/tangem/tap/features/addCustomToken/compose/test/TestCasesList.kt rename to app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/test/TestCasesList.kt index 7f92a0a666..3bae26e193 100644 --- a/app/src/main/java/com/tangem/tap/features/addCustomToken/compose/test/TestCasesList.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/legacy/compose/test/TestCasesList.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.features.addCustomToken.compose.test +package com.tangem.tap.features.customtoken.legacy.compose.test import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row diff --git a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphAction.kt b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphAction.kt index 57cdad3cf3..65a4cdb3e9 100644 --- a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphAction.kt +++ b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphAction.kt @@ -3,6 +3,7 @@ package com.tangem.tap.proxy.redux import com.tangem.datasource.asset.AssetReader import com.tangem.datasource.connection.NetworkConnectionManager import com.tangem.features.tester.api.TesterRouter +import com.tangem.tap.features.customtoken.api.featuretoggles.CustomTokenFeatureToggles import com.tangem.tap.features.tokens.api.featuretoggles.TokensListFeatureToggles import org.rekotlin.Action @@ -12,6 +13,7 @@ sealed interface DaggerGraphAction : Action { val assetReader: AssetReader, val networkConnectionManager: NetworkConnectionManager, val tokensListFeatureToggles: TokensListFeatureToggles, + val customTokenFeatureToggles: CustomTokenFeatureToggles, ) : DaggerGraphAction data class SetActivityDependencies(val testerRouter: TesterRouter) : DaggerGraphAction diff --git a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphReducer.kt b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphReducer.kt index 65cfee1cf5..3bb0e65284 100644 --- a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphReducer.kt +++ b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphReducer.kt @@ -16,6 +16,7 @@ object DaggerGraphReducer { assetReader = action.assetReader, networkConnectionManager = action.networkConnectionManager, tokensListFeatureToggles = action.tokensListFeatureToggles, + customTokenFeatureToggles = action.customTokenFeatureToggles, ) is DaggerGraphAction.SetActivityDependencies -> state.daggerGraphState.copy( testerRouter = action.testerRouter, diff --git a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt index 792009c602..dd0a501489 100644 --- a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt +++ b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt @@ -3,6 +3,7 @@ package com.tangem.tap.proxy.redux import com.tangem.datasource.asset.AssetReader import com.tangem.datasource.connection.NetworkConnectionManager import com.tangem.features.tester.api.TesterRouter +import com.tangem.tap.features.customtoken.api.featuretoggles.CustomTokenFeatureToggles import com.tangem.tap.features.tokens.api.featuretoggles.TokensListFeatureToggles import org.rekotlin.StateType @@ -11,6 +12,7 @@ data class DaggerGraphState( val testerRouter: TesterRouter? = null, val networkConnectionManager: NetworkConnectionManager? = null, val tokensListFeatureToggles: TokensListFeatureToggles? = null, + val customTokenFeatureToggles: CustomTokenFeatureToggles? = null, ) : StateType { inline fun get(getDependency: DaggerGraphState.() -> T?): T { diff --git a/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json b/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json index 26ee85d521..738e44b33c 100644 --- a/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json +++ b/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json @@ -6,5 +6,9 @@ { "name": "REDESIGNED_TOKEN_LIST_SCREEN_ENABLED", "version": "4.4.0" + }, + { + "name": "REDESIGNED_CUSTOM_TOKEN_SCREEN_ENABLED", + "version": "4.5.0" } ] \ No newline at end of file diff --git a/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/featuretoggles/ui/FeatureTogglesScreen.kt b/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/featuretoggles/ui/FeatureTogglesScreen.kt index c64548832a..7ce0c9ff6d 100644 --- a/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/featuretoggles/ui/FeatureTogglesScreen.kt +++ b/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/featuretoggles/ui/FeatureTogglesScreen.kt @@ -16,6 +16,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import com.tangem.core.ui.components.appbar.AppBarWithBackButton import com.tangem.core.ui.res.TangemTheme @@ -62,9 +63,11 @@ private fun FeatureToggleItem(toggle: TesterFeatureToggle, onCheckedChange: (Boo ) { Text( text = toggle.name, + modifier = Modifier.weight(1f), color = TangemTheme.colors.text.primary1, + overflow = TextOverflow.Ellipsis, maxLines = 1, - style = TangemTheme.typography.body1, + style = TangemTheme.typography.body2, ) Switch( checked = toggle.isEnabled,