IDEA-338866 Set time scope for feedback collection for onboardings

(cherry picked from commit 0cba21a9137f10365bacb6d998601e570940b0cd)

IJ-CR-121256

GitOrigin-RevId: a90bc9c9ce1c6462c9719ed4ddd305a5e1a44f29
This commit is contained in:
Dmitry Pogrebnoy
2023-12-07 17:50:24 +01:00
committed by intellij-monorepo-bot
parent 9106b0a3c8
commit c52e01c89c
4 changed files with 24 additions and 0 deletions

View File

@@ -72,6 +72,7 @@ import training.project.ProjectUtils
import training.ui.LearningUiHighlightingManager
import training.ui.LearningUiManager
import training.ui.getFeedbackProposedPropertyName
import training.ui.shouldCollectFeedbackResults
import training.util.*
import java.awt.Point
import java.awt.event.KeyEvent
@@ -213,6 +214,10 @@ abstract class OnboardingTourLessonBase(id: String) : KLesson(id, JavaLessonsBun
}
private fun prepareFeedbackData(project: Project, lessonEndInfo: LessonEndInfo) {
if (!shouldCollectFeedbackResults()) {
return
}
val primaryLanguage = module.primaryLanguage
if (primaryLanguage == null) {
thisLogger().error("Onboarding lesson has no language support for some magical reason")

View File

@@ -49,6 +49,7 @@
<orderEntry type="module" module-name="intellij.platform.feedback" />
<orderEntry type="library" name="kotlinx-serialization-core" level="project" />
<orderEntry type="library" name="kotlinx-serialization-json" level="project" />
<orderEntry type="library" name="kotlinx-datetime-jvm" level="project" />
<orderEntry type="module" module-name="intellij.platform.util.jdom" />
<orderEntry type="module" module-name="intellij.platform.lvcs.impl" />
<orderEntry type="module" module-name="intellij.platform.tips" />

View File

@@ -8,6 +8,7 @@ import com.intellij.notification.Notification
import com.intellij.notification.NotificationAction
import com.intellij.notification.NotificationType
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.application.ApplicationInfo
import com.intellij.openapi.components.service
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.DialogWrapper
@@ -28,6 +29,10 @@ import com.intellij.ui.components.JBTextArea
import com.intellij.ui.components.JBTextField
import com.intellij.ui.components.panels.NonOpaquePanel
import com.intellij.util.ui.*
import kotlinx.datetime.Clock
import kotlinx.datetime.TimeZone
import kotlinx.datetime.periodUntil
import kotlinx.datetime.toKotlinInstant
import kotlinx.serialization.json.*
import org.jetbrains.annotations.Nls
import training.dsl.LessonUtil
@@ -54,6 +59,8 @@ private const val SUB_OFFSET = 20
/** Increase the additional number when onboarding feedback format is changed */
private const val FEEDBACK_JSON_VERSION = COMMON_FEEDBACK_SYSTEM_INFO_VERSION + 1
private const val TIME_SCOPE_FOR_RESULT_COLLECTION_IN_DAYS = 120
// Key for PropertiesComponent to check whether to show onboarding feedback notification or not
fun getFeedbackProposedPropertyName(langSupport: LangSupport): String {
val ideName = langSupport.defaultProductName?.let {
@@ -62,6 +69,12 @@ fun getFeedbackProposedPropertyName(langSupport: LangSupport): String {
return "ift.$ideName.onboarding.feedback.proposed"
}
fun shouldCollectFeedbackResults(): Boolean {
val buildDate = ApplicationInfo.getInstance().buildDate
val buildToCurrentPeriod = buildDate.toInstant().toKotlinInstant().periodUntil(Clock.System.now(), TimeZone.currentSystemDefault())
return buildToCurrentPeriod.days <= TIME_SCOPE_FOR_RESULT_COLLECTION_IN_DAYS
}
fun showOnboardingFeedbackNotification(project: Project?, onboardingFeedbackData: OnboardingFeedbackData) {
onboardingFeedbackData.feedbackHasBeenProposed()
StatisticBase.logOnboardingFeedbackNotification(getFeedbackEntryPlace(project))

View File

@@ -20,6 +20,7 @@ import kotlinx.serialization.json.put
import training.dsl.LessonContext
import training.lang.LangSupport
import training.ui.LearningUiManager
import training.ui.shouldCollectFeedbackResults
import training.util.LessonEndInfo
import training.util.OnboardingFeedbackData
import java.util.concurrent.CompletableFuture
@@ -49,6 +50,10 @@ object PythonLessonsUtil {
primaryLanguage: LangSupport,
lessonEndInfo: LessonEndInfo,
usedInterpreterAtStart: String) {
if (!shouldCollectFeedbackResults()) {
return
}
if (PropertiesComponent.getInstance().getBoolean(configPropertyName, false)) {
return
}