Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
c3cc2bf
Display toast notifications with actions
manodnyab Nov 13, 2024
09729c7
Condition matcher for displaying notifications
manodnyab Nov 15, 2024
885f3f0
Show notification banner
manodnyab Nov 18, 2024
f0aca38
feedback 1
manodnyab Nov 19, 2024
e909a0e
Modified deserialization cases and added tests
manodnyab Nov 20, 2024
5a84e39
Merge branch 'feature/ideNotifs' into manodnyb/checkRulesForNotificat…
manodnyab Nov 20, 2024
56c1888
not required file change
manodnyab Nov 20, 2024
a981227
Merge remote-tracking branch 'origin/manodnyb/checkRulesForNotificati…
manodnyab Nov 20, 2024
682897f
feedback 1
manodnyab Nov 20, 2024
adb6ec7
resolved conflicts
manodnyab Nov 20, 2024
dbfcefc
feedback 1
manodnyab Nov 20, 2024
823ea7f
Merge remote-tracking branch 'origin/feature/ideNotifs' into manodnyb…
manodnyab Nov 20, 2024
218c8ed
modified the base class
manodnyab Nov 20, 2024
b684a01
merge conflicts resolved
manodnyab Nov 21, 2024
368fd25
merge conflicts resolved
manodnyab Nov 21, 2024
57fb2ef
rearranged call site
manodnyab Nov 21, 2024
a5126d1
show notifications when panel is opened
manodnyab Nov 21, 2024
22f9438
resolved merge conflicts
manodnyab Nov 21, 2024
87ec1d9
fixed tests
manodnyab Nov 21, 2024
24a2f65
Merge branch 'feature/ideNotifs' into manodnyb/addNotificationBanner
manodnyab Nov 21, 2024
78f8c6b
detekt
manodnyab Nov 21, 2024
bfc1077
Merge remote-tracking branch 'origin/manodnyb/addNotificationBanner' …
manodnyab Nov 21, 2024
1a83a40
feedback
manodnyab Nov 22, 2024
9e8b0af
Merge branch 'feature/ideNotifs' into manodnyb/addNotificationBanner
manodnyab Nov 22, 2024
1b12854
convert panels into wrappers
manodnyab Nov 22, 2024
e7d8594
Merge remote-tracking branch 'origin/manodnyb/addNotificationBanner' …
manodnyab Nov 22, 2024
bbf6779
fixed test
manodnyab Nov 22, 2024
a8fa482
Merge branch 'feature/ideNotifs' into manodnyb/addNotificationBanner
manodnyab Nov 22, 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 @@ -10,8 +10,8 @@
import com.intellij.openapi.wm.ToolWindow
import com.intellij.openapi.wm.ToolWindowFactory
import com.intellij.openapi.wm.ex.ToolWindowEx
import com.intellij.ui.content.Content
import com.intellij.ui.content.ContentManager
import com.intellij.ui.components.panels.Wrapper
import com.intellij.util.ui.components.BorderLayoutPanel
import software.aws.toolkits.core.utils.debug
import software.aws.toolkits.core.utils.getLogger
import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
Expand All @@ -22,20 +22,31 @@
import software.aws.toolkits.jetbrains.core.credentials.sono.Q_SCOPES
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenAuthState
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenProviderListener
import software.aws.toolkits.jetbrains.core.notifications.NotificationFollowupActions
import software.aws.toolkits.jetbrains.core.notifications.ShowCriticalNotificationBannerListener
import software.aws.toolkits.jetbrains.core.notifications.getBannerActionList
import software.aws.toolkits.jetbrains.core.webview.BrowserState
import software.aws.toolkits.jetbrains.services.amazonq.QWebviewPanel
import software.aws.toolkits.jetbrains.services.amazonq.RefreshQChatPanelButtonPressedListener
import software.aws.toolkits.jetbrains.services.amazonq.gettingstarted.openMeetQPage
import software.aws.toolkits.jetbrains.utils.isQConnected
import software.aws.toolkits.jetbrains.utils.isQExpired
import software.aws.toolkits.jetbrains.utils.isQWebviewsAvailable
import software.aws.toolkits.jetbrains.utils.notifyInfo
import software.aws.toolkits.resources.message
import software.aws.toolkits.telemetry.FeatureId
import java.awt.event.ComponentAdapter
import java.awt.event.ComponentEvent
import javax.swing.JComponent

