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 { ...@@ -219,6 +219,8 @@ public class DefaultTimeBar extends View implements TimeBar {
private @Nullable long[] adGroupTimesMs; private @Nullable long[] adGroupTimesMs;
private @Nullable boolean[] playedAdGroups; private @Nullable boolean[] playedAdGroups;
private int densityDpi;
/** Creates a new time bar. */ /** Creates a new time bar. */
// Suppress warnings due to usage of View methods in the constructor. // Suppress warnings due to usage of View methods in the constructor.
@SuppressWarnings("nullness:method.invocation.invalid") @SuppressWarnings("nullness:method.invocation.invalid")
...@@ -242,6 +244,7 @@ public class DefaultTimeBar extends View implements TimeBar { ...@@ -242,6 +244,7 @@ public class DefaultTimeBar extends View implements TimeBar {
// Calculate the dimensions and paints for drawn elements. // Calculate the dimensions and paints for drawn elements.
Resources res = context.getResources(); Resources res = context.getResources();
DisplayMetrics displayMetrics = res.getDisplayMetrics(); DisplayMetrics displayMetrics = res.getDisplayMetrics();
densityDpi = displayMetrics.densityDpi;
fineScrubYThreshold = dpToPx(displayMetrics, FINE_SCRUB_Y_THRESHOLD_DP); fineScrubYThreshold = dpToPx(displayMetrics, FINE_SCRUB_Y_THRESHOLD_DP);
int defaultBarHeight = dpToPx(displayMetrics, DEFAULT_BAR_HEIGHT_DP); int defaultBarHeight = dpToPx(displayMetrics, DEFAULT_BAR_HEIGHT_DP);
int defaultTouchTargetHeight = dpToPx(displayMetrics, DEFAULT_TOUCH_TARGET_HEIGHT_DP); int defaultTouchTargetHeight = dpToPx(displayMetrics, DEFAULT_TOUCH_TARGET_HEIGHT_DP);
...@@ -447,6 +450,11 @@ public class DefaultTimeBar extends View implements TimeBar { ...@@ -447,6 +450,11 @@ public class DefaultTimeBar extends View implements TimeBar {
update(); update();
} }
@Override
public int getTimeBarWidth() {
return pxToDp(densityDpi, getWidth());
}
// View methods. // View methods.
@Override @Override
...@@ -835,4 +843,8 @@ public class DefaultTimeBar extends View implements TimeBar { ...@@ -835,4 +843,8 @@ public class DefaultTimeBar extends View implements TimeBar {
private static int dpToPx(DisplayMetrics displayMetrics, int dps) { private static int dpToPx(DisplayMetrics displayMetrics, int dps) {
return (int) (dps * displayMetrics.density + 0.5f); 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 { ...@@ -196,6 +196,9 @@ public class PlayerControlView extends FrameLayout {
public static final int MAX_WINDOWS_FOR_MULTI_WINDOW_TIME_BAR = 100; 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 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 ComponentListener componentListener;
private final View previousButton; private final View previousButton;
...@@ -835,13 +838,21 @@ public class PlayerControlView extends FrameLayout { ...@@ -835,13 +838,21 @@ public class PlayerControlView extends FrameLayout {
if (playbackSpeed <= 0.1f) { if (playbackSpeed <= 0.1f) {
delayMs = 1000; delayMs = 1000;
} else if (playbackSpeed <= 5f) { } 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); long mediaTimeDelayMs = mediaTimeUpdatePeriodMs - (position % mediaTimeUpdatePeriodMs);
if (mediaTimeDelayMs < (mediaTimeUpdatePeriodMs / 5)) { if (mediaTimeDelayMs < (mediaTimeUpdatePeriodMs / 5)) {
mediaTimeDelayMs += mediaTimeUpdatePeriodMs; 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 = delayMs = playbackSpeed == 1 ? mediaTimeDelayMs : (long) (mediaTimeDelayMs / playbackSpeed);
playbackSpeed == 1 ? mediaTimeDelayMs : (long) (mediaTimeDelayMs / playbackSpeed);
} else { } else {
delayMs = 200; delayMs = 200;
} }
......
...@@ -98,6 +98,13 @@ public interface TimeBar { ...@@ -98,6 +98,13 @@ public interface TimeBar {
int adGroupCount); int adGroupCount);
/** /**
* Get width of time bar in dps
*
* @return Width of time bar in dps
*/
int getTimeBarWidth();
/**
* Listener for scrubbing events. * Listener for scrubbing events.
*/ */
interface OnScrubListener { interface OnScrubListener {
......
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