@Override
    public void onCacheTap(final INamedGeoCoordinate waypoint) {
        if (waypoint == null) {
            return;
        }

        final CoordinateType coordType = waypoint.getCoordType();

        if (coordType == CoordinateType.CACHE && StringUtils.isNotBlank(waypoint.getGeocode())) {
            final Geocache cache = DataStore.loadCache(waypoint.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB);
            if (cache != null) {
                CGeoMap.markCacheAsDirty(cache.getGeocode());
                sheetInfo = new UnifiedMapViewModel.SheetInfo(cache.getGeocode(), 0);
                activity.sheetShowDetails(sheetInfo);
            }
            return;
        }

        if (coordType == CoordinateType.WAYPOINT && !((Waypoint) waypoint).isNewWaypoint()) {
            CGeoMap.markCacheAsDirty(waypoint.getGeocode());
            sheetInfo = new UnifiedMapViewModel.SheetInfo(waypoint.getGeocode(), ((Waypoint) waypoint).getId());
            activity.sheetShowDetails(sheetInfo);
        }
    }
Thread to Display (down)loaded caches. Started by {@link LoadRunnable} and {@link DownloadRunnable}
main/src/main/java/cgeo/geocaching/maps/CGeoMap.java