Ejemplo n.º 1
0
  private void updateSlidingWindow() {
    // 1. Update the image window
    int start =
        Utils.clamp(mCurrentIndex - IMAGE_CACHE_SIZE / 2, 0, Math.max(0, mSize - IMAGE_CACHE_SIZE));
    int end = Math.min(mSize, start + IMAGE_CACHE_SIZE);

    if (mActiveStart == start && mActiveEnd == end) return;

    mActiveStart = start;
    mActiveEnd = end;

    // 2. Update the data window
    start =
        Utils.clamp(mCurrentIndex - DATA_CACHE_SIZE / 2, 0, Math.max(0, mSize - DATA_CACHE_SIZE));
    end = Math.min(mSize, start + DATA_CACHE_SIZE);
    if (mContentStart > mActiveStart
        || mContentEnd < mActiveEnd
        || Math.abs(start - mContentStart) > MIN_LOAD_COUNT) {
      for (int i = mContentStart; i < mContentEnd; ++i) {
        if (i < start || i >= end) {
          mData[i % DATA_CACHE_SIZE] = null;
        }
      }
      mContentStart = start;
      mContentEnd = end;
      if (mReloadTask != null) mReloadTask.notifyDirty();
    }
  }
Ejemplo n.º 2
0
  public void resume() {
    mIsActive = true;
    mSource.addContentListener(mSourceListener);
    updateImageCache();
    updateImageRequests();

    mReloadTask = new ReloadTask();
    mReloadTask.start();

    mPhotoView.notifyModelInvalidated();
  }
Ejemplo n.º 3
0
  public void setCurrentPhoto(Path path, int indexHint) {
    if (mItemPath == path) return;
    mItemPath = path;
    mCurrentIndex = indexHint;
    updateSlidingWindow();
    updateImageCache();
    fireModelInvalidated();

    // We need to reload content if the path doesn't match.
    MediaItem item = getCurrentMediaItem();
    if (item != null && item.getPath() != path) {
      if (mReloadTask != null) mReloadTask.notifyDirty();
    }
  }
Ejemplo n.º 4
0
  public void pause() {
    mIsActive = false;

    mReloadTask.terminate();
    mReloadTask = null;

    mSource.removeContentListener(mSourceListener);

    for (ImageEntry entry : mImageCache.values()) {
      if (entry.fullImageTask != null) entry.fullImageTask.cancel();
      if (entry.screenNailTask != null) entry.screenNailTask.cancel();
    }
    mImageCache.clear();
    mTileProvider.clear();
  }