ref: v3.3.2
app/src/main/java/xyz/apiote/bimba/czwek/dashboard/ui/home/HomeFragment.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
// SPDX-FileCopyrightText: Adam Evyčędo // // SPDX-License-Identifier: GPL-3.0-or-later package xyz.apiote.bimba.czwek.dashboard.ui.home import android.os.Bundle import android.view.KeyEvent import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.FrameLayout import android.widget.TextView import androidx.activity.OnBackPressedCallback import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.search.SearchView import xyz.apiote.bimba.czwek.dashboard.MainActivity import xyz.apiote.bimba.czwek.databinding.FragmentHomeBinding import xyz.apiote.bimba.czwek.search.BimbaResultsAdapter class HomeFragment : Fragment() { private var _binding: FragmentHomeBinding? = null private val binding get() = _binding!! private lateinit var adapter: BimbaResultsAdapter override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentHomeBinding.inflate(inflater, container, false) val homeViewModel = ViewModelProvider(this)[HomeViewModel::class.java] homeViewModel.queryables.observe(viewLifecycleOwner) { adapter.feedsSettings = homeViewModel.feedsSettings adapter.feeds = homeViewModel.feeds adapter.update(it) } val root = binding.root ViewCompat.setOnApplyWindowInsetsListener(root) { view, windowInsets -> val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) view.layoutParams = (view.layoutParams as FrameLayout.LayoutParams).apply { topMargin = insets.top } WindowInsetsCompat.CONSUMED } val onBackPressedCallback = object : OnBackPressedCallback(binding.searchView.currentTransitionState == SearchView.TransitionState.SHOWN) { override fun handleOnBackPressed() { binding.searchView.hide() } } activity?.onBackPressedDispatcher?.addCallback(onBackPressedCallback) binding.searchView.addTransitionListener { _, _, newState -> onBackPressedCallback.isEnabled = when (newState) { SearchView.TransitionState.SHOWN -> true SearchView.TransitionState.HIDDEN -> false else -> false } } binding.searchBar.setNavigationOnClickListener { (context as MainActivity).onNavigationClicked() } binding.suggestionsRecycler.layoutManager = LinearLayoutManager(activity) adapter = BimbaResultsAdapter(layoutInflater, activity, listOf()) binding.suggestionsRecycler.adapter = adapter binding.searchView.editText.addTextChangedListener( homeViewModel.SearchBarWatcher(requireContext()) ) binding.searchView.editText.setOnKeyListener { v, keyCode, event -> when (keyCode) { KeyEvent.KEYCODE_ENTER -> { if (event.action == KeyEvent.ACTION_UP) { (context as MainActivity).onSearchClicked((v as TextView).text) true } else { false } } else -> false } } binding.floatingActionButton.setOnClickListener { (context as MainActivity).onGpsClicked(this) } return binding.root } override fun onDestroyView() { super.onDestroyView() _binding = null } } |