Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7fd5ada9 authored by Svetoslav's avatar Svetoslav
Browse files

Page content sometimes disappears when scrolling a long doc in print preview.

The operations of the remote renderer have to be performed in order, open,
render some pages, close. One of the tasks was executed on the wrong executor
resuling in a race and an occassional bad state.

Also fixed a NPE if the preview list is flinged and then the user presses
back.

bug:17537922

Change-Id: I5048078ba2b875a2a8335f3a4324afaa34d014a2
parent 386831dc
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -526,7 +526,7 @@ public final class PageContentRepository {
                        callback.run();
                        callback.run();
                    }
                    }
                }
                }
            }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, (Void[]) null);
            }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
        }
        }


        public void close(final Runnable callback) {
        public void close(final Runnable callback) {
@@ -552,7 +552,7 @@ public final class PageContentRepository {
                        callback.run();
                        callback.run();
                    }
                    }
                }
                }
            }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null);
            }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
        }
        }


        public void destroy() {
        public void destroy() {
@@ -571,7 +571,7 @@ public final class PageContentRepository {
                    mPageContentCache.invalidate();
                    mPageContentCache.invalidate();
                    mPageContentCache.clear();
                    mPageContentCache.clear();
                }
                }
            }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, (Void[]) null);
            }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
        }
        }


        public void startPreload(int firstShownPage, int lastShownPage, RenderSpec renderSpec) {
        public void startPreload(int firstShownPage, int lastShownPage, RenderSpec renderSpec) {
@@ -687,7 +687,7 @@ public final class PageContentRepository {
            // Oh well, we will have work to do...
            // Oh well, we will have work to do...
            renderTask = new RenderPageTask(pageIndex, renderSpec, callback);
            renderTask = new RenderPageTask(pageIndex, renderSpec, callback);
            mPageToRenderTaskMap.put(pageIndex, renderTask);
            mPageToRenderTaskMap.put(pageIndex, renderTask);
            renderTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, (Void[]) null);
            renderTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
        }
        }


        public void cancelRendering(int pageIndex) {
        public void cancelRendering(int pageIndex) {
+0 −1
Original line number Original line Diff line number Diff line
@@ -275,7 +275,6 @@ public final class PageAdapter extends Adapter implements
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View page = mLayoutInflater.inflate(R.layout.preview_page, parent, false);
        View page = mLayoutInflater.inflate(R.layout.preview_page, parent, false);
        ViewHolder holder = new MyViewHolder(page);
        ViewHolder holder = new MyViewHolder(page);
        holder.setIsRecyclable(true);
        return holder;
        return holder;
    }
    }


+1 −1
Original line number Original line Diff line number Diff line
@@ -953,7 +953,7 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
            // When the update is done we update the print preview.
            // When the update is done we update the print preview.
            mProgressMessageController.post();
            mProgressMessageController.post();
            return true;
            return true;
        } else  {
        } else if (!willUpdate) {
            // Update preview.
            // Update preview.
            updatePrintPreviewController(false);
            updatePrintPreviewController(false);
        }
        }
+3 −4
Original line number Original line Diff line number Diff line
@@ -77,6 +77,7 @@ class PrintPreviewController implements MutexFileProvider.OnReleaseRequestCallba
        mRecyclerView = (RecyclerView) activity.findViewById(R.id.preview_content);
        mRecyclerView = (RecyclerView) activity.findViewById(R.id.preview_content);
        mRecyclerView.setLayoutManager(mLayoutManger);
        mRecyclerView.setLayoutManager(mLayoutManger);
        mRecyclerView.setAdapter(mPageAdapter);
        mRecyclerView.setAdapter(mPageAdapter);
        mRecyclerView.setItemViewCacheSize(0);
        mPreloadController = new PreloadController(mRecyclerView);
        mPreloadController = new PreloadController(mRecyclerView);
        mRecyclerView.setOnScrollListener(mPreloadController);
        mRecyclerView.setOnScrollListener(mPreloadController);


@@ -348,8 +349,7 @@ class PrintPreviewController implements MutexFileProvider.OnReleaseRequestCallba


        public void startPreloadContent() {
        public void startPreloadContent() {
            PageAdapter pageAdapter = (PageAdapter) mRecyclerView.getAdapter();
            PageAdapter pageAdapter = (PageAdapter) mRecyclerView.getAdapter();

            if (pageAdapter != null && pageAdapter.isOpened()) {
            if (pageAdapter.isOpened()) {
                PageRange shownPages = computeShownPages();
                PageRange shownPages = computeShownPages();
                if (shownPages != null) {
                if (shownPages != null) {
                    pageAdapter.startPreloadContent(shownPages);
                    pageAdapter.startPreloadContent(shownPages);
@@ -359,8 +359,7 @@ class PrintPreviewController implements MutexFileProvider.OnReleaseRequestCallba


        public void stopPreloadContent() {
        public void stopPreloadContent() {
            PageAdapter pageAdapter = (PageAdapter) mRecyclerView.getAdapter();
            PageAdapter pageAdapter = (PageAdapter) mRecyclerView.getAdapter();

            if (pageAdapter != null && pageAdapter.isOpened()) {
            if (pageAdapter.isOpened()) {
                pageAdapter.stopPreloadContent();
                pageAdapter.stopPreloadContent();
            }
            }
        }
        }
+2 −2
Original line number Original line Diff line number Diff line
@@ -52,12 +52,12 @@ public class PageContentView extends View


    @Override
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        mContentRequested = false;
        requestPageContentIfNeeded();
        requestPageContentIfNeeded();
    }
    }


    @Override
    @Override
    public void onPageContentAvailable(BitmapDrawable content) {
    public void onPageContentAvailable(BitmapDrawable content) {
        assert (getBackground() != content);
        setBackground(content);
        setBackground(content);
    }
    }


@@ -70,7 +70,7 @@ public class PageContentView extends View
        final boolean providerChanged = (mProvider == null)
        final boolean providerChanged = (mProvider == null)
                ? provider != null : !mProvider.equals(provider);
                ? provider != null : !mProvider.equals(provider);
        final boolean loadingDrawableChanged = (mEmptyState == null)
        final boolean loadingDrawableChanged = (mEmptyState == null)
                ? mEmptyState != null : !mEmptyState.equals(emptyState);
                ? emptyState != null : !mEmptyState.equals(emptyState);
        final boolean mediaSizeChanged = (mMediaSize == null)
        final boolean mediaSizeChanged = (mMediaSize == null)
                ? mediaSize != null : !mMediaSize.equals(mediaSize);
                ? mediaSize != null : !mMediaSize.equals(mediaSize);
        final boolean marginsChanged = (mMinMargins == null)
        final boolean marginsChanged = (mMinMargins == null)