@WorkerThread
    private static void checkHillshadingTiles(final HashMap<String, String> requiredTiles, final ArrayList<Download> missingDownloads, final AtomicBoolean hasUnsupportedTiles) {
        // read tiles already stored
        final List<ContentStorage.FileInformation> files = ContentStorage.get().list(PersistableFolder.OFFLINE_MAP_SHADING.getFolder());
        for (ContentStorage.FileInformation fi : files) {
            if (fi.name.endsWith(HILLSHADING_TILE_FILEEXTENSION)) {
                requiredTiles.remove(fi.name);
            }
        }

        // read list of available tiles from the server, if necessary
        if (!requiredTiles.isEmpty()) {
            final Set<String> missingTileFolders = new HashSet<>(requiredTiles.values());
            final HashMap<String, Download> tiles = HillshadingTileDownloader.getInstance().getAvailableTiles(missingTileFolders);
            final Set<String> filenames = new HashSet<>(requiredTiles.keySet()); // work on copy to avoid concurrent modification
            for (String filename : filenames) {
                if (tiles.containsKey(filename)) {
                    missingDownloads.add(tiles.get(filename));
                } else {
                    requiredTiles.remove(filename);
                    hasUnsupportedTiles.set(true);
                }
            }
        }
    }
Applies given filter to cache list. Additionally, creates a second list additionally filtered by own/found/disabled caches if required
main/src/main/java/cgeo/geocaching/maps/MapUtils.java