Page content sometimes missing in preview when scrolling.
Removed the restriction for the page content providers to be singletons as the RecyclerView may hold on views with providers and ask us to bind other views for the same page. Note that the views that RecyclerView is holding will be soon rebound or recycled just they are not at the time we bind other views for the same position. We were guarding against this but caused some pages not appearing sometimes on scrolling. Also now keeping the media size and magins of recycled page view (will be updated if needed on rebinding) or avoid changes of the background to null as setting it to not null later causes an undesired layout pass. bug:17537922 Change-Id: If029f6c413e15d4f5c1ba1ac5e4d52ad2cad5904
This commit is contained in:
committed by
Svetoslav Ganov
parent
a434bf303a
commit
0d2d9637ed
@@ -64,9 +64,6 @@ public final class PageContentRepository {
|
||||
|
||||
private final CloseGuard mCloseGuard = CloseGuard.get();
|
||||
|
||||
private final ArrayMap<Integer, PageContentProvider> mPageContentProviders =
|
||||
new ArrayMap<>();
|
||||
|
||||
private final AsyncRenderer mRenderer;
|
||||
|
||||
private RenderSpec mLastRenderSpec;
|
||||
@@ -141,10 +138,6 @@ public final class PageContentRepository {
|
||||
return mRenderer.getPageCount();
|
||||
}
|
||||
|
||||
public PageContentProvider peekPageContentProvider(int pageIndex) {
|
||||
return mPageContentProviders.get(pageIndex);
|
||||
}
|
||||
|
||||
public PageContentProvider acquirePageContentProvider(int pageIndex, View owner) {
|
||||
throwIfDestroyed();
|
||||
|
||||
@@ -152,15 +145,7 @@ public final class PageContentRepository {
|
||||
Log.i(LOG_TAG, "Acquiring provider for page: " + pageIndex);
|
||||
}
|
||||
|
||||
if (mPageContentProviders.get(pageIndex)!= null) {
|
||||
throw new IllegalStateException("Already acquired for page: " + pageIndex);
|
||||
}
|
||||
|
||||
PageContentProvider provider = new PageContentProvider(pageIndex, owner);
|
||||
|
||||
mPageContentProviders.put(pageIndex, provider);
|
||||
|
||||
return provider;
|
||||
return new PageContentProvider(pageIndex, owner);
|
||||
}
|
||||
|
||||
public void releasePageContentProvider(PageContentProvider provider) {
|
||||
@@ -170,10 +155,6 @@ public final class PageContentRepository {
|
||||
Log.i(LOG_TAG, "Releasing provider for page: " + provider.mPageIndex);
|
||||
}
|
||||
|
||||
if (mPageContentProviders.remove(provider.mPageIndex) == null) {
|
||||
throw new IllegalStateException("Not acquired");
|
||||
}
|
||||
|
||||
provider.cancelLoad();
|
||||
}
|
||||
|
||||
|
||||
@@ -274,8 +274,7 @@ public final class PageAdapter extends Adapter implements
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View page = mLayoutInflater.inflate(R.layout.preview_page, parent, false);
|
||||
ViewHolder holder = new MyViewHolder(page);
|
||||
return holder;
|
||||
return new MyViewHolder(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -313,14 +312,8 @@ public final class PageAdapter extends Adapter implements
|
||||
+ ", pageIndexInFile: " + pageIndexInFile);
|
||||
}
|
||||
|
||||
// OK, there are bugs in recycler view which tries to bind views
|
||||
// without recycling them which would give us a chance to clean up.
|
||||
PageContentProvider boundProvider = mPageContentRepository
|
||||
.peekPageContentProvider(pageIndexInFile);
|
||||
if (boundProvider != null) {
|
||||
PageContentView owner = (PageContentView) boundProvider.getOwner();
|
||||
owner.init(null, mEmptyState, mMediaSize, mMinMargins);
|
||||
mPageContentRepository.releasePageContentProvider(boundProvider);
|
||||
if (provider != null && provider.getPageIndex() != pageIndexInFile) {
|
||||
mPageContentRepository.releasePageContentProvider(provider);
|
||||
}
|
||||
|
||||
provider = mPageContentRepository.acquirePageContentProvider(
|
||||
@@ -731,7 +724,7 @@ public final class PageAdapter extends Adapter implements
|
||||
private void recyclePageView(PageContentView page, int pageIndexInAdapter) {
|
||||
PageContentProvider provider = page.getPageContentProvider();
|
||||
if (provider != null) {
|
||||
page.init(null, null, null, null);
|
||||
page.init(null, mEmptyState, mMediaSize, mMinMargins);
|
||||
mPageContentRepository.releasePageContentProvider(provider);
|
||||
}
|
||||
mBoundPagesInAdapter.remove(pageIndexInAdapter);
|
||||
|
||||
Reference in New Issue
Block a user