Skip to content

ALTAPPS-1277: Shared, Android new first session onboarding #1080

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
d7d3a76
Rename WelcomeOnboardingFeature to LegacyWelcomeOnboardingFeature
XanderZhu Jun 12, 2024
8aae7d7
Fix iOS build
XanderZhu Jun 12, 2024
4a85f11
Rename welcome_onboarding package to legacy_welcome_onboarding
XanderZhu Jun 12, 2024
a31c56c
Add appFeature copy without child LegacyWelcomeOnboardingFeature; Use…
XanderZhu Jun 12, 2024
3a055e8
Use LegacyMainComponent on iOS
XanderZhu Jun 12, 2024
b2a93f3
Implement new WelcomeOnboardingFeature frame
XanderZhu Jun 12, 2024
2cd933f
Merge branch 'develop' into feature/ALTAPPS-1277/Shared-android-new-f…
XanderZhu Jun 12, 2024
7f5cc7e
Implement WelcomeOnboardingEntryPoint
XanderZhu Jun 13, 2024
f132998
Fix detekt
XanderZhu Jun 13, 2024
1562e1a
Navigate user to study plan after auth if track is selected & notific…
XanderZhu Jun 13, 2024
4909a1c
Rename WelcomeOnboardingStartingScreen to WelcomeOnboardingEntryPoint
XanderZhu Jun 13, 2024
c98d3ff
Rename UsersQuestionnaireOnboardingFeature to LegacyUsersQuestionnair…
XanderZhu Jun 13, 2024
8c5d006
Pass params to WelcomeOnboardingFeature
XanderZhu Jun 13, 2024
2d70743
Implement welcome questionnaire
XanderZhu Jun 13, 2024
2532cb6
Implement language selection
XanderZhu Jun 13, 2024
d949c12
Implement track screen
XanderZhu Jun 14, 2024
49c2d3e
Implement track selection
XanderZhu Jun 14, 2024
7efd693
Refactor packages
XanderZhu Jun 14, 2024
4074a79
Add WelcomeOnboardingFeature to new onboarding flow
XanderZhu Jun 17, 2024
dbeb117
Implement nextLearningActivity fetch
XanderZhu Jun 17, 2024
27bbada
Implement WelcomeOnboardingFinishFragment
XanderZhu Jun 17, 2024
cca2f6e
Implement WelcomeOnboarding completion
XanderZhu Jun 17, 2024
25f10a7
Implement WelcomeOnboardingFinishComponent
XanderZhu Jun 17, 2024
df7d486
Implement WelcomeOnboarding flow launch for user with selected track
XanderZhu Jun 17, 2024
4b6365d
Merge branch 'develop' into feature/ALTAPPS-1277/Shared-android-new-f…
XanderZhu Jun 17, 2024
6a714ae
Show NextLearningActivityLoading
XanderZhu Jun 17, 2024
3edab71
Cleanup
XanderZhu Jun 17, 2024
a2ab508
Cleanup
XanderZhu Jun 18, 2024
9addeae
Add analytic events
XanderZhu Jun 18, 2024
99573fb
Fix NotificationOnboarding condition after track selection
XanderZhu Jun 18, 2024
63855fd
Fix detekt & ktlint
XanderZhu Jun 18, 2024
72adb0e
Refactor shared packages
XanderZhu Jun 18, 2024
d558130
Merge branch 'develop' into feature/ALTAPPS-1277/Shared-android-new-f…
XanderZhu Jun 18, 2024
116ba16
Fix ktlint
XanderZhu Jun 18, 2024
af39ef7
Fix iOS build
XanderZhu Jun 18, 2024
5feb6d8
Merge branch 'develop' into feature/ALTAPPS-1277/Shared-android-new-f…
XanderZhu Jun 18, 2024
7dd374a
Use new analytic logging approach
XanderZhu Jun 18, 2024
c2bdaf0
iOS: Fix build
ivan-magda Jun 19, 2024
65c4161
Apply suggestions from code review
ivan-magda Jun 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@ import org.hyperskill.app.android.core.extensions.screenOrientation
import org.hyperskill.app.android.core.view.ui.fragment.ReduxViewLifecycleObserver
import org.hyperskill.app.android.core.view.ui.navigation.AppNavigationContainer
import org.hyperskill.app.android.databinding.ActivityMainBinding
import org.hyperskill.app.android.first_problem_onboarding.fragment.FirstProblemOnboardingFragment
import org.hyperskill.app.android.first_problem_onboarding.navigation.FirstProblemOnboardingScreen
import org.hyperskill.app.android.main.view.ui.navigation.MainScreen
import org.hyperskill.app.android.main.view.ui.navigation.Tabs
import org.hyperskill.app.android.notification.NotificationIntentBuilder
Expand All @@ -42,24 +40,17 @@ import org.hyperskill.app.android.notification.model.ClickedNotificationData
import org.hyperskill.app.android.notification.model.DailyStudyReminderClickedData
import org.hyperskill.app.android.notification.model.DefaultNotificationClickedData
import org.hyperskill.app.android.notification.model.PushNotificationClickedData
import org.hyperskill.app.android.notification_onboarding.fragment.NotificationsOnboardingFragment
import org.hyperskill.app.android.notification_onboarding.navigation.NotificationsOnboardingScreen
import org.hyperskill.app.android.paywall.fragment.PaywallFragment
import org.hyperskill.app.android.paywall.navigation.PaywallScreen
import org.hyperskill.app.android.step.view.navigation.StepScreen
import org.hyperskill.app.android.streak_recovery.view.delegate.StreakRecoveryViewActionDelegate
import org.hyperskill.app.android.track_selection.list.navigation.TrackSelectionListScreen
import org.hyperskill.app.android.users_questionnaire_onboarding.fragment.UsersQuestionnaireOnboardingFragment
import org.hyperskill.app.android.users_questionnaire_onboarding.navigation.UsersQuestionnaireOnboardingScreen
import org.hyperskill.app.android.welcome.navigation.WelcomeScreen
import org.hyperskill.app.main.presentation.AppFeature
import org.hyperskill.app.main.presentation.MainViewModel
import org.hyperskill.app.notification.click_handling.presentation.NotificationClickHandlingFeature
import org.hyperskill.app.notification.local.domain.analytic.NotificationDailyStudyReminderClickedHyperskillAnalyticEvent
import org.hyperskill.app.profile.domain.model.Profile
import org.hyperskill.app.step.domain.model.StepRoute
import org.hyperskill.app.track_selection.list.injection.TrackSelectionListParams
import org.hyperskill.app.welcome_onboarding.presentation.WelcomeOnboardingFeature
import ru.nobird.android.view.base.ui.delegate.ViewStateDelegate
import ru.nobird.android.view.base.ui.extension.resolveColorAttribute
import ru.nobird.android.view.navigation.navigator.NestedAppNavigator
Expand Down Expand Up @@ -143,9 +134,6 @@ class MainActivity :
startupViewModel(intent)

