From ee66850c245c09ad3c837135b009d049007af71b Mon Sep 17 00:00:00 2001 From: amazing-username Date: Wed, 10 Apr 2019 21:30:26 -0400 Subject: [PATCH] Working on adding the cover art of a song in the song view #51 --- .../mear/activities/SongViewActivity.kt | 2 +- .../example/mear/adapters/RecyclerAdapter.kt | 19 +++- .../com/example/mear/models/TrackItems.kt | 3 +- .../com/example/mear/util/ConvertByteArray.kt | 6 +- .../com/example/mear/util/ExtractCover.kt | 92 ++++++++++++++++++- .../main/res/layout/fragment_song_view.xml | 4 +- 6 files changed, 115 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/example/mear/activities/SongViewActivity.kt b/app/src/main/java/com/example/mear/activities/SongViewActivity.kt index 970c13d..6b1c848 100644 --- a/app/src/main/java/com/example/mear/activities/SongViewActivity.kt +++ b/app/src/main/java/com/example/mear/activities/SongViewActivity.kt @@ -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 diff --git a/app/src/main/java/com/example/mear/adapters/RecyclerAdapter.kt b/app/src/main/java/com/example/mear/adapters/RecyclerAdapter.kt index 1c5978c..56d6621 100644 --- a/app/src/main/java/com/example/mear/adapters/RecyclerAdapter.kt +++ b/app/src/main/java/com/example/mear/adapters/RecyclerAdapter.kt @@ -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!!) } } diff --git a/app/src/main/java/com/example/mear/models/TrackItems.kt b/app/src/main/java/com/example/mear/models/TrackItems.kt index 73bd01e..474126b 100644 --- a/app/src/main/java/com/example/mear/models/TrackItems.kt +++ b/app/src/main/java/com/example/mear/models/TrackItems.kt @@ -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) { } \ No newline at end of file diff --git a/app/src/main/java/com/example/mear/util/ConvertByteArray.kt b/app/src/main/java/com/example/mear/util/ConvertByteArray.kt index 7976e3a..e2c9831 100644 --- a/app/src/main/java/com/example/mear/util/ConvertByteArray.kt +++ b/app/src/main/java/com/example/mear/util/ConvertByteArray.kt @@ -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) } diff --git a/app/src/main/java/com/example/mear/util/ExtractCover.kt b/app/src/main/java/com/example/mear/util/ExtractCover.kt index 3311075..88c0c1d 100644 --- a/app/src/main/java/com/example/mear/util/ExtractCover.kt +++ b/app/src/main/java/com/example/mear/util/ExtractCover.kt @@ -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 } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_song_view.xml b/app/src/main/res/layout/fragment_song_view.xml index 6853aac..98f363b 100644 --- a/app/src/main/res/layout/fragment_song_view.xml +++ b/app/src/main/res/layout/fragment_song_view.xml @@ -44,8 +44,8 @@