@@ -26,19 +26,22 @@ import com.google.gson.Gson
2626import com.google.gson.JsonArray
2727import com.google.gson.JsonObject
2828import io.realm.Case
29- import io.realm.Realm
3029import io.realm.RealmList
3130import io.realm.Sort
3231import java.io.File
3332import java.util.Calendar
3433import java.util.Locale
34+ import androidx.lifecycle.findViewTreeLifecycleOwner
35+ import io.realm.Realm
36+ import kotlinx.coroutines.CoroutineScope
3537import org.ole.planet.myplanet.R
3638import org.ole.planet.myplanet.databinding.RowNewsBinding
3739import org.ole.planet.myplanet.model.Conversation
3840import org.ole.planet.myplanet.model.RealmMyLibrary
3941import org.ole.planet.myplanet.model.RealmMyTeam
4042import org.ole.planet.myplanet.model.RealmNews
4143import org.ole.planet.myplanet.model.RealmUserModel
44+ import org.ole.planet.myplanet.repository.NewsRepository
4245import org.ole.planet.myplanet.service.UserProfileDbHandler
4346import org.ole.planet.myplanet.ui.chat.ChatAdapter
4447import org.ole.planet.myplanet.utilities.Constants.PREFS_NAME
@@ -51,8 +54,15 @@ import org.ole.planet.myplanet.utilities.SharedPrefManager
5154import org.ole.planet.myplanet.utilities.TimeUtils.formatDate
5255import org.ole.planet.myplanet.utilities.Utilities
5356import org.ole.planet.myplanet.utilities.makeExpandable
54-
55- class AdapterNews (var context : Context , private var currentUser : RealmUserModel ? , private val parentNews : RealmNews ? , private val teamName : String = " " , private val teamId : String? = null , private val userProfileDbHandler : UserProfileDbHandler ) : ListAdapter<RealmNews?, RecyclerView.ViewHolder?>(
57+ class AdapterNews (
58+ var context : Context ,
59+ private var currentUser : RealmUserModel ? ,
60+ private val parentNews : RealmNews ? ,
61+ private val newsRepository : NewsRepository ,
62+ private val teamName : String = " " ,
63+ private val teamId : String? = null ,
64+ private val userProfileDbHandler : UserProfileDbHandler
65+ ) : ListAdapter<RealmNews?, RecyclerView.ViewHolder?>(
5666 DiffUtils .itemCallback(
5767 areItemsTheSame = { oldItem, newItem ->
5868 if (oldItem === newItem) return@itemCallback true
@@ -74,12 +84,12 @@ class AdapterNews(var context: Context, private var currentUser: RealmUserModel?
7484 if (!oldItem.isValid || !newItem.isValid) return@itemCallback false
7585
7686 oldItem.id == newItem.id &&
77- oldItem.time == newItem.time &&
78- oldItem.isEdited == newItem.isEdited &&
79- oldItem.message == newItem.message &&
80- oldItem.userName == newItem.userName &&
81- oldItem.userId == newItem.userId &&
82- oldItem.sharedBy == newItem.sharedBy
87+ oldItem.time == newItem.time &&
88+ oldItem.isEdited == newItem.isEdited &&
89+ oldItem.message == newItem.message &&
90+ oldItem.userName == newItem.userName &&
91+ oldItem.userId == newItem.userId &&
92+ oldItem.sharedBy == newItem.sharedBy
8393 } catch (e: Exception ) {
8494 false
8595 }
@@ -88,7 +98,7 @@ class AdapterNews(var context: Context, private var currentUser: RealmUserModel?
8898) {
8999 private var listener: OnNewsItemClickListener ? = null
90100 private var imageList: RealmList <String >? = null
91- lateinit var mRealm: Realm
101+ private lateinit var mRealm: Realm
92102 private var fromLogin = false
93103 private var nonTeamMember = false
94104 private var sharedPreferences: SharedPrefManager ? = null
@@ -97,7 +107,7 @@ class AdapterNews(var context: Context, private var currentUser: RealmUserModel?
97107 private var labelManager: NewsLabelManager ? = null
98108 private val gson = Gson ()
99109 private val profileDbHandler = userProfileDbHandler
100- lateinit var settings: SharedPreferences
110+ private lateinit var settings: SharedPreferences
101111 private val userCache = mutableMapOf<String , RealmUserModel ?>()
102112 private val leadersList: List <RealmUserModel > by lazy {
103113 val raw = settings.getString(" communityLeaders" , " " ) ? : " "
@@ -134,21 +144,11 @@ class AdapterNews(var context: Context, private var currentUser: RealmUserModel?
134144 this .listener = listener
135145 }
136146
137- fun setmRealm (mRealm : Realm ? ) {
138- if (mRealm != null ) {
139- this .mRealm = mRealm
140- labelManager = NewsLabelManager (context, this .mRealm)
141- }
142- }
143-
144147 override fun onCreateViewHolder (parent : ViewGroup , viewType : Int ): RecyclerView .ViewHolder {
145148 val binding = RowNewsBinding .inflate(LayoutInflater .from(parent.context), parent, false )
146149 sharedPreferences = SharedPrefManager (context)
147150 user = userProfileDbHandler.userModel
148151 settings = context.getSharedPreferences(PREFS_NAME , Context .MODE_PRIVATE )
149- if (::mRealm.isInitialized) {
150- if (labelManager == null ) labelManager = NewsLabelManager (context, mRealm)
151- }
152152 return ViewHolderNews (binding)
153153 }
154154
@@ -177,8 +177,12 @@ class AdapterNews(var context: Context, private var currentUser: RealmUserModel?
177177 loadImage(viewHolder.binding, news)
178178 showReplyButton(viewHolder, news, position)
179179 val canManageLabels = canAddLabel(news)
180- labelManager?.setupAddLabelMenu(viewHolder.binding, news, canManageLabels)
181- news.let { labelManager?.showChips(viewHolder.binding, it, canManageLabels) }
180+ holder.itemView.findViewTreeLifecycleOwner()?.let { lifecycleOwner ->
181+ val coroutineScope = lifecycleOwner.lifecycleScope
182+ labelManager = NewsLabelManager (context, newsRepository, coroutineScope)
183+ labelManager?.setupAddLabelMenu(viewHolder.binding, news, canManageLabels)
184+ news.let { labelManager?.showChips(viewHolder.binding, it, canManageLabels) }
185+ }
182186
183187 handleChat(viewHolder, news)
184188
@@ -243,7 +247,7 @@ class AdapterNews(var context: Context, private var currentUser: RealmUserModel?
243247 val userModel = when {
244248 userId.isNullOrEmpty() -> null
245249 userCache.containsKey(userId) -> userCache[userId]
246- ::mRealm.isInitialized -> {
250+ else -> {
247251 val managedUser = mRealm.where(RealmUserModel ::class .java)
248252 .equalTo(" id" , userId)
249253 .findFirst()
@@ -261,7 +265,6 @@ class AdapterNews(var context: Context, private var currentUser: RealmUserModel?
261265 }
262266 detachedUser ? : managedUser
263267 }
264- else -> null
265268 }
266269 val userFullName = userModel?.getFullNameWithMiddleName()?.trim()
267270 if (userModel != null && currentUser != null ) {
@@ -399,7 +402,7 @@ class AdapterNews(var context: Context, private var currentUser: RealmUserModel?
399402 private fun submitListSafely (list : List <RealmNews ?>, commitCallback : Runnable ? = null) {
400403 userCache.clear()
401404 val detachedList = list.map { news ->
402- if (news?.isValid == true && ::mRealm.isInitialized ) {
405+ if (news?.isValid == true ) {
403406 try {
404407 mRealm.copyFromRealm(news)
405408 } catch (e: Exception ) {
@@ -791,4 +794,15 @@ class AdapterNews(var context: Context, private var currentUser: RealmUserModel?
791794 }
792795 }
793796
797+ override fun onAttachedToRecyclerView (recyclerView : RecyclerView ) {
798+ super .onAttachedToRecyclerView(recyclerView)
799+ this .recyclerView = recyclerView
800+ mRealm = Realm .getDefaultInstance()
801+ }
802+
803+ override fun onDetachedFromRecyclerView (recyclerView : RecyclerView ) {
804+ super .onDetachedFromRecyclerView(recyclerView)
805+ this .recyclerView = null
806+ mRealm.close()
807+ }
794808}
0 commit comments