docs: @NonNull
      protected InputStream openFile(@NonNull Artwork artwork) throws IOException {
          Context context = getContext();
          if (context == null) {
              throw new IOException();
          }
          Uri persistentUri = artwork.getPersistentUri();
          if (persistentUri == null) {
              throw new IllegalStateException("Got null persistent URI for " + artwork + ". +" +
                      "The default implementation of openFile() requires a persistent URI. " +
                      "You must override this method or write the binary data directly " +
                      "to the artwork's data file.");
          }
          String scheme = persistentUri.getScheme();
          if (scheme == null) {
              throw new IOException("Uri had no scheme");
          }
          InputStream in = null;
          if (ContentResolver.SCHEME_CONTENT.equals(scheme)
                  || ContentResolver.SCHEME_ANDROID_RESOURCE.equals(scheme)) {
              in = context.getContentResolver().openInputStream(persistentUri);
          } else if (ContentResolver.SCHEME_FILE.equals(scheme)) {
              List<String> segments = persistentUri.getPathSegments();
              if (segments != null && segments.size() > 1
                      && "android_asset".equals(segments.get(0))) {
                  StringBuilder assetPath = new StringBuilder();
                  for (int i = 1; i < segments.size(); i++) {
                      if (i > 1) {
                          assetPath.append("/");
                      }
                      assetPath.append(segments.get(i));
                  }
                  in = context.getAssets().open(assetPath.toString());
              } else {
                  in = new FileInputStream(new File(persistentUri.getPath()));
              }
          } else if ("http".equals(scheme) || "https".equals(scheme)) {
              URL url = new URL(persistentUri.toString());
              HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
              int responseCode = urlConnection.getResponseCode();
              if (!(responseCode >= 200 && responseCode < 300)) {
                  throw new IOException("HTTP error response " + responseCode);
              }
              in = urlConnection.getInputStream();
          }
          if (in == null) {
              throw new FileNotFoundException("Null input stream for URI: " + persistentUri);
          }
          return in;
      }