diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 10052d632e..48d25c8455 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -5,6 +5,7 @@ * Core Library: * Fix track selection in `StyledPlayerControlView` when using `ForwardingPlayer`. + * Fix `FlagSet#equals` on API levels below 24. * Extractors: * Support TS packets without PTS flag ([#9294](https://github.com/google/ExoPlayer/issues/9294)). diff --git a/library/common/src/main/java/com/google/android/exoplayer2/util/FlagSet.java b/library/common/src/main/java/com/google/android/exoplayer2/util/FlagSet.java index 6322114b90..282203ed56 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/util/FlagSet.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/util/FlagSet.java @@ -211,11 +211,33 @@ public final class FlagSet { return false; } FlagSet that = (FlagSet) o; - return flags.equals(that.flags); + if (Util.SDK_INT < 24) { + // SparseBooleanArray.equals() is not implemented on API levels below 24. + if (size() != that.size()) { + return false; + } + for (int i = 0; i < size(); i++) { + if (get(i) != that.get(i)) { + return false; + } + } + return true; + } else { + return flags.equals(that.flags); + } } @Override public int hashCode() { - return flags.hashCode(); + if (Util.SDK_INT < 24) { + // SparseBooleanArray.hashCode() is not implemented on API levels below 24. + int hashCode = size(); + for (int i = 0; i < size(); i++) { + hashCode = 31 * hashCode + get(i); + } + return hashCode; + } else { + return flags.hashCode(); + } } }