55 */
66package io .flutter .devtools ;
77
8+ import com .intellij .openapi .application .ApplicationManager ;
89import io .flutter .bazel .WorkspaceCache ;
910import io .flutter .sdk .FlutterSdkUtil ;
1011import io .flutter .sdk .FlutterSdkVersion ;
1112import com .intellij .openapi .util .text .StringUtil ;
13+ import com .intellij .openapi .application .ApplicationInfo ;
1214import org .jetbrains .annotations .NotNull ;
1315import org .jetbrains .annotations .Nullable ;
1416
1921import java .util .Objects ;
2022
2123public class DevToolsUrl {
24+ public static final String UNKNOWN_INTELLIJ_NAME = "IntelliJ - Unknown" ;
2225 private String devToolsHost ;
2326 private int devToolsPort ;
2427 public String vmServiceUri ;
@@ -34,6 +37,7 @@ public class DevToolsUrl {
3437 private final boolean canUseMultiEmbed ;
3538
3639 public final DevToolsIdeFeature ideFeature ;
40+ private final String ideName ;
3741
3842 @ NotNull private final DevToolsUtils devToolsUtils ;
3943
@@ -50,6 +54,7 @@ public static class Builder {
5054 private @ Nullable FlutterSdkVersion flutterSdkVersion ;
5155 private WorkspaceCache workspaceCache ;
5256 private DevToolsIdeFeature ideFeature ;
57+ private String ideName ;
5358
5459 private DevToolsUtils devToolsUtils ;
5560
@@ -130,6 +135,12 @@ public Builder setFlutterSdkUtil(FlutterSdkUtil flutterSdkUtil) {
130135 return this ;
131136 }
132137
138+ @ NotNull
139+ public Builder setIdeName (String ideName ) {
140+ this .ideName = ideName ;
141+ return this ;
142+ }
143+
133144 @ NotNull
134145 public DevToolsUrl build () {
135146 if (devToolsUtils == null ) {
@@ -161,6 +172,7 @@ private DevToolsUrl(Builder builder) {
161172 this .flutterSdkVersion = builder .flutterSdkVersion ;
162173 this .ideFeature = builder .ideFeature ;
163174 this .sdkUtil = builder .flutterSdkUtil ;
175+ this .ideName = builder .ideName != null ? builder .ideName : getIdeName ();
164176
165177 if (builder .workspaceCache != null && builder .workspaceCache .isBazel ()) {
166178 this .canUseMultiEmbed = true ;
@@ -179,7 +191,10 @@ public String getUrlString() {
179191 final List <String > params = new ArrayList <>();
180192
181193 String ideValue = sdkUtil .getFlutterHostEnvValue ();
182- params .add ("ide=" + (ideValue == null ? "IntelliJPluginUnknown" : ideValue ));
194+ String ideParamValue = ideValue == null ? UNKNOWN_INTELLIJ_NAME : ideValue ;
195+ params .add ("ide=" + URLEncoder .encode (ideParamValue , StandardCharsets .UTF_8 ));
196+ params .add ("dashTool=intellij-plugins" );
197+ params .add ("dashIdeName=" + URLEncoder .encode (this .ideName , StandardCharsets .UTF_8 ));
183198 if (colorHexCode != null ) {
184199 params .add ("backgroundColor=" + colorHexCode );
185200 }
@@ -216,6 +231,20 @@ public String getUrlString() {
216231 + StringUtil .join (params , "&" );
217232 }
218233
234+ private @ NotNull String getIdeName () {
235+ if (ApplicationManager .getApplication () == null ) {
236+ return UNKNOWN_INTELLIJ_NAME ;
237+ }
238+ ApplicationInfo appInfo = ApplicationInfo .getInstance ();
239+ if (appInfo != null ) {
240+ String versionName = appInfo .getVersionName ();
241+ if (versionName != null ) {
242+ return versionName ;
243+ }
244+ }
245+ return UNKNOWN_INTELLIJ_NAME ;
246+ }
247+
219248 public boolean maybeUpdateColor () {
220249 final String newColor = devToolsUtils .getColorHexCode ();
221250 if (Objects .equals (colorHexCode , newColor )) {
0 commit comments