mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[terminal] IDEA-348915 Show feedback notification after disabling the New Terminal
Not depending on the number of executed commands. GitOrigin-RevId: dc3960460e2a579ae375be6dc2e18a8d9e9c0d6d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c48a18367f
commit
cc7d1687da
@@ -107,4 +107,5 @@ feedback.dialog.rating.performance=Performance:
|
||||
feedback.dialog.other=Is there anything else you'd like to share?
|
||||
feedback.dialog.other.placeholder=For example, missing features or vice versa, what you particularly like.
|
||||
feedback.system.info.shell=Most used shell:
|
||||
feedback.system.info.commands.number=Executed commands number:
|
||||
feedback.system.info.commands.number=Executed commands number:
|
||||
feedback.system.info.moment=Feedback moment:
|
||||
@@ -6,6 +6,8 @@ import com.intellij.execution.configurations.PathEnvironmentVariableUtil;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.ide.impl.TrustedProjects;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
@@ -35,6 +37,7 @@ import com.intellij.util.concurrency.EdtExecutorService;
|
||||
import com.intellij.util.ui.SwingHelper;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.terminal.exp.feedback.BlockTerminalFeedbackSurveyKt;
|
||||
import org.jetbrains.plugins.terminal.fus.BlockTerminalSwitchPlace;
|
||||
import org.jetbrains.plugins.terminal.fus.TerminalUsageTriggerCollector;
|
||||
|
||||
@@ -192,6 +195,11 @@ public final class TerminalSettingsPanel {
|
||||
blockTerminalSetting.setValue(myNewUiCheckbox.isSelected());
|
||||
TerminalUsageTriggerCollector.triggerBlockTerminalSwitched$intellij_terminal(myProject, myNewUiCheckbox.isSelected(),
|
||||
BlockTerminalSwitchPlace.SETTINGS);
|
||||
if (!myNewUiCheckbox.isSelected()) {
|
||||
ApplicationManager.getApplication().invokeLater(() -> {
|
||||
BlockTerminalFeedbackSurveyKt.showBlockTerminalFeedbackNotification(myProject);
|
||||
}, ModalityState.nonModal());
|
||||
}
|
||||
}
|
||||
myProjectOptionsProvider.setStartingDirectory(myStartDirectoryField.getText());
|
||||
myProjectOptionsProvider.setShellPath(myShellPathField.getText());
|
||||
|
||||
+4
@@ -11,6 +11,7 @@ import com.intellij.ui.ExperimentalUI
|
||||
import org.jetbrains.plugins.terminal.LocalBlockTerminalRunner
|
||||
import org.jetbrains.plugins.terminal.TerminalBundle
|
||||
import org.jetbrains.plugins.terminal.TerminalToolWindowManager
|
||||
import org.jetbrains.plugins.terminal.exp.feedback.showBlockTerminalFeedbackNotification
|
||||
import org.jetbrains.plugins.terminal.fus.BlockTerminalSwitchPlace
|
||||
import org.jetbrains.plugins.terminal.fus.TerminalUsageTriggerCollector
|
||||
|
||||
@@ -23,6 +24,9 @@ class EnableBlockTerminalUiAction : DumbAwareToggleAction(TerminalBundle.message
|
||||
Registry.get(LocalBlockTerminalRunner.BLOCK_TERMINAL_REGISTRY).setValue(state)
|
||||
val project = e.project!!
|
||||
TerminalUsageTriggerCollector.triggerBlockTerminalSwitched(project, state, BlockTerminalSwitchPlace.TOOLWINDOW_OPTIONS)
|
||||
if (!state) {
|
||||
showBlockTerminalFeedbackNotification(project)
|
||||
}
|
||||
TerminalToolWindowManager.getInstance(project).createNewSession()
|
||||
}
|
||||
|
||||
|
||||
+15
@@ -14,6 +14,8 @@ import kotlinx.serialization.json.JsonElement
|
||||
import kotlinx.serialization.json.encodeToJsonElement
|
||||
import org.jetbrains.plugins.terminal.TerminalBundle
|
||||
import org.jetbrains.plugins.terminal.exp.TerminalUsageLocalStorage
|
||||
import org.jetbrains.plugins.terminal.exp.feedback.BlockTerminalFeedbackMoment.AFTER_USAGE
|
||||
import org.jetbrains.plugins.terminal.exp.feedback.BlockTerminalFeedbackMoment.ON_DISABLING
|
||||
|
||||
internal class BlockTerminalFeedbackDialog(project: Project, forTest: Boolean) : BlockBasedFeedbackDialog<BlockTerminalUsageData>(project, forTest) {
|
||||
override val myFeedbackReportId: String = "new_terminal"
|
||||
@@ -22,13 +24,16 @@ internal class BlockTerminalFeedbackDialog(project: Project, forTest: Boolean) :
|
||||
|
||||
override val mySystemInfoData: BlockTerminalUsageData by lazy {
|
||||
val usageStorage = TerminalUsageLocalStorage.getInstance()
|
||||
|
||||
BlockTerminalUsageData(
|
||||
mostUsedShell = usageStorage.mostUsedShell,
|
||||
executedCommandsNumber = usageStorage.executedCommandsNumber,
|
||||
feedbackMoment = if (myProject!!.getUserData(BLOCK_TERMINAL_DISABLING) == true) ON_DISABLING else AFTER_USAGE,
|
||||
systemInfo = CommonFeedbackSystemData.getCurrentData()
|
||||
)
|
||||
}
|
||||
|
||||
@Suppress("HardCodedStringLiteral")
|
||||
override val myShowFeedbackSystemInfoDialog: () -> Unit = {
|
||||
showFeedbackSystemInfoDialog(myProject, mySystemInfoData.systemInfo) {
|
||||
row(TerminalBundle.message("feedback.system.info.shell")) {
|
||||
@@ -37,6 +42,9 @@ internal class BlockTerminalFeedbackDialog(project: Project, forTest: Boolean) :
|
||||
row(TerminalBundle.message("feedback.system.info.commands.number")) {
|
||||
label(mySystemInfoData.executedCommandsNumber.toString())
|
||||
}
|
||||
row(TerminalBundle.message("feedback.system.info.moment")) {
|
||||
label(mySystemInfoData.feedbackMoment.toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,6 +73,7 @@ internal class BlockTerminalFeedbackDialog(project: Project, forTest: Boolean) :
|
||||
internal data class BlockTerminalUsageData(
|
||||
@NlsSafe val mostUsedShell: String,
|
||||
val executedCommandsNumber: Int,
|
||||
val feedbackMoment: BlockTerminalFeedbackMoment,
|
||||
val systemInfo: CommonFeedbackSystemData
|
||||
) : SystemDataJsonSerializable {
|
||||
override fun serializeToJson(json: Json): JsonElement {
|
||||
@@ -76,6 +85,12 @@ internal data class BlockTerminalUsageData(
|
||||
appendLine(mostUsedShell)
|
||||
appendLine(TerminalBundle.message("feedback.system.info.commands.number"))
|
||||
appendLine(executedCommandsNumber)
|
||||
appendLine(TerminalBundle.message("feedback.system.info.moment"))
|
||||
appendLine(feedbackMoment.toString())
|
||||
append(systemInfo.toString())
|
||||
}
|
||||
}
|
||||
|
||||
internal enum class BlockTerminalFeedbackMoment {
|
||||
ON_DISABLING, AFTER_USAGE
|
||||
}
|
||||
+16
-1
@@ -2,18 +2,31 @@
|
||||
package org.jetbrains.plugins.terminal.exp.feedback
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.Key
|
||||
import com.intellij.platform.feedback.FeedbackSurvey
|
||||
import com.intellij.platform.feedback.FeedbackSurveyType
|
||||
import com.intellij.platform.feedback.InIdeFeedbackSurveyConfig
|
||||
import com.intellij.platform.feedback.InIdeFeedbackSurveyType
|
||||
import com.intellij.platform.feedback.dialog.BlockBasedFeedbackDialog
|
||||
import com.intellij.platform.feedback.dialog.SystemDataJsonSerializable
|
||||
import com.intellij.platform.feedback.impl.OnDemandFeedbackResolver
|
||||
import com.intellij.platform.feedback.impl.notification.RequestFeedbackNotification
|
||||
import com.intellij.util.PlatformUtils
|
||||
import kotlinx.datetime.LocalDate
|
||||
import org.jetbrains.plugins.terminal.TerminalBundle
|
||||
import org.jetbrains.plugins.terminal.exp.TerminalUsageLocalStorage
|
||||
|
||||
/** Used to indicate that we are trying to show the feedback notification after block terminal is disabled */
|
||||
internal val BLOCK_TERMINAL_DISABLING: Key<Boolean> = Key.create("BlockTerminalDisabling")
|
||||
|
||||
internal fun showBlockTerminalFeedbackNotification(project: Project) {
|
||||
project.putUserData(BLOCK_TERMINAL_DISABLING, true)
|
||||
val shown = OnDemandFeedbackResolver.getInstance().showFeedbackNotification(BlockTerminalFeedbackSurvey::class, project)
|
||||
if (!shown) {
|
||||
project.putUserData(BLOCK_TERMINAL_DISABLING, null)
|
||||
}
|
||||
}
|
||||
|
||||
internal class BlockTerminalFeedbackSurvey : FeedbackSurvey() {
|
||||
override val feedbackSurveyType: FeedbackSurveyType<*> = InIdeFeedbackSurveyType(BlockTerminalSurveyConfig())
|
||||
}
|
||||
@@ -38,7 +51,9 @@ internal class BlockTerminalSurveyConfig : InIdeFeedbackSurveyConfig {
|
||||
|
||||
override fun checkExtraConditionSatisfied(project: Project): Boolean {
|
||||
val usageStorage = TerminalUsageLocalStorage.getInstance()
|
||||
return !usageStorage.state.feedbackNotificationShown && usageStorage.executedCommandsNumber >= 15
|
||||
return !usageStorage.state.feedbackNotificationShown &&
|
||||
// show notification if user executed enough commands or if block terminal is being disabled
|
||||
(usageStorage.executedCommandsNumber >= 15 || usageStorage.executedCommandsNumber > 0 && project.getUserData(BLOCK_TERMINAL_DISABLING) == true)
|
||||
}
|
||||
|
||||
override fun createNotification(project: Project, forTest: Boolean): RequestFeedbackNotification {
|
||||
|
||||
Reference in New Issue
Block a user