-
Notifications
You must be signed in to change notification settings - Fork 274
Show notification banner #5097
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
Show notification banner #5097
Changes from 3 commits
c3cc2bf
09729c7
885f3f0
f0aca38
e909a0e
5a84e39
56c1888
a981227
682897f
adb6ec7
dbfcefc
823ea7f
218c8ed
b684a01
368fd25
57fb2ef
a5126d1
22f9438
87ec1d9
24a2f65
78f8c6b
bfc1077
1a83a40
9e8b0af
1b12854
e7d8594
bbf6779
a8fa482
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -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 | ||||||
|
|
@@ -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
|
||||||
| 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
|
||||||
|
|
||||||
| if (toolWindow is ToolWindowEx) { | ||||||
| val actionManager = ActionManager.getInstance() | ||||||
| toolWindow.setTitleActions(listOf(actionManager.getAction("aws.q.toolwindow.titleBar"))) | ||||||
|
|
@@ -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
|
||||||
| } | ||||||
| } | ||||||
| ) | ||||||
|
|
@@ -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
|
||||||
| } | ||||||
| } | ||||||
| } | ||||||
| ) | ||||||
|
|
||||||
| project.messageBus.connect().subscribe( | ||||||
|
||||||
| project.messageBus.connect().subscribe( | |
| project.messageBus.connect(disposable).subscribe( |
Check warning on line 78 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 81 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
manodnyab marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also missing disposable here
Check warning on line 91 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 93 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 99 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 106 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 111 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 113 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 125 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 172 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 188 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 192 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 195 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 199 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 202 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 210 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
Check warning on line 216 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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
manodnyab marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
Check warning on line 218 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt
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( | ||
manodnyab marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| 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
|
||
| ) | ||
manodnyab marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| 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
|
||
| if (notificationAction.type == "ShowUrl") { | ||
manodnyab marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| actionList.add( | ||
| getNotifAction("Learn more") { | ||
|
Check warning on line 35 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt
|
||
| 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
|
||
| ) | ||
| } | ||
|
|
||
| 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
|
||
| ) | ||
| } | ||
|
|
||
| if (notificationAction.type == "openChangelog") { | ||
| actionList.add( | ||
| getNotifAction("Changelog") { | ||
| BrowserUtil.browse("https://github.com/aws/aws-toolkit-jetbrains/blob/main/CHANGELOG.md") | ||
manodnyab marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| } | ||
|
Check warning on line 53 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt
|
||
| ) | ||
| } | ||
| } | ||
| return actionList | ||
|
Check warning on line 57 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt
|
||
| } | ||
|
|
||
| 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
|
||
| 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
|
||
|
|
||
| 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
|
||
|
|
||
| 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
|
||
| 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
|
||
manodnyab marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| 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
|
||
| 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
|
||
| } | ||
|
|
||
| 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
|
||
| } | ||
|
|
||
| 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
|
||
| } | ||
| } | ||
| return panel | ||
|
Check warning on line 98 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt
|
||
| } | ||
| 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
|
||
|
||
| 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
|
||
| } | ||
|
|
||
| fun shouldShowNotification(project: Project, notificationData: NotificationData) { | ||
|
||
| 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
|
||
| ) | ||
|
|
||
| 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
|
||
| } | ||
| } | ||
| } | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.