class AmazonQToolWindowFactory : ToolWindowFactory, DumbAware {
private val notificationPanel = NotificationPanel()
private val qPanel = QPanel()

Check warning on line 44 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L43-L44

Added lines #L43 - L44 were not covered by tests
override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) {
val mainPanel = BorderLayoutPanel()
mainPanel.addToTop(notificationPanel)
mainPanel.add(qPanel)

Check warning on line 48 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L46-L48

Added lines #L46 - L48 were not covered by tests

if (toolWindow is ToolWindowEx) {
val actionManager = ActionManager.getInstance()
toolWindow.setTitleActions(listOf(actionManager.getAction("aws.q.toolwindow.titleBar")))
Expand All @@ -46,7 +57,7 @@
ToolkitConnectionManagerListener.TOPIC,
object : ToolkitConnectionManagerListener {
override fun activeConnectionChanged(newConnection: ToolkitConnection?) {
onConnectionChanged(project, newConnection, toolWindow)
onConnectionChanged(project, newConnection)

Check warning on line 60 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L60

Added line #L60 was not covered by tests
}
}
)
Expand All @@ -56,55 +67,62 @@
object : RefreshQChatPanelButtonPressedListener {
override fun onRefresh() {
runInEdt {
contentManager.removeAllContents(true)
prepareChatContent(project, contentManager)
prepareChatContent(project)

Check warning on line 70 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L70

Added line #L70 was not covered by tests
}
}
}
)

