112 lines
3.8 KiB
Kotlin
112 lines
3.8 KiB
Kotlin
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.model.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<Pair<Int, String?>> = 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)
|
|
}
|
|
}
|
|
}
|