Make DefaultTimeBar exclude itself for gestures

Issue: #6685
PiperOrigin-RevId: 284736041
This commit is contained in:
olly 2019-12-10 11:26:41 +00:00 committed by Oliver Woodman
parent 76962d50f1
commit 5bead4acbb
2 changed files with 24 additions and 0 deletions

View File

@ -1,5 +1,10 @@
# Release notes # # Release notes #
### 2.11.1 (2019-12-20) ###
* UI: Exclude `DefaultTimeBar` region from system gesture detection
([#6685](https://github.com/google/ExoPlayer/issues/6685)).
### 2.11.0 (2019-12-11) ### ### 2.11.0 (2019-12-11) ###
* Core library: * Core library:

View File

@ -36,12 +36,15 @@ import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
import androidx.annotation.ColorInt; import androidx.annotation.ColorInt;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import java.util.Collections;
import java.util.Formatter; import java.util.Formatter;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.CopyOnWriteArraySet;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/** /**
* A time bar that shows a current position, buffered position, duration and ad markers. * A time bar that shows a current position, buffered position, duration and ad markers.
@ -199,6 +202,7 @@ public class DefaultTimeBar extends View implements TimeBar {
private int keyCountIncrement; private int keyCountIncrement;
private long keyTimeIncrement; private long keyTimeIncrement;
private int lastCoarseScrubXPosition; private int lastCoarseScrubXPosition;
@MonotonicNonNull private Rect lastExclusionRectangle;
private boolean scrubbing; private boolean scrubbing;
private long scrubPosition; private long scrubPosition;
@ -604,6 +608,9 @@ public class DefaultTimeBar extends View implements TimeBar {
seekBounds.set(seekLeft, barY, seekRight, barY + touchTargetHeight); seekBounds.set(seekLeft, barY, seekRight, barY + touchTargetHeight);
progressBar.set(seekBounds.left + scrubberPadding, progressY, progressBar.set(seekBounds.left + scrubberPadding, progressY,
seekBounds.right - scrubberPadding, progressY + barHeight); seekBounds.right - scrubberPadding, progressY + barHeight);
if (Util.SDK_INT >= 29) {
setSystemGestureExclusionRectsV29(width, height);
}
update(); update();
} }
@ -834,6 +841,18 @@ public class DefaultTimeBar extends View implements TimeBar {
} }
} }
@RequiresApi(29)
private void setSystemGestureExclusionRectsV29(int width, int height) {
if (lastExclusionRectangle != null
&& lastExclusionRectangle.width() == width
&& lastExclusionRectangle.height() == height) {
// Allocating inside onLayout is considered a DrawAllocation lint error, so avoid if possible.
return;
}
lastExclusionRectangle = new Rect(/* left= */ 0, /* top= */ 0, width, height);
setSystemGestureExclusionRects(Collections.singletonList(lastExclusionRectangle));
}
private String getProgressText() { private String getProgressText() {
return Util.getStringForTime(formatBuilder, formatter, position); return Util.getStringForTime(formatBuilder, formatter, position);
} }