From 2acaf9c1b4a24f4192db6081d42516da46fef32f Mon Sep 17 00:00:00 2001 From: Hamza Israr Date: Tue, 25 Jun 2024 16:53:48 +0500 Subject: [PATCH 1/2] feat: Handle Branch Deeplinks from Braze Push Notification Fixes: LEARNER-10054 --- .../main/java/org/openedx/app/AppActivity.kt | 39 +++++++++---------- .../main/java/org/openedx/app/OpenEdXApp.kt | 7 ++++ .../deeplink/BrazeBranchDeeplinkHandler.kt | 26 +++++++++++++ 3 files changed, 51 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/org/openedx/app/deeplink/BrazeBranchDeeplinkHandler.kt diff --git a/app/src/main/java/org/openedx/app/AppActivity.kt b/app/src/main/java/org/openedx/app/AppActivity.kt index c8d4c9259..e03d9f2cd 100644 --- a/app/src/main/java/org/openedx/app/AppActivity.kt +++ b/app/src/main/java/org/openedx/app/AppActivity.kt @@ -59,6 +59,20 @@ class AppActivity : AppCompatActivity(), InsetHolder, WindowSizeHolder { private var _windowSize = WindowSize(WindowType.Compact, WindowType.Compact) + private val branchCallback = + BranchUniversalReferralInitListener { branchUniversalObject, _, error -> + if (branchUniversalObject?.contentMetadata?.customMetadata != null) { + branchLogger.i { "Branch init complete." } + branchLogger.i { branchUniversalObject.contentMetadata.customMetadata.toString() } + viewModel.makeExternalRoute( + fm = supportFragmentManager, + deepLink = DeepLink(branchUniversalObject.contentMetadata.customMetadata) + ) + } else if (error != null) { + branchLogger.e { "Branch init failed. Caused by -" + error.message } + } + } + override fun onSaveInstanceState(outState: Bundle) { outState.putInt(TOP_INSET, topInset) outState.putInt(BOTTOM_INSET, bottomInset) @@ -152,21 +166,8 @@ class AppActivity : AppCompatActivity(), InsetHolder, WindowSizeHolder { super.onStart() if (viewModel.isBranchEnabled) { - val callback = BranchUniversalReferralInitListener { branchUniversalObject, _, error -> - if (branchUniversalObject?.contentMetadata?.customMetadata != null) { - branchLogger.i { "Branch init complete." } - branchLogger.i { branchUniversalObject.contentMetadata.customMetadata.toString() } - viewModel.makeExternalRoute( - fm = supportFragmentManager, - deepLink = DeepLink(branchUniversalObject.contentMetadata.customMetadata) - ) - } else if (error != null) { - branchLogger.e { "Branch init failed. Caused by -" + error.message } - } - } - Branch.sessionBuilder(this) - .withCallback(callback) + .withCallback(branchCallback) .withData(this.intent.data) .init() } @@ -183,13 +184,9 @@ class AppActivity : AppCompatActivity(), InsetHolder, WindowSizeHolder { if (viewModel.isBranchEnabled) { if (intent?.getBooleanExtra(BRANCH_FORCE_NEW_SESSION, false) == true) { - Branch.sessionBuilder(this).withCallback { referringParams, error -> - if (error != null) { - branchLogger.e { error.message } - } else if (referringParams != null) { - branchLogger.i { referringParams.toString() } - } - }.reInit() + Branch.sessionBuilder(this) + .withCallback(branchCallback) + .reInit() } } } diff --git a/app/src/main/java/org/openedx/app/OpenEdXApp.kt b/app/src/main/java/org/openedx/app/OpenEdXApp.kt index 7d1b81d32..2f321b6ae 100644 --- a/app/src/main/java/org/openedx/app/OpenEdXApp.kt +++ b/app/src/main/java/org/openedx/app/OpenEdXApp.kt @@ -3,11 +3,13 @@ package org.openedx.app import android.app.Application import com.braze.Braze import com.braze.configuration.BrazeConfig +import com.braze.ui.BrazeDeeplinkHandler import com.google.firebase.FirebaseApp import io.branch.referral.Branch import org.koin.android.ext.android.inject import org.koin.android.ext.koin.androidContext import org.koin.core.context.startKoin +import org.openedx.app.deeplink.BrazeBranchDeeplinkHandler import org.openedx.app.di.appModule import org.openedx.app.di.networkingModule import org.openedx.app.di.screenModule @@ -36,6 +38,7 @@ class OpenEdXApp : Application() { Branch.enableTestMode() Branch.enableLogging() } + Branch.expectDelayedSessionInitialization(true) Branch.getAutoInstance(this) } @@ -50,6 +53,10 @@ class OpenEdXApp : Application() { .setIsFirebaseMessagingServiceOnNewTokenRegistrationEnabled(true) .build() Braze.configure(this, brazeConfig) + + if (config.getBranchConfig().enabled) { + BrazeDeeplinkHandler.setBrazeDeeplinkHandler(BrazeBranchDeeplinkHandler()) + } } } } diff --git a/app/src/main/java/org/openedx/app/deeplink/BrazeBranchDeeplinkHandler.kt b/app/src/main/java/org/openedx/app/deeplink/BrazeBranchDeeplinkHandler.kt new file mode 100644 index 000000000..ffead6898 --- /dev/null +++ b/app/src/main/java/org/openedx/app/deeplink/BrazeBranchDeeplinkHandler.kt @@ -0,0 +1,26 @@ +package org.openedx.app.deeplink + +import android.content.Context +import android.content.Intent +import android.net.Uri +import com.braze.ui.BrazeDeeplinkHandler +import com.braze.ui.actions.UriAction +import org.openedx.app.AppActivity + +class BrazeBranchDeeplinkHandler : BrazeDeeplinkHandler() { + override fun gotoUri(context: Context, uriAction: UriAction) { + val deeplink = uriAction.uri.toString() + + if (deeplink.contains("app.link")) { + val intent = Intent(context, AppActivity::class.java).apply { + action = Intent.ACTION_VIEW + data = Uri.parse(deeplink) + flags = Intent.FLAG_ACTIVITY_NEW_TASK + putExtra("branch_force_new_session", true) + } + context.startActivity(intent) + } else { + super.gotoUri(context, uriAction) + } + } +} From a8f98959af3ad0209056063b45cd0e63c0182894 Mon Sep 17 00:00:00 2001 From: Hamza Israr Date: Tue, 9 Jul 2024 18:26:24 +0500 Subject: [PATCH 2/2] refactor: Update class name to BranchBrazeDeeplinkHandler --- app/src/main/java/org/openedx/app/OpenEdXApp.kt | 4 ++-- ...BranchDeeplinkHandler.kt => BranchBrazeDeeplinkHandler.kt} | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename app/src/main/java/org/openedx/app/deeplink/{BrazeBranchDeeplinkHandler.kt => BranchBrazeDeeplinkHandler.kt} (92%) diff --git a/app/src/main/java/org/openedx/app/OpenEdXApp.kt b/app/src/main/java/org/openedx/app/OpenEdXApp.kt index 2f321b6ae..ccf20d5b2 100644 --- a/app/src/main/java/org/openedx/app/OpenEdXApp.kt +++ b/app/src/main/java/org/openedx/app/OpenEdXApp.kt @@ -9,7 +9,7 @@ import io.branch.referral.Branch import org.koin.android.ext.android.inject import org.koin.android.ext.koin.androidContext import org.koin.core.context.startKoin -import org.openedx.app.deeplink.BrazeBranchDeeplinkHandler +import org.openedx.app.deeplink.BranchBrazeDeeplinkHandler import org.openedx.app.di.appModule import org.openedx.app.di.networkingModule import org.openedx.app.di.screenModule @@ -55,7 +55,7 @@ class OpenEdXApp : Application() { Braze.configure(this, brazeConfig) if (config.getBranchConfig().enabled) { - BrazeDeeplinkHandler.setBrazeDeeplinkHandler(BrazeBranchDeeplinkHandler()) + BrazeDeeplinkHandler.setBrazeDeeplinkHandler(BranchBrazeDeeplinkHandler()) } } } diff --git a/app/src/main/java/org/openedx/app/deeplink/BrazeBranchDeeplinkHandler.kt b/app/src/main/java/org/openedx/app/deeplink/BranchBrazeDeeplinkHandler.kt similarity index 92% rename from app/src/main/java/org/openedx/app/deeplink/BrazeBranchDeeplinkHandler.kt rename to app/src/main/java/org/openedx/app/deeplink/BranchBrazeDeeplinkHandler.kt index ffead6898..967c3768b 100644 --- a/app/src/main/java/org/openedx/app/deeplink/BrazeBranchDeeplinkHandler.kt +++ b/app/src/main/java/org/openedx/app/deeplink/BranchBrazeDeeplinkHandler.kt @@ -7,7 +7,7 @@ import com.braze.ui.BrazeDeeplinkHandler import com.braze.ui.actions.UriAction import org.openedx.app.AppActivity -class BrazeBranchDeeplinkHandler : BrazeDeeplinkHandler() { +internal class BranchBrazeDeeplinkHandler : BrazeDeeplinkHandler() { override fun gotoUri(context: Context, uriAction: UriAction) { val deeplink = uriAction.uri.toString()