ui: remove textSafe
Remove the textSafe method, as it is functionally useless. textSafe relied on a dumb 1.0.0 thing where I used wrap_content on text views. Now it just causes relayouts for no good reason.
This commit is contained in:
parent
c888035cbd
commit
96be8cb6b7
14 changed files with 52 additions and 77 deletions
|
@ -36,7 +36,6 @@ import org.oxycblt.auxio.util.context
|
||||||
import org.oxycblt.auxio.util.formatDuration
|
import org.oxycblt.auxio.util.formatDuration
|
||||||
import org.oxycblt.auxio.util.getPluralSafe
|
import org.oxycblt.auxio.util.getPluralSafe
|
||||||
import org.oxycblt.auxio.util.inflater
|
import org.oxycblt.auxio.util.inflater
|
||||||
import org.oxycblt.auxio.util.textSafe
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An adapter for displaying [Album] information and it's children.
|
* An adapter for displaying [Album] information and it's children.
|
||||||
|
@ -116,10 +115,10 @@ private class AlbumDetailViewHolder private constructor(private val binding: Ite
|
||||||
|
|
||||||
override fun bind(item: Album, listener: AlbumDetailAdapter.Listener) {
|
override fun bind(item: Album, listener: AlbumDetailAdapter.Listener) {
|
||||||
binding.detailCover.bind(item)
|
binding.detailCover.bind(item)
|
||||||
binding.detailName.textSafe = item.resolveName(binding.context)
|
binding.detailName.text = item.resolveName(binding.context)
|
||||||
|
|
||||||
binding.detailSubhead.apply {
|
binding.detailSubhead.apply {
|
||||||
textSafe = item.artist.resolveName(context)
|
text = item.artist.resolveName(context)
|
||||||
setOnClickListener { listener.onNavigateToArtist() }
|
setOnClickListener { listener.onNavigateToArtist() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +175,7 @@ class DiscHeaderViewHolder(private val binding: ItemDiscHeaderBinding) :
|
||||||
BindingViewHolder<DiscHeader, Unit>(binding.root) {
|
BindingViewHolder<DiscHeader, Unit>(binding.root) {
|
||||||
|
|
||||||
override fun bind(item: DiscHeader, listener: Unit) {
|
override fun bind(item: DiscHeader, listener: Unit) {
|
||||||
binding.discNo.textSafe = binding.context.getString(R.string.fmt_disc_no, item.disc)
|
binding.discNo.text = binding.context.getString(R.string.fmt_disc_no, item.disc)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -203,20 +202,20 @@ private class AlbumSongViewHolder private constructor(private val binding: ItemA
|
||||||
// Hide the track number view if the song does not have a track.
|
// Hide the track number view if the song does not have a track.
|
||||||
if (item.track != null) {
|
if (item.track != null) {
|
||||||
binding.songTrack.apply {
|
binding.songTrack.apply {
|
||||||
textSafe = context.getString(R.string.fmt_number, item.track)
|
text = context.getString(R.string.fmt_number, item.track)
|
||||||
isInvisible = false
|
isInvisible = false
|
||||||
contentDescription = context.getString(R.string.desc_track_number, item.track)
|
contentDescription = context.getString(R.string.desc_track_number, item.track)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
binding.songTrack.apply {
|
binding.songTrack.apply {
|
||||||
textSafe = ""
|
text = ""
|
||||||
isInvisible = true
|
isInvisible = true
|
||||||
contentDescription = context.getString(R.string.def_track)
|
contentDescription = context.getString(R.string.def_track)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.songName.textSafe = item.resolveName(binding.context)
|
binding.songName.text = item.resolveName(binding.context)
|
||||||
binding.songDuration.textSafe = item.durationSecs.formatDuration(false)
|
binding.songDuration.text = item.durationSecs.formatDuration(false)
|
||||||
|
|
||||||
binding.root.apply {
|
binding.root.apply {
|
||||||
setOnClickListener { listener.onItemClick(item) }
|
setOnClickListener { listener.onItemClick(item) }
|
||||||
|
|
|
@ -36,7 +36,6 @@ import org.oxycblt.auxio.ui.recycler.SimpleItemCallback
|
||||||
import org.oxycblt.auxio.util.context
|
import org.oxycblt.auxio.util.context
|
||||||
import org.oxycblt.auxio.util.getPluralSafe
|
import org.oxycblt.auxio.util.getPluralSafe
|
||||||
import org.oxycblt.auxio.util.inflater
|
import org.oxycblt.auxio.util.inflater
|
||||||
import org.oxycblt.auxio.util.textSafe
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An adapter for displaying [Artist] information and it's children. Unlike the other adapters, this
|
* An adapter for displaying [Artist] information and it's children. Unlike the other adapters, this
|
||||||
|
@ -124,11 +123,11 @@ private class ArtistDetailViewHolder private constructor(private val binding: It
|
||||||
|
|
||||||
override fun bind(item: Artist, listener: DetailAdapter.Listener) {
|
override fun bind(item: Artist, listener: DetailAdapter.Listener) {
|
||||||
binding.detailCover.bind(item)
|
binding.detailCover.bind(item)
|
||||||
binding.detailName.textSafe = item.resolveName(binding.context)
|
binding.detailName.text = item.resolveName(binding.context)
|
||||||
|
|
||||||
// Get the genre that corresponds to the most songs in this artist, which would be
|
// Get the genre that corresponds to the most songs in this artist, which would be
|
||||||
// the most "Prominent" genre.
|
// the most "Prominent" genre.
|
||||||
binding.detailSubhead.textSafe =
|
binding.detailSubhead.text =
|
||||||
item.songs
|
item.songs
|
||||||
.groupBy { it.genre.resolveName(binding.context) }
|
.groupBy { it.genre.resolveName(binding.context) }
|
||||||
.entries
|
.entries
|
||||||
|
@ -136,7 +135,7 @@ private class ArtistDetailViewHolder private constructor(private val binding: It
|
||||||
?.key
|
?.key
|
||||||
?: binding.context.getString(R.string.def_genre)
|
?: binding.context.getString(R.string.def_genre)
|
||||||
|
|
||||||
binding.detailInfo.textSafe =
|
binding.detailInfo.text =
|
||||||
binding.context.getString(
|
binding.context.getString(
|
||||||
R.string.fmt_two,
|
R.string.fmt_two,
|
||||||
binding.context.getPluralSafe(R.plurals.fmt_album_count, item.albums.size),
|
binding.context.getPluralSafe(R.plurals.fmt_album_count, item.albums.size),
|
||||||
|
@ -166,8 +165,8 @@ private constructor(
|
||||||
) : BindingViewHolder<Album, MenuItemListener>(binding.root) {
|
) : BindingViewHolder<Album, MenuItemListener>(binding.root) {
|
||||||
override fun bind(item: Album, listener: MenuItemListener) {
|
override fun bind(item: Album, listener: MenuItemListener) {
|
||||||
binding.parentImage.bind(item)
|
binding.parentImage.bind(item)
|
||||||
binding.parentName.textSafe = item.resolveName(binding.context)
|
binding.parentName.text = item.resolveName(binding.context)
|
||||||
binding.parentInfo.textSafe = item.date.resolveYear(binding.context)
|
binding.parentInfo.text = item.date.resolveYear(binding.context)
|
||||||
|
|
||||||
binding.root.apply {
|
binding.root.apply {
|
||||||
setOnClickListener { listener.onItemClick(item) }
|
setOnClickListener { listener.onItemClick(item) }
|
||||||
|
@ -202,8 +201,8 @@ private constructor(
|
||||||
) : BindingViewHolder<Song, MenuItemListener>(binding.root) {
|
) : BindingViewHolder<Song, MenuItemListener>(binding.root) {
|
||||||
override fun bind(item: Song, listener: MenuItemListener) {
|
override fun bind(item: Song, listener: MenuItemListener) {
|
||||||
binding.songAlbumCover.bind(item)
|
binding.songAlbumCover.bind(item)
|
||||||
binding.songName.textSafe = item.resolveName(binding.context)
|
binding.songName.text = item.resolveName(binding.context)
|
||||||
binding.songInfo.textSafe = item.album.resolveName(binding.context)
|
binding.songInfo.text = item.album.resolveName(binding.context)
|
||||||
|
|
||||||
binding.root.apply {
|
binding.root.apply {
|
||||||
setOnClickListener { listener.onItemClick(item) }
|
setOnClickListener { listener.onItemClick(item) }
|
||||||
|
|
|
@ -36,7 +36,6 @@ import org.oxycblt.auxio.ui.recycler.SimpleItemCallback
|
||||||
import org.oxycblt.auxio.util.context
|
import org.oxycblt.auxio.util.context
|
||||||
import org.oxycblt.auxio.util.inflater
|
import org.oxycblt.auxio.util.inflater
|
||||||
import org.oxycblt.auxio.util.logW
|
import org.oxycblt.auxio.util.logW
|
||||||
import org.oxycblt.auxio.util.textSafe
|
|
||||||
|
|
||||||
abstract class DetailAdapter<L : DetailAdapter.Listener>(
|
abstract class DetailAdapter<L : DetailAdapter.Listener>(
|
||||||
listener: L,
|
listener: L,
|
||||||
|
@ -130,7 +129,7 @@ abstract class DetailAdapter<L : DetailAdapter.Listener>(
|
||||||
class SortHeaderViewHolder(private val binding: ItemSortHeaderBinding) :
|
class SortHeaderViewHolder(private val binding: ItemSortHeaderBinding) :
|
||||||
BindingViewHolder<SortHeader, DetailAdapter.Listener>(binding.root) {
|
BindingViewHolder<SortHeader, DetailAdapter.Listener>(binding.root) {
|
||||||
override fun bind(item: SortHeader, listener: DetailAdapter.Listener) {
|
override fun bind(item: SortHeader, listener: DetailAdapter.Listener) {
|
||||||
binding.headerTitle.textSafe = binding.context.getString(item.string)
|
binding.headerTitle.text = binding.context.getString(item.string)
|
||||||
binding.headerButton.apply {
|
binding.headerButton.apply {
|
||||||
TooltipCompat.setTooltipText(this, contentDescription)
|
TooltipCompat.setTooltipText(this, contentDescription)
|
||||||
setOnClickListener(listener::onShowSortMenu)
|
setOnClickListener(listener::onShowSortMenu)
|
||||||
|
|
|
@ -34,7 +34,6 @@ import org.oxycblt.auxio.util.context
|
||||||
import org.oxycblt.auxio.util.formatDuration
|
import org.oxycblt.auxio.util.formatDuration
|
||||||
import org.oxycblt.auxio.util.getPluralSafe
|
import org.oxycblt.auxio.util.getPluralSafe
|
||||||
import org.oxycblt.auxio.util.inflater
|
import org.oxycblt.auxio.util.inflater
|
||||||
import org.oxycblt.auxio.util.textSafe
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An adapter for displaying genre information and it's children.
|
* An adapter for displaying genre information and it's children.
|
||||||
|
@ -105,10 +104,10 @@ private class GenreDetailViewHolder private constructor(private val binding: Ite
|
||||||
BindingViewHolder<Genre, DetailAdapter.Listener>(binding.root) {
|
BindingViewHolder<Genre, DetailAdapter.Listener>(binding.root) {
|
||||||
override fun bind(item: Genre, listener: DetailAdapter.Listener) {
|
override fun bind(item: Genre, listener: DetailAdapter.Listener) {
|
||||||
binding.detailCover.bind(item)
|
binding.detailCover.bind(item)
|
||||||
binding.detailName.textSafe = item.resolveName(binding.context)
|
binding.detailName.text = item.resolveName(binding.context)
|
||||||
binding.detailSubhead.textSafe =
|
binding.detailSubhead.text =
|
||||||
binding.context.getPluralSafe(R.plurals.fmt_song_count, item.songs.size)
|
binding.context.getPluralSafe(R.plurals.fmt_song_count, item.songs.size)
|
||||||
binding.detailInfo.textSafe = item.durationSecs.formatDuration(false)
|
binding.detailInfo.text = item.durationSecs.formatDuration(false)
|
||||||
binding.detailPlayButton.setOnClickListener { listener.onPlayParent() }
|
binding.detailPlayButton.setOnClickListener { listener.onPlayParent() }
|
||||||
binding.detailShuffleButton.setOnClickListener { listener.onShuffleParent() }
|
binding.detailShuffleButton.setOnClickListener { listener.onShuffleParent() }
|
||||||
}
|
}
|
||||||
|
@ -137,8 +136,8 @@ class GenreSongViewHolder private constructor(private val binding: ItemSongBindi
|
||||||
BindingViewHolder<Song, MenuItemListener>(binding.root) {
|
BindingViewHolder<Song, MenuItemListener>(binding.root) {
|
||||||
override fun bind(item: Song, listener: MenuItemListener) {
|
override fun bind(item: Song, listener: MenuItemListener) {
|
||||||
binding.songAlbumCover.bind(item)
|
binding.songAlbumCover.bind(item)
|
||||||
binding.songName.textSafe = item.resolveName(binding.context)
|
binding.songName.text = item.resolveName(binding.context)
|
||||||
binding.songInfo.textSafe = item.resolveIndividualArtistName(binding.context)
|
binding.songInfo.text = item.resolveIndividualArtistName(binding.context)
|
||||||
binding.root.apply {
|
binding.root.apply {
|
||||||
setOnClickListener { listener.onItemClick(item) }
|
setOnClickListener { listener.onItemClick(item) }
|
||||||
setOnLongClickListener { view ->
|
setOnLongClickListener { view ->
|
||||||
|
|
|
@ -286,7 +286,7 @@ class HomeFragment : ViewBindingFragment<FragmentHomeBinding>(), Toolbar.OnMenuI
|
||||||
when (response) {
|
when (response) {
|
||||||
is Indexer.Response.Err -> {
|
is Indexer.Response.Err -> {
|
||||||
binding.homeIndexingProgress.visibility = View.INVISIBLE
|
binding.homeIndexingProgress.visibility = View.INVISIBLE
|
||||||
binding.homeIndexingStatus.textSafe = getString(R.string.err_index_failed)
|
binding.homeIndexingStatus.text = getString(R.string.err_index_failed)
|
||||||
binding.homeIndexingAction.apply {
|
binding.homeIndexingAction.apply {
|
||||||
visibility = View.VISIBLE
|
visibility = View.VISIBLE
|
||||||
text = getString(R.string.lbl_retry)
|
text = getString(R.string.lbl_retry)
|
||||||
|
@ -295,7 +295,7 @@ class HomeFragment : ViewBindingFragment<FragmentHomeBinding>(), Toolbar.OnMenuI
|
||||||
}
|
}
|
||||||
is Indexer.Response.NoMusic -> {
|
is Indexer.Response.NoMusic -> {
|
||||||
binding.homeIndexingProgress.visibility = View.INVISIBLE
|
binding.homeIndexingProgress.visibility = View.INVISIBLE
|
||||||
binding.homeIndexingStatus.textSafe = getString(R.string.err_no_music)
|
binding.homeIndexingStatus.text = getString(R.string.err_no_music)
|
||||||
binding.homeIndexingAction.apply {
|
binding.homeIndexingAction.apply {
|
||||||
visibility = View.VISIBLE
|
visibility = View.VISIBLE
|
||||||
text = getString(R.string.lbl_retry)
|
text = getString(R.string.lbl_retry)
|
||||||
|
@ -304,7 +304,7 @@ class HomeFragment : ViewBindingFragment<FragmentHomeBinding>(), Toolbar.OnMenuI
|
||||||
}
|
}
|
||||||
is Indexer.Response.NoPerms -> {
|
is Indexer.Response.NoPerms -> {
|
||||||
binding.homeIndexingProgress.visibility = View.INVISIBLE
|
binding.homeIndexingProgress.visibility = View.INVISIBLE
|
||||||
binding.homeIndexingStatus.textSafe = getString(R.string.err_no_perms)
|
binding.homeIndexingStatus.text = getString(R.string.err_no_perms)
|
||||||
binding.homeIndexingAction.apply {
|
binding.homeIndexingAction.apply {
|
||||||
visibility = View.VISIBLE
|
visibility = View.VISIBLE
|
||||||
text = getString(R.string.lbl_grant)
|
text = getString(R.string.lbl_grant)
|
||||||
|
@ -326,11 +326,11 @@ class HomeFragment : ViewBindingFragment<FragmentHomeBinding>(), Toolbar.OnMenuI
|
||||||
|
|
||||||
when (indexing) {
|
when (indexing) {
|
||||||
is Indexer.Indexing.Indeterminate -> {
|
is Indexer.Indexing.Indeterminate -> {
|
||||||
binding.homeIndexingStatus.textSafe = getString(R.string.lng_indexing_desc)
|
binding.homeIndexingStatus.text = getString(R.string.lng_indexing_desc)
|
||||||
binding.homeIndexingProgress.isIndeterminate = true
|
binding.homeIndexingProgress.isIndeterminate = true
|
||||||
}
|
}
|
||||||
is Indexer.Indexing.Songs -> {
|
is Indexer.Indexing.Songs -> {
|
||||||
binding.homeIndexingStatus.textSafe =
|
binding.homeIndexingStatus.text =
|
||||||
getString(R.string.fmt_indexing, indexing.current, indexing.total)
|
getString(R.string.fmt_indexing, indexing.current, indexing.total)
|
||||||
binding.homeIndexingProgress.apply {
|
binding.homeIndexingProgress.apply {
|
||||||
isIndeterminate = false
|
isIndeterminate = false
|
||||||
|
|
|
@ -25,7 +25,6 @@ import org.oxycblt.auxio.ui.recycler.BindingViewHolder
|
||||||
import org.oxycblt.auxio.ui.recycler.MonoAdapter
|
import org.oxycblt.auxio.ui.recycler.MonoAdapter
|
||||||
import org.oxycblt.auxio.util.context
|
import org.oxycblt.auxio.util.context
|
||||||
import org.oxycblt.auxio.util.inflater
|
import org.oxycblt.auxio.util.inflater
|
||||||
import org.oxycblt.auxio.util.textSafe
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adapter that shows the excluded directories and their "Clear" button.
|
* Adapter that shows the excluded directories and their "Clear" button.
|
||||||
|
@ -74,7 +73,7 @@ class MusicDirAdapter(listener: Listener) :
|
||||||
class MusicDirViewHolder private constructor(private val binding: ItemMusicDirBinding) :
|
class MusicDirViewHolder private constructor(private val binding: ItemMusicDirBinding) :
|
||||||
BindingViewHolder<Directory, MusicDirAdapter.Listener>(binding.root) {
|
BindingViewHolder<Directory, MusicDirAdapter.Listener>(binding.root) {
|
||||||
override fun bind(item: Directory, listener: MusicDirAdapter.Listener) {
|
override fun bind(item: Directory, listener: MusicDirAdapter.Listener) {
|
||||||
binding.dirPath.textSafe = item.resolveName(binding.context)
|
binding.dirPath.text = item.resolveName(binding.context)
|
||||||
binding.dirDelete.setOnClickListener { listener.onRemoveDirectory(item) }
|
binding.dirDelete.setOnClickListener { listener.onRemoveDirectory(item) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@ import org.oxycblt.auxio.ui.fragment.ViewBindingFragment
|
||||||
import org.oxycblt.auxio.util.androidActivityViewModels
|
import org.oxycblt.auxio.util.androidActivityViewModels
|
||||||
import org.oxycblt.auxio.util.collectImmediately
|
import org.oxycblt.auxio.util.collectImmediately
|
||||||
import org.oxycblt.auxio.util.getColorStateListSafe
|
import org.oxycblt.auxio.util.getColorStateListSafe
|
||||||
import org.oxycblt.auxio.util.textSafe
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A fragment showing the current playback state in a compact manner. Used as the bar for the
|
* A fragment showing the current playback state in a compact manner. Used as the bar for the
|
||||||
|
@ -77,8 +76,8 @@ class PlaybackBarFragment : ViewBindingFragment<FragmentPlaybackBarBinding>() {
|
||||||
val context = requireContext()
|
val context = requireContext()
|
||||||
val binding = requireBinding()
|
val binding = requireBinding()
|
||||||
binding.playbackCover.bind(song)
|
binding.playbackCover.bind(song)
|
||||||
binding.playbackSong.textSafe = song.resolveName(context)
|
binding.playbackSong.text = song.resolveName(context)
|
||||||
binding.playbackInfo.textSafe = song.resolveIndividualArtistName(context)
|
binding.playbackInfo.text = song.resolveIndividualArtistName(context)
|
||||||
binding.playbackProgressBar.max = song.durationSecs.toInt()
|
binding.playbackProgressBar.max = song.durationSecs.toInt()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,6 @@ import org.oxycblt.auxio.util.collectImmediately
|
||||||
import org.oxycblt.auxio.util.getDrawableSafe
|
import org.oxycblt.auxio.util.getDrawableSafe
|
||||||
import org.oxycblt.auxio.util.logD
|
import org.oxycblt.auxio.util.logD
|
||||||
import org.oxycblt.auxio.util.systemBarInsetsCompat
|
import org.oxycblt.auxio.util.systemBarInsetsCompat
|
||||||
import org.oxycblt.auxio.util.textSafe
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A [Fragment] that displays more information about the song, along with more media controls.
|
* A [Fragment] that displays more information about the song, along with more media controls.
|
||||||
|
@ -142,9 +141,9 @@ class PlaybackPanelFragment :
|
||||||
val binding = requireBinding()
|
val binding = requireBinding()
|
||||||
val context = requireContext()
|
val context = requireContext()
|
||||||
binding.playbackCover.bind(song)
|
binding.playbackCover.bind(song)
|
||||||
binding.playbackSong.textSafe = song.resolveName(context)
|
binding.playbackSong.text = song.resolveName(context)
|
||||||
binding.playbackArtist.textSafe = song.resolveIndividualArtistName(context)
|
binding.playbackArtist.text = song.resolveIndividualArtistName(context)
|
||||||
binding.playbackAlbum.textSafe = song.album.resolveName(context)
|
binding.playbackAlbum.text = song.album.resolveName(context)
|
||||||
binding.playbackSeekBar.durationSecs = song.durationSecs
|
binding.playbackSeekBar.durationSecs = song.durationSecs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,6 @@ import org.oxycblt.auxio.databinding.ViewSeekBarBinding
|
||||||
import org.oxycblt.auxio.util.formatDuration
|
import org.oxycblt.auxio.util.formatDuration
|
||||||
import org.oxycblt.auxio.util.inflater
|
import org.oxycblt.auxio.util.inflater
|
||||||
import org.oxycblt.auxio.util.logD
|
import org.oxycblt.auxio.util.logD
|
||||||
import org.oxycblt.auxio.util.textSafe
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A wrapper around [Slider] that shows not only position and duration values, but also basically
|
* A wrapper around [Slider] that shows not only position and duration values, but also basically
|
||||||
|
@ -78,7 +77,7 @@ constructor(
|
||||||
|
|
||||||
// We would want to keep this in the callback, but the callback only fires when
|
// We would want to keep this in the callback, but the callback only fires when
|
||||||
// a value changes completely, and sometimes that does not happen with this view.
|
// a value changes completely, and sometimes that does not happen with this view.
|
||||||
binding.seekBarPosition.textSafe = value.formatDuration(true)
|
binding.seekBarPosition.text = value.formatDuration(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +101,7 @@ constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.seekBarSlider.valueTo = to.toFloat()
|
binding.seekBarSlider.valueTo = to.toFloat()
|
||||||
binding.seekBarDuration.textSafe = value.formatDuration(false)
|
binding.seekBarDuration.text = value.formatDuration(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStartTrackingTouch(slider: Slider) {
|
override fun onStartTrackingTouch(slider: Slider) {
|
||||||
|
@ -120,7 +119,7 @@ constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onValueChange(slider: Slider, value: Float, fromUser: Boolean) {
|
override fun onValueChange(slider: Slider, value: Float, fromUser: Boolean) {
|
||||||
binding.seekBarPosition.textSafe = value.toLong().formatDuration(true)
|
binding.seekBarPosition.text = value.toLong().formatDuration(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Callback {
|
interface Callback {
|
||||||
|
|
|
@ -123,8 +123,8 @@ private constructor(
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
@SuppressLint("ClickableViewAccessibility")
|
||||||
override fun bind(item: Song, listener: QueueItemListener) {
|
override fun bind(item: Song, listener: QueueItemListener) {
|
||||||
binding.songAlbumCover.bind(item)
|
binding.songAlbumCover.bind(item)
|
||||||
binding.songName.textSafe = item.resolveName(binding.context)
|
binding.songName.text = item.resolveName(binding.context)
|
||||||
binding.songInfo.textSafe = item.resolveIndividualArtistName(binding.context)
|
binding.songInfo.text = item.resolveIndividualArtistName(binding.context)
|
||||||
|
|
||||||
binding.background.isInvisible = true
|
binding.background.isInvisible = true
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,6 @@ import org.oxycblt.auxio.databinding.DialogPreAmpBinding
|
||||||
import org.oxycblt.auxio.settings.Settings
|
import org.oxycblt.auxio.settings.Settings
|
||||||
import org.oxycblt.auxio.ui.fragment.ViewBindingDialogFragment
|
import org.oxycblt.auxio.ui.fragment.ViewBindingDialogFragment
|
||||||
import org.oxycblt.auxio.util.context
|
import org.oxycblt.auxio.util.context
|
||||||
import org.oxycblt.auxio.util.textSafe
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The dialog for customizing the ReplayGain pre-amp values.
|
* The dialog for customizing the ReplayGain pre-amp values.
|
||||||
|
@ -77,7 +76,7 @@ class PreAmpCustomizeDialog : ViewBindingDialogFragment<DialogPreAmpBinding>() {
|
||||||
// It is more clear to prepend a +/- before the pre-amp value to make it easier to
|
// It is more clear to prepend a +/- before the pre-amp value to make it easier to
|
||||||
// gauge how much it may be increasing the volume, however android does not add +
|
// gauge how much it may be increasing the volume, however android does not add +
|
||||||
// to positive float values when formatting them in a string. Instead, add it ourselves.
|
// to positive float values when formatting them in a string. Instead, add it ourselves.
|
||||||
ticker.textSafe =
|
ticker.text =
|
||||||
if (valueDb >= 0) {
|
if (valueDb >= 0) {
|
||||||
getString(R.string.fmt_db_pos, valueDb)
|
getString(R.string.fmt_db_pos, valueDb)
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -43,7 +43,6 @@ import org.oxycblt.auxio.util.formatDuration
|
||||||
import org.oxycblt.auxio.util.logD
|
import org.oxycblt.auxio.util.logD
|
||||||
import org.oxycblt.auxio.util.showToast
|
import org.oxycblt.auxio.util.showToast
|
||||||
import org.oxycblt.auxio.util.systemBarInsetsCompat
|
import org.oxycblt.auxio.util.systemBarInsetsCompat
|
||||||
import org.oxycblt.auxio.util.textSafe
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A [BottomSheetDialogFragment] that shows Auxio's about screen.
|
* A [BottomSheetDialogFragment] that shows Auxio's about screen.
|
||||||
|
@ -68,7 +67,7 @@ class AboutFragment : ViewBindingFragment<FragmentAboutBinding>() {
|
||||||
|
|
||||||
binding.aboutToolbar.setNavigationOnClickListener { findNavController().navigateUp() }
|
binding.aboutToolbar.setNavigationOnClickListener { findNavController().navigateUp() }
|
||||||
|
|
||||||
binding.aboutVersion.textSafe = BuildConfig.VERSION_NAME
|
binding.aboutVersion.text = BuildConfig.VERSION_NAME
|
||||||
binding.aboutCode.setOnClickListener { openLinkInBrowser(LINK_CODEBASE) }
|
binding.aboutCode.setOnClickListener { openLinkInBrowser(LINK_CODEBASE) }
|
||||||
binding.aboutFaq.setOnClickListener { openLinkInBrowser(LINK_FAQ) }
|
binding.aboutFaq.setOnClickListener { openLinkInBrowser(LINK_FAQ) }
|
||||||
binding.aboutLicenses.setOnClickListener { openLinkInBrowser(LINK_LICENSES) }
|
binding.aboutLicenses.setOnClickListener { openLinkInBrowser(LINK_LICENSES) }
|
||||||
|
@ -81,26 +80,24 @@ class AboutFragment : ViewBindingFragment<FragmentAboutBinding>() {
|
||||||
|
|
||||||
private fun updateSongCount(songs: List<Song>) {
|
private fun updateSongCount(songs: List<Song>) {
|
||||||
val binding = requireBinding()
|
val binding = requireBinding()
|
||||||
binding.aboutSongCount.textSafe = getString(R.string.fmt_lib_song_count, songs.size)
|
binding.aboutSongCount.text = getString(R.string.fmt_lib_song_count, songs.size)
|
||||||
binding.aboutTotalDuration.textSafe =
|
binding.aboutTotalDuration.text =
|
||||||
getString(
|
getString(
|
||||||
R.string.fmt_lib_total_duration,
|
R.string.fmt_lib_total_duration,
|
||||||
songs.sumOf { it.durationSecs }.formatDuration(false))
|
songs.sumOf { it.durationSecs }.formatDuration(false))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateAlbumCount(albums: List<Album>) {
|
private fun updateAlbumCount(albums: List<Album>) {
|
||||||
requireBinding().aboutAlbumCount.textSafe =
|
requireBinding().aboutAlbumCount.text = getString(R.string.fmt_lib_album_count, albums.size)
|
||||||
getString(R.string.fmt_lib_album_count, albums.size)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateArtistCount(artists: List<Artist>) {
|
private fun updateArtistCount(artists: List<Artist>) {
|
||||||
requireBinding().aboutArtistCount.textSafe =
|
requireBinding().aboutArtistCount.text =
|
||||||
getString(R.string.fmt_lib_artist_count, artists.size)
|
getString(R.string.fmt_lib_artist_count, artists.size)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateGenreCount(genres: List<Genre>) {
|
private fun updateGenreCount(genres: List<Genre>) {
|
||||||
requireBinding().aboutGenreCount.textSafe =
|
requireBinding().aboutGenreCount.text = getString(R.string.fmt_lib_genre_count, genres.size)
|
||||||
getString(R.string.fmt_lib_genre_count, genres.size)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Go through the process of opening a [link] in a browser. */
|
/** Go through the process of opening a [link] in a browser. */
|
||||||
|
|
|
@ -30,7 +30,6 @@ import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.util.context
|
import org.oxycblt.auxio.util.context
|
||||||
import org.oxycblt.auxio.util.getPluralSafe
|
import org.oxycblt.auxio.util.getPluralSafe
|
||||||
import org.oxycblt.auxio.util.inflater
|
import org.oxycblt.auxio.util.inflater
|
||||||
import org.oxycblt.auxio.util.textSafe
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The shared ViewHolder for a [Song].
|
* The shared ViewHolder for a [Song].
|
||||||
|
@ -40,8 +39,8 @@ class SongViewHolder private constructor(private val binding: ItemSongBinding) :
|
||||||
BindingViewHolder<Song, MenuItemListener>(binding.root) {
|
BindingViewHolder<Song, MenuItemListener>(binding.root) {
|
||||||
override fun bind(item: Song, listener: MenuItemListener) {
|
override fun bind(item: Song, listener: MenuItemListener) {
|
||||||
binding.songAlbumCover.bind(item)
|
binding.songAlbumCover.bind(item)
|
||||||
binding.songName.textSafe = item.resolveName(binding.context)
|
binding.songName.text = item.resolveName(binding.context)
|
||||||
binding.songInfo.textSafe = item.resolveIndividualArtistName(binding.context)
|
binding.songInfo.text = item.resolveIndividualArtistName(binding.context)
|
||||||
binding.root.apply {
|
binding.root.apply {
|
||||||
setOnClickListener { listener.onItemClick(item) }
|
setOnClickListener { listener.onItemClick(item) }
|
||||||
setOnLongClickListener { view ->
|
setOnLongClickListener { view ->
|
||||||
|
@ -81,8 +80,8 @@ private constructor(
|
||||||
|
|
||||||
override fun bind(item: Album, listener: MenuItemListener) {
|
override fun bind(item: Album, listener: MenuItemListener) {
|
||||||
binding.parentImage.bind(item)
|
binding.parentImage.bind(item)
|
||||||
binding.parentName.textSafe = item.resolveName(binding.context)
|
binding.parentName.text = item.resolveName(binding.context)
|
||||||
binding.parentInfo.textSafe = item.artist.resolveName(binding.context)
|
binding.parentInfo.text = item.artist.resolveName(binding.context)
|
||||||
binding.root.apply {
|
binding.root.apply {
|
||||||
setOnClickListener { listener.onItemClick(item) }
|
setOnClickListener { listener.onItemClick(item) }
|
||||||
setOnLongClickListener { view ->
|
setOnLongClickListener { view ->
|
||||||
|
@ -121,8 +120,8 @@ class ArtistViewHolder private constructor(private val binding: ItemParentBindin
|
||||||
|
|
||||||
override fun bind(item: Artist, listener: MenuItemListener) {
|
override fun bind(item: Artist, listener: MenuItemListener) {
|
||||||
binding.parentImage.bind(item)
|
binding.parentImage.bind(item)
|
||||||
binding.parentName.textSafe = item.resolveName(binding.context)
|
binding.parentName.text = item.resolveName(binding.context)
|
||||||
binding.parentInfo.textSafe =
|
binding.parentInfo.text =
|
||||||
binding.context.getString(
|
binding.context.getString(
|
||||||
R.string.fmt_two,
|
R.string.fmt_two,
|
||||||
binding.context.getPluralSafe(R.plurals.fmt_album_count, item.albums.size),
|
binding.context.getPluralSafe(R.plurals.fmt_album_count, item.albums.size),
|
||||||
|
@ -167,8 +166,8 @@ private constructor(
|
||||||
|
|
||||||
override fun bind(item: Genre, listener: MenuItemListener) {
|
override fun bind(item: Genre, listener: MenuItemListener) {
|
||||||
binding.parentImage.bind(item)
|
binding.parentImage.bind(item)
|
||||||
binding.parentName.textSafe = item.resolveName(binding.context)
|
binding.parentName.text = item.resolveName(binding.context)
|
||||||
binding.parentInfo.textSafe =
|
binding.parentInfo.text =
|
||||||
binding.context.getPluralSafe(R.plurals.fmt_song_count, item.songs.size)
|
binding.context.getPluralSafe(R.plurals.fmt_song_count, item.songs.size)
|
||||||
binding.root.apply {
|
binding.root.apply {
|
||||||
setOnClickListener { listener.onItemClick(item) }
|
setOnClickListener { listener.onItemClick(item) }
|
||||||
|
@ -205,7 +204,7 @@ class HeaderViewHolder private constructor(private val binding: ItemHeaderBindin
|
||||||
BindingViewHolder<Header, Unit>(binding.root) {
|
BindingViewHolder<Header, Unit>(binding.root) {
|
||||||
|
|
||||||
override fun bind(item: Header, listener: Unit) {
|
override fun bind(item: Header, listener: Unit) {
|
||||||
binding.title.textSafe = binding.context.getString(item.string)
|
binding.title.text = binding.context.getString(item.string)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -26,7 +26,6 @@ import android.graphics.drawable.Drawable
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.WindowInsets
|
import android.view.WindowInsets
|
||||||
import android.widget.TextView
|
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.annotation.ColorRes
|
import androidx.annotation.ColorRes
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
|
@ -114,17 +113,6 @@ val Drawable.isRtl: Boolean
|
||||||
val ViewBinding.context: Context
|
val ViewBinding.context: Context
|
||||||
get() = root.context
|
get() = root.context
|
||||||
|
|
||||||
/**
|
|
||||||
* A variation of [TextView.setText] that automatically relayouts the view when updated. Helps with
|
|
||||||
* getting ellipsize functionality to work.
|
|
||||||
*/
|
|
||||||
var TextView.textSafe: CharSequence
|
|
||||||
get() = text
|
|
||||||
set(value) {
|
|
||||||
text = value
|
|
||||||
requestLayout()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply the recommended spans for a [RecyclerView].
|
* Apply the recommended spans for a [RecyclerView].
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue