public static void setCurrentThemeOnMap(@NonNull final GoogleMap map, @Nullable final ScaleDrawer scaleDrawer) {
        final GoogleMapsTheme theme = GoogleMapsTheme.getCurrent();

        // -- Apply Theme options
        ArrayNode style;
        if (theme.isInternalColorScheme) {
            map.setMapColorScheme(theme.jsonRes);
            style = JsonUtils.createArrayNode();
        } else {
            style = theme.getMapStyleOptions();
        }

        //1. find out if ALL features are enabled
        boolean allThemeOptionsEnabled = true;
        for (GoogleMapsThemeOption option : GoogleMapsThemeOption.values()) {
            if (option.getFeatureName() != null && !option.isEnabled(theme)) {
                allThemeOptionsEnabled = false;
                break;
            }
        }

        if (allThemeOptionsEnabled) {
            //2. if yes, then simply set all features to visible
            style = addStyler(style, GoogleMapsThemeOption.SHOW_FEATURE_THEME, true);
        } else {
            //3. if theme options should not be considered, then reset visibilities to "all off" for a stark
            if (!GoogleMapsThemeOption.SHOW_FEATURE_THEME.isEnabled(theme)) {
                style = addStyler(style, GoogleMapsThemeOption.SHOW_FEATURE_THEME, false);
            }
            //4. then turn on visibilities for all selected features
            for (GoogleMapsThemeOption option : GoogleMapsThemeOption.values()) {
                if (option.getFeatureName() == null || !option.isEnabled(theme)) {
                    continue;
                }
                style = addStyler(style, option, true);
            }
        }
        //5. apply map style constructed above to Google Map
        map.setMapStyle(style == null ? null : new MapStyleOptions(JsonUtils.nodeToString(style)));
        //6. adjust scaleDrawer as needed
        if (scaleDrawer != null) {
            scaleDrawer.setNeedsInvertedColors(theme.needsInvertedColors);
        }

        // --  Apply map options
        map.setTrafficEnabled(GoogleMapsThemeOption.TRAFFIC.isEnabled(theme));
        map.setBuildingsEnabled(GoogleMapsThemeOption.BUILDINGS.isEnabled(theme));
    }
apply theme options to given GM as currently stored in settings
main/src/main/java/cgeo/geocaching/unifiedmap/googlemaps/GoogleMapsThemeHelper.java