67 lines
2.3 KiB
Kotlin

package com.isolaatti.followers.ui
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.isolaatti.common.UserItemCallback
import com.isolaatti.common.UserListRecyclerViewAdapter
import com.isolaatti.databinding.FragmentUserListBinding
import com.isolaatti.followers.presentation.FollowersViewModel
import com.isolaatti.profile.domain.entity.ProfileListItem
import com.isolaatti.profile.ui.ProfileActivity
class FollowersFragment : Fragment(), UserItemCallback {
private lateinit var binding: FragmentUserListBinding
private val viewModel: FollowersViewModel by viewModels({ requireParentFragment() })
private lateinit var adapter: UserListRecyclerViewAdapter
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentUserListBinding.inflate(inflater)
return binding.root
}
private fun setObservers() {
viewModel.followers.observe(viewLifecycleOwner) { (list, updateEvent) ->
adapter.updateData(list, updateEvent)
binding.swipeToRefresh.isRefreshing = false
}
}
private fun bind() {
adapter = UserListRecyclerViewAdapter(this)
binding.recyclerUsers.adapter = adapter
binding.recyclerUsers.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
binding.swipeToRefresh.setOnRefreshListener {
viewModel.fetchFollowers(refresh = true)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
bind()
setObservers()
viewModel.fetchFollowers()
}
override fun itemClick(userId: Int) {
ProfileActivity.startActivity(requireContext(), userId)
}
override fun followButtonClick(user: ProfileListItem, action: UserItemCallback.FollowButtonAction) {
when(action) {
UserItemCallback.FollowButtonAction.Follow -> viewModel.followUser(user)
UserItemCallback.FollowButtonAction.Unfollow -> viewModel.unfollowUser(user)
}
}
}