From 1be88799ddaf1edeca7d58e73447697087713996 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sun, 13 Mar 2016 13:38:26 +0800 Subject: [PATCH] Fix GalleryView pause and resume --- .../hippo/ehviewer/gallery/gl/GalleryView.java | 18 ++++++++++-------- .../gallery/gl/PagerLayoutManager.java | 17 +++++++++++++++++ .../gallery/gl/ScrollLayoutManager.java | 15 +++++++++++++++ 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/gl/GalleryView.java b/app/src/main/java/com/hippo/ehviewer/gallery/gl/GalleryView.java index 0b06ec165..b95591706 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/gl/GalleryView.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/gl/GalleryView.java @@ -144,6 +144,7 @@ public class GalleryView extends GLView implements GestureRecognizer.Listener { private final List mArgsListTemp = new ArrayList<>(5); private final AtomicInteger mCurrentIndex = new AtomicInteger(GalleryPageView.INVALID_INDEX); + private boolean mPause; @SuppressWarnings("deprecation") public GalleryView(@NonNull Context context, @NonNull Adapter adapter, @@ -262,7 +263,7 @@ public class GalleryView extends GLView implements GestureRecognizer.Listener { } private void pauseInternal() { - detachLayoutManager(); + mPause = true; } public void pause() { @@ -270,11 +271,12 @@ public class GalleryView extends GLView implements GestureRecognizer.Listener { } private void resumeInternal() { - if (null == mPageTextTexture) { - // Not attached - return; + if (mPause) { + mPause = false; + if (null != mLayoutManager) { + mLayoutManager.bindUnloadedPage(); + } } - attachLayoutManager(); } public void resume() { @@ -831,9 +833,7 @@ public class GalleryView extends GLView implements GestureRecognizer.Listener { @RenderThread public GalleryPageView findPageByIndex(int id) { - GalleryUtils.assertInRenderThread(); - - if (mLayoutManager != null) { + if (!mPause && mLayoutManager != null) { return mLayoutManager.findPageByIndex(id); } else { return null; @@ -975,6 +975,8 @@ public class GalleryView extends GLView implements GestureRecognizer.Listener { public abstract void onDataChanged(); + public abstract void bindUnloadedPage(); + public abstract void onPageLeft(); public abstract void onPageRight(); diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/gl/PagerLayoutManager.java b/app/src/main/java/com/hippo/ehviewer/gallery/gl/PagerLayoutManager.java index b1d68f7c7..e80fc3fd7 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/gl/PagerLayoutManager.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/gl/PagerLayoutManager.java @@ -717,6 +717,23 @@ public class PagerLayoutManager extends GalleryView.LayoutManager { mGalleryView.requestFill(); } + @Override + public void bindUnloadedPage() { + if (null == mAdapter) { + return; + } + + if (null != mCurrent && !mCurrent.getImageView().isLoaded()) { + mAdapter.bind(mCurrent, mIndex); + } + if (null != mPrevious && !mPrevious.getImageView().isLoaded()) { + mAdapter.bind(mPrevious, mIndex - 1); + } + if (null != mNext && !mNext.getImageView().isLoaded()) { + mAdapter.bind(mNext, mIndex + 1); + } + } + @Override public void onPageLeft() { int size = mAdapter.size(); diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/gl/ScrollLayoutManager.java b/app/src/main/java/com/hippo/ehviewer/gallery/gl/ScrollLayoutManager.java index aca3210ad..33bd4a766 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/gl/ScrollLayoutManager.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/gl/ScrollLayoutManager.java @@ -653,6 +653,21 @@ public class ScrollLayoutManager extends GalleryView.LayoutManager { mGalleryView.requestFill(); } + @Override + public void bindUnloadedPage() { + if (null == mAdapter || 0 <= mPages.size()) { + return; + } + + int index = mIndex; + for (GalleryPageView page: mPages) { + if (!page.getImageView().isLoaded()) { + mAdapter.bind(page, index); + } + index++; + } + } + @Override public void onPageLeft() { int size = mAdapter.size();