package audio.funkwhale.ffa.fragments import android.net.Uri import android.os.Bundle import android.util.TypedValue import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.ViewGroup.LayoutParams import android.widget.TextView import androidx.core.os.bundleOf import androidx.fragment.app.DialogFragment import audio.funkwhale.ffa.R import audio.funkwhale.ffa.databinding.FragmentTrackInfoDetailsBinding import audio.funkwhale.ffa.utils.Track import audio.funkwhale.ffa.utils.mustNormalizeUrl import audio.funkwhale.ffa.utils.toDurationString class TrackInfoDetailsFragment : DialogFragment() { private var _binding: FragmentTrackInfoDetailsBinding? = null private val binding get() = _binding!! companion object { fun new(track: Track): TrackInfoDetailsFragment { return TrackInfoDetailsFragment().apply { arguments = bundleOf( "artistName" to track.artist.name, "albumTitle" to track.album?.title, "trackTitle" to track.title, "trackCopyright" to track.copyright, "trackLicense" to track.license, "trackPosition" to track.position, "trackDuration" to track.bestUpload()?.duration?.toLong() ?.let { toDurationString(it, showSeconds = true) }, "trackBitrate" to track.bestUpload()?.bitrate?.let { "${it / 1000} Kbps" }, "trackInstance" to track.bestUpload()?.listen_url?.let { Uri.parse(mustNormalizeUrl(it)).authority } ) } } } var properties: MutableList> = mutableListOf() override fun onStart() { super.onStart() dialog?.window?.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.apply { properties.add(Pair(R.string.track_info_details_artist, getString("artistName"))) properties.add(Pair(R.string.track_info_details_album, getString("albumTitle"))) properties.add(Pair(R.string.track_info_details_track_title, getString("trackTitle"))) properties.add(Pair(R.string.track_info_details_track_copyright, getString("trackCopyright"))) properties.add(Pair(R.string.track_info_details_track_license, getString("trackLicense"))) properties.add(Pair(R.string.track_info_details_track_duration, getString("trackDuration"))) properties.add( Pair( R.string.track_info_details_track_position, getInt("trackPosition").toString() ) ) properties.add(Pair(R.string.track_info_details_track_bitrate, getString("trackBitrate"))) properties.add(Pair(R.string.track_info_details_track_instance, getString("trackInstance"))) } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentTrackInfoDetailsBinding.inflate(inflater) return binding.root } override fun onDestroyView() { super.onDestroyView() _binding = null } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) properties.forEach { (label, value) -> val labelTextView = TextView(context).apply { text = getString(label) setTextAppearance(R.style.AppTheme_TrackDetailsLabel) } val valueTextView = TextView(context).apply { text = value ?: "N/A" setTextAppearance(R.style.AppTheme_TrackDetailsValue) setPadding( 0, 0, 0, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16f, resources.displayMetrics) .toInt() ) } binding.infos.addView(labelTextView) binding.infos.addView(valueTextView) } } }