mirror of
https://github.com/antebudimir/tempus.git
synced 2025-12-31 17:43:32 +00:00
feat: implemented a dialog box for displaying details of the currently playing track
This commit is contained in:
parent
99be2764d0
commit
6a505eea4e
7 changed files with 665 additions and 84 deletions
|
|
@ -0,0 +1,132 @@
|
||||||
|
package com.cappielloantonio.tempo.ui.dialog;
|
||||||
|
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.fragment.app.DialogFragment;
|
||||||
|
import androidx.media3.common.MediaMetadata;
|
||||||
|
|
||||||
|
import com.cappielloantonio.tempo.R;
|
||||||
|
import com.cappielloantonio.tempo.databinding.DialogTrackInfoBinding;
|
||||||
|
import com.cappielloantonio.tempo.glide.CustomGlideRequest;
|
||||||
|
import com.cappielloantonio.tempo.util.Constants;
|
||||||
|
import com.cappielloantonio.tempo.util.MusicUtil;
|
||||||
|
import com.cappielloantonio.tempo.util.Preferences;
|
||||||
|
|
||||||
|
public class TrackInfoDialog extends DialogFragment {
|
||||||
|
private static final String TAG = "TrackInfoDialog";
|
||||||
|
|
||||||
|
private DialogTrackInfoBinding bind;
|
||||||
|
private MediaMetadata mediaMetadata;
|
||||||
|
|
||||||
|
public TrackInfoDialog(MediaMetadata mediaMetadata) {
|
||||||
|
this.mediaMetadata = mediaMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
bind = DialogTrackInfoBinding.inflate(getLayoutInflater());
|
||||||
|
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||||
|
|
||||||
|
builder.setView(bind.getRoot())
|
||||||
|
.setPositiveButton(R.string.track_info_dialog_positive_button, (dialog, id) -> dialog.cancel());
|
||||||
|
|
||||||
|
return builder.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
|
||||||
|
setTrackInfo();
|
||||||
|
setTrackTranscodingInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
bind = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setTrackInfo() {
|
||||||
|
bind.trakTitleInfoTextView.setText(mediaMetadata.title);
|
||||||
|
bind.trakArtistInfoTextView.setText(mediaMetadata.artist);
|
||||||
|
|
||||||
|
if (mediaMetadata.extras != null) {
|
||||||
|
CustomGlideRequest.Builder
|
||||||
|
.from(requireContext(), mediaMetadata.extras.getString("coverArtId", ""))
|
||||||
|
.build()
|
||||||
|
.into(bind.trackCoverInfoImageView);
|
||||||
|
|
||||||
|
bind.titleValueSector.setText(mediaMetadata.extras.getString("title", getString(R.string.label_placeholder)));
|
||||||
|
bind.albumValueSector.setText(mediaMetadata.extras.getString("album", getString(R.string.label_placeholder)));
|
||||||
|
bind.artistValueSector.setText(mediaMetadata.extras.getString("artist", getString(R.string.label_placeholder)));
|
||||||
|
bind.trackNumberValueSector.setText(String.valueOf(mediaMetadata.extras.getInt("track", 0)));
|
||||||
|
bind.yearValueSector.setText(String.valueOf(mediaMetadata.extras.getInt("year", 0)));
|
||||||
|
bind.genreValueSector.setText(mediaMetadata.extras.getString("genre", getString(R.string.label_placeholder)));
|
||||||
|
bind.sizeValueSector.setText(MusicUtil.getReadableByteCount(mediaMetadata.extras.getLong("size", 0)));
|
||||||
|
bind.contentTypeValueSector.setText(mediaMetadata.extras.getString("contentType", getString(R.string.label_placeholder)));
|
||||||
|
bind.suffixValueSector.setText(mediaMetadata.extras.getString("suffix", getString(R.string.label_placeholder)));
|
||||||
|
bind.transcodedContentTypeValueSector.setText(mediaMetadata.extras.getString("transcodedContentType", getString(R.string.label_placeholder)));
|
||||||
|
bind.transcodedSuffixValueSector.setText(mediaMetadata.extras.getString("transcodedSuffix", getString(R.string.label_placeholder)));
|
||||||
|
bind.durationValueSector.setText(MusicUtil.getReadableDurationString(mediaMetadata.extras.getInt("duration", 0), false));
|
||||||
|
bind.bitrateValueSector.setText(mediaMetadata.extras.getInt("bitrate", 0) + " kbps");
|
||||||
|
bind.pathValueSector.setText(mediaMetadata.extras.getString("path", getString(R.string.label_placeholder)));
|
||||||
|
bind.discNumberValueSector.setText(String.valueOf(mediaMetadata.extras.getInt("discNumber", 0)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setTrackTranscodingInfo() {
|
||||||
|
StringBuilder info = new StringBuilder();
|
||||||
|
|
||||||
|
boolean prioritizeServerTranscoding = Preferences.isServerPrioritized();
|
||||||
|
|
||||||
|
String transcodingExtension = MusicUtil.getTranscodingFormatPreference();
|
||||||
|
String transcodingBitrate = Integer.parseInt(MusicUtil.getBitratePreference()) != 0 ? Integer.parseInt(MusicUtil.getBitratePreference()) + "kbps" : "Original";
|
||||||
|
|
||||||
|
if (mediaMetadata.extras != null && mediaMetadata.extras.getString("uri", "").contains(Constants.DOWNLOAD_URI)) {
|
||||||
|
info.append(getString(R.string.track_info_summary_downloaded_file));
|
||||||
|
|
||||||
|
bind.trakTranscodingInfoTextView.setText(info);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prioritizeServerTranscoding) {
|
||||||
|
info.append(getString(R.string.track_info_summary_server_prioritized));
|
||||||
|
|
||||||
|
bind.trakTranscodingInfoTextView.setText(info);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!prioritizeServerTranscoding && transcodingExtension.equals("raw") && transcodingBitrate.equals("Original")) {
|
||||||
|
info.append(getString(R.string.track_info_summary_original_file));
|
||||||
|
|
||||||
|
bind.trakTranscodingInfoTextView.setText(info);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!prioritizeServerTranscoding && !transcodingExtension.equals("raw") && transcodingBitrate.equals("Original")) {
|
||||||
|
info.append(getString(R.string.track_info_summary_transcoding_codec, transcodingExtension));
|
||||||
|
|
||||||
|
bind.trakTranscodingInfoTextView.setText(info);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!prioritizeServerTranscoding && transcodingExtension.equals("raw") && !transcodingBitrate.equals("Original")) {
|
||||||
|
info.append(getString(R.string.track_info_summary_transcoding_bitrate, transcodingBitrate));
|
||||||
|
|
||||||
|
bind.trakTranscodingInfoTextView.setText(info);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!prioritizeServerTranscoding && !transcodingExtension.equals("raw") && !transcodingBitrate.equals("Original")) {
|
||||||
|
info.append(getString(R.string.track_info_summary_full_transcode, transcodingExtension, transcodingBitrate));
|
||||||
|
|
||||||
|
bind.trakTranscodingInfoTextView.setText(info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -7,9 +7,7 @@ import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
|
||||||
import android.widget.ToggleButton;
|
import android.widget.ToggleButton;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
@ -31,6 +29,7 @@ import com.cappielloantonio.tempo.databinding.InnerFragmentPlayerControllerBindi
|
||||||
import com.cappielloantonio.tempo.service.MediaService;
|
import com.cappielloantonio.tempo.service.MediaService;
|
||||||
import com.cappielloantonio.tempo.ui.activity.MainActivity;
|
import com.cappielloantonio.tempo.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.tempo.ui.dialog.RatingDialog;
|
import com.cappielloantonio.tempo.ui.dialog.RatingDialog;
|
||||||
|
import com.cappielloantonio.tempo.ui.dialog.TrackInfoDialog;
|
||||||
import com.cappielloantonio.tempo.ui.fragment.pager.PlayerControllerHorizontalPager;
|
import com.cappielloantonio.tempo.ui.fragment.pager.PlayerControllerHorizontalPager;
|
||||||
import com.cappielloantonio.tempo.util.Constants;
|
import com.cappielloantonio.tempo.util.Constants;
|
||||||
import com.cappielloantonio.tempo.util.MusicUtil;
|
import com.cappielloantonio.tempo.util.MusicUtil;
|
||||||
|
|
@ -54,12 +53,8 @@ public class PlayerControllerFragment extends Fragment {
|
||||||
private ToggleButton skipSilenceToggleButton;
|
private ToggleButton skipSilenceToggleButton;
|
||||||
private Chip playerMediaExtension;
|
private Chip playerMediaExtension;
|
||||||
private TextView playerMediaBitrate;
|
private TextView playerMediaBitrate;
|
||||||
private ImageView playerMediaTranscodingIcon;
|
|
||||||
private ImageView playerMediaTranscodingPriorityIcon;
|
|
||||||
private Chip playerMediaTranscodedExtension;
|
|
||||||
private TextView playerMediaTranscodedBitrate;
|
|
||||||
private ConstraintLayout playerQuickActionView;
|
private ConstraintLayout playerQuickActionView;
|
||||||
private ImageButton playerOpenQueueButton;
|
private ImageButton playerTrackInfo;
|
||||||
|
|
||||||
private MainActivity activity;
|
private MainActivity activity;
|
||||||
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
||||||
|
|
@ -79,7 +74,6 @@ public class PlayerControllerFragment extends Fragment {
|
||||||
initCoverLyricsSlideView();
|
initCoverLyricsSlideView();
|
||||||
initMediaListenable();
|
initMediaListenable();
|
||||||
initArtistLabelButton();
|
initArtistLabelButton();
|
||||||
initTranscodingInfo();
|
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
@ -112,18 +106,14 @@ public class PlayerControllerFragment extends Fragment {
|
||||||
skipSilenceToggleButton = bind.getRoot().findViewById(R.id.player_skip_silence_toggle_button);
|
skipSilenceToggleButton = bind.getRoot().findViewById(R.id.player_skip_silence_toggle_button);
|
||||||
playerMediaExtension = bind.getRoot().findViewById(R.id.player_media_extension);
|
playerMediaExtension = bind.getRoot().findViewById(R.id.player_media_extension);
|
||||||
playerMediaBitrate = bind.getRoot().findViewById(R.id.player_media_bitrate);
|
playerMediaBitrate = bind.getRoot().findViewById(R.id.player_media_bitrate);
|
||||||
playerMediaTranscodingIcon = bind.getRoot().findViewById(R.id.player_media_transcoding_audio);
|
|
||||||
playerMediaTranscodingPriorityIcon = bind.getRoot().findViewById(R.id.player_media_server_transcode_priority);
|
|
||||||
playerMediaTranscodedExtension = bind.getRoot().findViewById(R.id.player_media_transcoded_extension);
|
|
||||||
playerMediaTranscodedBitrate = bind.getRoot().findViewById(R.id.player_media_transcoded_bitrate);
|
|
||||||
playerQuickActionView = bind.getRoot().findViewById(R.id.player_quick_action_view);
|
playerQuickActionView = bind.getRoot().findViewById(R.id.player_quick_action_view);
|
||||||
playerOpenQueueButton = bind.getRoot().findViewById(R.id.player_open_queue_button);
|
playerTrackInfo = bind.getRoot().findViewById(R.id.player_info_track);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initQuickActionView() {
|
private void initQuickActionView() {
|
||||||
playerQuickActionView.setBackgroundColor(SurfaceColors.getColorForElevation(requireContext(), 8));
|
playerQuickActionView.setBackgroundColor(SurfaceColors.getColorForElevation(requireContext(), 8));
|
||||||
|
|
||||||
playerOpenQueueButton.setOnClickListener(view -> {
|
playerQuickActionView.setOnClickListener(view -> {
|
||||||
PlayerBottomSheetFragment playerBottomSheetFragment = (PlayerBottomSheetFragment) requireActivity().getSupportFragmentManager().findFragmentByTag("PlayerBottomSheet");
|
PlayerBottomSheetFragment playerBottomSheetFragment = (PlayerBottomSheetFragment) requireActivity().getSupportFragmentManager().findFragmentByTag("PlayerBottomSheet");
|
||||||
if (playerBottomSheetFragment != null) {
|
if (playerBottomSheetFragment != null) {
|
||||||
playerBottomSheetFragment.goToQueuePage();
|
playerBottomSheetFragment.goToQueuePage();
|
||||||
|
|
@ -191,36 +181,10 @@ public class PlayerControllerFragment extends Fragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String transcodingExtension = MusicUtil.getTranscodingFormatPreference();
|
playerTrackInfo.setOnClickListener(view -> {
|
||||||
String transcodingBitrate = Integer.parseInt(MusicUtil.getBitratePreference()) != 0 ? Integer.parseInt(MusicUtil.getBitratePreference()) + "kbps" : "Original";
|
TrackInfoDialog dialog = new TrackInfoDialog(mediaMetadata);
|
||||||
|
dialog.show(activity.getSupportFragmentManager(), null);
|
||||||
if (transcodingExtension.equals("raw") && transcodingBitrate.equals("Original")) {
|
});
|
||||||
playerMediaTranscodingPriorityIcon.setVisibility(View.GONE);
|
|
||||||
playerMediaTranscodingIcon.setVisibility(View.GONE);
|
|
||||||
playerMediaTranscodedBitrate.setVisibility(View.GONE);
|
|
||||||
playerMediaTranscodedExtension.setVisibility(View.GONE);
|
|
||||||
} else {
|
|
||||||
playerMediaTranscodingPriorityIcon.setVisibility(View.GONE);
|
|
||||||
playerMediaTranscodingIcon.setVisibility(View.VISIBLE);
|
|
||||||
playerMediaTranscodedBitrate.setVisibility(View.VISIBLE);
|
|
||||||
playerMediaTranscodedExtension.setVisibility(View.VISIBLE);
|
|
||||||
playerMediaTranscodedExtension.setText(transcodingExtension);
|
|
||||||
playerMediaTranscodedBitrate.setText(transcodingBitrate);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mediaMetadata.extras != null && mediaMetadata.extras.getString("uri", "").contains(Constants.DOWNLOAD_URI)) {
|
|
||||||
playerMediaTranscodingPriorityIcon.setVisibility(View.GONE);
|
|
||||||
playerMediaTranscodingIcon.setVisibility(View.GONE);
|
|
||||||
playerMediaTranscodedBitrate.setVisibility(View.GONE);
|
|
||||||
playerMediaTranscodedExtension.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Preferences.isServerPrioritized() && mediaMetadata.extras != null && !mediaMetadata.extras.getString("uri", "").contains(Constants.DOWNLOAD_URI)) {
|
|
||||||
playerMediaTranscodingPriorityIcon.setVisibility(View.VISIBLE);
|
|
||||||
playerMediaTranscodingIcon.setVisibility(View.GONE);
|
|
||||||
playerMediaTranscodedBitrate.setVisibility(View.GONE);
|
|
||||||
playerMediaTranscodedExtension.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setMediaControllerUI(MediaBrowser mediaBrowser) {
|
private void setMediaControllerUI(MediaBrowser mediaBrowser) {
|
||||||
|
|
@ -320,13 +284,6 @@ public class PlayerControllerFragment extends Fragment {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initTranscodingInfo() {
|
|
||||||
playerMediaTranscodingPriorityIcon.setOnLongClickListener(view -> {
|
|
||||||
Toast.makeText(requireActivity(), R.string.settings_audio_transcode_priority_toast, Toast.LENGTH_SHORT).show();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initPlaybackSpeedButton(MediaBrowser mediaBrowser) {
|
private void initPlaybackSpeedButton(MediaBrowser mediaBrowser) {
|
||||||
playbackSpeedButton.setOnClickListener(view -> {
|
playbackSpeedButton.setOnClickListener(view -> {
|
||||||
float currentSpeed = Preferences.getPlaybackSpeed();
|
float currentSpeed = Preferences.getPlaybackSpeed();
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@ import com.cappielloantonio.tempo.model.Download;
|
||||||
import com.cappielloantonio.tempo.repository.DownloadRepository;
|
import com.cappielloantonio.tempo.repository.DownloadRepository;
|
||||||
import com.cappielloantonio.tempo.subsonic.models.Child;
|
import com.cappielloantonio.tempo.subsonic.models.Child;
|
||||||
|
|
||||||
|
import java.text.CharacterIterator;
|
||||||
|
import java.text.StringCharacterIterator;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
@ -211,6 +213,27 @@ public class MusicUtil {
|
||||||
return readableStrings;
|
return readableStrings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getReadableByteCount(long bytes) {
|
||||||
|
long absB = bytes == Long.MIN_VALUE ? Long.MAX_VALUE : Math.abs(bytes);
|
||||||
|
|
||||||
|
if (absB < 1024) {
|
||||||
|
return bytes + " B";
|
||||||
|
}
|
||||||
|
|
||||||
|
long value = absB;
|
||||||
|
|
||||||
|
CharacterIterator ci = new StringCharacterIterator("KMGTPE");
|
||||||
|
|
||||||
|
for (int i = 40; i >= 0 && absB > 0xfffccccccccccccL >> i; i -= 10) {
|
||||||
|
value >>= 10;
|
||||||
|
ci.next();
|
||||||
|
}
|
||||||
|
|
||||||
|
value *= Long.signum(bytes);
|
||||||
|
|
||||||
|
return String.format("%.1f %ciB", value / 1024.0, ci.current());
|
||||||
|
}
|
||||||
|
|
||||||
public static String passwordHexEncoding(String plainPassword) {
|
public static String passwordHexEncoding(String plainPassword) {
|
||||||
return "enc:" + plainPassword.chars().mapToObj(Integer::toHexString).collect(Collectors.joining());
|
return "enc:" + plainPassword.chars().mapToObj(Integer::toHexString).collect(Collectors.joining());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
9
app/src/main/res/drawable/ic_info_stream.xml
Normal file
9
app/src/main/res/drawable/ic_info_stream.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="960"
|
||||||
|
android:viewportHeight="960">
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/titleTextColor"
|
||||||
|
android:pathData="M440,680L520,680L520,440L440,440L440,680ZM480,360Q497,360 508.5,348.5Q520,337 520,320Q520,303 508.5,291.5Q497,280 480,280Q463,280 451.5,291.5Q440,303 440,320Q440,337 451.5,348.5Q463,360 480,360ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z"/>
|
||||||
|
</vector>
|
||||||
447
app/src/main/res/layout/dialog_track_info.xml
Normal file
447
app/src/main/res/layout/dialog_track_info.xml
Normal file
|
|
@ -0,0 +1,447 @@
|
||||||
|
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="24dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="24dp">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/track_cover_info_image_view"
|
||||||
|
android:layout_width="52dp"
|
||||||
|
android:layout_height="52dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/trak_title_info_text_view"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/trak_title_info_text_view"
|
||||||
|
style="@style/LabelMedium"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/label_placeholder"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/trak_artist_info_text_view"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/track_cover_info_image_view"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/track_cover_info_image_view"
|
||||||
|
app:layout_constraintVertical_chainStyle="packed" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/trak_artist_info_text_view"
|
||||||
|
style="@style/LabelSmall"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/label_placeholder"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/track_cover_info_image_view"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/trak_title_info_text_view"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/trak_title_info_text_view" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/trak_transcoding_info_text_view"
|
||||||
|
style="@style/TitleMedium"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/title_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/title_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_title" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/title_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/album_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/album_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_album" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/album_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/artist_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/artist_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_artist" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/artist_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/track_number_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/track_number_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_track_number" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/track_number_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/year_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/year_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_year" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/year_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/genre_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/genre_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_genre" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/genre_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/size_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/size_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_size" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/size_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/content_type_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/content_type_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_content_type" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/content_type_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/suffix_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/suffix_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_suffix" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/suffix_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/transcoded_content_type_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/transcoded_content_type_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_transcoded_content_type" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/transcoded_content_type_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/transcoded_suffix_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/transcoded_suffix_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_transcoded_suffix" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/transcoded_suffix_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/duration_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/duration_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_duration" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/duration_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/bitrate_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/bitrate_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_bitrate" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/bitrate_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/path_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/path_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_path" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/path_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style="@style/Divider"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginVertical="8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/disc_number_info_sector"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/disc_number_key_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="4"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="@string/track_info_disc_number" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/disc_number_value_sector"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="7"
|
||||||
|
android:text="@string/label_placeholder" />
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
</androidx.core.widget.NestedScrollView>
|
||||||
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<LinearLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/player_media_quality_sector"
|
android:id="@+id/player_media_quality_sector"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|
@ -24,48 +24,38 @@
|
||||||
android:checked="true"
|
android:checked="true"
|
||||||
android:clickable="false"
|
android:clickable="false"
|
||||||
android:text="Unknown"
|
android:text="Unknown"
|
||||||
app:chipStrokeWidth="0dp" />
|
app:chipStrokeWidth="0dp"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/player_media_bitrate"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintHorizontal_chainStyle="packed"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/player_media_bitrate"
|
android:id="@+id/player_media_bitrate"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="8dp"
|
||||||
android:visibility="gone" />
|
app:layout_constraintTop_toTopOf="@id/player_media_extension"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/player_media_extension"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/player_media_extension"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"/>
|
||||||
|
|
||||||
<ImageView
|
<ImageButton
|
||||||
android:id="@+id/player_media_transcoding_audio"
|
android:id="@+id/player_info_track"
|
||||||
android:layout_width="24dp"
|
|
||||||
android:layout_height="20dp"
|
|
||||||
android:layout_margin="12dp"
|
|
||||||
android:src="@drawable/ic_transcode"
|
|
||||||
android:visibility="gone" />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/player_media_server_transcode_priority"
|
|
||||||
android:layout_width="24dp"
|
|
||||||
android:layout_height="20dp"
|
|
||||||
android:src="@drawable/ic_server_transcode_priority"
|
|
||||||
android:visibility="gone" />
|
|
||||||
|
|
||||||
<com.google.android.material.chip.Chip
|
|
||||||
android:id="@+id/player_media_transcoded_extension"
|
|
||||||
style="@style/Widget.Material3.Chip.Suggestion"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:checked="true"
|
android:padding="16dp"
|
||||||
android:clickable="false"
|
android:layout_marginEnd="8dp"
|
||||||
android:text="Unknown"
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
android:visibility="gone"
|
android:scaleType="fitCenter"
|
||||||
app:chipStrokeWidth="0dp" />
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/player_media_extension"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/player_media_extension"
|
||||||
|
app:srcCompat="@drawable/ic_info_stream"
|
||||||
|
app:tint="?attr/colorOnPrimaryContainer" />
|
||||||
|
|
||||||
<TextView
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
android:id="@+id/player_media_transcoded_bitrate"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:visibility="gone" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<androidx.viewpager2.widget.ViewPager2
|
<androidx.viewpager2.widget.ViewPager2
|
||||||
android:id="@+id/player_media_cover_view_pager"
|
android:id="@+id/player_media_cover_view_pager"
|
||||||
|
|
|
||||||
|
|
@ -300,4 +300,27 @@
|
||||||
<string name="menu_group_by_artist">Artist</string>
|
<string name="menu_group_by_artist">Artist</string>
|
||||||
<string name="menu_group_by_genre">Genre</string>
|
<string name="menu_group_by_genre">Genre</string>
|
||||||
<string name="menu_group_by_year">Year</string>
|
<string name="menu_group_by_year">Year</string>
|
||||||
|
<string name="track_info_dialog_positive_button">OK</string>
|
||||||
|
<string name="track_info_dialog_title">Track info</string>
|
||||||
|
<string name="track_info_title">Title</string>
|
||||||
|
<string name="track_info_album">Album</string>
|
||||||
|
<string name="track_info_artist">Artist</string>
|
||||||
|
<string name="track_info_track_number">Track number</string>
|
||||||
|
<string name="track_info_year">Year</string>
|
||||||
|
<string name="track_info_genre">Genre</string>
|
||||||
|
<string name="track_info_size">Size</string>
|
||||||
|
<string name="track_info_content_type">Content Type</string>
|
||||||
|
<string name="track_info_suffix">Suffix</string>
|
||||||
|
<string name="track_info_transcoded_content_type">Transcoded content type</string>
|
||||||
|
<string name="track_info_transcoded_suffix">Transcoded suffix</string>
|
||||||
|
<string name="track_info_duration">Duration</string>
|
||||||
|
<string name="track_info_bitrate">Bitrate</string>
|
||||||
|
<string name="track_info_path">Path</string>
|
||||||
|
<string name="track_info_disc_number">Disc number</string>
|
||||||
|
<string name="track_info_summary_downloaded_file">The file has been downloaded using the Subsonic APIs. The codec and bitrate of the file remain unchanged from the source file.</string>
|
||||||
|
<string name="track_info_summary_server_prioritized">The quality of the file to be played is left up to the server\'s decision. The app will not enforce the choice of codec and bitrate for any potential transcoding.</string>
|
||||||
|
<string name="track_info_summary_original_file">The application will only read the original file as provided by the server. The app will explicitly request the server for the untranscoded file with the bitrate of the original source.</string>
|
||||||
|
<string name="track_info_summary_transcoding_codec">The application will request the server to transcode the file. The requested codec by the user is %1$s, while the bitrate will be the same as the source file. The potential transcoding of the file into the chosen format is dependent on the server, as it may or may not support the operation.</string>
|
||||||
|
<string name="track_info_summary_transcoding_bitrate">The application will request the server to modify the bitrate of the file. The user requested a bitrate of %1$s, while the codec of the source file will remain the same. Any changes to the bitrate of the file in the chosen format will be done by the server, which may or may not support the operation.</string>
|
||||||
|
<string name="track_info_summary_full_transcode">The application will request the server to transcode the file and modify its bitrate. The user requested codec is %1$s, with a bitrate of %2$s. Any potential changes to the codec and bitrate of the file in the chosen format will be handled by the server, which may or may not support the operation.</string>
|
||||||
</resources>
|
</resources>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue