private void debugActiveHelper()

in flutter-idea/src/io/flutter/view/FlutterView.java [709:818]


  private void debugActiveHelper(FlutterApp app, @Nullable InspectorService inspectorService) {
    final ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(myProject);
    if (!(toolWindowManager instanceof ToolWindowManagerEx)) {
      return;
    }

    final ToolWindow toolWindow = toolWindowManager.getToolWindow(FlutterView.TOOL_WINDOW_ID);
    if (toolWindow == null) {
      return;
    }

    if (toolWindow.isAvailable()) {
      updateToolWindowVisibility(toolWindow);
    }
    else {
      toolWindow.setAvailable(true, () -> {
        updateToolWindowVisibility(toolWindow);
      });
    }

    if (emptyContent != null) {
      final ContentManager contentManager = toolWindow.getContentManager();
      contentManager.removeContent(emptyContent, true);
      emptyContent = null;
    }

    toolWindow.setIcon(ExecutionUtil.getLiveIndicator(FlutterIcons.Flutter_13));

    if (FlutterSettings.getInstance().isEnableEmbeddedBrowsers()) {
      if (jxBrowserManager.getStatus().equals(JxBrowserStatus.INSTALLED)) {
        // Reset the URL since we may have an outdated one from a previous app run.
        embeddedBrowserOptional().ifPresent(EmbeddedBrowser::resetUrl);
      }
      if (toolWindow.isVisible()) {
        displayEmbeddedBrowser(app, inspectorService, toolWindow);
      }
      else {
        if (toolWindowListener == null) {
          toolWindowListener = new FlutterViewToolWindowManagerListener(myProject, toolWindow);
        }
        // If the window isn't visible yet, only executed embedded browser steps when it becomes visible.
        toolWindowListener.updateOnWindowFirstVisible(() -> {
          displayEmbeddedBrowser(app, inspectorService, toolWindow);
        });
      }

      return;
    }

    listenForRenderTreeActivations(toolWindow);

    addInspectorViewContent(app, inspectorService, toolWindow);

    app.getVmService().addVmServiceListener(new VmServiceListenerAdapter() {
      @Override
      public void connectionOpened() {
        onAppChanged(app);
      }

      @Override
      public void received(String streamId, Event event) {
        if (StringUtil.equals(streamId, VmService.EXTENSION_STREAM_ID)) {
          if (StringUtil.equals("Flutter.Frame", event.getExtensionKind())) {
            handleFlutterFrame(app);
          }
        }
      }

      @Override
      public void connectionClosed() {
        ApplicationManager.getApplication().invokeLater(() -> {
          if (inspectorService != null) {
            Disposer.dispose(inspectorService);
          }

          if (toolWindow.isDisposed()) return;
          final ContentManager contentManager = toolWindow.getContentManager();
          onAppChanged(app);
          final PerAppState state = perAppViewState.remove(app);
          if (state != null) {
            if (state.content != null) {
              contentManager.removeContent(state.content, true);
            }
            state.dispose();
          }
          if (perAppViewState.isEmpty()) {
            // No more applications are running.
            updateForEmptyContent(toolWindow);
          }
        });
      }
    });

    onAppChanged(app);

    app.addStateListener(new FlutterApp.FlutterAppListener() {
      public void notifyAppRestarted() {
        // When we get a restart finished event, queue up a notification to the flutter view
        // actions. We don't notify right away because the new isolate can take a little
        // while to start up. We wait until we get the first frame event, which is
        // enough of an indication that the isolate and flutter framework are initialized
        // to where they can receive service calls (for example, calls to restore various
        // framework debugging settings).
        final PerAppState state = getStateForApp(app);
        if (state != null) {
          state.sendRestartNotificationOnNextFrame = true;
        }
      }
    });
  }