/**
   * Rebuild the preview
   *
   * @param forceRepaint if true, a component repaint will be issued
   */
  private void rebuild(boolean forceRepaint) {
    try {
      Configuration configuration = myContext.getConfiguration();
      int minApiLevel =
          configuration.getTarget() != null
              ? configuration.getTarget().getVersion().getApiLevel()
              : Integer.MAX_VALUE;
      ThemePreviewBuilder builder =
          new ThemePreviewBuilder()
              .setBackgroundColor(getBackground())
              .addAllComponents(ThemePreviewBuilder.AVAILABLE_BASE_COMPONENTS)
              .addAllComponents(myCustomComponents)
              .addComponentFilter(new ThemePreviewBuilder.SearchFilter(mySearchTerm))
              .addComponentFilter(new ThemePreviewBuilder.ApiLevelFilter(minApiLevel))
              .addComponentFilter(myGroupFilter);

      myIsAppCompatTheme = isAppCompatTheme(configuration);
      if (myIsAppCompatTheme) {
        builder
            .addComponentFilter(mySupportReplacementsFilter)
            .addAllComponents(mySupportLibraryComponents);
      }
      myAndroidPreviewPanel.setDocument(builder.build());

      if (forceRepaint) {
        repaint();
      }
    } catch (ParserConfigurationException e) {
      LOG.error("Unable to generate dynamic theme preview", e);
    }
  }