From c89d867bffb9578547ce1e433b37d18d62482224 Mon Sep 17 00:00:00 2001 From: amazing-username Date: Mon, 25 Mar 2019 21:55:34 -0400 Subject: [PATCH] Song view functionality broke, attempting to bind the music service to a Holder class through the RecyclerAdapter --- app/app.iml | 12 +++ .../mear/activities/SongViewActivity.kt | 4 +- .../example/mear/adapters/RecyclerAdapter.kt | 84 +++++++++++++++++-- 3 files changed, 91 insertions(+), 9 deletions(-) diff --git a/app/app.iml b/app/app.iml index 3c80a4f..744ea53 100644 --- a/app/app.iml +++ b/app/app.iml @@ -118,26 +118,38 @@ + + + + + + + + + + + + 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 e2a1865..a9c7181 100644 --- a/app/src/main/java/com/example/mear/activities/SongViewActivity.kt +++ b/app/src/main/java/com/example/mear/activities/SongViewActivity.kt @@ -58,8 +58,8 @@ class SongViewActivity : BaseServiceActivity() { trackListItems = retrieveTrackItems() - adapter = RecyclerAdapter(trackListItems) - adapter.musicService = musicService + adapter = RecyclerAdapter(trackListItems, this) + adapter.configureActivity(this) trackList.adapter = adapter trackList.setHasFixedSize(true) trackList.setItemViewCacheSize(20); 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 5abd9aa..feb5f66 100644 --- a/app/src/main/java/com/example/mear/adapters/RecyclerAdapter.kt +++ b/app/src/main/java/com/example/mear/adapters/RecyclerAdapter.kt @@ -1,6 +1,13 @@ package com.example.mear.adapters +import android.app.Activity +import android.app.Application +import android.content.ComponentName +import android.content.Context import android.content.Intent +import android.content.ServiceConnection +import android.os.Bundle +import android.os.IBinder import android.support.v7.widget.RecyclerView import android.view.View import android.view.ViewGroup @@ -18,8 +25,38 @@ import com.example.mear.R import com.example.mear.playback.service.MusicService import com.example.mear.repositories.TrackRepository -class RecyclerAdapter( private val trackItemsSourceInit: ArrayList) : - RecyclerView.Adapter() { +class RecyclerAdapter( private val trackItemsSourceInit: ArrayList, private var act: Activity) : + RecyclerView.Adapter(), + Application.ActivityLifecycleCallbacks { + override fun onActivityPaused(activity: Activity?) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun onActivityStarted(activity: Activity?) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun onActivityDestroyed(activity: Activity?) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun onActivityStopped(activity: Activity?) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun onActivityResumed(activity: Activity?) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + var activityInst: Activity? = act var musicService: MusicService? = null override fun getItemCount(): Int { @@ -33,30 +70,63 @@ class RecyclerAdapter( private val trackItemsSourceInit: ArrayList) override fun onCreateViewHolder(parent: ViewGroup, position: Int): TrackItemsHolder { val inflatedView = parent.inflate(R.layout.fragment_song_view, false) - return TrackItemsHolder(inflatedView, musicService!!) + return TrackItemsHolder(inflatedView, activityInst) } + fun configureActivity(actvity: Activity) { + activityInst = actvity + activityInst!!.application.registerActivityLifecycleCallbacks(this) + } - class TrackItemsHolder(v: View, musicService: MusicService) : RecyclerView.ViewHolder(v), View.OnClickListener { + class TrackItemsHolder(v: View, activity: Activity?) : RecyclerView.ViewHolder(v), View.OnClickListener { private var view: View = v - private var musicService: MusicService = musicService + private var act = activity + private var musicService: MusicService? = null private var trackItem: TrackItems? = null private val imgWidth = 90 private val imgHeight = 90 + private var mBound = false init { v.setOnClickListener(this) } + + private val connection = object : ServiceConnection { + + override fun onServiceConnected(className: ComponentName, service: IBinder) { + // We've bound to LocalService, cast the IBinder and get LocalService instance + val binder = service as MusicService.LocalBinder + musicService = binder.service + mBound = true + } + + override fun onServiceDisconnected(arg0: ComponentName) { + mBound = false + } + } + + override fun onClick(v: View) { try { val context = itemView.context val showPhotoIntent = Intent(context, SongViewActivity::class.java) //showPhotoIntent.putExtra(PHOTO_KEY, trackItem) val id = trackItem!!.id - musicService.playTrack(id) - context.startActivity(showPhotoIntent) + //context.startActivity(showPhotoIntent) + + if (!mBound) { + val intent = Intent(act, MusicService::class.java) + act!!.bindService(intent, connection, Context.BIND_AUTO_CREATE) + /** + Intent(this, MusicService::class.java).also { intent -> + act!!.applicationContext(intent, connection, Context.BIND_AUTO_CREATE) + act.applicationContext + } + */ + + } } catch (ex: Exception) { val exMsg = ex.message