feat: improve audio track sorting, add prefer_descriptive_audio option
This commit is contained in:
parent
de7872d8f2
commit
208887d538
4 changed files with 39 additions and 25 deletions
|
|
@ -233,33 +233,16 @@ public final class ListHelper {
|
|||
// Fall back to English if the preferred language was not found
|
||||
final String preferredLanguageOrEnglish =
|
||||
hasPreferredLanguage ? preferredLanguage : Locale.ENGLISH.getISO3Language();
|
||||
final SharedPreferences preferences =
|
||||
PreferenceManager.getDefaultSharedPreferences(context);
|
||||
final boolean preferDescriptiveAudio =
|
||||
preferences.getBoolean(context.getString(R.string.prefer_descriptive_audio_key),
|
||||
false);
|
||||
final Comparator<AudioStream> trackCmp =
|
||||
getAudioTrackComparator(preferredLanguageOrEnglish, preferDescriptiveAudio);
|
||||
|
||||
// Sort collected streams
|
||||
return collectedStreams.values().stream()
|
||||
.sorted((s1, s2) -> {
|
||||
// Preferred language comes first
|
||||
if (s1.getAudioLocale() != null
|
||||
&& s1.getAudioLocale().getISO3Language()
|
||||
.equals(preferredLanguageOrEnglish)) {
|
||||
return -1;
|
||||
}
|
||||
if (s2.getAudioLocale() != null
|
||||
&& s2.getAudioLocale().getISO3Language()
|
||||
.equals(preferredLanguageOrEnglish)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Sort audio tracks alphabetically
|
||||
if (s1.getAudioTrackName() != null) {
|
||||
if (s2.getAudioTrackName() != null) {
|
||||
return s1.getAudioTrackName().compareTo(s2.getAudioTrackName());
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
return collectedStreams.values().stream().sorted(trackCmp).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -680,4 +663,24 @@ public final class ListHelper {
|
|||
|
||||
return manager.isActiveNetworkMetered();
|
||||
}
|
||||
|
||||
private static Comparator<AudioStream> getAudioTrackComparator(
|
||||
final String preferredLanguage, final boolean preferDescriptiveAudio) {
|
||||
return Comparator.comparing(AudioStream::getAudioLocale, (o1, o2) -> Boolean.compare(
|
||||
o1 == null || !o1.getISO3Language().equals(preferredLanguage),
|
||||
o2 == null || !o2.getISO3Language().equals(preferredLanguage))
|
||||
).thenComparing(AudioStream::isDescriptive, (o1, o2) ->
|
||||
Boolean.compare(o1 ^ preferDescriptiveAudio, o2 ^ preferDescriptiveAudio)
|
||||
).thenComparing(AudioStream::getAudioTrackName, (o1, o2) -> {
|
||||
if (o1 != null) {
|
||||
if (o2 != null) {
|
||||
return o1.compareTo(o2);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue