Sharingang/Sharingang-Android

View on GitHub
app/src/main/java/com/example/sharingang/ui/fragments/SoldItemList.kt

Summary

Maintainability
A
0 mins
Test Coverage
A
95%
package com.example.sharingang.ui.fragments

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import com.example.sharingang.R
import com.example.sharingang.auth.CurrentUserProvider
import com.example.sharingang.databinding.FragmentSoldItemListBinding
import com.example.sharingang.viewmodels.ItemsViewModel
import com.example.sharingang.models.Item
import com.example.sharingang.ui.adapters.ItemListener
import com.example.sharingang.ui.adapters.ItemsAdapter
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject


@AndroidEntryPoint
class SoldItemList : Fragment() {


    private lateinit var binding: FragmentSoldItemListBinding
    private val viewModel: ItemsViewModel by activityViewModels()

    @Inject
    lateinit var currentUserProvider: CurrentUserProvider

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {

        binding =
            DataBindingUtil.inflate(inflater, R.layout.fragment_sold_item_list, container, false)

        setupRecyclerview()

        return binding.root
    }

    private fun setupRecyclerview() {
        val adapter = setupItemAdapter()
        val userId = currentUserProvider.getCurrentUserId()
        binding.soldList.adapter = adapter
        listOf(binding.soldButton, binding.boughtButton).forEach {
            it.setOnClickListener {
                viewModel.updateSoldBought(userId, binding.soldButton.isChecked)
            }
        }
        viewModel.updateSoldBought(userId, binding.soldButton.isChecked)
        viewModel.addObserver(viewLifecycleOwner, adapter, ItemsViewModel.OBSERVABLES.USER_SOLD_BOUGHT)
        viewModel.setupItemNavigation(viewLifecycleOwner, this.findNavController(),
            {
                SoldItemListDirections.actionSoldItemListToDetailedItemFragment(it)
            })
    }

    /**
    * Setup the item adapter for a recycler view.
    */
    private fun setupItemAdapter(): ItemsAdapter {
        val onView = { item: Item -> viewModel.onViewItem(item) }
        return ItemsAdapter(ItemListener(onView), requireContext())
    }

}