From f5b38eed8c2753794165117a0c734c66f51c12d9 Mon Sep 17 00:00:00 2001 From: Kurdistan Tech Ministry Date: Mon, 23 Mar 2026 22:59:05 +0300 Subject: [PATCH] chore: remove Branch.io SDK and route deep links through own domain Branch.io was inherited from Nova Wallet fork but never configured. Removed SDK integration, manifest intent filters, Gradle dependencies, Dagger DI modules, and string resources. Deep linking now routes exclusively through app.pezkuwichain.io with verified assetlinks.json. --- app/build.gradle | 4 -- app/src/main/AndroidManifest.xml | 17 ------ .../java/io/novafoundation/nova/app/App.kt | 3 - .../nova/app/root/di/RootDependencies.kt | 3 - .../app/root/di/deeplink/DeepLinksModule.kt | 9 --- .../app/root/presentation/RootActivity.kt | 7 --- build.gradle | 2 - common/src/main/res/values-ku/strings.xml | 2 - common/src/main/res/values/strings.xml | 2 - feature-deep-linking/build.gradle | 1 - .../di/DeepLinkingFeatureApi.kt | 3 - .../di/DeepLinkingFeatureModule.kt | 12 +--- .../presentation/configuring/LinkBuilder.kt | 22 ++++++-- .../handling/branchIo/BranchIOConstants.kt | 7 --- .../handling/branchIo/BranchIOLinkHandler.kt | 56 ------------------- .../branchIo/BranchIoLinkConverter.kt | 44 --------------- .../handling/common/DeepLinkingPreferences.kt | 3 +- 17 files changed, 18 insertions(+), 179 deletions(-) delete mode 100644 feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/branchIo/BranchIOConstants.kt delete mode 100644 feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/branchIo/BranchIOLinkHandler.kt delete mode 100644 feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/branchIo/BranchIoLinkConverter.kt diff --git a/app/build.gradle b/app/build.gradle index 43af141..2065a25 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,10 +11,6 @@ android { versionCode computeVersionCode() versionName computeVersionName() - // Branch.io key from local.properties or environment variable - manifestPlaceholders = [ - BRANCH_KEY: readRawSecretOrNull('BRANCH_KEY') ?: "key_test_placeholder" - ] } signingConfigs { dev { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index efd4320..d4c8443 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -127,17 +127,6 @@ - - - - - - - - - - - - - - - diff --git a/app/src/main/java/io/novafoundation/nova/app/App.kt b/app/src/main/java/io/novafoundation/nova/app/App.kt index 48060ea..c3b177b 100644 --- a/app/src/main/java/io/novafoundation/nova/app/App.kt +++ b/app/src/main/java/io/novafoundation/nova/app/App.kt @@ -15,7 +15,6 @@ import io.novafoundation.nova.common.di.FeatureContainer import io.novafoundation.nova.common.resources.ContextManager import io.novafoundation.nova.common.resources.LanguagesHolder import io.novafoundation.nova.common.utils.coroutines.RootScope -import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIOLinkHandler import io.novafoundation.nova.feature_wallet_connect_impl.BuildConfig import javax.inject.Inject @@ -57,8 +56,6 @@ open class App : Application(), FeatureContainer { appComponent.inject(this) - BranchIOLinkHandler.Initializer.init(this) - initializeWalletConnect() } diff --git a/app/src/main/java/io/novafoundation/nova/app/root/di/RootDependencies.kt b/app/src/main/java/io/novafoundation/nova/app/root/di/RootDependencies.kt index ec5522e..0861f02 100644 --- a/app/src/main/java/io/novafoundation/nova/app/root/di/RootDependencies.kt +++ b/app/src/main/java/io/novafoundation/nova/app/root/di/RootDependencies.kt @@ -42,7 +42,6 @@ import io.novafoundation.nova.feature_dapp_api.data.repository.BrowserTabExterna import io.novafoundation.nova.feature_dapp_api.data.repository.DAppMetadataRepository import io.novafoundation.nova.feature_dapp_api.di.deeplinks.DAppDeepLinks import io.novafoundation.nova.feature_deep_linking.presentation.handling.PendingDeepLinkProvider -import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIoLinkConverter import io.novafoundation.nova.feature_deep_linking.presentation.handling.common.DeepLinkingPreferences import io.novafoundation.nova.feature_gift_api.di.GiftDeepLinks import io.novafoundation.nova.feature_governance_api.data.MutableGovernanceState @@ -122,8 +121,6 @@ interface RootDependencies { val deepLinkingPreferences: DeepLinkingPreferences - val branchIoLinkConverter: BranchIoLinkConverter - val pendingDeepLinkProvider: PendingDeepLinkProvider val multisigExtrinsicValidationRequestBus: MultisigExtrinsicValidationRequestBus diff --git a/app/src/main/java/io/novafoundation/nova/app/root/di/deeplink/DeepLinksModule.kt b/app/src/main/java/io/novafoundation/nova/app/root/di/deeplink/DeepLinksModule.kt index 6ce2e98..786bb01 100644 --- a/app/src/main/java/io/novafoundation/nova/app/root/di/deeplink/DeepLinksModule.kt +++ b/app/src/main/java/io/novafoundation/nova/app/root/di/deeplink/DeepLinksModule.kt @@ -12,8 +12,6 @@ import io.novafoundation.nova.feature_dapp_api.di.deeplinks.DAppDeepLinks import io.novafoundation.nova.feature_deep_linking.presentation.handling.DeepLinkHandler import io.novafoundation.nova.feature_deep_linking.presentation.handling.PendingDeepLinkProvider import io.novafoundation.nova.feature_deep_linking.presentation.handling.RootDeepLinkHandler -import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIOLinkHandler -import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIoLinkConverter import io.novafoundation.nova.feature_gift_api.di.GiftDeepLinks import io.novafoundation.nova.feature_governance_api.di.deeplinks.GovernanceDeepLinks import io.novafoundation.nova.feature_multisig_operations.di.deeplink.MultisigDeepLinks @@ -65,11 +63,4 @@ class DeepLinksModule { ) } - @Provides - @FeatureScope - fun provideBranchIOLinkHandler( - branchIoLinkConverter: BranchIoLinkConverter - ): BranchIOLinkHandler { - return BranchIOLinkHandler(branchIoLinkConverter) - } } diff --git a/app/src/main/java/io/novafoundation/nova/app/root/presentation/RootActivity.kt b/app/src/main/java/io/novafoundation/nova/app/root/presentation/RootActivity.kt index 252ac95..4160cc7 100644 --- a/app/src/main/java/io/novafoundation/nova/app/root/presentation/RootActivity.kt +++ b/app/src/main/java/io/novafoundation/nova/app/root/presentation/RootActivity.kt @@ -19,7 +19,6 @@ import io.novafoundation.nova.common.utils.systemCall.SystemCallExecutor import io.novafoundation.nova.common.utils.updatePadding import io.novafoundation.nova.common.view.bottomSheet.action.observeActionBottomSheet import io.novafoundation.nova.common.view.dialog.dialog -import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIOLinkHandler import io.novafoundation.nova.feature_push_notifications.presentation.multisigsWarning.observeEnableMultisigPushesAlert import io.novafoundation.nova.splash.presentation.SplashBackgroundHolder @@ -36,9 +35,6 @@ class RootActivity : BaseActivity(), SplashB @Inject lateinit var contextManager: ContextManager - @Inject - lateinit var branchIOLinkHandler: BranchIOLinkHandler - override fun createBinding(): ActivityRootBinding { return ActivityRootBinding.inflate(LayoutInflater.from(this)) } @@ -92,7 +88,6 @@ class RootActivity : BaseActivity(), SplashB super.onNewIntent(intent) setIntent(intent) - branchIOLinkHandler.onActivityNewIntent(this, intent) processIntent(intent) } @@ -108,8 +103,6 @@ class RootActivity : BaseActivity(), SplashB override fun onStart() { super.onStart() - branchIOLinkHandler.onActivityStart(this, viewModel::handleDeepLink) - viewModel.noticeInForeground() } diff --git a/build.gradle b/build.gradle index 2c85f40..1e78e0f 100644 --- a/build.gradle +++ b/build.gradle @@ -220,8 +220,6 @@ buildscript { swipeRefershLayout = "androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01" - branchIo = "io.branch.sdk.android:library:5.18.0" - playServiceIdentifier = "com.google.android.gms:play-services-ads-identifier:18.2.0" androidxWebKit = "androidx.webkit:webkit:1.14.0" diff --git a/common/src/main/res/values-ku/strings.xml b/common/src/main/res/values-ku/strings.xml index afd5f1d..daf3938 100644 --- a/common/src/main/res/values-ku/strings.xml +++ b/common/src/main/res/values-ku/strings.xml @@ -302,8 +302,6 @@ %s://polkadot/migration-accepted?key=%s access Bluetooth - pezkuwi-wallet.app.link - pezkuwi-wallet-alternate.app.link Press both buttons on yê te %s to approve addresses Press confirm button on yê te %s to approve addresses diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index c299a4f..f614b97 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -2759,8 +2759,6 @@ Scam alert Transfer details Yesterday - pezkuwi-wallet.app.link - pezkuwi-wallet-alternate.app.link Pezkuwi Trust Score diff --git a/feature-deep-linking/build.gradle b/feature-deep-linking/build.gradle index 91c5f7f..f105e17 100644 --- a/feature-deep-linking/build.gradle +++ b/feature-deep-linking/build.gradle @@ -24,7 +24,6 @@ dependencies { implementation androidDep implementation materialDep - implementation branchIo implementation playServiceIdentifier implementation coroutinesDep diff --git a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/di/DeepLinkingFeatureApi.kt b/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/di/DeepLinkingFeatureApi.kt index 0230390..7744844 100644 --- a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/di/DeepLinkingFeatureApi.kt +++ b/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/di/DeepLinkingFeatureApi.kt @@ -2,7 +2,6 @@ package io.novafoundation.nova.feature_deep_linking.di import io.novafoundation.nova.feature_deep_linking.presentation.configuring.LinkBuilderFactory import io.novafoundation.nova.feature_deep_linking.presentation.handling.PendingDeepLinkProvider -import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIoLinkConverter import io.novafoundation.nova.feature_deep_linking.presentation.handling.common.DeepLinkingPreferences interface DeepLinkingFeatureApi { @@ -10,7 +9,5 @@ interface DeepLinkingFeatureApi { val pendingDeepLinkProvider: PendingDeepLinkProvider - val branchIoLinkConverter: BranchIoLinkConverter - val linkBuilderFactory: LinkBuilderFactory } diff --git a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/di/DeepLinkingFeatureModule.kt b/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/di/DeepLinkingFeatureModule.kt index 67bff2a..4b84dcb 100644 --- a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/di/DeepLinkingFeatureModule.kt +++ b/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/di/DeepLinkingFeatureModule.kt @@ -8,7 +8,6 @@ import io.novafoundation.nova.common.resources.ResourceManager import io.novafoundation.nova.feature_deep_linking.R import io.novafoundation.nova.feature_deep_linking.presentation.configuring.LinkBuilderFactory import io.novafoundation.nova.feature_deep_linking.presentation.handling.PendingDeepLinkProvider -import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIoLinkConverter import io.novafoundation.nova.feature_deep_linking.presentation.handling.common.DeepLinkingPreferences @Module @@ -21,11 +20,7 @@ class DeepLinkingFeatureModule { ) = DeepLinkingPreferences( deepLinkScheme = resourceManager.getString(R.string.deep_linking_scheme), deepLinkHost = resourceManager.getString(R.string.deep_linking_host), - appLinkHost = resourceManager.getString(R.string.app_link_host), - branchIoLinkHosts = listOf( - resourceManager.getString(R.string.branch_io_link_host), - resourceManager.getString(R.string.branch_io_link_host_alternate) - ) + appLinkHost = resourceManager.getString(R.string.app_link_host) ) @Provides @@ -38,9 +33,4 @@ class DeepLinkingFeatureModule { return PendingDeepLinkProvider(preferences) } - @Provides - @FeatureScope - fun provideBranchIoLinkConverter( - deepLinkingPreferences: DeepLinkingPreferences - ) = BranchIoLinkConverter(deepLinkingPreferences) } diff --git a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/configuring/LinkBuilder.kt b/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/configuring/LinkBuilder.kt index 26f31da..5ab67ac 100644 --- a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/configuring/LinkBuilder.kt +++ b/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/configuring/LinkBuilder.kt @@ -2,7 +2,6 @@ package io.novafoundation.nova.feature_deep_linking.presentation.configuring import android.net.Uri import io.novafoundation.nova.common.utils.appendPathOrSkip -import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIOConstants import io.novafoundation.nova.feature_deep_linking.presentation.handling.common.DeepLinkingPreferences interface LinkBuilder { @@ -76,22 +75,26 @@ class AppLinkBuilderType( private val deepLinkingPreferences: DeepLinkingPreferences ) : LinkBuilder { + private var action: String? = null + private var entity: String? = null + private var screen: String? = null + private val urlBuilder = Uri.Builder() .scheme("https") - .authority(deepLinkingPreferences.branchIoLinkHosts.first()) + .authority(deepLinkingPreferences.appLinkHost) override fun setAction(action: String): LinkBuilder { - urlBuilder.appendQueryParameter(BranchIOConstants.ACTION_QUERY, action) + this.action = action return this } override fun setEntity(entity: String): LinkBuilder { - urlBuilder.appendQueryParameter(BranchIOConstants.ENTITY_QUERY, entity) + this.entity = entity return this } override fun setScreen(screen: String): LinkBuilder { - urlBuilder.appendQueryParameter(BranchIOConstants.SCREEN_QUERY, screen) + this.screen = screen return this } @@ -101,7 +104,14 @@ class AppLinkBuilderType( } override fun build(): Uri { - return urlBuilder.build() + val finalPath = Uri.Builder() + .appendPathOrSkip(action) + .appendPathOrSkip(entity) + .appendPathOrSkip(screen) + .build() + .path + + return urlBuilder.path(finalPath).build() } } diff --git a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/branchIo/BranchIOConstants.kt b/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/branchIo/BranchIOConstants.kt deleted file mode 100644 index a4c5459..0000000 --- a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/branchIo/BranchIOConstants.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo - -object BranchIOConstants { - const val ACTION_QUERY = "action" - const val SCREEN_QUERY = "screen" - const val ENTITY_QUERY = "entity" -} diff --git a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/branchIo/BranchIOLinkHandler.kt b/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/branchIo/BranchIOLinkHandler.kt deleted file mode 100644 index 77f7981..0000000 --- a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/branchIo/BranchIOLinkHandler.kt +++ /dev/null @@ -1,56 +0,0 @@ -package io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo - -import android.app.Activity -import android.content.Context -import android.content.Intent -import android.net.Uri -import android.util.Log -import io.branch.referral.Branch -import io.branch.referral.Defines -import io.novafoundation.nova.common.utils.LOG_TAG -import io.novafoundation.nova.feature_deep_linking.BuildConfig - -class BranchIOLinkHandler( - private val deepLinkFactory: BranchIoLinkConverter -) { - - object Initializer { - fun init(context: Context) { - if (BuildConfig.DEBUG) { - Branch.enableLogging() - } - - val branchInstance = Branch.getAutoInstance(context) - branchInstance.setConsumerProtectionAttributionLevel(Defines.BranchAttributionLevel.REDUCED) - } - } - - fun onActivityStart(activity: Activity, deepLinkCallback: (Uri) -> Unit) { - Branch.sessionBuilder(activity) - .withCallback { branchUniversalObject, _, error -> - if (error != null) { - Log.e(LOG_TAG, error.toString()) - } - - if (branchUniversalObject != null) { - val deepLink = deepLinkFactory.formatToDeepLink(branchUniversalObject) - deepLinkCallback(deepLink) - } - } - .withData(activity.intent.data) - .init() - } - - fun onActivityNewIntent(activity: Activity, intent: Intent?) { - if (intent != null && intent.getBooleanExtra("branch_force_new_session", false)) { - Branch.sessionBuilder(activity) - .withCallback { _, error -> - if (error != null) { - Log.e(LOG_TAG, error.toString()) - } - } - .withData(intent.data) - .reInit() - } - } -} diff --git a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/branchIo/BranchIoLinkConverter.kt b/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/branchIo/BranchIoLinkConverter.kt deleted file mode 100644 index d0a8e51..0000000 --- a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/branchIo/BranchIoLinkConverter.kt +++ /dev/null @@ -1,44 +0,0 @@ -package io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo - -import android.net.Uri -import io.branch.indexing.BranchUniversalObject -import io.novafoundation.nova.common.utils.appendPathOrSkip -import io.novafoundation.nova.common.utils.appendQueries -import io.novafoundation.nova.feature_deep_linking.presentation.handling.common.DeepLinkingPreferences - -private val BRANCH_PARAMS_PREFIX = listOf("~", "$", "+") - -class BranchIoLinkConverter( - private val deepLinkingPreferences: DeepLinkingPreferences -) { - - fun formatToDeepLink(data: BranchUniversalObject): Uri { - val queries = data.contentMetadata.customMetadata - .excludeInternalIOQueries() - .toMutableMap() - - return Uri.Builder() - .scheme(deepLinkingPreferences.deepLinkScheme) - .authority(deepLinkingPreferences.deepLinkHost) - .appendPathOrSkip(queries.extractAction()) - .appendPathOrSkip(queries.extractSubject()) - .appendQueries(queries) - .build() - } - - private fun Map.excludeInternalIOQueries(): Map { - return filterKeys { key -> - val isBranchIOQuery = BRANCH_PARAMS_PREFIX.any { prefix -> key.startsWith(prefix) } - !isBranchIOQuery - } - } - - private fun MutableMap.extractAction(): String? { - return remove(BranchIOConstants.ACTION_QUERY) - } - - private fun MutableMap.extractSubject(): String? { - return remove(BranchIOConstants.SCREEN_QUERY) - ?: remove(BranchIOConstants.ENTITY_QUERY) - } -} diff --git a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/common/DeepLinkingPreferences.kt b/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/common/DeepLinkingPreferences.kt index f443b8c..f3ee4ce 100644 --- a/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/common/DeepLinkingPreferences.kt +++ b/feature-deep-linking/src/main/java/io/novafoundation/nova/feature_deep_linking/presentation/handling/common/DeepLinkingPreferences.kt @@ -5,8 +5,7 @@ import android.net.Uri class DeepLinkingPreferences( val deepLinkScheme: String, val deepLinkHost: String, - val appLinkHost: String, - val branchIoLinkHosts: List + val appLinkHost: String ) fun Uri.isDeepLink(preferences: DeepLinkingPreferences): Boolean {