package org.ebookdroid.core;
import org.ebookdroid.common.bitmaps.GLBitmaps;
import org.ebookdroid.common.bitmaps.ByteBufferManager;
import org.ebookdroid.ui.viewer.IViewController.InvalidateSizeReason;
import android.graphics.RectF;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
public class EventReset extends AbstractEvent {
private final Queue<EventReset> eventQueue;
protected PageTreeLevel level;
protected InvalidateSizeReason reason;
protected boolean clearPages;
EventReset(final Queue<EventReset> eventQueue) {
this.eventQueue = eventQueue;
}
void init(final AbstractViewController ctrl, final InvalidateSizeReason reason, final boolean clearPages) {
this.viewState = ViewState.get(ctrl);
this.ctrl = ctrl;
this.level = PageTreeLevel.getLevel(viewState.zoom);
this.reason = reason;
this.clearPages = clearPages;
}
void release() {
this.ctrl = null;
this.viewState = null;
this.level = null;
this.reason = null;
this.bitmapsToRecycle.clear();
this.nodesToDecode.clear();
eventQueue.offer(this);
}
/**
* {@inheritDoc}
*
* @see org.ebookdroid.core.AbstractEvent#process()
*/
@Override
public ViewState process() {
try {
if (clearPages) {
final List<GLBitmaps> bitmapsToRecycle = new ArrayList<GLBitmaps>();
for (final Page page : ctrl.model.getPages()) {
page.nodes.recycleAll(bitmapsToRecycle, true);
}
ByteBufferManager.release(bitmapsToRecycle);
}
if (reason != null) {
ctrl.invalidatePageSizes(reason, null);
ctrl.invalidateScroll();
viewState.update();
}
return super.process();
} finally {
release();
}
}
/**
* {@inheritDoc}
*
* @see org.ebookdroid.core.IEvent#process(org.ebookdroid.core.ViewState, org.ebookdroid.core.PageTree)
*/
@Override
public boolean process(final PageTree nodes) {
return process(nodes, level);
}
/**
* {@inheritDoc}
*
* @see org.ebookdroid.core.IEvent#process(org.ebookdroid.core.ViewState, org.ebookdroid.core.PageTreeNode)
*/
@Override
public boolean process(final PageTreeNode node) {
final RectF pageBounds = viewState.getBounds(node.page);
if (!viewState.isNodeKeptInMemory(node, pageBounds)) {
node.recycle(bitmapsToRecycle);
return false;
}
if (!node.holder.hasBitmaps()) {
node.decodePageTreeNode(nodesToDecode, viewState);
}
return true;
}
}