package de.danoeh.antennapod.core.util; import java.util.concurrent.TimeUnit; /** * This class calculates the proper rewind time after the pause and resume. * <p> * User might loose context if he/she pauses and resumes the media after longer time. * Media file should be "rewinded" x seconds after user resumes the playback. */ public class RewindAfterPauseUtils { private RewindAfterPauseUtils(){} public static final long ELAPSED_TIME_FOR_SHORT_REWIND = TimeUnit.MINUTES.toMillis(1); public static final long ELAPSED_TIME_FOR_MEDIUM_REWIND = TimeUnit.HOURS.toMillis(1); public static final long ELAPSED_TIME_FOR_LONG_REWIND = TimeUnit.DAYS.toMillis(1); public static final long SHORT_REWIND = TimeUnit.SECONDS.toMillis(3); public static final long MEDIUM_REWIND = TimeUnit.SECONDS.toMillis(10); public static final long LONG_REWIND = TimeUnit.SECONDS.toMillis(20); /** * @param currentPosition current position in a media file in ms * @param lastPlayedTime timestamp when was media paused * @return new rewinded position for playback in milliseconds */ public static int calculatePositionWithRewind(int currentPosition, long lastPlayedTime) { if (currentPosition > 0 && lastPlayedTime > 0) { long elapsedTime = System.currentTimeMillis() - lastPlayedTime; long rewindTime = 0; if (elapsedTime > ELAPSED_TIME_FOR_LONG_REWIND) { rewindTime = LONG_REWIND; } else if (elapsedTime > ELAPSED_TIME_FOR_MEDIUM_REWIND) { rewindTime = MEDIUM_REWIND; } else if (elapsedTime > ELAPSED_TIME_FOR_SHORT_REWIND) { rewindTime = SHORT_REWIND; } int newPosition = currentPosition - (int) rewindTime; return newPosition > 0 ? newPosition : 0; } else { return currentPosition; } } }