Add support for disabling/enabling directplay codecs
This commit is contained in:
parent
e108213237
commit
378772d93f
11 changed files with 311 additions and 7 deletions
|
|
@ -14,6 +14,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.Genre;
|
||||
import com.dkanada.gramophone.model.Song;
|
||||
|
||||
|
|
@ -26,25 +27,42 @@ import java.util.Locale;
|
|||
|
||||
public class MusicUtil {
|
||||
public static Uri getSongFileUri(Song song) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
PreferenceUtil preferenceUtil = PreferenceUtil.getInstance(App.getInstance());
|
||||
|
||||
StringBuilder builder = new StringBuilder(256);
|
||||
ApiClient apiClient = App.getApiClient();
|
||||
|
||||
builder.append(apiClient.getApiUrl());
|
||||
builder.append("/Audio/");
|
||||
builder.append(song.id);
|
||||
builder.append("/universal");
|
||||
builder.append("?UserId=" + apiClient.getCurrentUserId());
|
||||
builder.append("&DeviceId=" + apiClient.getDeviceId());
|
||||
builder.append("?UserId=").append(apiClient.getCurrentUserId());
|
||||
builder.append("&DeviceId=").append(apiClient.getDeviceId());
|
||||
|
||||
// web client maximum is 12444445 and 320kbps is 320000
|
||||
builder.append("&MaxStreamingBitrate=" + PreferenceUtil.getInstance(App.getInstance()).getMaximumBitrate());
|
||||
builder.append("&Container=flac");
|
||||
builder.append("&MaxStreamingBitrate=").append(preferenceUtil.getMaximumBitrate());
|
||||
|
||||
boolean containerAdded = false;
|
||||
for (DirectplayCodec directplayCodec : preferenceUtil.getDirectplayCodecs()){
|
||||
if (directplayCodec.selected){
|
||||
if (!containerAdded){
|
||||
builder.append("&Container=");
|
||||
containerAdded = true;
|
||||
}
|
||||
builder.append(directplayCodec.value).append(',');
|
||||
}
|
||||
}
|
||||
if (containerAdded){
|
||||
// Remove last comma
|
||||
builder.deleteCharAt(builder.length() - 1);
|
||||
}
|
||||
|
||||
builder.append("&TranscodingContainer=ts");
|
||||
builder.append("&TranscodingProtocol=hls");
|
||||
|
||||
// preferred codec when transcoding
|
||||
builder.append("&AudioCodec=" + PreferenceUtil.getInstance(App.getInstance()).getTranscodeCodec());
|
||||
builder.append("&api_key=" + apiClient.getAccessToken());
|
||||
builder.append("&AudioCodec=").append(preferenceUtil.getTranscodeCodec());
|
||||
builder.append("&api_key=").append(apiClient.getAccessToken());
|
||||
|
||||
Log.i(MusicUtil.class.getName(), "playing audio: " + builder);
|
||||
return Uri.parse(builder.toString());
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import android.content.Context;
|
|||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
import androidx.annotation.StyleRes;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
|
@ -14,14 +15,18 @@ 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.ui.fragments.player.NowPlayingScreen;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public final class PreferenceUtil {
|
||||
public static final String CATEGORIES = "library_categories";
|
||||
public static final String DIRECTPLAY_CODECS = "directplay_codecs";
|
||||
public static final String MAXIMUM_LIST_SIZE = "maximum_list_size";
|
||||
public static final String REMEMBER_LAST_TAB = "remember_last_tab";
|
||||
public static final String LAST_TAB = "last_tab";
|
||||
|
|
@ -417,4 +422,38 @@ public final class PreferenceUtil {
|
|||
defaultCategories.add(new CategoryInfo(CategoryInfo.Category.PLAYLISTS, true));
|
||||
return defaultCategories;
|
||||
}
|
||||
|
||||
public List<DirectplayCodec> getDirectplayCodecs() {
|
||||
DirectplayCodec.Codec[] codecs = DirectplayCodec.Codec.values();
|
||||
|
||||
Set<String> selectedCodecNames = new HashSet<>();
|
||||
for (DirectplayCodec.Codec codec : codecs){
|
||||
selectedCodecNames.add(codec.name());
|
||||
}
|
||||
|
||||
selectedCodecNames = mPreferences.getStringSet(DIRECTPLAY_CODECS, selectedCodecNames);
|
||||
|
||||
ArrayList<DirectplayCodec> directplayCodecs = new ArrayList<>();
|
||||
for (DirectplayCodec.Codec codec : codecs){
|
||||
String name = codec.name();
|
||||
boolean selected = selectedCodecNames.contains(name);
|
||||
|
||||
directplayCodecs.add(new DirectplayCodec(name, codec.title, codec.value, selected));
|
||||
}
|
||||
|
||||
return directplayCodecs;
|
||||
}
|
||||
|
||||
public void setDirectplayCodecs(List<DirectplayCodec> directplayCodecs){
|
||||
Set<String> codecNames = new HashSet<>();
|
||||
for (DirectplayCodec directplayCodec : directplayCodecs){
|
||||
if (directplayCodec.selected){
|
||||
codecNames.add(directplayCodec.codecName);
|
||||
}
|
||||
}
|
||||
|
||||
final SharedPreferences.Editor editor = mPreferences.edit();
|
||||
editor.putStringSet(DIRECTPLAY_CODECS, codecNames);
|
||||
editor.apply();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue