Working on adding the cover art of a song in the song view #51
This commit is contained in:
@@ -95,7 +95,7 @@ class SongViewActivity : BaseServiceActivity() {
|
||||
|
||||
for (track in tracks) {
|
||||
var trackCover = ByteArray(0)
|
||||
val trackItem = TrackItems(track.id, track.title, track.artist, trackCover!!)
|
||||
val trackItem = TrackItems(track.id, track.title, track.artist, track.songPath, trackCover!!)
|
||||
trackItems.add(trackItem)
|
||||
}
|
||||
return trackItems
|
||||
|
||||
@@ -9,6 +9,7 @@ import android.widget.Filterable
|
||||
|
||||
import java.lang.Exception
|
||||
import kotlinx.android.synthetic.main.fragment_song_view.view.*
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
|
||||
import com.squareup.picasso.Picasso
|
||||
|
||||
@@ -16,6 +17,9 @@ import com.example.mear.constants.Filenames
|
||||
import com.example.mear.inflate
|
||||
import com.example.mear.models.TrackItems
|
||||
import com.example.mear.R
|
||||
import com.example.mear.util.ConvertByteArray
|
||||
import com.example.mear.util.ExtractCover
|
||||
import org.jetbrains.anko.imageBitmap
|
||||
|
||||
|
||||
class RecyclerAdapter(val mOnClickListenerI: (TrackItems) -> Unit,
|
||||
@@ -82,8 +86,8 @@ class RecyclerAdapter(val mOnClickListenerI: (TrackItems) -> Unit,
|
||||
|
||||
private var view: View = v
|
||||
private var trackItem: TrackItems? = null
|
||||
private val imgWidth = 90
|
||||
private val imgHeight = 90
|
||||
private val imgWidth = 40
|
||||
private val imgHeight = 40
|
||||
private var mBound = false
|
||||
|
||||
fun bindTrackItems(trackItems: TrackItems, clickList: (TrackItems) -> Unit) {
|
||||
@@ -100,7 +104,16 @@ class RecyclerAdapter(val mOnClickListenerI: (TrackItems) -> Unit,
|
||||
var trackCoverPath = "${context.filesDir}/${Filenames.TRACK_COVERS}"
|
||||
trackCoverPath = "${trackCoverPath}${id}.bmp"
|
||||
|
||||
Picasso.get().load(trackCoverPath).into(view.trackCover)
|
||||
|
||||
//val extractArt = ExtractCover(null)
|
||||
//val coverArt = extractArt.retrieveCover(trackItem!!.trackPath)
|
||||
|
||||
//val convertByte = ConvertByteArray(coverArt)
|
||||
//var coverArtBmp = convertByte.convertToBmptScales(imgWidth, imgHeight)
|
||||
|
||||
//view.trackCover.imageBitmap = coverArtBmp
|
||||
// TODO: Implement usage of Picasso
|
||||
//Picasso.get().load(trackCoverPath).into(view.trackCover)
|
||||
|
||||
view.setOnClickListener { clickList(trackItem!!) }
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.example.mear.models
|
||||
|
||||
data class TrackItems(val id: Int, val trackTitle: String, val artistTitle: String, val trackCover: ByteArray) {
|
||||
data class TrackItems(val id: Int, val trackTitle: String, val artistTitle: String, val trackPath: String,
|
||||
val trackCover: ByteArray) {
|
||||
|
||||
}
|
||||
@@ -3,16 +3,16 @@ package com.example.mear.util
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
|
||||
class ConvertByteArray(private val byteArray: ByteArray) {
|
||||
class ConvertByteArray(private val byteArray: ByteArray?) {
|
||||
|
||||
fun convertToBmp(): Bitmap {
|
||||
val songImage = BitmapFactory
|
||||
.decodeByteArray(byteArray, 0, byteArray.size)
|
||||
.decodeByteArray(byteArray, 0, byteArray!!.size)
|
||||
|
||||
return songImage
|
||||
}
|
||||
fun convertToBmptScales(width: Int, height: Int): Bitmap {
|
||||
val b = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
|
||||
val b = BitmapFactory.decodeByteArray(byteArray, 0, byteArray!!.size)
|
||||
|
||||
return Bitmap.createScaledBitmap(b, width, height, false)
|
||||
}
|
||||
|
||||
@@ -2,7 +2,12 @@ package com.example.mear.util
|
||||
|
||||
import android.media.MediaMetadataRetriever
|
||||
|
||||
class ExtractCover(private val trackPath: String) {
|
||||
import java.io.FileInputStream
|
||||
|
||||
import com.example.mear.models.Track
|
||||
import java.lang.Exception
|
||||
|
||||
class ExtractCover(private val trackPath: String?) {
|
||||
|
||||
fun retrieveCover(): ByteArray {
|
||||
var trackData = MediaMetadataRetriever()
|
||||
@@ -10,6 +15,57 @@ class ExtractCover(private val trackPath: String) {
|
||||
|
||||
return trackData.embeddedPicture
|
||||
}
|
||||
fun retrieveCover(track: Track): ByteArray? {
|
||||
|
||||
var coverArt: ByteArray? = null
|
||||
|
||||
try {
|
||||
if (!hasCover(track)) {
|
||||
return null
|
||||
}
|
||||
|
||||
val songPath = track.songPath
|
||||
|
||||
val metaData = MediaMetadataRetriever()
|
||||
val fp = FileInputStream(songPath)
|
||||
metaData.setDataSource(fp.fd)
|
||||
|
||||
coverArt = metaData.embeddedPicture
|
||||
|
||||
fp.close()
|
||||
metaData.release()
|
||||
}
|
||||
catch (ex: Exception) {
|
||||
val exMsg = ex.message
|
||||
}
|
||||
|
||||
return coverArt
|
||||
}
|
||||
fun retrieveCover(songPath: String): ByteArray? {
|
||||
|
||||
var coverArt: ByteArray? = null
|
||||
|
||||
try {
|
||||
if (!hasCover(songPath)) {
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
val metaData = MediaMetadataRetriever()
|
||||
val fp = FileInputStream(songPath)
|
||||
metaData.setDataSource(fp.fd)
|
||||
|
||||
coverArt = metaData.embeddedPicture
|
||||
|
||||
fp.close()
|
||||
metaData.release()
|
||||
}
|
||||
catch (ex: Exception) {
|
||||
val exMsg = ex.message
|
||||
}
|
||||
|
||||
return coverArt
|
||||
}
|
||||
|
||||
fun hasCover(): Boolean {
|
||||
var trackData = MediaMetadataRetriever()
|
||||
@@ -19,6 +75,40 @@ class ExtractCover(private val trackPath: String) {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
fun hasCover(track: Track): Boolean {
|
||||
try {
|
||||
val trackData = MediaMetadataRetriever()
|
||||
val songPath = track.songPath
|
||||
val songStream = FileInputStream(songPath)
|
||||
trackData.setDataSource(songStream.fd)
|
||||
|
||||
if (trackData.embeddedPicture == null) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
catch (ex: Exception) {
|
||||
val exMsg = ex.message
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
fun hasCover(songPath: String): Boolean {
|
||||
try {
|
||||
val trackData = MediaMetadataRetriever()
|
||||
val songPath = songPath
|
||||
val songStream = FileInputStream(songPath)
|
||||
trackData.setDataSource(songStream.fd)
|
||||
|
||||
if (trackData.embeddedPicture == null) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
catch (ex: Exception) {
|
||||
val exMsg = ex.message
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -44,8 +44,8 @@
|
||||
|
||||
<android.support.v7.widget.AppCompatImageView
|
||||
android:id="@+id/trackCover"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="45dp"
|
||||
android:layout_height="45dp"
|
||||
card_view:srcCompat="@mipmap/ic_launcher_round" />
|
||||
|
||||
<LinearLayout
|
||||
|
||||
Reference in New Issue
Block a user