From 85eedab1c48d0174edebdcf7989902c812f3ede7 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 22 May 2021 14:51:10 +0900 Subject: [PATCH] replace codec class with an enum --- .../adapter/DirectPlayCodecAdapter.java | 30 ++++++++------ .../DirectPlayPreferenceDialog.java | 2 +- .../com/dkanada/gramophone/model/Codec.java | 23 +++++++++++ .../gramophone/model/DirectPlayCodec.java | 31 -------------- .../dkanada/gramophone/util/MusicUtil.java | 22 ++++------ .../gramophone/util/PreferenceUtil.java | 41 +++++-------------- 6 files changed, 59 insertions(+), 90 deletions(-) create mode 100644 app/src/main/java/com/dkanada/gramophone/model/Codec.java delete mode 100644 app/src/main/java/com/dkanada/gramophone/model/DirectPlayCodec.java diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/DirectPlayCodecAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/DirectPlayCodecAdapter.java index 6c5fa55d..049948fb 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/DirectPlayCodecAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/DirectPlayCodecAdapter.java @@ -10,15 +10,19 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.dkanada.gramophone.R; -import com.dkanada.gramophone.model.DirectPlayCodec; +import com.dkanada.gramophone.model.Codec; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; public class DirectPlayCodecAdapter extends RecyclerView.Adapter { - private final List directPlayCodecs; + private final List codecs; - public DirectPlayCodecAdapter(List directPlayCodecs) { - this.directPlayCodecs = directPlayCodecs; + public DirectPlayCodecAdapter(List codecs) { + this.codecs = Arrays.stream(Codec.values()) + .peek(codec -> codec.select = codecs.contains(codec)) + .collect(Collectors.toList()); } @NonNull @@ -31,25 +35,25 @@ public class DirectPlayCodecAdapter extends RecyclerView.Adapter { - directPlayCodec.selected = !directPlayCodec.selected; - holder.checkbox.setChecked(directPlayCodec.selected); + codec.select = !codec.select; + holder.checkbox.setChecked(codec.select); }); } @Override public int getItemCount() { - return directPlayCodecs.size(); + return codecs.size(); } - public List getDirectPlayCodecs() { - return directPlayCodecs; + public List getCodecs() { + return codecs.stream().filter(codec -> codec.select).collect(Collectors.toList()); } public static class ViewHolder extends RecyclerView.ViewHolder { diff --git a/app/src/main/java/com/dkanada/gramophone/dialogs/preferences/DirectPlayPreferenceDialog.java b/app/src/main/java/com/dkanada/gramophone/dialogs/preferences/DirectPlayPreferenceDialog.java index 9189cba6..8d5c3578 100644 --- a/app/src/main/java/com/dkanada/gramophone/dialogs/preferences/DirectPlayPreferenceDialog.java +++ b/app/src/main/java/com/dkanada/gramophone/dialogs/preferences/DirectPlayPreferenceDialog.java @@ -42,7 +42,7 @@ public class DirectPlayPreferenceDialog extends DialogFragment { .autoDismiss(false) .onNegative((dialog, action) -> dismiss()) .onPositive((dialog, action) -> { - PreferenceUtil.getInstance(getContext()).setDirectPlayCodecs(adapter.getDirectPlayCodecs()); + PreferenceUtil.getInstance(getContext()).setDirectPlayCodecs(adapter.getCodecs()); dismiss(); }) .build(); diff --git a/app/src/main/java/com/dkanada/gramophone/model/Codec.java b/app/src/main/java/com/dkanada/gramophone/model/Codec.java new file mode 100644 index 00000000..8e81228f --- /dev/null +++ b/app/src/main/java/com/dkanada/gramophone/model/Codec.java @@ -0,0 +1,23 @@ +package com.dkanada.gramophone.model; + +public enum Codec { + FLAC("FLAC", "FLAC", "flac|flac"), + MP3("MP3", "MP3", "mp3|mp3"), + OPUS("Opus", "Opus", "opus|opus"), + AAC("M4A", "AAC", "m4a|aac"), + VORBIS("OGG", "Vorbis", "ogg|vorbis"), + OGG("OGG", "Opus", "ogg|opus"), + MKA("MKA", "Opus", "mka|opus"); + + public final String container; + public final String codec; + public final String value; + + public boolean select; + + Codec(String container, String codec, String value) { + this.container = container; + this.codec = codec; + this.value = value; + } +} diff --git a/app/src/main/java/com/dkanada/gramophone/model/DirectPlayCodec.java b/app/src/main/java/com/dkanada/gramophone/model/DirectPlayCodec.java deleted file mode 100644 index 8ae224e2..00000000 --- a/app/src/main/java/com/dkanada/gramophone/model/DirectPlayCodec.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.dkanada.gramophone.model; - -public class DirectPlayCodec { - public Codec codec; - public boolean selected; - - public DirectPlayCodec(Codec codec, boolean selected) { - this.codec = codec; - this.selected = selected; - } - - public enum Codec { - FLAC("FLAC", "FLAC", "flac|flac"), - MP3("MP3", "MP3", "mp3|mp3"), - OPUS("Opus", "Opus", "opus|opus"), - AAC("M4A", "AAC", "m4a|aac"), - VORBIS("OGG", "Vorbis", "ogg|vorbis"), - OGG("OGG", "Opus", "ogg|opus"), - MKA("MKA", "Opus", "mka|opus"); - - public final String container; - public final String codec; - public final String value; - - Codec(String container, String codec, String value) { - this.container = container; - this.codec = codec; - this.value = value; - } - } -} diff --git a/app/src/main/java/com/dkanada/gramophone/util/MusicUtil.java b/app/src/main/java/com/dkanada/gramophone/util/MusicUtil.java index f359d212..88f93443 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/MusicUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/MusicUtil.java @@ -13,7 +13,7 @@ import com.dkanada.gramophone.App; import com.dkanada.gramophone.R; import com.dkanada.gramophone.model.Album; import com.dkanada.gramophone.model.Artist; -import com.dkanada.gramophone.model.DirectPlayCodec; +import com.dkanada.gramophone.model.Codec; import com.dkanada.gramophone.model.Genre; import com.dkanada.gramophone.model.Song; @@ -24,6 +24,8 @@ import org.jellyfin.apiclient.model.dto.UserItemDataDto; import java.io.File; import java.util.List; import java.util.Locale; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class MusicUtil { public static String getTranscodeUri(Song song) { @@ -42,21 +44,11 @@ public class MusicUtil { // web client maximum is 12444445 and 320kbps is 320000 builder.append("&MaxStreamingBitrate=").append(preferenceUtil.getMaximumBitrate()); - boolean containerAdded = false; - for (DirectPlayCodec directPlayCodec : preferenceUtil.getDirectPlayCodecs()) { - if (directPlayCodec.selected) { - if (!containerAdded) { - builder.append("&Container="); - containerAdded = true; - } + List codecs = preferenceUtil.getDirectPlayCodecs(); + Stream values = codecs.stream().map(codec -> codec.value); - builder.append(directPlayCodec.codec.value).append(','); - } - } - - if (containerAdded) { - // remove last comma - builder.deleteCharAt(builder.length() - 1); + if (codecs.size() != 0) { + builder.append("&Container=").append(values.collect(Collectors.joining(","))); } builder.append("&TranscodingContainer=ts"); diff --git a/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java index e47aad86..6b3e1a4e 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java @@ -14,16 +14,17 @@ import com.dkanada.gramophone.R; import com.dkanada.gramophone.helper.sort.SortMethod; import com.dkanada.gramophone.helper.sort.SortOrder; import com.dkanada.gramophone.model.CategoryInfo; -import com.dkanada.gramophone.model.DirectPlayCodec; +import com.dkanada.gramophone.model.Codec; import com.dkanada.gramophone.interfaces.base.PreferenceMigration; import com.dkanada.gramophone.fragments.player.NowPlayingScreen; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; @SuppressLint("ApplySharedPref") public final class PreferenceUtil { @@ -451,38 +452,18 @@ public final class PreferenceUtil { return defaultCategories; } - public List getDirectPlayCodecs() { - DirectPlayCodec.Codec[] codecs = DirectPlayCodec.Codec.values(); + @SuppressWarnings("ConstantConditions") + public List getDirectPlayCodecs() { + Set defaultValues = Arrays.stream(Codec.values()).map(Enum::toString).collect(Collectors.toSet()); + Set values = mPreferences.getStringSet(DIRECT_PLAY_CODECS, defaultValues); - Set selectedCodecNames = new HashSet<>(); - for (DirectPlayCodec.Codec codec : codecs) { - // this will be the default value - selectedCodecNames.add(codec.name()); - } - - selectedCodecNames = mPreferences.getStringSet(DIRECT_PLAY_CODECS, selectedCodecNames); - - ArrayList directPlayCodecs = new ArrayList<>(); - for (DirectPlayCodec.Codec codec : codecs) { - String name = codec.name(); - boolean selected = selectedCodecNames.contains(name); - directPlayCodecs.add(new DirectPlayCodec(codec, selected)); - } - - return directPlayCodecs; + return values.stream().map(Codec::valueOf).collect(Collectors.toList()); } - public void setDirectPlayCodecs(List directPlayCodecs) { - Set codecNames = new HashSet<>(); - for (DirectPlayCodec directPlayCodec : directPlayCodecs) { - if (directPlayCodec.selected) { - codecNames.add(directPlayCodec.codec.toString()); - } - } + public void setDirectPlayCodecs(List codecs) { + Set values = codecs.stream().map(Enum::toString).collect(Collectors.toSet()); - final SharedPreferences.Editor editor = mPreferences.edit(); - editor.putStringSet(DIRECT_PLAY_CODECS, codecNames); - editor.apply(); + mPreferences.edit().putStringSet(DIRECT_PLAY_CODECS, values).apply(); } public String getServer() {