You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.3 KiB
64 lines
2.3 KiB
package dev.lowrespalmtree.comet
|
|
|
|
import android.os.Bundle
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import androidx.core.os.bundleOf
|
|
import androidx.fragment.app.Fragment
|
|
import androidx.lifecycle.MutableLiveData
|
|
import androidx.lifecycle.ViewModel
|
|
import androidx.lifecycle.ViewModelProvider
|
|
import androidx.lifecycle.viewModelScope
|
|
import androidx.navigation.fragment.findNavController
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
import dev.lowrespalmtree.comet.History.HistoryEntry
|
|
import dev.lowrespalmtree.comet.HistoryItemAdapter.HistoryItemAdapterListener
|
|
import dev.lowrespalmtree.comet.databinding.FragmentHistoryListBinding
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
|
import kotlinx.coroutines.launch
|
|
|
|
@ExperimentalCoroutinesApi
|
|
class HistoryFragment : Fragment(), HistoryItemAdapterListener {
|
|
private lateinit var binding: FragmentHistoryListBinding
|
|
private lateinit var historyViewModel: HistoryViewModel
|
|
private lateinit var adapter: HistoryItemAdapter
|
|
|
|
override fun onCreateView(
|
|
inflater: LayoutInflater,
|
|
container: ViewGroup?,
|
|
savedInstanceState: Bundle?
|
|
): View {
|
|
binding = FragmentHistoryListBinding.inflate(layoutInflater)
|
|
return binding.root
|
|
}
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
historyViewModel = ViewModelProvider(this)[HistoryViewModel::class.java]
|
|
adapter = HistoryItemAdapter(this)
|
|
binding.list.layoutManager = LinearLayoutManager(requireContext())
|
|
binding.list.adapter = adapter
|
|
|
|
historyViewModel.items.observe(viewLifecycleOwner, { adapter.setItems(it) })
|
|
|
|
historyViewModel.refreshHistory()
|
|
}
|
|
|
|
override fun onItemClick(url: String) {
|
|
val bundle = bundleOf("url" to url)
|
|
findNavController().navigate(R.id.action_global_pageViewFragment, bundle)
|
|
}
|
|
|
|
@ExperimentalCoroutinesApi
|
|
class HistoryViewModel : ViewModel() {
|
|
val items: MutableLiveData<List<HistoryEntry>>
|
|
by lazy { MutableLiveData<List<HistoryEntry>>() }
|
|
|
|
fun refreshHistory() {
|
|
viewModelScope.launch(Dispatchers.IO) {
|
|
items.postValue(History.getAll())
|
|
}
|
|
}
|
|
}
|
|
} |