Skip to content

Commit 1a4ca2f

Browse files
authored
Action analytics (#2233)
* Flutter View Action analytics. * cleaned up imports * Analytics for “open in…” actions. * rebase of flutterview * open module analytics * rebase * rebase and renames
1 parent fce7d84 commit 1a4ca2f

File tree

6 files changed

+96
-29
lines changed

6 files changed

+96
-29
lines changed

flutter-studio/src/io/flutter/actions/OpenAndroidModule.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
*/
3434
public class OpenAndroidModule extends OpenInAndroidStudioAction implements DumbAware {
3535
@Override
36-
public void actionPerformed(AnActionEvent e) {
36+
public void performAction(AnActionEvent e) {
3737
final VirtualFile projectFile = findProjectFile(e);
3838
if (projectFile == null) {
3939
FlutterMessages.showError("Error Opening Android Studio", "Project not found.");
@@ -52,6 +52,12 @@ public void actionPerformed(AnActionEvent e) {
5252
openOrImportProject(projectFile, e.getProject(), sourceFile, forceOpenInNewFrame);
5353
}
5454

55+
@NotNull
56+
@Override
57+
public String getAnalyticsId() {
58+
return "OpenModuleInAndroidStudio";
59+
}
60+
5561
private static void openOrImportProject(@NotNull VirtualFile projectFile,
5662
@Nullable Project project,
5763
@Nullable VirtualFile sourceFile,
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright 2018 The Chromium Authors. All rights reserved.
3+
* Use of this source code is governed by a BSD-style license that can be
4+
* found in the LICENSE file.
5+
*/
6+
package io.flutter.actions;
7+
8+
import com.intellij.openapi.actionSystem.AnAction;
9+
import com.intellij.openapi.actionSystem.AnActionEvent;
10+
import io.flutter.FlutterInitializer;
11+
import org.jetbrains.annotations.NotNull;
12+
13+
/**
14+
* An action that sends analytics when performed.
15+
*/
16+
public abstract class ActionWithAnalytics extends AnAction {
17+
18+
/**
19+
* Template method. Implement @performAction.
20+
*/
21+
@Override
22+
public final void actionPerformed(AnActionEvent e) {
23+
FlutterInitializer.getAnalytics().sendEvent("flutter", getAnalyticsId());
24+
performAction(e);
25+
}
26+
27+
/**
28+
* Return the unique analytics Id for this action.
29+
*/
30+
@NotNull
31+
public abstract String getAnalyticsId();
32+
33+
/**
34+
* Perform the action.
35+
*
36+
* Called by @actionPerformed.
37+
*/
38+
public abstract void performAction(AnActionEvent e);
39+
}

src/io/flutter/actions/OpenInAndroidStudioAction.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import com.intellij.execution.process.OSProcessHandler;
1111
import com.intellij.execution.process.ProcessAdapter;
1212
import com.intellij.execution.process.ProcessEvent;
13-
import com.intellij.openapi.actionSystem.AnAction;
1413
import com.intellij.openapi.actionSystem.AnActionEvent;
1514
import com.intellij.openapi.actionSystem.CommonDataKeys;
1615
import com.intellij.openapi.actionSystem.Presentation;
@@ -28,7 +27,7 @@
2827

2928
import java.io.File;
3029

31-
public class OpenInAndroidStudioAction extends AnAction {
30+
public class OpenInAndroidStudioAction extends ActionWithAnalytics {
3231

3332
private static final String LABEL_FILE = FlutterBundle.message("flutter.androidstudio.open.file.text");
3433
private static final String DESCR_FILE = FlutterBundle.message("flutter.androidstudio.open.file.description");
@@ -40,8 +39,14 @@ public void update(AnActionEvent event) {
4039
updatePresentation(event, event.getPresentation());
4140
}
4241

42+
@NotNull
4343
@Override
44-
public void actionPerformed(AnActionEvent e) {
44+
public String getAnalyticsId() {
45+
return "OpenInAndroidStudio";
46+
}
47+
48+
@Override
49+
public void performAction(AnActionEvent e) {
4550
final String androidStudioPath = findAndroidStudio(e.getProject());
4651
if (androidStudioPath == null) {
4752
FlutterMessages.showError("Error Opening Android Studio", "Unable to locate Android Studio.");

src/io/flutter/actions/OpenInXcodeAction.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import com.intellij.execution.process.OSProcessHandler;
1111
import com.intellij.execution.process.ProcessAdapter;
1212
import com.intellij.execution.process.ProcessEvent;
13-
import com.intellij.openapi.actionSystem.AnAction;
1413
import com.intellij.openapi.actionSystem.AnActionEvent;
1514
import com.intellij.openapi.actionSystem.CommonDataKeys;
1615
import com.intellij.openapi.actionSystem.Presentation;
@@ -27,7 +26,7 @@
2726
import org.jetbrains.annotations.NotNull;
2827
import org.jetbrains.annotations.Nullable;
2928

30-
public class OpenInXcodeAction extends AnAction {
29+
public class OpenInXcodeAction extends ActionWithAnalytics {
3130
private static VirtualFile findProjectFile(@Nullable AnActionEvent e) {
3231
if (e != null) {
3332
final VirtualFile file = CommonDataKeys.VIRTUAL_FILE.getData(e.getDataContext());
@@ -141,8 +140,14 @@ public void update(AnActionEvent event) {
141140
}
142141
}
143142

143+
@NotNull
144144
@Override
145-
public void actionPerformed(AnActionEvent e) {
145+
public String getAnalyticsId() {
146+
return "OpenInXcode";
147+
}
148+
149+
@Override
150+
public void performAction(AnActionEvent e) {
146151
final VirtualFile projectFile = findProjectFile(e);
147152
if (projectFile != null) {
148153
openFile(projectFile);

src/io/flutter/editor/NativeEditorNotificationProvider.java

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,30 @@
1616
import com.intellij.ui.EditorNotificationPanel;
1717
import com.intellij.ui.EditorNotifications;
1818
import icons.FlutterIcons;
19-
import org.jetbrains.annotations.NonNls;
19+
import io.flutter.actions.ActionWithAnalytics;
20+
import io.flutter.actions.OpenInXcodeAction;
2021
import org.jetbrains.annotations.NotNull;
2122
import org.jetbrains.annotations.Nullable;
2223

2324
public class NativeEditorNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> implements DumbAware {
2425
private static final Key<EditorNotificationPanel> KEY = Key.create("flutter.native.editor.notification");
2526

27+
private static final ActionWithAnalytics OPEN_IN_XCODE_ACTION = new OpenInXcodeAction() {
28+
@NotNull
29+
@Override
30+
public String getAnalyticsId() {
31+
return "OpenInXcode.banner";
32+
}
33+
};
34+
35+
private static final ActionWithAnalytics OPEN_IN_ANDROID_STUDIO_ACTION = new OpenInXcodeAction() {
36+
@NotNull
37+
@Override
38+
public String getAnalyticsId() {
39+
return "OpenInAndroidStudio.banner";
40+
}
41+
};
42+
2643
private final Project myProject;
2744

2845
public NativeEditorNotificationProvider(@NotNull Project project) {
@@ -48,26 +65,26 @@ private EditorNotificationPanel createPanelForFile(VirtualFile file, VirtualFile
4865
if (root == null) {
4966
return null;
5067
}
51-
return createPanelForAction(file, root, getActionName(root));
68+
return createPanelForAction(file, root, getAction(root));
5269
}
5370

54-
private EditorNotificationPanel createPanelForAction(VirtualFile file, VirtualFile root, String actionName) {
55-
if (actionName == null) {
71+
private EditorNotificationPanel createPanelForAction(VirtualFile file, VirtualFile root, AnAction action) {
72+
if (action == null) {
5673
return null;
5774
}
58-
NativeEditorActionsPanel panel = new NativeEditorActionsPanel(file, root, actionName);
75+
NativeEditorActionsPanel panel = new NativeEditorActionsPanel(file, root, action);
5976
return panel.isValidForFile() ? panel : null;
6077
}
6178

62-
private static String getActionName(VirtualFile root) {
79+
private static AnAction getAction(VirtualFile root) {
6380
if (root == null) {
6481
return null;
6582
}
6683
if (root.getName().equals("android")) {
67-
return "flutter.androidstudio.open";
84+
return OPEN_IN_ANDROID_STUDIO_ACTION;
6885
}
6986
else if (root.getName().equals("ios")) {
70-
return "flutter.xcode.open";
87+
return OPEN_IN_XCODE_ACTION;
7188
}
7289
else {
7390
return null;
@@ -97,11 +114,11 @@ class NativeEditorActionsPanel extends EditorNotificationPanel {
97114
final AnAction myAction;
98115
final boolean isVisible;
99116

100-
NativeEditorActionsPanel(VirtualFile file, VirtualFile root, String actionName) {
117+
NativeEditorActionsPanel(VirtualFile file, VirtualFile root, AnAction openAction) {
101118
super(EditorColors.GUTTER_BACKGROUND);
102119
myFile = file;
103120
myRoot = root;
104-
myAction = ActionManager.getInstance().getAction(actionName);
121+
myAction = openAction;
105122

106123
icon(FlutterIcons.Flutter);
107124
text("Flutter commands");
@@ -128,18 +145,14 @@ private void performAction() {
128145
}
129146

130147
private DataContext makeContext() {
131-
return new DataContext() {
132-
@Override
133-
@Nullable
134-
public Object getData(@NonNls String dataId) {
135-
if (CommonDataKeys.VIRTUAL_FILE.is(dataId)) {
136-
return myFile;
137-
}
138-
if (CommonDataKeys.PROJECT.is(dataId)) {
139-
return myProject;
140-
}
141-
return null;
148+
return dataId -> {
149+
if (CommonDataKeys.VIRTUAL_FILE.is(dataId)) {
150+
return myFile;
151+
}
152+
if (CommonDataKeys.PROJECT.is(dataId)) {
153+
return myProject;
142154
}
155+
return null;
143156
};
144157
}
145158
}

src/io/flutter/view/FlutterView.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -999,4 +999,3 @@ private static DefaultActionGroup createPopupActionGroup(FlutterView view, Flutt
999999
return group;
10001000
}
10011001
}
1002-

0 commit comments

Comments
 (0)