From efd39981c3135a883fff471b9b7e8104cc501ed1 Mon Sep 17 00:00:00 2001 From: Hamza Israr <71447999+HamzaIsrar12@users.noreply.github.com> Date: Wed, 12 Jun 2024 16:24:04 +0500 Subject: [PATCH] feat: Add Branch deep links to local calendar events (#249) - Add branch deep links to Calendar Events - Resolved Calendar Dialogs Issue Caused by Permission Launcher Fixes: LEARNER-9795 --- app/build.gradle | 5 ---- core/build.gradle | 5 ++++ .../calendarsync/CalendarSyncUIState.kt | 5 +++- .../openedx/core/system/CalendarManager.kt | 25 +++++++++++-------- .../container/CourseContainerViewModel.kt | 4 +++ 5 files changed, 27 insertions(+), 17 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 86363a2b7..f949e477f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -141,11 +141,6 @@ dependencies { // Firebase Cloud Messaging Integration for Braze implementation 'com.google.firebase:firebase-messaging-ktx:23.4.1' - // Branch SDK Integration - implementation 'io.branch.sdk.android:library:5.9.0' - implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' - implementation "com.android.installreferrer:installreferrer:2.2" - androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version" diff --git a/core/build.gradle b/core/build.gradle index f5dc7841f..2360efd4d 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -156,6 +156,11 @@ dependencies { api "androidx.webkit:webkit:$webkit_version" + // Branch SDK Integration + api "io.branch.sdk.android:library:5.9.0" + api "com.google.android.gms:play-services-ads-identifier:18.0.1" + api "com.android.installreferrer:installreferrer:2.2" + testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' diff --git a/core/src/main/java/org/openedx/core/presentation/settings/calendarsync/CalendarSyncUIState.kt b/core/src/main/java/org/openedx/core/presentation/settings/calendarsync/CalendarSyncUIState.kt index e3062d970..1f32f3f56 100644 --- a/core/src/main/java/org/openedx/core/presentation/settings/calendarsync/CalendarSyncUIState.kt +++ b/core/src/main/java/org/openedx/core/presentation/settings/calendarsync/CalendarSyncUIState.kt @@ -11,4 +11,7 @@ data class CalendarSyncUIState( val isSynced: Boolean = false, val checkForOutOfSync: AtomicReference = AtomicReference(false), val uiMessage: AtomicReference = AtomicReference(""), -) +) { + val isDialogVisible: Boolean + get() = dialogType != CalendarSyncDialogType.NONE +} diff --git a/core/src/main/java/org/openedx/core/system/CalendarManager.kt b/core/src/main/java/org/openedx/core/system/CalendarManager.kt index 53d7a1e1f..e1e6f926d 100644 --- a/core/src/main/java/org/openedx/core/system/CalendarManager.kt +++ b/core/src/main/java/org/openedx/core/system/CalendarManager.kt @@ -10,6 +10,9 @@ import android.database.Cursor import android.net.Uri import android.provider.CalendarContract import androidx.core.content.ContextCompat +import io.branch.indexing.BranchUniversalObject +import io.branch.referral.util.ContentMetadata +import io.branch.referral.util.LinkProperties import org.openedx.core.R import org.openedx.core.data.storage.CorePreferences import org.openedx.core.domain.model.CourseDateBlock @@ -94,7 +97,7 @@ class CalendarManager( contentValues.put(CalendarContract.Calendars.VISIBLE, 1) contentValues.put( CalendarContract.Calendars.CALENDAR_COLOR, - ContextCompat.getColor(context, org.openedx.core.R.color.primary) + ContextCompat.getColor(context, R.color.primary) ) val creationUri: Uri? = asSyncAdapter( Uri.parse(CalendarContract.Calendars.CONTENT_URI.toString()), @@ -191,17 +194,16 @@ class CalendarManager( courseDateBlock: CourseDateBlock, isDeeplinkEnabled: Boolean ): String { - val eventDescription = courseDateBlock.title - // The following code for branch and deep links will be enabled after implementation - /* - if (isDeeplinkEnabled && !TextUtils.isEmpty(courseDateBlock.blockId)) { + var eventDescription = courseDateBlock.title + + if (isDeeplinkEnabled && courseDateBlock.blockId.isNotEmpty()) { val metaData = ContentMetadata() - .addCustomMetadata(DeepLink.Keys.SCREEN_NAME, Screen.COURSE_COMPONENT) - .addCustomMetadata(DeepLink.Keys.COURSE_ID, courseId) - .addCustomMetadata(DeepLink.Keys.COMPONENT_ID, courseDateBlock.blockId) + .addCustomMetadata("screen_name", "course_component") + .addCustomMetadata("course_id", courseId) + .addCustomMetadata("component_id", courseDateBlock.blockId) val branchUniversalObject = BranchUniversalObject() - .setCanonicalIdentifier("${Screen.COURSE_COMPONENT}\n${courseDateBlock.blockId}") + .setCanonicalIdentifier("course_component\n${courseDateBlock.blockId}") .setTitle(courseDateBlock.title) .setContentDescription(courseDateBlock.title) .setContentMetadata(metaData) @@ -209,9 +211,10 @@ class CalendarManager( val linkProperties = LinkProperties() .addControlParameter("\$desktop_url", courseDateBlock.link) - eventDescription += "\n" + branchUniversalObject.getShortUrl(context, linkProperties) + val shortUrl = branchUniversalObject.getShortUrl(context, linkProperties) + eventDescription += "\n$shortUrl" } - */ + return eventDescription } diff --git a/course/src/main/java/org/openedx/course/presentation/container/CourseContainerViewModel.kt b/course/src/main/java/org/openedx/course/presentation/container/CourseContainerViewModel.kt index 4e233e3d7..97045561e 100644 --- a/course/src/main/java/org/openedx/course/presentation/container/CourseContainerViewModel.kt +++ b/course/src/main/java/org/openedx/course/presentation/container/CourseContainerViewModel.kt @@ -135,6 +135,10 @@ class CourseContainerViewModel( } is CreateCalendarSyncEvent -> { + // Skip out-of-sync check if any calendar dialog is visible + if (event.checkOutOfSync && _calendarSyncUIState.value.isDialogVisible) { + return@collect + } _calendarSyncUIState.update { val dialogType = CalendarSyncDialogType.valueOf(event.dialogType) it.copy(