diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QLoginWebview.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QLoginWebview.kt index de771996690..16a37e150c7 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QLoginWebview.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QLoginWebview.kt @@ -3,6 +3,7 @@ package software.aws.toolkits.jetbrains.services.amazonq +import com.intellij.ide.BrowserUtil import com.intellij.openapi.Disposable import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.actionSystem.DataContext @@ -48,6 +49,7 @@ import software.aws.toolkits.telemetry.Telemetry import software.aws.toolkits.telemetry.UiTelemetry import software.aws.toolkits.telemetry.WebviewTelemetry import java.awt.event.ActionListener +import java.net.URI import javax.swing.JButton import javax.swing.JComponent @@ -227,6 +229,10 @@ class QWebviewBrowser(val project: Project, private val parentDisposable: Dispos is BrowserMessage.PublishWebviewTelemetry -> { publishTelemetry(message) } + + is BrowserMessage.OpenUrl -> { + BrowserUtil.browse(URI(message.externalLink)) + } } } diff --git a/plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/webview/BrowserMessage.kt b/plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/webview/BrowserMessage.kt index 6ce0de689a8..5d7afa86bd3 100644 --- a/plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/webview/BrowserMessage.kt +++ b/plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/webview/BrowserMessage.kt @@ -28,6 +28,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo JsonSubTypes.Type(value = BrowserMessage.SendUiClickTelemetry::class, name = "sendUiClickTelemetry"), JsonSubTypes.Type(value = BrowserMessage.SwitchProfile::class, name = "switchProfile"), JsonSubTypes.Type(value = BrowserMessage.PublishWebviewTelemetry::class, name = "webviewTelemetry"), + JsonSubTypes.Type(value = BrowserMessage.OpenUrl::class, name = "openUrl"), JsonSubTypes.Type(value = BrowserMessage.ListProfiles::class, name = "listProfiles") ) sealed interface BrowserMessage { @@ -60,6 +61,8 @@ sealed interface BrowserMessage { object Reauth : BrowserMessage + data class OpenUrl(val externalLink: String) : BrowserMessage + data class SwitchProfile( val profileName: String, val accountId: String, diff --git a/plugins/core/jetbrains-community/tst/software/aws/toolkits/jetbrains/core/BrowserMessageTest.kt b/plugins/core/jetbrains-community/tst/software/aws/toolkits/jetbrains/core/BrowserMessageTest.kt index 883945535d4..197d1fd8d20 100644 --- a/plugins/core/jetbrains-community/tst/software/aws/toolkits/jetbrains/core/BrowserMessageTest.kt +++ b/plugins/core/jetbrains-community/tst/software/aws/toolkits/jetbrains/core/BrowserMessageTest.kt @@ -174,6 +174,17 @@ class BrowserMessageTest { event = "{ \"metricName\": \"foo\" }" ) ) + + assertDeserializedInstanceOf( + """ + { + "command": "openUrl", + "externalLink": "foo" + } + """ + ).isEqualTo( + BrowserMessage.OpenUrl("foo") + ) } @Test @@ -298,6 +309,14 @@ class BrowserMessageTest { } """ ) + + assertDeserializedWillThrow( + """ + { + "command": "openUrl" + } + """ + ) } @Test diff --git a/plugins/core/webview/src/q-ui/components/profileSelection.vue b/plugins/core/webview/src/q-ui/components/profileSelection.vue index 5b97e044555..3ef02a58107 100644 --- a/plugins/core/webview/src/q-ui/components/profileSelection.vue +++ b/plugins/core/webview/src/q-ui/components/profileSelection.vue @@ -11,10 +11,11 @@

Choose a Q Developer profile

-

+

Your administrator has given you access to Q from multiple profiles. Choose the profile that meets your current working needs. You can change your profile at any time. -

+ More info. +
@@ -128,6 +129,12 @@ export default defineComponent({ }, handleSignoutClick() { window.ideApi.postMessage({command: 'signout'}) + }, + openUrl() { + window.ideApi.postMessage({ + command: 'openUrl', + externalLink: 'https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/subscribe-understanding-profile.html' + }) } } }) diff --git a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/core/explorer/webview/ToolkitLoginWebview.kt b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/core/explorer/webview/ToolkitLoginWebview.kt index d02e4422876..a39d1dea90e 100644 --- a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/core/explorer/webview/ToolkitLoginWebview.kt +++ b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/core/explorer/webview/ToolkitLoginWebview.kt @@ -3,6 +3,7 @@ package software.aws.toolkits.jetbrains.core.explorer.webview +import com.intellij.ide.BrowserUtil import com.intellij.ide.ui.LafManagerListener import com.intellij.openapi.Disposable import com.intellij.openapi.actionSystem.AnActionEvent @@ -60,6 +61,7 @@ import software.aws.toolkits.jetbrains.utils.isTookitConnected import software.aws.toolkits.telemetry.FeatureId import software.aws.toolkits.telemetry.UiTelemetry import java.awt.event.ActionListener +import java.net.URI import javax.swing.JButton import javax.swing.JComponent @@ -251,6 +253,10 @@ class ToolkitWebviewBrowser(val project: Project, private val parentDisposable: is BrowserMessage.PublishWebviewTelemetry -> { publishTelemetry(message) } + + is BrowserMessage.OpenUrl -> { + BrowserUtil.browse(URI(message.externalLink)) + } } }