Commit c905891d by Arnold Szabo

Taking into consideration the media's duration when updating the time bar

parent a6c1dbe1
......@@ -219,6 +219,8 @@ public class DefaultTimeBar extends View implements TimeBar {
private @Nullable long[] adGroupTimesMs;
private @Nullable boolean[] playedAdGroups;
private int densityDpi;
/** Creates a new time bar. */
// Suppress warnings due to usage of View methods in the constructor.
@SuppressWarnings("nullness:method.invocation.invalid")
......@@ -242,6 +244,7 @@ public class DefaultTimeBar extends View implements TimeBar {
// Calculate the dimensions and paints for drawn elements.
Resources res = context.getResources();
DisplayMetrics displayMetrics = res.getDisplayMetrics();
densityDpi = displayMetrics.densityDpi;
fineScrubYThreshold = dpToPx(displayMetrics, FINE_SCRUB_Y_THRESHOLD_DP);
int defaultBarHeight = dpToPx(displayMetrics, DEFAULT_BAR_HEIGHT_DP);
int defaultTouchTargetHeight = dpToPx(displayMetrics, DEFAULT_TOUCH_TARGET_HEIGHT_DP);
......@@ -447,6 +450,11 @@ public class DefaultTimeBar extends View implements TimeBar {
update();
}
@Override
public int getTimeBarWidth() {
return pxToDp(densityDpi, getWidth());
}
// View methods.
@Override
......@@ -835,4 +843,8 @@ public class DefaultTimeBar extends View implements TimeBar {
private static int dpToPx(DisplayMetrics displayMetrics, int dps) {
return (int) (dps * displayMetrics.density + 0.5f);
}
private static int pxToDp(int densityDpi, int px) {
return (int) (px / ((float) densityDpi / DisplayMetrics.DENSITY_DEFAULT));
}
}
......@@ -196,6 +196,9 @@ public class PlayerControlView extends FrameLayout {
public static final int MAX_WINDOWS_FOR_MULTI_WINDOW_TIME_BAR = 100;
private static final long MAX_POSITION_FOR_SEEK_TO_PREVIOUS = 3000;
private static final int DEFAULT_UPDATE_DP = 5;
private static final long MIN_UPDATE_FREQUENCY_MS = 50;
private static final long MAX_UPDATE_FREQUENCY_MS = 1000;
private final ComponentListener componentListener;
private final View previousButton;
......@@ -835,13 +838,21 @@ public class PlayerControlView extends FrameLayout {
if (playbackSpeed <= 0.1f) {
delayMs = 1000;
} else if (playbackSpeed <= 5f) {
long mediaTimeUpdatePeriodMs = 1000 / Math.max(1, Math.round(1 / playbackSpeed));
/*long mediaTimeUpdatePeriodMs = 1000 / Math.max(1, Math.round(1 / playbackSpeed));
long mediaTimeDelayMs = mediaTimeUpdatePeriodMs - (position % mediaTimeUpdatePeriodMs);
if (mediaTimeDelayMs < (mediaTimeUpdatePeriodMs / 5)) {
mediaTimeDelayMs += mediaTimeUpdatePeriodMs;
}*/
int timeBarWidth = timeBar.getTimeBarWidth();
int numberOfUpdates = timeBarWidth / DEFAULT_UPDATE_DP;
long mediaTimeDelayMs = duration / numberOfUpdates;
if (mediaTimeDelayMs < MIN_UPDATE_FREQUENCY_MS) {
mediaTimeDelayMs = MIN_UPDATE_FREQUENCY_MS;
} else if (mediaTimeDelayMs >= MAX_UPDATE_FREQUENCY_MS) {
mediaTimeDelayMs = MAX_UPDATE_FREQUENCY_MS;
}
delayMs =
playbackSpeed == 1 ? mediaTimeDelayMs : (long) (mediaTimeDelayMs / playbackSpeed);
delayMs = playbackSpeed == 1 ? mediaTimeDelayMs : (long) (mediaTimeDelayMs / playbackSpeed);
} else {
delayMs = 200;
}
......
......@@ -97,6 +97,13 @@ public interface TimeBar {
void setAdGroupTimesMs(@Nullable long[] adGroupTimesMs, @Nullable boolean[] playedAdGroups,
int adGroupCount);
/**
* Get width of time bar in dps
*
* @return Width of time bar in dps
*/
int getTimeBarWidth();
/**
* Listener for scrubbing events.
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment