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
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user