/*
   * TODO Should the disk requests use Strings? Or URIs?
   *
   * TODO Consider changing the List to a Set so that requests are not duplicated.
   */
  public void onPositionVisited(int position) {
    calculateDirection(position);
    RangesToCache ranges = calculateRanges(position);

    for (int i = ranges.diskCacheLowerIndex; i < ranges.diskCacheUpperIndex; i++) {
      List<String> precacheRequestUris = mPrecacheInformationProvider.getRequestsForDiskPrecache(i);
      precacheListToDisk(precacheRequestUris, position);
    }

    for (int i = ranges.memCacheLowerIndex; i < ranges.memCacheUpperIndex; i++) {
      List<PrecacheRequest> precacheRequests =
          mPrecacheInformationProvider.getRequestsForMemoryPrecache(i);
      precacheListToMemory(precacheRequests, position);
    }
  }
  private void calculateRangesForDown(int position, RangesToCache indices) {
    int count = mPrecacheInformationProvider.getCount();

    if (isFirstCalculation) {
      indices.memCacheLowerIndex = Math.min(count, position + 1);
    } else {
      indices.memCacheLowerIndex = Math.min(count, position + mMemCacheRange);
    }
    indices.memCacheUpperIndex = Math.min(count, position + 1 + mMemCacheRange);

    if (isFirstCalculation) {
      indices.diskCacheLowerIndex = Math.min(count, indices.memCacheUpperIndex);
    } else {
      indices.diskCacheLowerIndex =
          Math.min(count, indices.memCacheUpperIndex + mDiskCacheRange - 1);
    }
    indices.diskCacheUpperIndex = Math.min(count, indices.memCacheUpperIndex + mDiskCacheRange);

    isFirstCalculation = false;
  }