@NonNull
    private InternalImageData loadImageFromStorage(final String url, @NonNull final String pseudoGeocode, final boolean forceKeep) {
        try {
            final File file = LocalStorage.getGeocacheDataFile(pseudoGeocode, url, true, false);
            final ImmutableTriple<Bitmap, Metadata, Boolean> image = loadCachedImage(file, forceKeep);
            if (image.right || image.left != null) {
                return new InternalImageData(image.left, null, image.middle, Uri.fromFile(file), image.right);
            }
        } catch (final Exception e) {
            Log.w("HtmlImage.loadImageFromStorage", e);
        }
        return new InternalImageData(null, null, null, null, false);
    }
Load an image from primary or secondary storage.

@param url           the image URL
@param pseudoGeocode the geocode or the shared name
@param forceKeep     keep the image if it is there, without checking its freshness
@return A pair whose first element is the bitmap if available, and the second one is {@code true} if the image is present and fresh enough.
main/src/main/java/cgeo/geocaching/network/HtmlImage.java