From 00dda049ea01901f7584565d71c216a73908866c Mon Sep 17 00:00:00 2001 From: gyumin Date: Mon, 6 Sep 2021 01:37:11 +0100 Subject: [PATCH] Fix FlagSet.equals on API levels below 24 #minor-release PiperOrigin-RevId: 395004645 --- RELEASENOTES.md | 1 + .../android/exoplayer2/util/FlagSet.java | 26 +++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 79174fc756..0f00e6f670 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -13,6 +13,7 @@ `ForwardingPlayer`. * Remove `ExoPlayerLibraryInfo.GL_ASSERTIONS_ENABLED`. Use `GlUtil.glAssertionsEnabled` instead. + * 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(); + } } }