Functionality to search songs is operational. Next step is to work on the styling of the searchbar. Currently it is barely visible due to the color and the sizing #44

This commit is contained in:
amazing-username
2019-04-07 14:04:26 -04:00
parent 9e79ebb8d0
commit 7a5f5bfe1f
3 changed files with 94 additions and 24 deletions
@@ -5,6 +5,7 @@ import android.os.Bundle
import android.support.annotation.RequiresApi
import android.support.v7.widget.LinearLayoutManager
import android.view.View
import android.widget.SearchView
import java.lang.Exception
import kotlinx.android.synthetic.main.activity_song_view.*
@@ -14,6 +15,9 @@ import com.example.mear.adapters.RecyclerAdapter
import com.example.mear.models.TrackItems
import com.example.mear.R
import com.example.mear.repositories.TrackRepository
import android.R as RDroid
class SongViewActivity : BaseServiceActivity() {
@@ -33,6 +37,7 @@ class SongViewActivity : BaseServiceActivity() {
window.statusBarColor = resources.getColor(R.color.track_seek)
doBindService()
initializeAdapter()
initializeSongSearchListener()
}
catch (ex: Exception) {
var exMsg = ex.message
@@ -47,6 +52,10 @@ class SongViewActivity : BaseServiceActivity() {
}
fun playTrack(trackItems: TrackItems) {
val id = trackItems.id
musicService!!.playTrack(id)
}
@RequiresApi(Build.VERSION_CODES.N)
private fun initializeAdapter() {
@@ -58,10 +67,9 @@ class SongViewActivity : BaseServiceActivity() {
adapter = RecyclerAdapter({trackItem: TrackItems -> playTrack(trackItem)}, trackListItems)
adapter.configureActivity(this)
trackList.adapter = adapter
trackList.setOnClickListener {
val temp = "dddd"
}
trackList.setHasFixedSize(true)
trackList.setItemViewCacheSize(20);
trackList.setDrawingCacheEnabled(true);
@@ -94,8 +102,23 @@ class SongViewActivity : BaseServiceActivity() {
return trackItems!!
}
fun playTrack(trackItems: TrackItems) {
val id = trackItems.id
musicService!!.playTrack(id)
private fun initializeSongSearchListener() {
songSearch.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
try {
adapter.filter.filter(query)
}
catch (ex: Exception) {
val exMsg = ex.message
}
return false
}
override fun onQueryTextChange(newText: String): Boolean {
// TODO: Implement text change
return false
}
})
}
}
@@ -4,6 +4,8 @@ import android.app.Activity
import android.support.v7.widget.RecyclerView
import android.view.View
import android.view.ViewGroup
import android.widget.Filter
import android.widget.Filterable
import java.lang.Exception
import kotlinx.android.synthetic.main.fragment_song_view.view.*
@@ -16,26 +18,62 @@ import com.example.mear.models.TrackItems
import com.example.mear.R
class RecyclerAdapter(val mOnClickListenerI: (TrackItems) -> Unit , private val trackItemsSourceInit: ArrayList<TrackItems>) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
class RecyclerAdapter(val mOnClickListenerI: (TrackItems) -> Unit,
var trackItemsSourceInit: ArrayList<TrackItems>):
RecyclerView.Adapter<RecyclerAdapter.TrackItemsHolder>(), Filterable {
open interface trackItemClickListener{
fun onClick(view: View)
var allTrackItems = trackItemsSourceInit
val adp = this
override fun onBindViewHolder(holder: TrackItemsHolder, position: Int) {
val itemPhoto = trackItemsSourceInit!![position]
holder.bindTrackItems(itemPhoto, mOnClickListenerI)
}
override fun onCreateViewHolder(parent: ViewGroup, position: Int): TrackItemsHolder {
val inflatedView = parent.inflate(R.layout.fragment_song_view, false)
return TrackItemsHolder(inflatedView)
}
override fun getFilter(): Filter {
return object: Filter() {
override fun performFiltering(constraint: CharSequence?): FilterResults {
val fr = FilterResults()
val sortedList = mutableListOf<TrackItems>()
for (trackItm in allTrackItems) {
if (trackItm.artistTitle.contains(constraint!!, true) ||
trackItm.trackTitle.contains(constraint!!, true)) {
sortedList.add(trackItm)
}
}
fr.count = sortedList.size
fr.values = sortedList
return fr
}
override fun publishResults(constraint: CharSequence?, results: FilterResults?) {
try {
val itms = results!!.values as ArrayList<TrackItems>
adp.trackItemsSourceInit = itms
}
catch (ex: Exception) {
val exMsg = ex.message
}
adp.notifyDataSetChanged()
}
}
}
override fun getItemCount(): Int {
return trackItemsSourceInit!!.size
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val itemPhoto = trackItemsSourceInit!![position]
(holder as TrackItemsHolder).bindTrackItems(itemPhoto, mOnClickListenerI)
}
override fun onCreateViewHolder(parent: ViewGroup, position: Int): RecyclerView.ViewHolder {
val inflatedView = parent.inflate(R.layout.fragment_song_view, false)
return TrackItemsHolder(inflatedView)
}
fun configureActivity(actvity: Activity) {
}
@@ -48,27 +86,27 @@ class RecyclerAdapter(val mOnClickListenerI: (TrackItems) -> Unit , private va
private val imgHeight = 90
private var mBound = false
fun bindTrackItems(trackItems: TrackItems, clickList: (TrackItems) -> Unit) {
try {
var context = view.context
this.trackItem = trackItems
view.trackTitle.text = trackItem!!.trackTitle
view.trackArtist.text = trackItem!!.artistTitle
val id = trackItems.id
var trackCoverPath = "${context.filesDir}/${Filenames.TRACK_COVERS}"
trackCoverPath = "${trackCoverPath}${id}.bmp"
Picasso.get().load(trackCoverPath).into(view.trackCover)
view.setOnClickListener { clickList(trackItem!!) }
}
catch (ex:Exception) {
val exMsg = ex.message
}
}
companion object {
}
}
}
@@ -14,6 +14,15 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<SearchView
android:id="@+id/songSearch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toTopOf="@+id/trackList"
app:layout_constraintTop_toBottomOf="@+id/space2"
tools:layout_editor_absoluteX="8dp" />
<android.support.v7.widget.RecyclerView
android:id="@+id/trackList"
marginTop="?android:attr/actionBarSize"