From 866b0c8409dfa1270e8f2e11ee7d4a0043fc6f96 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 14 Jan 2022 15:50:35 +0100 Subject: [PATCH] Saner set of notification groups for IDE and plugin updates GitOrigin-RevId: d8d6dc697d4cfc769a406f24446db4ed9577d2cc --- .../resources/messages/IdeBundle.properties | 6 ++++-- .../src/com/intellij/ide/actions/WhatsNewAction.java | 3 ++- .../src/com/intellij/ide/plugins/DynamicPlugins.kt | 6 ++---- .../com/intellij/ide/plugins/PluginManagerMain.java | 2 +- .../ide/ui/PluginBooleanOptionDescriptor.java | 7 +++---- .../openapi/application/OldDirectoryCleaner.java | 7 ++++--- .../updateSettings/impl/PluginUpdateDialog.java | 2 +- .../openapi/updateSettings/impl/UpdateChecker.kt | 6 +++++- .../updateSettings/impl/UpdateCheckerService.java | 4 ++-- .../updateSettings/impl/UpdateInfoDialog.java | 4 ++-- .../src/META-INF/PlatformExtensions.xml | 12 +++++++----- 11 files changed, 33 insertions(+), 26 deletions(-) diff --git a/platform/platform-api/resources/messages/IdeBundle.properties b/platform/platform-api/resources/messages/IdeBundle.properties index 82f6dda88afd..665b58900877 100644 --- a/platform/platform-api/resources/messages/IdeBundle.properties +++ b/platform/platform-api/resources/messages/IdeBundle.properties @@ -1815,8 +1815,10 @@ notification.group.missing.keymap=Missing keymap notification.group.plugins.suggestion=Plugin suggestions available notification.content.keymap.successfully.activated=Keymap {0} successfully activated notification.content.keymap.successfully.installed=Keymap {0} successfully installed -notification.group.ide.and.plugin.updates=IDE and plugin updates -notification.group.plugin.updates=Plugin updates +notification.group.ide.and.plugin.updates=IDE and plugin updates available +notification.group.plugin.updates=Plugins installed or updated +notification.group.ide.update.results=IDE updates installed +notification.group.leftover.directories=Leftover IDE directories found action.text.install.keymap=Install {0} Keymap action.text.search.for.keymap=Search for {0} Keymap plugin action.separator.file.templates=File templates diff --git a/platform/platform-impl/src/com/intellij/ide/actions/WhatsNewAction.java b/platform/platform-impl/src/com/intellij/ide/actions/WhatsNewAction.java index 20318391fb2a..df585705eb4b 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/WhatsNewAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/WhatsNewAction.java @@ -69,8 +69,9 @@ public class WhatsNewAction extends AnAction implements DumbAware { String name = ApplicationNamesInfo.getInstance().getFullProductName(); String version = ApplicationInfo.getInstance().getShortVersion(); String content = IdeBundle.message("whats.new.notification.text", name, version, url); - UpdateChecker.getNotificationGroup() + UpdateChecker.getNotificationGroupForIdeUpdateResults() .createNotification(notificationTitle, content, NotificationType.INFORMATION) + .setDisplayId("ide.whats.new") .setListener(NotificationListener.URL_OPENING_LISTENER) .notify(project); } diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt b/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt index f4c0510cfcce..c0a5519b260c 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt @@ -25,7 +25,6 @@ import com.intellij.ide.ui.UIThemeProvider import com.intellij.ide.util.TipDialog import com.intellij.idea.IdeaLogger import com.intellij.lang.Language -import com.intellij.notification.NotificationGroupManager import com.intellij.notification.NotificationType import com.intellij.notification.NotificationsManager import com.intellij.notification.impl.NotificationsManagerImpl @@ -56,6 +55,7 @@ import com.intellij.openapi.project.DumbAware import com.intellij.openapi.project.Project import com.intellij.openapi.project.ProjectManager import com.intellij.openapi.project.impl.ProjectManagerImpl +import com.intellij.openapi.updateSettings.impl.UpdateChecker import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.IconLoader import com.intellij.openapi.util.NlsContexts @@ -93,8 +93,6 @@ import kotlin.collections.component2 private val LOG = logger() private val classloadersFromUnloadedPlugins = mutableMapOf>() -private const val GROUP_ID = "Dynamic plugin installation" - object DynamicPlugins { @JvmStatic @JvmOverloads @@ -689,7 +687,7 @@ object DynamicPlugins { } internal fun notify(@NlsContexts.NotificationContent text: String, notificationType: NotificationType, vararg actions: AnAction) { - val notification = NotificationGroupManager.getInstance().getNotificationGroup(GROUP_ID).createNotification(text, notificationType) + val notification = UpdateChecker.getNotificationGroupForPluginUpdateResults().createNotification(text, notificationType) for (action in actions) { notification.addAction(action) } diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerMain.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerMain.java index b9ea588dee40..97041c095f6d 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerMain.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerMain.java @@ -302,7 +302,7 @@ public final class PluginManagerMain { ApplicationEx app = ApplicationManagerEx.getApplicationEx(); String title = IdeBundle.message("updates.notification.title", ApplicationNamesInfo.getInstance().getFullProductName()); String action = IdeBundle.message("ide.restart.required.notification", app.isRestartCapable() ? 1 : 0); - UpdateChecker.getNotificationGroup() + UpdateChecker.getNotificationGroupForPluginUpdateResults() .createNotification(title, NotificationType.INFORMATION) .setDisplayId("plugins.updated.suggest.restart") .addAction(new NotificationAction(action) { diff --git a/platform/platform-impl/src/com/intellij/ide/ui/PluginBooleanOptionDescriptor.java b/platform/platform-impl/src/com/intellij/ide/ui/PluginBooleanOptionDescriptor.java index 724b25d54c43..251510e1adea 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/PluginBooleanOptionDescriptor.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/PluginBooleanOptionDescriptor.java @@ -17,6 +17,7 @@ import com.intellij.openapi.application.ex.ApplicationInfoEx; import com.intellij.openapi.extensions.PluginId; import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.ui.popup.Balloon; +import com.intellij.openapi.updateSettings.impl.UpdateChecker; import com.intellij.openapi.util.Condition; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.Nls; @@ -87,8 +88,7 @@ public final class PluginBooleanOptionDescriptor extends BooleanOptionDescriptio @NotNull @Nls String content, boolean enabled) { String title = IdeBundle.message(enabled ? "plugins.auto.enabled.notification.title" : "plugins.auto.disabled.notification.title"); - Notification switchNotification = NotificationGroupManager.getInstance() - .getNotificationGroup("Plugin Update Results") + Notification switchNotification = UpdateChecker.getNotificationGroupForPluginUpdateResults() .createNotification(content, NotificationType.INFORMATION) .setDisplayId("plugin.auto.switch") .setTitle(title) @@ -180,8 +180,7 @@ public final class PluginBooleanOptionDescriptor extends BooleanOptionDescriptio return; } - Notification newNotification = NotificationGroupManager.getInstance() - .getNotificationGroup("IDE and Plugin Updates") + Notification newNotification = UpdateChecker.getNotificationGroupForIdeUpdateResults() .createNotification( IdeBundle.message("plugins.changed.notification.content", ApplicationNamesInfo.getInstance().getFullProductName()), NotificationType.INFORMATION) diff --git a/platform/platform-impl/src/com/intellij/openapi/application/OldDirectoryCleaner.java b/platform/platform-impl/src/com/intellij/openapi/application/OldDirectoryCleaner.java index cfc551fd919e..000e7b8396b0 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/OldDirectoryCleaner.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/OldDirectoryCleaner.java @@ -10,6 +10,7 @@ import com.intellij.internal.statistic.eventLog.events.EventId; import com.intellij.internal.statistic.eventLog.events.EventId1; import com.intellij.internal.statistic.eventLog.events.EventId2; import com.intellij.internal.statistic.service.fus.collectors.CounterUsagesCollector; +import com.intellij.notification.NotificationGroupManager; import com.intellij.notification.NotificationType; import com.intellij.openapi.application.ConfigImportHelper.ConfigDirsSearchResult; import com.intellij.openapi.application.ex.ApplicationEx; @@ -105,13 +106,13 @@ public final class OldDirectoryCleaner { Stats.completed(groups.size(), groups.stream().mapToLong(g -> g.size).sum()); } else if (!groups.isEmpty()) { - UpdateChecker.getNotificationGroup() + NotificationGroupManager.getInstance().getNotificationGroup("notification.group.leftover.directories") .createNotification(message("old.dirs.notification.text"), NotificationType.INFORMATION) .addAction(createSimpleExpiring(message("old.dirs.notification.action"), () -> confirmAndDelete(project, groups))) .notify(project); } else { - UpdateChecker.getNotificationGroup() + NotificationGroupManager.getInstance().getNotificationGroup("notification.group.leftover.directories") .createNotification(message("old.dirs.not.found.notification.text"), NotificationType.INFORMATION) .notify(project); } @@ -263,7 +264,7 @@ public final class OldDirectoryCleaner { if (!errors.isEmpty()) { @NlsSafe String content = String.join("
", errors); - UpdateChecker.getNotificationGroup() + NotificationGroupManager.getInstance().getNotificationGroup("notification.group.leftover.directories") .createNotification(message("old.dirs.delete.error"), content, NotificationType.WARNING) .addAction(ShowLogAction.notificationAction()) .notify(project); diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginUpdateDialog.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginUpdateDialog.java index 96e96fbe250e..5ec379a0af48 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginUpdateDialog.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginUpdateDialog.java @@ -206,7 +206,7 @@ final class PluginUpdateDialog extends DialogWrapper { } if (downloaders.size() == installedDescriptors.size()) { - UpdateChecker.getNotificationGroupForUpdateResults() + UpdateChecker.getNotificationGroupForPluginUpdateResults() .createNotification(getUpdateNotificationMessage(installedDescriptors), NotificationType.INFORMATION) .setDisplayId("plugins.updated.without.restart") diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.kt b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.kt index 0691f549deca..d387759d6fe1 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.kt +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.kt @@ -101,9 +101,13 @@ object UpdateChecker { NotificationGroupManager.getInstance().getNotificationGroup("IDE and Plugin Updates") @JvmStatic - fun getNotificationGroupForUpdateResults(): NotificationGroup = + fun getNotificationGroupForPluginUpdateResults(): NotificationGroup = NotificationGroupManager.getInstance().getNotificationGroup("Plugin Update Results") + @JvmStatic + fun getNotificationGroupForIdeUpdateResults(): NotificationGroup = + NotificationGroupManager.getInstance().getNotificationGroup("IDE Update Results") + /** * For scheduled update checks. */ diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateCheckerService.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateCheckerService.java index c5b91029a05a..9577cdc1d123 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateCheckerService.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateCheckerService.java @@ -241,7 +241,7 @@ final class UpdateCheckerService { String title = IdeBundle.message("updates.notification.title", ApplicationNamesInfo.getInstance().getFullProductName()); String message = blogPost == null ? IdeBundle.message("update.snap.message") : IdeBundle.message("update.snap.message.with.blog.post", StringUtil.escapeXmlEntities(blogPost)); - UpdateChecker.getNotificationGroup() + UpdateChecker.getNotificationGroupForIdeUpdateResults() .createNotification(title, message, NotificationType.INFORMATION) .setListener(NotificationListener.URL_OPENING_LISTENER) .setDisplayId("ide.updated.by.snap") @@ -291,7 +291,7 @@ final class UpdateCheckerService { String title = IdeBundle.message("update.installed.notification.title"); String text = new HtmlBuilder().appendWithSeparators(HtmlChunk.text(", "), links).wrapWith("html").toString(); - UpdateChecker.getNotificationGroupForUpdateResults() + UpdateChecker.getNotificationGroupForPluginUpdateResults() .createNotification(title, text, NotificationType.INFORMATION) .setListener((__, e) -> showPluginConfigurable(e, project)) // benign leak - notifications are disposed of on project close .setDisplayId("plugins.updated.after.restart") diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateInfoDialog.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateInfoDialog.java index 7f62cb4a7ab4..649ae1db2ac8 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateInfoDialog.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateInfoDialog.java @@ -246,7 +246,7 @@ public final class UpdateInfoDialog extends AbstractUpdateDialog { String title = IdeBundle.message("updates.notification.title", ApplicationNamesInfo.getInstance().getFullProductName()); String downloadUrl = UpdateInfoPanel.downloadUrl(myLoadedResult.getNewBuild(), myLoadedResult.getUpdatedChannel()); String message = IdeBundle.message("update.downloading.patch.error", e.getMessage(), downloadUrl); - UpdateChecker.getNotificationGroup() + UpdateChecker.getNotificationGroupForIdeUpdateResults() .createNotification(title, message, NotificationType.ERROR) .setListener(NotificationListener.URL_OPENING_LISTENER) .setDisplayId("ide.patch.download.failed") @@ -266,7 +266,7 @@ public final class UpdateInfoDialog extends AbstractUpdateDialog { else { String title = IdeBundle.message("updates.notification.title", ApplicationNamesInfo.getInstance().getFullProductName()); String message = IdeBundle.message("update.ready.message"); - UpdateChecker.getNotificationGroup() + UpdateChecker.getNotificationGroupForIdeUpdateResults() .createNotification(title, message, NotificationType.INFORMATION) .setListener(new NotificationListener.Adapter() { @Override diff --git a/platform/platform-resources/src/META-INF/PlatformExtensions.xml b/platform/platform-resources/src/META-INF/PlatformExtensions.xml index 8dd878b092e5..3863ec6ecfaf 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensions.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensions.xml @@ -1240,17 +1240,19 @@ - + notificationIds="ide.update.channel.switched;ide.update.available; + plugins.update.available;external.components.available;no.updates.available;dart.sdk.update.available"/> + + notificationIds="plugins.updated.without.restart;plugins.updated.after.restart;plugin.auto.switch;plugins.updated.restart.required; + plugins.updated.suggest.restart"/> +