docs: private static LottieTask<LottieComposition> cache(
            @Nullable final String cacheKey, Callable<LottieResult<LottieComposition>> callable) {
      final LottieComposition cachedComposition = cacheKey == null ? null : LottieCompositionCache.getInstance().get(cacheKey);
      if (cachedComposition != null) {
        return new LottieTask<>(new Callable<LottieResult<LottieComposition>>() {
          @Override
          public LottieResult<LottieComposition> call() {
            return new LottieResult<>(cachedComposition);
          }
        });
      }
      if (cacheKey != null && taskCache.containsKey(cacheKey)) {
        return taskCache.get(cacheKey);
      }
  
      LottieTask<LottieComposition> task = new LottieTask<>(callable);
      task.addListener(new LottieListener<LottieComposition>() {
        @Override public void onResult(LottieComposition result) {
          if (cacheKey != null) {
            LottieCompositionCache.getInstance().put(cacheKey, result);
          }
          taskCache.remove(cacheKey);
        }
      });
      task.addFailureListener(new LottieListener<Throwable>() {
        @Override public void onResult(Throwable result) {
          taskCache.remove(cacheKey);
        }
      });
      taskCache.put(cacheKey, task);
      return task;
    }