package org.wikipedia.analytics; import android.support.annotation.NonNull; import org.json.JSONObject; import org.wikipedia.WikipediaApp; import org.wikipedia.dataclient.WikiSite; import java.util.concurrent.TimeUnit; /*package*/ abstract class TimedFunnel extends Funnel { private long startTime; /*package*/ TimedFunnel(WikipediaApp app, String schemaName, int revision, int sampleRate) { this(app, schemaName, revision, sampleRate, null); } /*package*/ TimedFunnel(WikipediaApp app, String schemaName, int revision, int sampleRate, WikiSite wiki) { super(app, schemaName, revision, sampleRate, wiki); startTime = System.currentTimeMillis(); } @Override protected JSONObject preprocessData(@NonNull JSONObject eventData) { preprocessData(eventData, getDurationFieldName(), getDurationSeconds()); return super.preprocessData(eventData); } /** Override me for deviant implementations. */ protected String getDurationFieldName() { return "timeSpent"; } protected void resetDuration() { startTime = System.currentTimeMillis(); } private long getDuration() { return System.currentTimeMillis() - startTime; } private long getDurationSeconds() { return TimeUnit.MILLISECONDS.toSeconds(getDuration()); } }