project.messageBus.connect().subscribe(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
project.messageBus.connect().subscribe(
project.messageBus.connect(disposable).subscribe(

ShowCriticalNotificationBannerListener.TOPIC,
object : ShowCriticalNotificationBannerListener {

Check warning on line 78 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L76-L78

Added lines #L76 - L78 were not covered by tests
override fun onReceiveEmergencyNotification(title: String, message: String, actions: List<NotificationFollowupActions>?) {
notificationPanel.updateNotificationPanel(title, message, actions)
}

Check warning on line 81 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L80-L81

Added lines #L80 - L81 were not covered by tests
}
)

project.messageBus.connect().subscribe(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also missing disposable here

BearerTokenProviderListener.TOPIC,
object : BearerTokenProviderListener {
override fun onChange(providerId: String, newScopes: List<String>?) {
if (ToolkitConnectionManager.getInstance(project).connectionStateForFeature(QConnection.getInstance()) == BearerTokenAuthState.AUTHORIZED) {
val content = contentManager.factory.createContent(AmazonQToolWindow.getInstance(project).component, null, false).also {
// change this
val qComponent = AmazonQToolWindow.getInstance(project).component

Check warning on line 91 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L91

Added line #L91 was not covered by tests

val content = contentManager.factory.createContent(qComponent, null, false).also {

Check warning on line 93 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L93

Added line #L93 was not covered by tests
it.isCloseable = true
it.isPinnable = true
}

runInEdt {
contentManager.removeAllContents(true)
contentManager.addContent(content)
qPanel.updateQPanel(qComponent)

Check warning on line 99 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L99

Added line #L99 was not covered by tests
}
}
}
}
)

val content = prepareChatContent(project, contentManager)
prepareChatContent(project)

Check warning on line 106 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L106

Added line #L106 was not covered by tests

val content = contentManager.factory.createContent(mainPanel, null, false).also {
it.isCloseable = true
it.isPinnable = true
}

Check warning on line 111 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L108-L111

Added lines #L108 - L111 were not covered by tests
toolWindow.activate(null)
contentManager.setSelectedContent(content)
contentManager.addContent(content)

Check warning on line 113 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L113

Added line #L113 was not covered by tests
}

private fun prepareChatContent(
project: Project,
contentManager: ContentManager,
): Content {
) {
val component = if (isQConnected(project) && !isQExpired(project)) {
AmazonQToolWindow.getInstance(project).component
} else {
QWebviewPanel.getInstance(project).browser?.prepareBrowser(BrowserState(FeatureId.Q))
QWebviewPanel.getInstance(project).component
}

val content = contentManager.factory.createContent(component, null, false).also {
it.isCloseable = true
it.isPinnable = true
}
contentManager.addContent(content)
return content
qPanel.updateQPanel(component)

Check warning on line 125 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L125

Added line #L125 was not covered by tests
}

override fun init(toolWindow: ToolWindow) {
Expand All @@ -125,8 +143,7 @@

override fun shouldBeAvailable(project: Project): Boolean = isQWebviewsAvailable()

private fun onConnectionChanged(project: Project, newConnection: ToolkitConnection?, toolWindow: ToolWindow) {
val contentManager = toolWindow.contentManager
private fun onConnectionChanged(project: Project, newConnection: ToolkitConnection?) {
val isNewConnectionForQ = newConnection?.let {
(it as? AwsBearerTokenConnection)?.let { conn ->
val scopeShouldHave = Q_SCOPES
Expand All @@ -151,15 +168,8 @@
LOG.debug { "returning login window; no Q connection found" }
QWebviewPanel.getInstance(project).component
}

val content = contentManager.factory.createContent(component, null, false).also {
it.isCloseable = true
it.isPinnable = true
}

runInEdt {
contentManager.removeAllContents(true)
contentManager.addContent(content)
qPanel.updateQPanel(component)

Check warning on line 172 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L172

Added line #L172 was not covered by tests
}
}

Expand All @@ -169,3 +179,41 @@
private const val MINIMUM_TOOLWINDOW_WIDTH = 325
}
}

class NotificationPanel : BorderLayoutPanel() {
private val wrapper = Wrapper()
init {
isOpaque = false
addToCenter(wrapper)
}

Check warning on line 188 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L183-L188

Added lines #L183 - L188 were not covered by tests

private fun removeNotificationPanel() = runInEdt {
wrapper.removeAll()
}

Check warning on line 192 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L190-L192

Added lines #L190 - L192 were not covered by tests

fun updateNotificationPanel(title: String, message: String, actions: List<NotificationFollowupActions>?) {
val editorNotificationPanel = getBannerActionList(actions, title, message)

Check warning on line 195 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L195

Added line #L195 was not covered by tests

editorNotificationPanel.createActionLabel("Dismiss") {
removeNotificationPanel()
}

Check warning on line 199 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L197-L199

Added lines #L197 - L199 were not covered by tests

wrapper.setContent(editorNotificationPanel)
}

Check warning on line 202 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L201-L202

Added lines #L201 - L202 were not covered by tests
}

class QPanel : BorderLayoutPanel() {
private val wrapper = Wrapper()
init {
isOpaque = false
addToCenter(wrapper)
}

Check warning on line 210 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L205-L210

Added lines #L205 - L210 were not covered by tests

fun updateQPanel(content: JComponent) {
try {
wrapper.setContent(content)
} catch (e: Exception) {
notifyInfo("Error while creating window")

Check warning on line 216 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L213-L216

Added lines #L213 - L216 were not covered by tests
}
}

Check warning on line 218 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L218

Added line #L218 was not covered by tests
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.core.notifications

import com.intellij.icons.AllIcons
import com.intellij.ide.BrowserUtil
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.ui.Messages
import com.intellij.ui.EditorNotificationPanel

fun checkSeverity(notificationSeverity: String): NotificationSeverity = when (notificationSeverity) {
"Critical" -> NotificationSeverity.CRITICAL
"Warning" -> NotificationSeverity.WARNING
"Info" -> NotificationSeverity.INFO
else -> NotificationSeverity.INFO
}

fun getNotificationActionList(
notificationFollowupActions: List<NotificationFollowupActions>?,
notificationTitle: String,
notificationMessage: String,
): List<AnAction> {
val actionList = mutableListOf<AnAction>()
actionList.add(
getNotifAction("Expand") {
Messages.showYesNoDialog(null, notificationMessage, notificationTitle, "OK", "Cancel", AllIcons.General.Error)
}

Check warning on line 29 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L25-L29

Added lines #L25 - L29 were not covered by tests
)
if (notificationFollowupActions.isNullOrEmpty()) return actionList
notificationFollowupActions.forEach { notificationAction ->

Check warning on line 32 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L32

Added line #L32 was not covered by tests
if (notificationAction.type == "ShowUrl") {
actionList.add(
getNotifAction("Learn more") {

Check warning on line 35 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L34-L35

Added lines #L34 - L35 were not covered by tests
notificationAction.content.locale.url?.let { url -> BrowserUtil.browse(url) }
}

Check warning on line 37 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L37

Added line #L37 was not covered by tests
)
}

if (notificationAction.type == "UpdateExtension") {
actionList.add(
getNotifAction("Update") {
// add update logic
}

Check warning on line 45 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L42-L45

Added lines #L42 - L45 were not covered by tests
)
}

if (notificationAction.type == "openChangelog") {
actionList.add(
getNotifAction("Changelog") {
BrowserUtil.browse("https://github.com/aws/aws-toolkit-jetbrains/blob/main/CHANGELOG.md")
}

Check warning on line 53 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L50-L53

Added lines #L50 - L53 were not covered by tests
)
}
}
return actionList

Check warning on line 57 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L56-L57

Added lines #L56 - L57 were not covered by tests
}

fun getNotifAction(title: String, block: () -> Unit): AnAction = object : AnAction(title) {

Check warning on line 60 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L60

Added line #L60 was not covered by tests
override fun actionPerformed(e: AnActionEvent) {
block()
}
}

Check warning on line 64 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L62-L64

Added lines #L62 - L64 were not covered by tests

fun getBannerActionList(
notificationFollowupActions: List<NotificationFollowupActions>?,
notificationTitle: String,
notificationMessage: String,
): EditorNotificationPanel {
val panel = EditorNotificationPanel()

Check warning on line 71 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L71

Added line #L71 was not covered by tests

panel.text = notificationTitle
panel.icon(AllIcons.General.Error)
panel.createActionLabel("Expand") {
Messages.showYesNoDialog(null, notificationMessage, notificationTitle, "OK", "Cancel", AllIcons.General.Error)
}

Check warning on line 77 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L73-L77

Added lines #L73 - L77 were not covered by tests
if (notificationFollowupActions.isNullOrEmpty()) return panel
notificationFollowupActions.forEach { notificationAction ->

Check warning on line 79 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L79

Added line #L79 was not covered by tests
if (notificationAction.type == "ShowUrl") {
panel.createActionLabel("Learn more") {

Check warning on line 81 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L81

Added line #L81 was not covered by tests
notificationAction.content.locale.url?.let { url -> BrowserUtil.browse(url) }
}

Check warning on line 83 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L83

Added line #L83 was not covered by tests
}

if (notificationAction.type == "UpdateExtension") {
panel.createActionLabel("Update") {
// add update logic
}

Check warning on line 89 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L87-L89

Added lines #L87 - L89 were not covered by tests
}

if (notificationAction.type == "openChangelog") {
panel.createActionLabel("Changelog") {
BrowserUtil.browse("https://github.com/aws/aws-toolkit-jetbrains/blob/main/CHANGELOG.md")
}

Check warning on line 95 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L93-L95

Added lines #L93 - L95 were not covered by tests
}
}
return panel

Check warning on line 98 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt#L97-L98

Added lines #L97 - L98 were not covered by tests
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.core.notifications

import com.intellij.notification.NotificationType
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.project.Project
import software.aws.toolkits.jetbrains.utils.notifyStickyWithData

object DisplayToastNotifications {
fun showToast(title: String, message: String, action: List<AnAction>, notificationType: NotificationSeverity, notificationId: String) {

Check notice on line 12 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/DisplayToastNotifications.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Class member can have 'private' visibility

Function 'showToast' could be private
val notifyType = when (notificationType) {
NotificationSeverity.CRITICAL -> NotificationType.ERROR
NotificationSeverity.WARNING -> NotificationType.WARNING
NotificationSeverity.INFO -> NotificationType.INFORMATION
}
notifyStickyWithData(notifyType, title, message, null, action, notificationId)

Check warning on line 18 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/DisplayToastNotifications.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/DisplayToastNotifications.kt#L18

Added line #L18 was not covered by tests
}

fun shouldShowNotification(project: Project, notificationData: NotificationData) {

Check warning on line 21 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/DisplayToastNotifications.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused symbol

Function "shouldShowNotification" is never used
if (RulesEngine.displayNotification(notificationData, project)) {
val notificationContent = notificationData.content.locale
val severity = notificationData.severity
showToast(
notificationContent.title,
notificationContent.description,
getNotificationActionList(notificationData.actions, notificationContent.title, notificationContent.description),
checkSeverity(severity),
notificationData.id

Check warning on line 30 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/DisplayToastNotifications.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/DisplayToastNotifications.kt#L25-L30

Added lines #L25 - L30 were not covered by tests
)

if (severity == "Critical") {
ShowCriticalNotificationBannerListener.showBanner(notificationContent.title, notificationContent.description, notificationData.actions)

Check warning on line 34 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/DisplayToastNotifications.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/DisplayToastNotifications.kt#L34

Added line #L34 was not covered by tests
}
}
}
}
Loading
Loading