public static void selectThemeOptions(@NonNull final Activity activity, final int mapType, @NonNull final GoogleMap map, @Nullable final ScaleDrawer scaleDrawer) {
        final GoogleMapsTheme theme = GoogleMapsTheme.getCurrent();
        //find out which features should be preselected
        final Set<GoogleMapsThemeOption> selected = new HashSet<>();
        for (GoogleMapsThemeOption option : GoogleMapsThemeOption.values()) {
            if (option.isEnabled(theme)) {
                selected.add(option);
            }
        }
        //find out which features should be presented for user selection
        final List<GoogleMapsThemeOption> options = new ArrayList<>();
        for (GoogleMapsThemeOption option : GoogleMapsThemeOption.values()) {
            if (option.validForMapType(mapType)) {
                options.add(option);
            }
        }

        //construct dialog
        final SimpleDialog.ItemSelectModel<GoogleMapsThemeOption> model = new SimpleDialog.ItemSelectModel<>();
        model
            .setItems(options)
            .setDisplayMapper((l) -> TextParam.text(l.getLabel()))
            .setChoiceMode(SimpleItemListModel.ChoiceMode.MULTI_CHECKBOX)
            .setSelectedItems(selected)
            .activateGrouping(l -> LocalizationUtils.getString(l.isThemeSpecific ? R.string.google_maps_option_group_theme : R.string.google_maps_option_group_map))
            .setGroupDisplayMapper(gi -> TextParam.text("**" + gi.getGroup() + "**").setMarkdown(true));

        SimpleDialog.of(activity).setTitle(R.string.map_theme_options).selectMultiple(model, selectedOptions -> {
            for (GoogleMapsThemeOption option : GoogleMapsThemeOption.values()) {
                option.setEnabled(theme, selectedOptions.contains(option));
            }
            setCurrentThemeOnMap(map, scaleDrawer);
        });
    }
Open theme selection dialog for GM map view, store result in settings and applies it to map
main/src/main/java/cgeo/geocaching/unifiedmap/googlemaps/GoogleMapsThemeHelper.java