Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
49 changes: 47 additions & 2 deletions flutter-idea/src/io/flutter/FlutterInitializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.google.gson.JsonPrimitive;
import com.intellij.ProjectTopics;
import com.intellij.ide.BrowserUtil;
import com.intellij.ide.browsers.BrowserLauncher;
import com.intellij.ide.plugins.IdeaPluginDescriptor;
import com.intellij.ide.plugins.PluginManagerCore;
import com.intellij.ide.ui.UISettingsListener;
Expand All @@ -31,8 +32,11 @@
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.startup.StartupActivity;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.util.messages.MessageBusConnection;
import com.jetbrains.lang.dart.analyzer.DartAnalysisServerService;
import com.jetbrains.lang.dart.ide.errorTreeView.DartProblemsView;
import com.jetbrains.lang.dart.ide.toolingDaemon.DartToolingDaemonService;
import de.roderick.weberknecht.WebSocketException;
import io.flutter.analytics.Analytics;
Expand All @@ -59,6 +63,7 @@
import io.flutter.run.daemon.DeviceService;
import io.flutter.sdk.FlutterPluginsLibraryManager;
import io.flutter.sdk.FlutterSdk;
import io.flutter.sdk.FlutterSdkVersion;
import io.flutter.settings.FlutterSettings;
import io.flutter.survey.FlutterSurveyNotifications;
import io.flutter.utils.FlutterModuleUtils;
Expand Down Expand Up @@ -215,6 +220,9 @@ public void moduleAdded(@NotNull Project project, @NotNull Module module) {
// Initialize notifications for theme changes.
setUpThemeChangeNotifications(project);

// Send unsupported SDK notifications if relevant.
checkSdkVersionNotification(project);

setUpDtdAnalytics(project);

// Initialize analytics.
Expand Down Expand Up @@ -276,8 +284,7 @@ private void setUpDtdAnalytics(Project project) {
t1.start();
}

private void setUpThemeChangeNotifications(Project project) {
if (project == null) return;
private void setUpThemeChangeNotifications(@NotNull Project project) {
FlutterSdk sdk = FlutterSdk.getFlutterSdk(project);
if (sdk == null || !sdk.getVersion().canUseDtd()) return;
Thread t1 = new Thread(() -> {
Expand Down Expand Up @@ -350,6 +357,44 @@ private void sendThemeChangedEvent(@NotNull Project project) {
}, 1, TimeUnit.SECONDS);
}

private void checkSdkVersionNotification(@NotNull Project project) {
FlutterSdk sdk = FlutterSdk.getFlutterSdk(project);
if (sdk == null) return;
final FlutterSdkVersion version = sdk.getVersion();

if (!version.sdkIsSupported() && version.getVersionText() != null) {
final FlutterSettings settings = FlutterSettings.getInstance();
if (settings == null || settings.isSdkVersionOutdatedWarningAcknowledged(version.getVersionText())) return;

ApplicationManager.getApplication().invokeLater(() -> {
final Notification notification = new Notification("flutter-sdk",
"Flutter SDK requires update",
"Support for v" +
version.getVersionText() +
" of the Flutter SDK will be removed in an upcoming release of the Flutter plugin. Consider updating to a more recent Flutter SDK",
NotificationType.WARNING);
notification.addAction(new AnAction("More Info") {
@Override
public void actionPerformed(@NotNull AnActionEvent event) {
// TODO(helin24): Update with informational URL.
BrowserLauncher.getInstance().browse("https://www.google.com", null);
settings.setSdkVersionOutdatedWarningAcknowledged(version.getVersionText(), true);
notification.expire();
}
});

notification.addAction(new AnAction("I understand") {
@Override
public void actionPerformed(@NotNull AnActionEvent event) {
settings.setSdkVersionOutdatedWarningAcknowledged(version.getVersionText(), true);
notification.expire();
}
});
Notifications.Bus.notify(notification, project);
});
}
}

private static void enableAnalytics(@NotNull Project project) {
ToolWindowTracker.track(project, getAnalytics());
DartAnalysisServerService.getInstance(project).addAnalysisServerListener(FlutterAnalysisServerListener.getInstance(project));
Expand Down
8 changes: 8 additions & 0 deletions flutter-idea/src/io/flutter/sdk/FlutterSdkVersion.java
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,10 @@ public class FlutterSdkVersion implements Comparable<FlutterSdkVersion> {
@NotNull
private static final FlutterSdkVersion MIN_SUPPORTS_DTD = new FlutterSdkVersion("3.22.0");

@NotNull
// TODO(helin24): Update with the right version.
private static final FlutterSdkVersion MIN_SDK_SUPPORTED = new FlutterSdkVersion("0.0.1");

@Nullable
private final Version version;
@Nullable
Expand Down Expand Up @@ -294,6 +298,10 @@ public boolean canUseDtd() {
return version != null && this.compareTo(MIN_SUPPORTS_DTD) >= 0;
}

public boolean sdkIsSupported() {
return version != null && this.compareTo(MIN_SDK_SUPPORTED) >= 0;
}

public boolean isValid() {
return version != null;
}
Expand Down
14 changes: 14 additions & 0 deletions flutter-idea/src/io/flutter/settings/FlutterSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import com.intellij.util.EventDispatcher;
import com.jetbrains.lang.dart.analyzer.DartClosingLabelManager;
import io.flutter.analytics.Analytics;
import io.flutter.sdk.FlutterSdkVersion;

import java.util.EventListener;

Expand All @@ -34,6 +35,7 @@ public class FlutterSettings {
private static final String fontPackagesKey = "io.flutter.fontPackages";
private static final String allowTestsInSourcesRootKey = "io.flutter.allowTestsInSources";
private static final String showBazelIosRunNotificationKey = "io.flutter.hideBazelIosRunNotification";
private static final String sdkVersionOutdatedWarningAcknowledgedKey = "io.flutter.sdkVersionOutdatedWarningAcknowledged";

// TODO(helin24): This is to change the embedded browser setting back to true only once for Big Sur users. If we
// switch to enabling the embedded browser for everyone, then delete this key.
Expand Down Expand Up @@ -381,4 +383,16 @@ public void setShowBazelIosRunNotification(boolean value) {
getPropertiesComponent().setValue(showBazelIosRunNotificationKey, value, true);
fireEvent();
}

public boolean isSdkVersionOutdatedWarningAcknowledged(String versionText) {
return getPropertiesComponent().getBoolean(getSdkVersionKey(versionText));
}

public void setSdkVersionOutdatedWarningAcknowledged(String versionText, boolean value) {
getPropertiesComponent().setValue(getSdkVersionKey(versionText), value);
}

private String getSdkVersionKey(String versionText) {
return sdkVersionOutdatedWarningAcknowledgedKey + "_" + versionText;
}
}