observeAuthFlowSuccess()
observeNotificationsOnboardingFlowFinished()
observeFirstProblemOnboardingFlowFinished()
observeUsersQuestionnaireOnboardingCompleted()
observePaywallIsShownChanged()

mainViewModel.logScreenOrientation(screenOrientation = resources.configuration.screenOrientation)
Expand Down Expand Up @@ -195,22 +183,6 @@ class MainActivity :
}
}

private fun observeNotificationsOnboardingFlowFinished() {
observeResult<Any>(NotificationsOnboardingFragment.NOTIFICATIONS_ONBOARDING_FINISHED) {
mainViewModel.onNewMessage(WelcomeOnboardingFeature.Message.NotificationOnboardingCompleted)
}
}

private fun observeFirstProblemOnboardingFlowFinished() {
observeResult<Any>(FirstProblemOnboardingFragment.FIRST_PROBLEM_ONBOARDING_FINISHED) {
mainViewModel.onNewMessage(
WelcomeOnboardingFeature.Message.FirstProblemOnboardingCompleted(
firstProblemStepRoute = it.safeCast<StepRoute>()
)
)
}
}

private fun observePaywallIsShownChanged() {
observeResult<Boolean>(PaywallFragment.PAYWALL_IS_SHOWN_CHANGED) {
mainViewModel.onNewMessage(
Expand Down Expand Up @@ -239,19 +211,6 @@ class MainActivity :
}
}

private fun observeUsersQuestionnaireOnboardingCompleted() {
lifecycleScope.launch {
router
.observeResult(UsersQuestionnaireOnboardingFragment.USERS_QUESTIONNAIRE_ONBOARDING_FINISHED)
.flowWithLifecycle(lifecycle, Lifecycle.State.STARTED)
.collectLatest {
mainViewModel.onNewMessage(
WelcomeOnboardingFeature.Message.UsersQuestionnaireOnboardingCompleted
)
}
}
}

override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
if (intent != null) {
Expand Down Expand Up @@ -287,23 +246,6 @@ class MainActivity :
TrackSelectionListParams(isNewUserMode = true)
)
)
is AppFeature.Action.ViewAction.WelcomeOnboardingViewAction ->
when (val viewAction = action.viewAction) {
is WelcomeOnboardingFeature.Action.ViewAction.NavigateTo.StudyPlanWithStep -> {
router.newRootChain(
MainScreen(Tabs.STUDY_PLAN),
StepScreen(viewAction.stepRoute)
)
}
is WelcomeOnboardingFeature.Action.ViewAction.NavigateTo.FirstProblemOnboardingScreen ->
router.newRootScreen(
FirstProblemOnboardingScreen(viewAction.isNewUserMode)
)
WelcomeOnboardingFeature.Action.ViewAction.NavigateTo.NotificationOnboardingScreen ->
router.newRootScreen(NotificationsOnboardingScreen)
WelcomeOnboardingFeature.Action.ViewAction.NavigateTo.UsersQuestionnaireOnboardingScreen ->
router.newRootScreen(UsersQuestionnaireOnboardingScreen)
}
is AppFeature.Action.ViewAction.StreakRecoveryViewAction ->
StreakRecoveryViewActionDelegate.handleViewAction(
fragmentManager = supportFragmentManager,
Expand Down
5 changes: 3 additions & 2 deletions config/detekt/baseline.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
<ID>ImplicitDefaultLocale:TimeIntervalUtil.kt$TimeIntervalUtil$String.format("%02d:00 \u2014 %02d:00", i, i + 1)</ID>
<ID>InvalidPackageDeclaration:HandleActions.kt$package org.hyperskill.app.core.view</ID>
<ID>LambdaParameterInRestartableEffect:OnComposableShownFirstTime.kt$block</ID>
<ID>LongMethod:LegacyAppReducer.kt$AppReducer$private fun handleFetchAppStartupConfigSuccess( state: State, message: Message.FetchAppStartupConfigSuccess ): ReducerResult</ID>
<ID>LongMethod:AppReducer.kt$AppReducer$private fun handleFetchAppStartupConfigSuccess( state: State, message: Message.FetchAppStartupConfigSuccess ): ReducerResult</ID>
<ID>LongMethod:ChallengeCard.kt$@Composable fun ChallengeCard( viewState: ChallengeWidgetViewState, onNewMessage: (Message) -&gt; Unit )</ID>
<ID>LongMethod:DefaultStepQuizFragment.kt$DefaultStepQuizFragment$override fun onAction(action: StepQuizFeature.Action.ViewAction)</ID>
Expand Down Expand Up @@ -176,7 +177,7 @@
<ID>MaxLineLength:ExpandableTextView.kt$ExpandableTextView$*</ID>
<ID>MaxLineLength:HtmlText.kt$text</ID>
<ID>MaxLineLength:LinearProgressIndicator.kt$*</ID>
<ID>MaxLineLength:MainComponentImpl.kt$MainComponentImpl$notificationClickHandlingActionDispatcher = clickedNotificationComponent.notificationClickHandlingActionDispatcher</ID>
<ID>MaxLineLength:LegacyMainComponentImpl.kt$MainComponentImpl$notificationClickHandlingActionDispatcher = clickedNotificationComponent.notificationClickHandlingActionDispatcher</ID>
<ID>MaxLineLength:ProjectSelectionDetailsClickedSelectThisProjectHyperskillAnalyticEvent.kt$ProjectSelectionDetailsClickedSelectThisProjectHyperskillAnalyticEvent$*</ID>
<ID>MaxLineLength:RepositoryCacheProxy.kt$RepositoryCacheProxy$*</ID>
<ID>MaxLineLength:StepComponentImpl.kt$StepComponentImpl$nextLearningActivityStateRepository = appGraph.stateRepositoriesComponent.nextLearningActivityStateRepository</ID>
Expand Down Expand Up @@ -305,7 +306,7 @@
<ID>UnusedPrivateProperty:MainActivity.kt$MainActivity$val splashScreen = installSplashScreen()</ID>
<ID>UnusedPrivateProperty:TrackSelectionDetailsFragment.kt$TrackSelectionDetailsFragment$private val mainScreenRouter: MainScreenRouter by lazy(LazyThreadSafetyMode.NONE) { HyperskillApp.graph().navigationComponent.mainScreenCicerone.router }</ID>
<ID>UseCheckOrError:AndroidStepQuizTest.kt$AndroidStepQuizTest$throw IllegalStateException( "Unknown step route class: $concreteStepRouteClass. Please add it to the test." )</ID>
<ID>UseCheckOrError:AppFeatureStateSerializationTest.kt$AppFeatureStateSerializationTest$throw IllegalStateException("Unknown state class: $stateClass. Please add it to the test.")</ID>
<ID>UseCheckOrError:LegacyAppFeatureStateSerializationTest.kt$AppFeatureStateSerializationTest$throw IllegalStateException("Unknown state class: $stateClass. Please add it to the test.")</ID>
<ID>UseCheckOrError:CollectionToJsonElement.kt$throw IllegalStateException("Can't serialize unknown type: $this")</ID>
<ID>UseCheckOrError:ContextExtensions.kt$throw IllegalStateException("Can't find Activity in a given context")</ID>
<ID>UseCheckOrError:FragmentSerializableArgumentDelegate.kt$BundleDelegate$throw IllegalStateException("Property ${property.name} could not be read")</ID>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import Foundation
import shared

extension AppFeatureStateKs: Equatable {
public static func == (lhs: AppFeatureStateKs, rhs: AppFeatureStateKs) -> Bool {
extension LegacyAppFeatureStateKs: Equatable {
public static func == (lhs: LegacyAppFeatureStateKs, rhs: LegacyAppFeatureStateKs) -> Bool {
switch (lhs, rhs) {
case (.idle, .idle):
return true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ final class AppAssembly: UIKitAssembly {
}

func makeModule() -> UIViewController {
let feature = AppGraphBridge.sharedAppGraph.mainComponent.appFeature()
let feature = AppGraphBridge.sharedAppGraph.legacyMainComponent.legacyAppFeature()

let viewModel = AppViewModel(
pushNotificationData: pushNotificationData,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ final class AppView: UIView {
fatalError("init(coder:) has not been implemented")
}

func renderState(_ state: AppFeatureStateKs) {
func renderState(_ state: LegacyAppFeatureStateKs) {
switch state {
case .idle, .loading:
loadingIndicator.isHidden = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import Foundation
import shared
import SwiftUI

final class AppViewModel: FeatureViewModel<AppFeatureState, AppFeatureMessage, AppFeatureActionViewAction> {
final class AppViewModel: FeatureViewModel<LegacyAppFeatureState, LegacyAppFeatureMessage, LegacyAppFeatureActionViewAction> {
weak var viewController: AppViewControllerProtocol?

private var pushNotificationData: PushNotificationData?
Expand All @@ -29,7 +29,7 @@ final class AppViewModel: FeatureViewModel<AppFeatureState, AppFeatureMessage, A
return
}

let stateKs = AppFeatureStateKs(strongSelf.state)
let stateKs = LegacyAppFeatureStateKs(strongSelf.state)

if case .ready = stateKs {
strongSelf.pushNotificationData = nil
Expand All @@ -44,19 +44,19 @@ final class AppViewModel: FeatureViewModel<AppFeatureState, AppFeatureMessage, A
return
}

strongSelf.viewController?.displayViewAction(AppFeatureActionViewActionKs(viewAction))
strongSelf.viewController?.displayViewAction(LegacyAppFeatureActionViewActionKs(viewAction))
}
}

subscribeForNotifications()
}

override func shouldNotifyStateDidChange(oldState: AppFeatureState, newState: AppFeatureState) -> Bool {
AppFeatureStateKs(oldState) != AppFeatureStateKs(newState)
override func shouldNotifyStateDidChange(oldState: LegacyAppFeatureState, newState: LegacyAppFeatureState) -> Bool {
LegacyAppFeatureStateKs(oldState) != LegacyAppFeatureStateKs(newState)
}

func doLoadApp(forceUpdate: Bool = false) {
onNewMessage(AppFeatureMessageInitialize(pushNotificationData: pushNotificationData, forceUpdate: forceUpdate))
onNewMessage(LegacyAppFeatureMessageInitialize(pushNotificationData: pushNotificationData, forceUpdate: forceUpdate))
}

// MARK: Private API
Expand Down Expand Up @@ -97,7 +97,7 @@ extension AppViewModel: AuthOutputProtocol {

await MainActor.run {
onNewMessage(
AppFeatureMessageUserAuthorized(
LegacyAppFeatureMessageUserAuthorized(
profile: profile,
isNotificationPermissionGranted: currentAuthorizationStatus.isRegistered
)
Expand All @@ -111,14 +111,14 @@ extension AppViewModel: AuthOutputProtocol {

extension AppViewModel: WelcomeOutputProtocol {
func handleWelcomeSignInRequested() {
onViewAction?(AppFeatureActionViewActionNavigateToAuthScreen(isInSignUpMode: false))
onViewAction?(LegacyAppFeatureActionViewActionNavigateToAuthScreen(isInSignUpMode: false))
}

func handleWelcomeSignUpRequested(isInSignUpMode: Bool) {
if isInSignUpMode {
onViewAction?(AppFeatureActionViewActionNavigateToAuthScreen(isInSignUpMode: isInSignUpMode))
onViewAction?(LegacyAppFeatureActionViewActionNavigateToAuthScreen(isInSignUpMode: isInSignUpMode))
} else {
onViewAction?(AppFeatureActionViewActionNavigateToTrackSelectionScreen())
onViewAction?(LegacyAppFeatureActionViewActionNavigateToTrackSelectionScreen())
}
}
}
Expand All @@ -128,8 +128,8 @@ extension AppViewModel: WelcomeOutputProtocol {
extension AppViewModel: NotificationsOnboardingOutputProtocol {
func handleNotificationsOnboardingCompleted() {
onNewMessage(
AppFeatureMessageWelcomeOnboardingMessage(
message: WelcomeOnboardingFeatureMessageNotificationOnboardingCompleted()
LegacyAppFeatureMessageWelcomeOnboardingMessage(
message: LegacyWelcomeOnboardingFeatureMessageNotificationOnboardingCompleted()
)
)
}
Expand All @@ -140,8 +140,8 @@ extension AppViewModel: NotificationsOnboardingOutputProtocol {
extension AppViewModel: UsersQuestionnaireOnboardingOutputProtocol {
func handleUsersQuestionnaireOnboardingCompleted() {
onNewMessage(
AppFeatureMessageWelcomeOnboardingMessage(
message: WelcomeOnboardingFeatureMessageUsersQuestionnaireOnboardingCompleted()
LegacyAppFeatureMessageWelcomeOnboardingMessage(
message: LegacyWelcomeOnboardingFeatureMessageUsersQuestionnaireOnboardingCompleted()
)
)
}
Expand All @@ -152,8 +152,8 @@ extension AppViewModel: UsersQuestionnaireOnboardingOutputProtocol {
extension AppViewModel: FirstProblemOnboardingOutputProtocol {
func handleFirstProblemOnboardingCompleted(stepRoute: StepRoute?) {
onNewMessage(
AppFeatureMessageWelcomeOnboardingMessage(
message: WelcomeOnboardingFeatureMessageFirstProblemOnboardingCompleted(
LegacyAppFeatureMessageWelcomeOnboardingMessage(
message: LegacyWelcomeOnboardingFeatureMessageFirstProblemOnboardingCompleted(
firstProblemStepRoute: stepRoute
)
)
Expand Down Expand Up @@ -230,14 +230,14 @@ private extension AppViewModel {

@objc
func handleProjectSelectionDetailsDidRequestNavigateToStudyPlanAsNewRootScreen() {
onViewAction?(AppFeatureActionViewActionNavigateToStudyPlan())
onViewAction?(LegacyAppFeatureActionViewActionNavigateToStudyPlan())
}

@objc
func handleTrackSelectionDetailsDidRequestNavigateToFirstProblemOnboarding() {
onViewAction?(
AppFeatureActionViewActionWelcomeOnboardingViewAction(
viewAction: WelcomeOnboardingFeatureActionViewActionNavigateToFirstProblemOnboardingScreen(
LegacyAppFeatureActionViewActionWelcomeOnboardingViewAction(
viewAction: LegacyWelcomeOnboardingFeatureActionViewActionNavigateToFirstProblemOnboardingScreen(
isNewUserMode: true
)
)
Expand All @@ -259,7 +259,7 @@ AppViewModel: \(#function) PushNotificationData not found in userInfo = \(String
return
}

onNewMessage(AppFeatureMessageNotificationClicked(notificationData: pushNotificationData))
onNewMessage(LegacyAppFeatureMessageNotificationClicked(notificationData: pushNotificationData))
}

@objc
Expand Down Expand Up @@ -289,7 +289,7 @@ AppViewModel: \(#function) PushNotificationData not found in userInfo = \(String

@objc
private func handleApplicationWillEnterForeground() {
onNewMessage(AppFeatureMessageAppBecomesActive())
onNewMessage(LegacyAppFeatureMessageAppBecomesActive())
}

@objc
Expand All @@ -307,7 +307,7 @@ AppViewModel: \(#function) isPaywallShown not found in userInfo = \(String(descr
return
}

onNewMessage(AppFeatureMessageIsPaywallShownChanged(isPaywallShown: isPaywallShown))
onNewMessage(LegacyAppFeatureMessageIsPaywallShownChanged(isPaywallShown: isPaywallShown))
}
}

Expand All @@ -316,31 +316,31 @@ AppViewModel: \(#function) isPaywallShown not found in userInfo = \(String(descr
extension AppViewModel: StreakRecoveryModalViewControllerDelegate {
func streakRecoveryModalViewControllerDidTapRestoreStreakButton() {
onNewMessage(
AppFeatureMessageStreakRecoveryMessage(
LegacyAppFeatureMessageStreakRecoveryMessage(
message: StreakRecoveryFeatureMessageRestoreStreakClicked()
)
)
}

func streakRecoveryModalViewControllerDidTapNoThanksButton() {
onNewMessage(
AppFeatureMessageStreakRecoveryMessage(
LegacyAppFeatureMessageStreakRecoveryMessage(
message: StreakRecoveryFeatureMessageNoThanksClicked()
)
)
}

func streakRecoveryModalViewControllerDidAppear(_ viewController: StreakRecoveryModalViewController) {
onNewMessage(
AppFeatureMessageStreakRecoveryMessage(
LegacyAppFeatureMessageStreakRecoveryMessage(
message: StreakRecoveryFeatureMessageStreakRecoveryModalShownEventMessage()
)
)
}

func streakRecoveryModalViewControllerDidDisappear(_ viewController: StreakRecoveryModalViewController) {
onNewMessage(
AppFeatureMessageStreakRecoveryMessage(
LegacyAppFeatureMessageStreakRecoveryMessage(
message: StreakRecoveryFeatureMessageStreakRecoveryModalHiddenEventMessage()
)
)
Expand All @@ -354,7 +354,7 @@ extension AppViewModel: BadgeEarnedModalViewControllerDelegate {
_ viewController: BadgeEarnedModalViewController, badgeKind: BadgeKind
) {
onNewMessage(
AppFeatureMessageNotificationClickHandlingMessage(
LegacyAppFeatureMessageNotificationClickHandlingMessage(
message: NotificationClickHandlingFeatureMessageEarnedBadgeModalShownEventMessage(badgeKind: badgeKind)
)
)
Expand All @@ -364,7 +364,7 @@ extension AppViewModel: BadgeEarnedModalViewControllerDelegate {
_ viewController: BadgeEarnedModalViewController, badgeKind: BadgeKind
) {
onNewMessage(
AppFeatureMessageNotificationClickHandlingMessage(
LegacyAppFeatureMessageNotificationClickHandlingMessage(
message: NotificationClickHandlingFeatureMessageEarnedBadgeModalHiddenEventMessage(badgeKind: badgeKind)
)
)
Expand Down
Loading
Loading