@ -16,6 +16,7 @@ import androidx.activity.addCallback
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.navArgs
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.snackbar.Snackbar
import dev.lowrespalmtree.comet.databinding.FragmentPageViewBinding
@ -26,6 +27,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
@ExperimentalCoroutinesApi
class PageFragment : Fragment ( ) , PageAdapter . Listener {
private val vm : PageViewModel by viewModels ( )
private val args : PageFragmentArgs by navArgs ( )
private lateinit var binding : FragmentPageViewBinding
private lateinit var adapter : PageAdapter
@ -35,12 +37,12 @@ class PageFragment : Fragment(), PageAdapter.Listener {
savedInstanceState : Bundle ?
) : View {
Log . d ( TAG , " onCreateView " )
binding = FragmentPageViewBinding . inflate ( layoutInflater )
binding = FragmentPageViewBinding . inflate ( layoutInflater , container , false )
return binding . root
}
override fun onViewCreated ( view : View , savedInstanceState : Bundle ? ) {
Log . d ( TAG , " onViewCreated " )
Log . d ( TAG , " onViewCreated (args: ${args} ) " )
binding . contentRecycler . layoutManager = LinearLayoutManager ( requireContext ( ) )
adapter = PageAdapter ( this )
binding . contentRecycler . adapter = adapter
@ -53,14 +55,15 @@ class PageFragment : Fragment(), PageAdapter.Listener {
vm . lines . observe ( viewLifecycleOwner ) { updateLines ( it . second , it . first ) }
vm . event . observe ( viewLifecycleOwner ) { handleEvent ( it ) }
activity ?. onBackPressedDispatcher ?. addCallback ( viewLifecycleOwner ) { onBackPressed ( ) }
( activity as MainActivity ? ) ?. let {
it . onBackPressedDispatcher . addCallback ( viewLifecycleOwner ) { onBackPressed ( ) }
it . supportActionBar ?. title = vm . currentTitle
}
val url = arguments ?. getString ( " url " )
if ( ! url . isNullOrEmpty ( ) ) {
val url = arg s. url
if ( vm . currentUrl . isEmpty ( ) && url . isNot Empty( ) ) {
Log . d ( TAG , " onViewCreated: open \" $url \" " )
openUrl ( url )
} else if ( vm . currentUrl . isNotEmpty ( ) ) {
Log . d ( TAG , " onViewCreated: reuse current URL, probably fragment recreation " )
} else if ( vm . visitedUrls . isEmpty ( ) ) {
Log . d ( TAG , " onViewCreated: no current URL, open home if configured " )
Preferences . getHomeUrl ( requireContext ( ) ) ?. let { if ( it . isNotBlank ( ) ) openUrl ( it ) }
@ -72,6 +75,7 @@ class PageFragment : Fragment(), PageAdapter.Listener {
}
private fun onBackPressed ( ) {
Log . d ( TAG , " onBackPressed " )
if ( vm . visitedUrls . size >= 2 ) {
vm . visitedUrls . removeLastOrNull ( ) // Always remove current page first.
vm . visitedUrls . removeLastOrNull ( ) ?. also { openUrl ( it ) }
@ -157,9 +161,11 @@ class PageFragment : Fragment(), PageAdapter.Listener {
}
is PageViewModel . SuccessEvent -> {
vm . currentUrl = event . uri
vm . currentTitle = event . mainTitle ?: " "
if ( vm . visitedUrls . isEmpty ( ) || vm . visitedUrls . last ( ) != event . uri )
vm . visitedUrls . add ( event . uri )
binding . addressBar . setText ( event . uri )
( activity as MainActivity ? ) ?. supportActionBar ?. title = vm . currentTitle
}
is PageViewModel . BinaryEvent -> {
// TODO this should present the user with options on what to do according to the