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 Diff line number Diff line
@@ -526,7 +526,7 @@ public final class PageContentRepository {
                        callback.run();
                    }
                }
            }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, (Void[]) null);
            }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
        }

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

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

        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...
            renderTask = new RenderPageTask(pageIndex, renderSpec, callback);
            mPageToRenderTaskMap.put(pageIndex, renderTask);
            renderTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, (Void[]) null);
            renderTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
        }

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

+1 −1
Original line number 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.
            mProgressMessageController.post();
            return true;
        } else  {
        } else if (!willUpdate) {
            // Update preview.
            updatePrintPreviewController(false);
        }
+3 −4
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@ class PrintPreviewController implements MutexFileProvider.OnReleaseRequestCallba
        mRecyclerView = (RecyclerView) activity.findViewById(R.id.preview_content);
        mRecyclerView.setLayoutManager(mLayoutManger);
        mRecyclerView.setAdapter(mPageAdapter);
        mRecyclerView.setItemViewCacheSize(0);
        mPreloadController = new PreloadController(mRecyclerView);
        mRecyclerView.setOnScrollListener(mPreloadController);

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

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

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

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

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

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

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

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