Skip to content

Commit eaf9a24

Browse files
authored
feat: show message to resize on remote chat (#6007)
1 parent a402368 commit eaf9a24

File tree

5 files changed

+35
-13
lines changed

5 files changed

+35
-13
lines changed

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
2020
import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
2121
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenAuthState
2222
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenProviderListener
23+
import software.aws.toolkits.jetbrains.core.notifications.BannerContent
24+
import software.aws.toolkits.jetbrains.core.notifications.NotificationDismissalState
2325
import software.aws.toolkits.jetbrains.core.notifications.NotificationPanel
2426
import software.aws.toolkits.jetbrains.core.notifications.ProcessNotificationsBase
2527
import software.aws.toolkits.jetbrains.core.webview.BrowserState
@@ -32,6 +34,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileSe
3234
import software.aws.toolkits.jetbrains.utils.isQConnected
3335
import software.aws.toolkits.jetbrains.utils.isQExpired
3436
import software.aws.toolkits.jetbrains.utils.isQWebviewsAvailable
37+
import software.aws.toolkits.jetbrains.utils.isRunningOnRemoteBackend
38+
import software.aws.toolkits.resources.AmazonQBundle
3539
import software.aws.toolkits.resources.message
3640
import software.aws.toolkits.telemetry.FeatureId
3741
import java.awt.event.ComponentAdapter
@@ -42,7 +46,18 @@ class AmazonQToolWindowFactory : ToolWindowFactory, DumbAware {
4246
override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) {
4347
val mainPanel = BorderLayoutPanel()
4448
val qPanel = Wrapper()
45-
val notificationPanel = NotificationPanel()
49+
val notificationPanel = NotificationPanel().apply {
50+
if (isRunningOnRemoteBackend() && !NotificationDismissalState.getInstance().isDismissed(REMOTE_RESIZE_NOTIFICATION_ID)) {
51+
updateNotificationPanel(
52+
BannerContent(
53+
REMOTE_RESIZE_NOTIFICATION_ID,
54+
AmazonQBundle.message("amazonq.resize.panel"),
55+
// message is not used for banner
56+
"",
57+
)
58+
)
59+
}
60+
}
4661

4762
mainPanel.addToTop(notificationPanel)
4863
mainPanel.add(qPanel)
@@ -161,5 +176,6 @@ class AmazonQToolWindowFactory : ToolWindowFactory, DumbAware {
161176
private val LOG = getLogger<AmazonQToolWindowFactory>()
162177
const val WINDOW_ID = AMAZON_Q_WINDOW_ID
163178
private const val MINIMUM_TOOLWINDOW_WIDTH = 325
179+
private const val REMOTE_RESIZE_NOTIFICATION_ID = "resize.amazon.q.toolwindow.if.remote"
164180
}
165181
}

plugins/amazonq/shared/jetbrains-community/resources/software/aws/toolkits/resources/AmazonQBundle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ amazonq.getLogs.tooltip.text=Show Logs
1111
amazonq.logs.error=Cannot retrieve logs. Please try Help-> Collect Logs and Diagnostic data
1212
amazonq.logs.warning=Log files may contain sensitive information such as account IDs, resource names, and other data. Please be careful when sharing these logs.
1313
amazonq.refresh.panel=Refresh Chat Session
14+
amazonq.resize.panel=Please resize your IDE if the chat box isn't visible
1415
amazonq.title=Amazon Q
1516
amazonq.workspace.settings.open.prompt=Workspace index is now enabled. You can disable it from Amazon Q settings.
1617
action.q.manage.subscription.text=Manage Q Developer Pro Subscription

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,9 @@ data class NotificationActionList(
123123
)
124124

125125
data class BannerContent(
126+
val id: String,
126127
val title: String,
127128
val message: String,
128-
val actions: List<NotificationActionList>,
129-
val id: String,
129+
val actions: List<NotificationActionList> = emptyList(),
130+
val severity: NotificationSeverity = NotificationSeverity.INFO,
130131
)

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/NotificationPanel.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33

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

6-
import com.intellij.icons.AllIcons
76
import com.intellij.openapi.application.runInEdt
87
import com.intellij.ui.EditorNotificationPanel
98
import com.intellij.ui.components.panels.Wrapper
109
import com.intellij.util.ui.components.BorderLayoutPanel
11-
import software.aws.toolkits.resources.AwsCoreBundle
1210

1311
class NotificationPanel : BorderLayoutPanel() {
1412
private val wrapper = Wrapper()
@@ -23,15 +21,21 @@ class NotificationPanel : BorderLayoutPanel() {
2321
private fun removeNotificationPanel(notificationId: String) = runInEdt {
2422
BannerNotificationService.getInstance().removeNotification(notificationId)
2523
NotificationDismissalState.getInstance().dismissNotification(notificationId)
26-
wrapper.removeAll()
24+
wrapper.setContent(null)
2725
}
2826

2927
fun updateNotificationPanel(bannerContent: BannerContent) {
30-
val panel = EditorNotificationPanel()
28+
val panel = EditorNotificationPanel(
29+
when (bannerContent.severity) {
30+
NotificationSeverity.CRITICAL -> EditorNotificationPanel.Status.Error
31+
NotificationSeverity.WARNING -> EditorNotificationPanel.Status.Warning
32+
NotificationSeverity.INFO -> EditorNotificationPanel.Status.Info
33+
}
34+
)
3135
panel.text = bannerContent.title
32-
panel.icon(AllIcons.General.Error)
36+
3337
val panelWithActions = NotificationManager.buildBannerPanel(panel, bannerContent.actions)
34-
panelWithActions.createActionLabel(AwsCoreBundle.message("general.dismiss")) {
38+
panelWithActions.setCloseAction {
3539
removeNotificationPanel(bannerContent.id)
3640
}
3741

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/ProcessNotificationsBase.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class ProcessNotificationsBase(
8888
if (shouldShow) {
8989
LOG.info { "Showing notification with id: ${notificationData.id}" }
9090
val notificationContent = notificationData.content.locale
91-
val severity = notificationData.severity
91+
val severity = checkSeverity(notificationData.severity)
9292
val followupActions = NotificationManager.createActions(
9393
project,
9494
notificationData.actions,
@@ -99,11 +99,11 @@ class ProcessNotificationsBase(
9999
notificationContent.title,
100100
notificationContent.description,
101101
NotificationManager.buildNotificationActions(followupActions),
102-
checkSeverity(severity),
102+
severity,
103103
notificationData.id
104104
)
105-
if (severity == "Critical") {
106-
val bannerContent = BannerContent(notificationContent.title, notificationContent.description, followupActions, notificationData.id)
105+
if (severity == NotificationSeverity.CRITICAL) {
106+
val bannerContent = BannerContent(notificationData.id, notificationContent.title, notificationContent.description, followupActions, severity)
107107
BannerNotificationService.getInstance().addNotification(notificationData.id, bannerContent)
108108
notifyListenerForNotification(bannerContent)
109109
}

0 commit comments

Comments
 (0)