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.getPluralSafe
|
||||
import org.oxycblt.auxio.util.inflater
|
||||
import org.oxycblt.auxio.util.textSafe
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
binding.detailCover.bind(item)
|
||||
binding.detailName.textSafe = item.resolveName(binding.context)
|
||||
binding.detailName.text = item.resolveName(binding.context)
|
||||
|
||||
binding.detailSubhead.apply {
|
||||
textSafe = item.artist.resolveName(context)
|
||||
text = item.artist.resolveName(context)
|
||||
setOnClickListener { listener.onNavigateToArtist() }
|
||||
}
|
||||
|
||||
|
@ -176,7 +175,7 @@ class DiscHeaderViewHolder(private val binding: ItemDiscHeaderBinding) :
|
|||
BindingViewHolder<DiscHeader, Unit>(binding.root) {
|
||||
|
||||
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 {
|
||||
|
@ -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.
|
||||
if (item.track != null) {
|
||||
binding.songTrack.apply {
|
||||
textSafe = context.getString(R.string.fmt_number, item.track)
|
||||
text = context.getString(R.string.fmt_number, item.track)
|
||||
isInvisible = false
|
||||
contentDescription = context.getString(R.string.desc_track_number, item.track)
|
||||
}
|
||||
} else {
|
||||
binding.songTrack.apply {
|
||||
textSafe = ""
|
||||
text = ""
|
||||
isInvisible = true
|
||||
contentDescription = context.getString(R.string.def_track)
|
||||
}
|
||||
}
|
||||
|
||||
binding.songName.textSafe = item.resolveName(binding.context)
|
||||
binding.songDuration.textSafe = item.durationSecs.formatDuration(false)
|
||||
binding.songName.text = item.resolveName(binding.context)
|
||||
binding.songDuration.text = item.durationSecs.formatDuration(false)
|
||||
|
||||
binding.root.apply {
|
||||
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.getPluralSafe
|
||||
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
|
||||
|
@ -124,11 +123,11 @@ private class ArtistDetailViewHolder private constructor(private val binding: It
|
|||
|
||||
override fun bind(item: Artist, listener: DetailAdapter.Listener) {
|
||||
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
|
||||
// the most "Prominent" genre.
|
||||
binding.detailSubhead.textSafe =
|
||||
binding.detailSubhead.text =
|
||||
item.songs
|
||||
.groupBy { it.genre.resolveName(binding.context) }
|
||||
.entries
|
||||
|
@ -136,7 +135,7 @@ private class ArtistDetailViewHolder private constructor(private val binding: It
|
|||
?.key
|
||||
?: binding.context.getString(R.string.def_genre)
|
||||
|
||||
binding.detailInfo.textSafe =
|
||||
binding.detailInfo.text =
|
||||
binding.context.getString(
|
||||
R.string.fmt_two,
|
||||
binding.context.getPluralSafe(R.plurals.fmt_album_count, item.albums.size),
|
||||
|
@ -166,8 +165,8 @@ private constructor(
|
|||
) : BindingViewHolder<Album, MenuItemListener>(binding.root) {
|
||||
override fun bind(item: Album, listener: MenuItemListener) {
|
||||
binding.parentImage.bind(item)
|
||||
binding.parentName.textSafe = item.resolveName(binding.context)
|
||||
binding.parentInfo.textSafe = item.date.resolveYear(binding.context)
|
||||
binding.parentName.text = item.resolveName(binding.context)
|
||||
binding.parentInfo.text = item.date.resolveYear(binding.context)
|
||||
|
||||
binding.root.apply {
|
||||
setOnClickListener { listener.onItemClick(item) }
|
||||
|
@ -202,8 +201,8 @@ private constructor(
|
|||
) : BindingViewHolder<Song, MenuItemListener>(binding.root) {
|
||||
override fun bind(item: Song, listener: MenuItemListener) {
|
||||
binding.songAlbumCover.bind(item)
|
||||
binding.songName.textSafe = item.resolveName(binding.context)
|
||||
binding.songInfo.textSafe = item.album.resolveName(binding.context)
|
||||
binding.songName.text = item.resolveName(binding.context)
|
||||
binding.songInfo.text = item.album.resolveName(binding.context)
|
||||
|
||||
binding.root.apply {
|
||||
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.inflater
|
||||
import org.oxycblt.auxio.util.logW
|
||||
import org.oxycblt.auxio.util.textSafe
|
||||
|
||||
abstract class DetailAdapter<L : DetailAdapter.Listener>(
|
||||
listener: L,
|
||||
|
@ -130,7 +129,7 @@ abstract class DetailAdapter<L : DetailAdapter.Listener>(
|
|||
class SortHeaderViewHolder(private val binding: ItemSortHeaderBinding) :
|
||||
BindingViewHolder<SortHeader, DetailAdapter.Listener>(binding.root) {
|
||||
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 {
|
||||
TooltipCompat.setTooltipText(this, contentDescription)
|
||||
setOnClickListener(listener::onShowSortMenu)
|
||||
|
|
|
@ -34,7 +34,6 @@ import org.oxycblt.auxio.util.context
|
|||
import org.oxycblt.auxio.util.formatDuration
|
||||
import org.oxycblt.auxio.util.getPluralSafe
|
||||
import org.oxycblt.auxio.util.inflater
|
||||
import org.oxycblt.auxio.util.textSafe
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
override fun bind(item: Genre, listener: DetailAdapter.Listener) {
|
||||
binding.detailCover.bind(item)
|
||||
binding.detailName.textSafe = item.resolveName(binding.context)
|
||||
binding.detailSubhead.textSafe =
|
||||
binding.detailName.text = item.resolveName(binding.context)
|
||||
binding.detailSubhead.text =
|
||||
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.detailShuffleButton.setOnClickListener { listener.onShuffleParent() }
|
||||
}
|
||||
|
@ -137,8 +136,8 @@ class GenreSongViewHolder private constructor(private val binding: ItemSongBindi
|
|||
BindingViewHolder<Song, MenuItemListener>(binding.root) {
|
||||
override fun bind(item: Song, listener: MenuItemListener) {
|
||||
binding.songAlbumCover.bind(item)
|
||||
binding.songName.textSafe = item.resolveName(binding.context)
|
||||
binding.songInfo.textSafe = item.resolveIndividualArtistName(binding.context)
|
||||
binding.songName.text = item.resolveName(binding.context)
|
||||
binding.songInfo.text = item.resolveIndividualArtistName(binding.context)
|
||||
binding.root.apply {
|
||||
setOnClickListener { listener.onItemClick(item) }
|
||||
setOnLongClickListener { view ->
|
||||
|
|
|
@ -286,7 +286,7 @@ class HomeFragment : ViewBindingFragment<FragmentHomeBinding>(), Toolbar.OnMenuI
|
|||
when (response) {
|
||||
is Indexer.Response.Err -> {
|
||||
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 {
|
||||
visibility = View.VISIBLE
|
||||
text = getString(R.string.lbl_retry)
|
||||
|
@ -295,7 +295,7 @@ class HomeFragment : ViewBindingFragment<FragmentHomeBinding>(), Toolbar.OnMenuI
|
|||
}
|
||||
is Indexer.Response.NoMusic -> {
|
||||
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 {
|
||||
visibility = View.VISIBLE
|
||||
text = getString(R.string.lbl_retry)
|
||||
|
@ -304,7 +304,7 @@ class HomeFragment : ViewBindingFragment<FragmentHomeBinding>(), Toolbar.OnMenuI
|
|||
}
|
||||
is Indexer.Response.NoPerms -> {
|
||||
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 {
|
||||
visibility = View.VISIBLE
|
||||
text = getString(R.string.lbl_grant)
|
||||
|
@ -326,11 +326,11 @@ class HomeFragment : ViewBindingFragment<FragmentHomeBinding>(), Toolbar.OnMenuI
|
|||
|
||||
when (indexing) {
|
||||
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
|
||||
}
|
||||
is Indexer.Indexing.Songs -> {
|
||||
binding.homeIndexingStatus.textSafe =
|
||||
binding.homeIndexingStatus.text =
|
||||
getString(R.string.fmt_indexing, indexing.current, indexing.total)
|
||||
binding.homeIndexingProgress.apply {
|
||||
isIndeterminate = false
|
||||
|
|
|
@ -25,7 +25,6 @@ import org.oxycblt.auxio.ui.recycler.BindingViewHolder
|
|||
import org.oxycblt.auxio.ui.recycler.MonoAdapter
|
||||
import org.oxycblt.auxio.util.context
|
||||
import org.oxycblt.auxio.util.inflater
|
||||
import org.oxycblt.auxio.util.textSafe
|
||||
|
||||
/**
|
||||
* 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) :
|
||||
BindingViewHolder<Directory, MusicDirAdapter.Listener>(binding.root) {
|
||||
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) }
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,6 @@ import org.oxycblt.auxio.ui.fragment.ViewBindingFragment
|
|||
import org.oxycblt.auxio.util.androidActivityViewModels
|
||||
import org.oxycblt.auxio.util.collectImmediately
|
||||
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
|
||||
|
@ -77,8 +76,8 @@ class PlaybackBarFragment : ViewBindingFragment<FragmentPlaybackBarBinding>() {
|
|||
val context = requireContext()
|
||||
val binding = requireBinding()
|
||||
binding.playbackCover.bind(song)
|
||||
binding.playbackSong.textSafe = song.resolveName(context)
|
||||
binding.playbackInfo.textSafe = song.resolveIndividualArtistName(context)
|
||||
binding.playbackSong.text = song.resolveName(context)
|
||||
binding.playbackInfo.text = song.resolveIndividualArtistName(context)
|
||||
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.logD
|
||||
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.
|
||||
|
@ -142,9 +141,9 @@ class PlaybackPanelFragment :
|
|||
val binding = requireBinding()
|
||||
val context = requireContext()
|
||||
binding.playbackCover.bind(song)
|
||||
binding.playbackSong.textSafe = song.resolveName(context)
|
||||
binding.playbackArtist.textSafe = song.resolveIndividualArtistName(context)
|
||||
binding.playbackAlbum.textSafe = song.album.resolveName(context)
|
||||
binding.playbackSong.text = song.resolveName(context)
|
||||
binding.playbackArtist.text = song.resolveIndividualArtistName(context)
|
||||
binding.playbackAlbum.text = song.album.resolveName(context)
|
||||
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.inflater
|
||||
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
|
||||
|
@ -78,7 +77,7 @@ constructor(
|
|||
|
||||
// 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.
|
||||
binding.seekBarPosition.textSafe = value.formatDuration(true)
|
||||
binding.seekBarPosition.text = value.formatDuration(true)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,7 +101,7 @@ constructor(
|
|||
}
|
||||
|
||||
binding.seekBarSlider.valueTo = to.toFloat()
|
||||
binding.seekBarDuration.textSafe = value.formatDuration(false)
|
||||
binding.seekBarDuration.text = value.formatDuration(false)
|
||||
}
|
||||
|
||||
override fun onStartTrackingTouch(slider: Slider) {
|
||||
|
@ -120,7 +119,7 @@ constructor(
|
|||
}
|
||||
|
||||
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 {
|
||||
|
|
|
@ -123,8 +123,8 @@ private constructor(
|
|||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun bind(item: Song, listener: QueueItemListener) {
|
||||
binding.songAlbumCover.bind(item)
|
||||
binding.songName.textSafe = item.resolveName(binding.context)
|
||||
binding.songInfo.textSafe = item.resolveIndividualArtistName(binding.context)
|
||||
binding.songName.text = item.resolveName(binding.context)
|
||||
binding.songInfo.text = item.resolveIndividualArtistName(binding.context)
|
||||
|
||||
binding.background.isInvisible = true
|
||||
|
||||
|
|
|
@ -28,7 +28,6 @@ import org.oxycblt.auxio.databinding.DialogPreAmpBinding
|
|||
import org.oxycblt.auxio.settings.Settings
|
||||
import org.oxycblt.auxio.ui.fragment.ViewBindingDialogFragment
|
||||
import org.oxycblt.auxio.util.context
|
||||
import org.oxycblt.auxio.util.textSafe
|
||||
|
||||
/**
|
||||
* 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
|
||||
// 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.
|
||||
ticker.textSafe =
|
||||
ticker.text =
|
||||
if (valueDb >= 0) {
|
||||
getString(R.string.fmt_db_pos, valueDb)
|
||||
} else {
|
||||
|
|
|
@ -43,7 +43,6 @@ import org.oxycblt.auxio.util.formatDuration
|
|||
import org.oxycblt.auxio.util.logD
|
||||
import org.oxycblt.auxio.util.showToast
|
||||
import org.oxycblt.auxio.util.systemBarInsetsCompat
|
||||
import org.oxycblt.auxio.util.textSafe
|
||||
|
||||
/**
|
||||
* A [BottomSheetDialogFragment] that shows Auxio's about screen.
|
||||
|
@ -68,7 +67,7 @@ class AboutFragment : ViewBindingFragment<FragmentAboutBinding>() {
|
|||
|
||||
binding.aboutToolbar.setNavigationOnClickListener { findNavController().navigateUp() }
|
||||
|
||||
binding.aboutVersion.textSafe = BuildConfig.VERSION_NAME
|
||||
binding.aboutVersion.text = BuildConfig.VERSION_NAME
|
||||
binding.aboutCode.setOnClickListener { openLinkInBrowser(LINK_CODEBASE) }
|
||||
binding.aboutFaq.setOnClickListener { openLinkInBrowser(LINK_FAQ) }
|
||||
binding.aboutLicenses.setOnClickListener { openLinkInBrowser(LINK_LICENSES) }
|
||||
|
@ -81,26 +80,24 @@ class AboutFragment : ViewBindingFragment<FragmentAboutBinding>() {
|
|||
|
||||
private fun updateSongCount(songs: List<Song>) {
|
||||
val binding = requireBinding()
|
||||
binding.aboutSongCount.textSafe = getString(R.string.fmt_lib_song_count, songs.size)
|
||||
binding.aboutTotalDuration.textSafe =
|
||||
binding.aboutSongCount.text = getString(R.string.fmt_lib_song_count, songs.size)
|
||||
binding.aboutTotalDuration.text =
|
||||
getString(
|
||||
R.string.fmt_lib_total_duration,
|
||||
songs.sumOf { it.durationSecs }.formatDuration(false))
|
||||
}
|
||||
|
||||
private fun updateAlbumCount(albums: List<Album>) {
|
||||
requireBinding().aboutAlbumCount.textSafe =
|
||||
getString(R.string.fmt_lib_album_count, albums.size)
|
||||
requireBinding().aboutAlbumCount.text = getString(R.string.fmt_lib_album_count, albums.size)
|
||||
}
|
||||
|
||||
private fun updateArtistCount(artists: List<Artist>) {
|
||||
requireBinding().aboutArtistCount.textSafe =
|
||||
requireBinding().aboutArtistCount.text =
|
||||
getString(R.string.fmt_lib_artist_count, artists.size)
|
||||
}
|
||||
|
||||
private fun updateGenreCount(genres: List<Genre>) {
|
||||
requireBinding().aboutGenreCount.textSafe =
|
||||
getString(R.string.fmt_lib_genre_count, genres.size)
|
||||
requireBinding().aboutGenreCount.text = getString(R.string.fmt_lib_genre_count, genres.size)
|
||||
}
|
||||
|
||||
/** 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.getPluralSafe
|
||||
import org.oxycblt.auxio.util.inflater
|
||||
import org.oxycblt.auxio.util.textSafe
|
||||
|
||||
/**
|
||||
* The shared ViewHolder for a [Song].
|
||||
|
@ -40,8 +39,8 @@ class SongViewHolder private constructor(private val binding: ItemSongBinding) :
|
|||
BindingViewHolder<Song, MenuItemListener>(binding.root) {
|
||||
override fun bind(item: Song, listener: MenuItemListener) {
|
||||
binding.songAlbumCover.bind(item)
|
||||
binding.songName.textSafe = item.resolveName(binding.context)
|
||||
binding.songInfo.textSafe = item.resolveIndividualArtistName(binding.context)
|
||||
binding.songName.text = item.resolveName(binding.context)
|
||||
binding.songInfo.text = item.resolveIndividualArtistName(binding.context)
|
||||
binding.root.apply {
|
||||
setOnClickListener { listener.onItemClick(item) }
|
||||
setOnLongClickListener { view ->
|
||||
|
@ -81,8 +80,8 @@ private constructor(
|
|||
|
||||
override fun bind(item: Album, listener: MenuItemListener) {
|
||||
binding.parentImage.bind(item)
|
||||
binding.parentName.textSafe = item.resolveName(binding.context)
|
||||
binding.parentInfo.textSafe = item.artist.resolveName(binding.context)
|
||||
binding.parentName.text = item.resolveName(binding.context)
|
||||
binding.parentInfo.text = item.artist.resolveName(binding.context)
|
||||
binding.root.apply {
|
||||
setOnClickListener { listener.onItemClick(item) }
|
||||
setOnLongClickListener { view ->
|
||||
|
@ -121,8 +120,8 @@ class ArtistViewHolder private constructor(private val binding: ItemParentBindin
|
|||
|
||||
override fun bind(item: Artist, listener: MenuItemListener) {
|
||||
binding.parentImage.bind(item)
|
||||
binding.parentName.textSafe = item.resolveName(binding.context)
|
||||
binding.parentInfo.textSafe =
|
||||
binding.parentName.text = item.resolveName(binding.context)
|
||||
binding.parentInfo.text =
|
||||
binding.context.getString(
|
||||
R.string.fmt_two,
|
||||
binding.context.getPluralSafe(R.plurals.fmt_album_count, item.albums.size),
|
||||
|
@ -167,8 +166,8 @@ private constructor(
|
|||
|
||||
override fun bind(item: Genre, listener: MenuItemListener) {
|
||||
binding.parentImage.bind(item)
|
||||
binding.parentName.textSafe = item.resolveName(binding.context)
|
||||
binding.parentInfo.textSafe =
|
||||
binding.parentName.text = item.resolveName(binding.context)
|
||||
binding.parentInfo.text =
|
||||
binding.context.getPluralSafe(R.plurals.fmt_song_count, item.songs.size)
|
||||
binding.root.apply {
|
||||
setOnClickListener { listener.onItemClick(item) }
|
||||
|
@ -205,7 +204,7 @@ class HeaderViewHolder private constructor(private val binding: ItemHeaderBindin
|
|||
BindingViewHolder<Header, Unit>(binding.root) {
|
||||
|
||||
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 {
|
||||
|
|
|
@ -26,7 +26,6 @@ import android.graphics.drawable.Drawable
|
|||
import android.os.Build
|
||||
import android.view.View
|
||||
import android.view.WindowInsets
|
||||
import android.widget.TextView
|
||||
import androidx.activity.viewModels
|
||||
import androidx.annotation.ColorRes
|
||||
import androidx.annotation.RequiresApi
|
||||
|
@ -114,17 +113,6 @@ val Drawable.isRtl: Boolean
|
|||
val ViewBinding.context: 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].
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue