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) {
|
for (track in tracks) {
|
||||||
var trackCover = ByteArray(0)
|
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)
|
trackItems.add(trackItem)
|
||||||
}
|
}
|
||||||
return trackItems
|
return trackItems
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import android.widget.Filterable
|
|||||||
|
|
||||||
import java.lang.Exception
|
import java.lang.Exception
|
||||||
import kotlinx.android.synthetic.main.fragment_song_view.view.*
|
import kotlinx.android.synthetic.main.fragment_song_view.view.*
|
||||||
|
import kotlinx.coroutines.GlobalScope
|
||||||
|
|
||||||
import com.squareup.picasso.Picasso
|
import com.squareup.picasso.Picasso
|
||||||
|
|
||||||
@@ -16,6 +17,9 @@ import com.example.mear.constants.Filenames
|
|||||||
import com.example.mear.inflate
|
import com.example.mear.inflate
|
||||||
import com.example.mear.models.TrackItems
|
import com.example.mear.models.TrackItems
|
||||||
import com.example.mear.R
|
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,
|
class RecyclerAdapter(val mOnClickListenerI: (TrackItems) -> Unit,
|
||||||
@@ -82,8 +86,8 @@ class RecyclerAdapter(val mOnClickListenerI: (TrackItems) -> Unit,
|
|||||||
|
|
||||||
private var view: View = v
|
private var view: View = v
|
||||||
private var trackItem: TrackItems? = null
|
private var trackItem: TrackItems? = null
|
||||||
private val imgWidth = 90
|
private val imgWidth = 40
|
||||||
private val imgHeight = 90
|
private val imgHeight = 40
|
||||||
private var mBound = false
|
private var mBound = false
|
||||||
|
|
||||||
fun bindTrackItems(trackItems: TrackItems, clickList: (TrackItems) -> Unit) {
|
fun bindTrackItems(trackItems: TrackItems, clickList: (TrackItems) -> Unit) {
|
||||||
@@ -100,7 +104,16 @@ class RecyclerAdapter(val mOnClickListenerI: (TrackItems) -> Unit,
|
|||||||
var trackCoverPath = "${context.filesDir}/${Filenames.TRACK_COVERS}"
|
var trackCoverPath = "${context.filesDir}/${Filenames.TRACK_COVERS}"
|
||||||
trackCoverPath = "${trackCoverPath}${id}.bmp"
|
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!!) }
|
view.setOnClickListener { clickList(trackItem!!) }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.example.mear.models
|
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.Bitmap
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
|
|
||||||
class ConvertByteArray(private val byteArray: ByteArray) {
|
class ConvertByteArray(private val byteArray: ByteArray?) {
|
||||||
|
|
||||||
fun convertToBmp(): Bitmap {
|
fun convertToBmp(): Bitmap {
|
||||||
val songImage = BitmapFactory
|
val songImage = BitmapFactory
|
||||||
.decodeByteArray(byteArray, 0, byteArray.size)
|
.decodeByteArray(byteArray, 0, byteArray!!.size)
|
||||||
|
|
||||||
return songImage
|
return songImage
|
||||||
}
|
}
|
||||||
fun convertToBmptScales(width: Int, height: Int): Bitmap {
|
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)
|
return Bitmap.createScaledBitmap(b, width, height, false)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,12 @@ package com.example.mear.util
|
|||||||
|
|
||||||
import android.media.MediaMetadataRetriever
|
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 {
|
fun retrieveCover(): ByteArray {
|
||||||
var trackData = MediaMetadataRetriever()
|
var trackData = MediaMetadataRetriever()
|
||||||
@@ -10,6 +15,57 @@ class ExtractCover(private val trackPath: String) {
|
|||||||
|
|
||||||
return trackData.embeddedPicture
|
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 {
|
fun hasCover(): Boolean {
|
||||||
var trackData = MediaMetadataRetriever()
|
var trackData = MediaMetadataRetriever()
|
||||||
@@ -19,6 +75,40 @@ class ExtractCover(private val trackPath: String) {
|
|||||||
return false
|
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
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -44,8 +44,8 @@
|
|||||||
|
|
||||||
<android.support.v7.widget.AppCompatImageView
|
<android.support.v7.widget.AppCompatImageView
|
||||||
android:id="@+id/trackCover"
|
android:id="@+id/trackCover"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="45dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="45dp"
|
||||||
card_view:srcCompat="@mipmap/ic_launcher_round" />
|
card_view:srcCompat="@mipmap/ic_launcher_round" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|||||||
Reference in New Issue
Block a user