Add song count/Styling changes
Add a song count to the album item, along with updating the font once again to differentiate myself from Music Player GO.
This commit is contained in:
parent
1e4f80b779
commit
f511cfd161
15 changed files with 78 additions and 43 deletions
|
@ -3,6 +3,7 @@ package org.oxycblt.auxio
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.appcompat.app.AppCompatDelegate
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
|
@ -10,7 +11,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
|
|
||||||
// AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
|
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
|
||||||
|
|
||||||
Log.d(this::class.simpleName, "Activity Created.")
|
Log.d(this::class.simpleName, "Activity Created.")
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import org.oxycblt.auxio.R
|
import org.oxycblt.auxio.R
|
||||||
import org.oxycblt.auxio.databinding.FragmentLibraryBinding
|
import org.oxycblt.auxio.databinding.FragmentLibraryBinding
|
||||||
import org.oxycblt.auxio.library.recycler.AlbumDataAdapter
|
import org.oxycblt.auxio.recycler.AlbumDataAdapter
|
||||||
|
|
||||||
class LibraryFragment : Fragment() {
|
class LibraryFragment : Fragment() {
|
||||||
|
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
package org.oxycblt.auxio.library.recycler
|
|
||||||
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
|
||||||
import org.oxycblt.auxio.databinding.AlbumItemBinding
|
|
||||||
import org.oxycblt.auxio.music.models.Album
|
|
||||||
|
|
||||||
class AlbumViewHolder(
|
|
||||||
private var binding: AlbumItemBinding
|
|
||||||
) : RecyclerView.ViewHolder(binding.root) {
|
|
||||||
|
|
||||||
// Bind the view w/new data
|
|
||||||
fun bind(album: Album) {
|
|
||||||
binding.album = album
|
|
||||||
|
|
||||||
// Set an album cover [If possible]
|
|
||||||
album.cover?.let { cover ->
|
|
||||||
binding.cover.setImageBitmap(cover)
|
|
||||||
}
|
|
||||||
binding.executePendingBindings()
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,9 +1,10 @@
|
||||||
package org.oxycblt.auxio.library.recycler
|
package org.oxycblt.auxio.recycler
|
||||||
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import org.oxycblt.auxio.databinding.AlbumItemBinding
|
import org.oxycblt.auxio.databinding.AlbumItemBinding
|
||||||
import org.oxycblt.auxio.music.models.Album
|
import org.oxycblt.auxio.music.models.Album
|
||||||
|
|
||||||
|
@ -37,3 +38,23 @@ class AlbumDataAdapter : ListAdapter<Album, AlbumViewHolder>(DiffCallback) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class AlbumViewHolder(
|
||||||
|
private var binding: AlbumItemBinding
|
||||||
|
) : RecyclerView.ViewHolder(binding.root) {
|
||||||
|
|
||||||
|
// Bind the view w/new data
|
||||||
|
fun bind(album: Album) {
|
||||||
|
binding.album = album
|
||||||
|
|
||||||
|
if (album.cover == null) {
|
||||||
|
// If there is no cover, clear the ImageView so that the previous
|
||||||
|
// View's cover doesnt stick around.
|
||||||
|
binding.cover.setImageResource(android.R.color.transparent)
|
||||||
|
} else {
|
||||||
|
binding.cover.setImageBitmap(album.cover)
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.executePendingBindings()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package org.oxycblt.auxio.recycler
|
||||||
|
|
||||||
|
import android.widget.TextView
|
||||||
|
import androidx.databinding.BindingAdapter
|
||||||
|
import org.oxycblt.auxio.R
|
||||||
|
import org.oxycblt.auxio.music.models.Album
|
||||||
|
|
||||||
|
@BindingAdapter("songCount")
|
||||||
|
fun TextView.numSongsToText(album: Album) {
|
||||||
|
text = if (album.numSongs < 2) {
|
||||||
|
context.getString(R.string.label_single_song)
|
||||||
|
} else {
|
||||||
|
context.getString(R.string.format_multi_song_count, album.numSongs.toString())
|
||||||
|
}
|
||||||
|
}
|
BIN
app/src/main/res/font/inter.ttf
Normal file
BIN
app/src/main/res/font/inter.ttf
Normal file
Binary file not shown.
BIN
app/src/main/res/font/inter_black.ttf
Normal file
BIN
app/src/main/res/font/inter_black.ttf
Normal file
Binary file not shown.
BIN
app/src/main/res/font/inter_semibold.ttf
Normal file
BIN
app/src/main/res/font/inter_semibold.ttf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -13,35 +13,49 @@
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="@dimen/margin_medium">
|
android:padding="@dimen/padding_small">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/cover"
|
android:id="@+id/cover"
|
||||||
android:layout_width="@dimen/cover_size"
|
android:layout_width="42dp"
|
||||||
android:layout_height="@dimen/cover_size"
|
android:layout_height="45dp"
|
||||||
android:contentDescription="@{@string/description_cover_art + album.title}"
|
android:contentDescription="@{@string/description_cover_art + album.title}"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.0"
|
app:layout_constraintHorizontal_bias="0.0"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
tools:src="@tools:sample/backgrounds/scenic" />
|
tools:src="@tools:sample/backgrounds/scenic"
|
||||||
|
tools:srcCompat="@tools:sample/backgrounds/scenic" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/albumNameText"
|
android:id="@+id/album_name"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="@dimen/margin_medium"
|
android:layout_marginStart="@dimen/margin_small"
|
||||||
android:fontFamily="@font/source_sans_pro"
|
|
||||||
android:text="@{album.title}"
|
android:text="@{album.title}"
|
||||||
android:textAppearance="?android:attr/textAppearanceListItem"
|
android:textAppearance="?android:attr/textAppearanceListItem"
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
android:fontFamily="@font/inter"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintBottom_toTopOf="@+id/song_count"
|
||||||
app:layout_constraintHorizontal_bias="0.05"
|
|
||||||
app:layout_constraintStart_toEndOf="@+id/cover"
|
app:layout_constraintStart_toEndOf="@+id/cover"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_chainStyle="packed"
|
||||||
tools:text="Album Name" />
|
tools:text="Album Name" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/song_count"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/margin_small"
|
||||||
|
android:fontFamily="@font/inter"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceListItem"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/cover"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/album_name"
|
||||||
|
app:songCount="@{album}"
|
||||||
|
tools:text="@string/tools_song_count" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
</layout>
|
</layout>
|
|
@ -20,7 +20,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:indeterminateTint="?android:attr/colorAccent"
|
android:indeterminateTint="?android:attr/colorAccent"
|
||||||
android:indeterminateTintMode="src_in"
|
android:indeterminateTintMode="src_in"
|
||||||
android:paddingBottom="@dimen/padding_small"
|
android:paddingBottom="@dimen/padding_tiny"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/error_text"
|
app:layout_constraintBottom_toTopOf="@+id/error_text"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
android:id="@+id/error_text"
|
android:id="@+id/error_text"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fontFamily="@font/source_sans_pro"
|
android:fontFamily="@font/inter"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/reset_button"
|
app:layout_constraintBottom_toTopOf="@+id/reset_button"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
@ -45,10 +45,10 @@
|
||||||
style="@style/Widget.AppCompat.Button.Borderless.Colored"
|
style="@style/Widget.AppCompat.Button.Borderless.Colored"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fontFamily="@font/source_sans_pro"
|
|
||||||
android:onClick="@{() -> loadingModel.retry()}"
|
android:onClick="@{() -> loadingModel.retry()}"
|
||||||
android:text="@string/label_retry"
|
android:text="@string/label_retry"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
|
android:fontFamily="@font/inter_semibold"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<dimen name="padding_small">4dp</dimen>
|
<dimen name="padding_tiny">4dp</dimen>
|
||||||
<dimen name="padding_medium">8dp</dimen>
|
<dimen name="padding_small">8dp</dimen>
|
||||||
|
|
||||||
<dimen name="margin_medium">8dp</dimen>
|
<dimen name="margin_small">8dp</dimen>
|
||||||
|
|
||||||
<dimen name="cover_size">64dp</dimen>
|
<dimen name="cover_size">44dp</dimen>
|
||||||
|
|
||||||
<dimen name="elevation_normal">6dp</dimen>
|
<dimen name="elevation_normal">4dp</dimen>
|
||||||
</resources>
|
</resources>
|
|
@ -6,8 +6,13 @@
|
||||||
<string name="error_music_load_failed">Music loading failed.</string>
|
<string name="error_music_load_failed">Music loading failed.</string>
|
||||||
|
|
||||||
<string name="label_retry">Retry</string>
|
<string name="label_retry">Retry</string>
|
||||||
|
<string name="label_single_song">1 Song</string>
|
||||||
|
|
||||||
|
<string name="format_multi_song_count">%s Songs</string>
|
||||||
|
|
||||||
<string name="title_library_fragment"><b>Library</b></string>
|
<string name="title_library_fragment"><b>Library</b></string>
|
||||||
|
|
||||||
<string name="description_cover_art">Cover art for </string>
|
<string name="description_cover_art">Cover art for </string>
|
||||||
|
|
||||||
|
<string name="tools_song_count">10 Songs</string>
|
||||||
</resources>
|
</resources>
|
|
@ -7,7 +7,7 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="ToolbarText" parent="TextAppearance.AppCompat.Title">
|
<style name="ToolbarText" parent="TextAppearance.AppCompat.Title">
|
||||||
<item name="android:fontFamily">@font/source_sans_pro_black</item>
|
|
||||||
<item name="android:textColor">@color/blue</item>
|
<item name="android:textColor">@color/blue</item>
|
||||||
|
<item name="android:fontFamily">@font/inter_black</item>
|
||||||
</style>
|
</style>
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in a new issue