IJPL-43794 Features Trainer: do not show onboarding banners on Welcome Screen if experiment is enabled

GitOrigin-RevId: 3f9eeed14825a0ca4d5c03ef7377572af7e2f77a
This commit is contained in:
Konstantin Hudyakov
2024-07-22 10:55:41 +00:00
committed by intellij-monorepo-bot
parent 5f4aaad934
commit d209d76699
6 changed files with 46 additions and 1 deletions
@@ -12,5 +12,6 @@
<orderEntry type="module" module-name="intellij.platform.ide.newUiOnboarding" />
<orderEntry type="module" module-name="intellij.featuresTrainer" />
<orderEntry type="module" module-name="intellij.platform.core.ui" />
<orderEntry type="module" module-name="intellij.platform.ide.newUsersOnboarding" />
</component>
</module>
@@ -1,9 +1,14 @@
<idea-plugin package="com.intellij.featuresTrainer.onboarding">
<dependencies>
<module name="intellij.platform.ide.newUiOnboarding"/>
<module name="intellij.platform.ide.newUsersOnboarding"/>
</dependencies>
<extensions defaultExtensionNs="com.intellij.ide.newUiOnboarding">
<step key="learnToolWindow" implementationClass="com.intellij.featuresTrainer.onboarding.LearnToolWindowStep"/>
</extensions>
<extensions defaultExtensionNs="training">
<ift.newUsersOnboardingExperimentAccessor implementation="com.intellij.featuresTrainer.onboarding.NewUsersOnboardingExperimentAccessorImpl"/>
</extensions>
</idea-plugin>
@@ -0,0 +1,10 @@
package com.intellij.featuresTrainer.onboarding
import com.intellij.platform.ide.newUsersOnboarding.NewUsersOnboardingExperiment
import training.learn.NewUsersOnboardingExperimentAccessor
internal class NewUsersOnboardingExperimentAccessorImpl : NewUsersOnboardingExperimentAccessor {
override fun isExperimentEnabled(): Boolean {
return NewUsersOnboardingExperiment.getInstance().isEnabled()
}
}
@@ -48,6 +48,8 @@
<extensionPoint name="ift.learning.commonCourse" beanClass="com.intellij.util.KeyedLazyInstanceEP" dynamic="true">
<with attribute="implementationClass" implements="training.learn.course.LearningCourse"/>
</extensionPoint>
<extensionPoint name="ift.newUsersOnboardingExperimentAccessor" interface="training.learn.NewUsersOnboardingExperimentAccessor" dynamic="true"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
@@ -0,0 +1,25 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package training.learn
import com.intellij.openapi.extensions.ExtensionPointName
import org.jetbrains.annotations.ApiStatus
/**
* Temporary extension point to access the New Users Onboarding experiment state in the Features Trainer logic.
* Can't access [com.intellij.platform.ide.newUsersOnboarding.NewUsersOnboardingExperiment] directly
* because IFT can't strictly depend on New Users Onboarding.
* So, if there is no New Users Onboarding, then there are no implementations of this extension point,
* and we consider that experiment is disabled.
*
* It should be removed once the experiment is finished and default is determined.
*/
@ApiStatus.Internal
interface NewUsersOnboardingExperimentAccessor {
fun isExperimentEnabled(): Boolean
companion object {
internal val EP_NAME: ExtensionPointName<NewUsersOnboardingExperimentAccessor> = ExtensionPointName("training.ift.newUsersOnboardingExperimentAccessor")
fun isExperimentEnabled(): Boolean = EP_NAME.findFirstSafe { it.isExperimentEnabled() } != null
}
}
@@ -19,6 +19,7 @@ import training.dsl.dropMnemonic
import training.lang.LangManager
import training.learn.CourseManager
import training.learn.LearnBundle
import training.learn.NewUsersOnboardingExperimentAccessor
import training.learn.OpenLessonActivities
import training.learn.lesson.LessonState
import training.learn.lesson.LessonStateManager
@@ -46,7 +47,8 @@ open class OnboardingLessonPromoter(@NonNls protected val lessonId: String,
!notificationScheduled &&
!PropertiesComponent.getInstance().getBoolean(PROMO_HIDDEN, false) &&
RecentProjectsManagerBase.getInstanceEx().getRecentPaths().size < 5 &&
LessonStateManager.getStateFromBase(lessonId) == LessonState.NOT_PASSED
LessonStateManager.getStateFromBase(lessonId) == LessonState.NOT_PASSED &&
!NewUsersOnboardingExperimentAccessor.isExperimentEnabled()
}
override val headerLabel: String