package org.wikipedia.analytics;
import android.support.annotation.NonNull;
import org.json.JSONObject;
import org.wikipedia.WikipediaApp;
import org.wikipedia.util.DimenUtil;
import org.wikipedia.util.ReleaseUtil;
public class PageScrollFunnel extends TimedFunnel {
private static final String SCHEMA_NAME = "MobileWikiAppPageScroll";
private static final int REV_ID = 14591606;
private final int pageId;
private int viewportHeight;
private int pageHeight;
private int scrollFluxDown;
private int scrollFluxUp;
private int maxScrollY;
public PageScrollFunnel(WikipediaApp app, int pageId) {
super(app, SCHEMA_NAME, REV_ID, ReleaseUtil.isProdRelease() ? Funnel.SAMPLE_LOG_100 : Funnel.SAMPLE_LOG_ALL);
this.pageId = pageId;
}
@Override protected void preprocessSessionToken(@NonNull JSONObject eventData) { }
public void onPageScrolled(int oldScrollY, int scrollY, boolean isHumanScroll) {
if (isHumanScroll) {
if (scrollY > oldScrollY) {
scrollFluxDown += (scrollY - oldScrollY);
} else {
scrollFluxUp += (oldScrollY - scrollY);
}
}
maxScrollY = Math.max(maxScrollY, scrollY);
}
public void setPageHeight(int height) {
this.pageHeight = (int) (height * DimenUtil.getDensityScalar());
}
public void setViewportHeight(int height) {
this.viewportHeight = height;
}
public void logDone() {
log(
"pageID", pageId,
"pageHeight", (int) (pageHeight / DimenUtil.getDensityScalar()),
"scrollFluxDown", (int) (scrollFluxDown / DimenUtil.getDensityScalar()),
"scrollFluxUp", (int) (scrollFluxUp / DimenUtil.getDensityScalar()),
"maxPercentViewed", getMaxPercentViewed()
);
}
private int getMaxPercentViewed() {
final int maxPercent = 100;
return Math.min(maxPercent, pageHeight == 0 ? 0 : ((maxScrollY + viewportHeight) * maxPercent / pageHeight));
}
}