1
0
mirror of https://github.com/TeamNewPipe/NewPipe synced 2025-11-28 04:35:15 +00:00

fix: ListHelper tests

This commit is contained in:
ThetaDev
2023-03-19 22:31:31 +01:00
parent 9b8ffdd2aa
commit 61a14765f3
2 changed files with 123 additions and 33 deletions

View File

@@ -222,7 +222,8 @@ public final class ListHelper {
final HashMap<String, AudioStream> collectedStreams = new HashMap<>();
final Comparator<AudioStream> cmp = getAudioStreamFormatComparator(context);
final Comparator<AudioStream> cmp =
getAudioStreamFormatComparator(isLimitingDataUsage(context));
for (final AudioStream stream : audioStreams) {
if (stream.getDeliveryMethod() == DeliveryMethod.TORRENT) {
@@ -422,7 +423,7 @@ public final class ListHelper {
* @param comparator The comparator used for determining the max/best/highest ranked value
* @return Index of audio stream that produces the highest ranked result or -1 if not found
*/
private static int getAudioIndexByHighestRank(@Nullable final MediaFormat targetedFormat,
static int getAudioIndexByHighestRank(@Nullable final MediaFormat targetedFormat,
@Nullable final List<AudioStream> audioStreams,
final Comparator<AudioStream> comparator) {
if (audioStreams == null || audioStreams.isEmpty()) {
@@ -634,12 +635,11 @@ public final class ListHelper {
/**
* Get a {@link Comparator} to compare {@link AudioStream}s by their format and bitrate.
*
* @param context App context
* @param limitDataUsage choose low bitrate audio stream
* @return Comparator
*/
private static Comparator<AudioStream> getAudioStreamFormatComparator(
@NonNull final Context context) {
final boolean limitDataUsage = isLimitingDataUsage(context);
final boolean limitDataUsage) {
final List<MediaFormat> formatRanking = limitDataUsage
? AUDIO_FORMAT_EFFICIENCY_RANKING : AUDIO_FORMAT_QUALITY_RANKING;
@@ -664,14 +664,32 @@ public final class ListHelper {
@NonNull final Context context) {
final SharedPreferences preferences =
PreferenceManager.getDefaultSharedPreferences(context);
final Locale preferredLanguage = Localization.getPreferredLocale(context);
final boolean preferOriginalAudio =
preferences.getBoolean(context.getString(R.string.prefer_original_audio_key),
false);
final boolean preferDescriptiveAudio =
preferences.getBoolean(context.getString(R.string.prefer_descriptive_audio_key),
false);
final String preferredLanguage = Localization.getPreferredLocale(context).getISO3Language();
return getAudioStreamComparator(preferredLanguage, preferOriginalAudio,
preferDescriptiveAudio, isLimitingDataUsage(context));
}
/**
* Get a {@link Comparator} to compare {@link AudioStream}s by their language, format
* and bitrate.
* @param preferredLanguage Preferred audio stream language
* @param preferOriginalAudio Get the original audio track regardless of its language
* @param preferDescriptiveAudio Prefer the descriptive audio track if available
* @param limitDataUsage choose low bitrate audio stream
* @return Comparator
*/
static Comparator<AudioStream> getAudioStreamComparator(final Locale preferredLanguage,
final boolean preferOriginalAudio,
final boolean preferDescriptiveAudio,
final boolean limitDataUsage) {
final String langCode = preferredLanguage.getISO3Language();
final List<AudioTrackType> trackTypeRanking = preferDescriptiveAudio
? AUDIO_TRACK_TYPE_RANKING_DESCRIPTIVE : AUDIO_TRACK_TYPE_RANKING;
@@ -683,13 +701,13 @@ public final class ListHelper {
return 0;
}).thenComparing(AudioStream::getAudioLocale,
Comparator.nullsFirst(Comparator.comparing(
locale -> locale.getISO3Language().equals(preferredLanguage))))
locale -> locale.getISO3Language().equals(langCode))))
.thenComparing(AudioStream::getAudioTrackType,
Comparator.nullsLast(Comparator.comparingInt(trackTypeRanking::indexOf)))
.thenComparing(AudioStream::getAudioLocale,
Comparator.nullsFirst(Comparator.comparing(
locale -> locale.getISO3Language().equals(
Locale.ENGLISH.getISO3Language()))))
.thenComparing(getAudioStreamFormatComparator(context));
.thenComparing(getAudioStreamFormatComparator(limitDataUsage));
}
}