Use view binding extensions in the search fragments.

This commit is contained in:
Isira Seneviratne 2023-02-13 11:51:16 +05:30
parent ab1b94d78d
commit 5030453db4
4 changed files with 22 additions and 46 deletions

View File

@ -122,6 +122,9 @@ dependencies {
/* Room */ /* Room */
kapt libs.room.compiler kapt libs.room.compiler
implementation libs.room implementation libs.room
/* View binding */
implementation libs.viewBindingPropertyDelegate
} }
static def getUnixTime() { static def getUnixTime() {

View File

@ -2,12 +2,13 @@ package com.github.libretube.ui.fragments
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import by.kirich1409.viewbindingdelegate.viewBinding
import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.databinding.FragmentSearchBinding import com.github.libretube.databinding.FragmentSearchBinding
import com.github.libretube.db.DatabaseHolder.Database import com.github.libretube.db.DatabaseHolder.Database
@ -16,12 +17,10 @@ import com.github.libretube.extensions.awaitQuery
import com.github.libretube.ui.activities.MainActivity import com.github.libretube.ui.activities.MainActivity
import com.github.libretube.ui.adapters.SearchHistoryAdapter import com.github.libretube.ui.adapters.SearchHistoryAdapter
import com.github.libretube.ui.adapters.SearchSuggestionsAdapter import com.github.libretube.ui.adapters.SearchSuggestionsAdapter
import com.github.libretube.ui.base.BaseFragment
import com.github.libretube.ui.models.SearchViewModel import com.github.libretube.ui.models.SearchViewModel
class SearchFragment : BaseFragment() { class SearchFragment : Fragment(R.layout.fragment_search) {
private var _binding: FragmentSearchBinding? = null private val binding by viewBinding(FragmentSearchBinding::bind)
private val binding get() = _binding!!
private val viewModel: SearchViewModel by activityViewModels() private val viewModel: SearchViewModel by activityViewModels()
@ -32,15 +31,6 @@ class SearchFragment : BaseFragment() {
query = arguments?.getString("query") query = arguments?.getString("query")
} }
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentSearchBinding.inflate(layoutInflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@ -75,15 +65,12 @@ class SearchFragment : BaseFragment() {
return@launchWhenCreated return@launchWhenCreated
} }
// only load the suggestions if the input field didn't get cleared yet // only load the suggestions if the input field didn't get cleared yet
val suggestionsAdapter = val suggestionsAdapter = SearchSuggestionsAdapter(
SearchSuggestionsAdapter( response.reversed(),
response.reversed(), (activity as MainActivity).searchView
(activity as MainActivity).searchView )
) if (isAdded && viewModel.searchQuery.value != "") {
runOnUiThread { binding.suggestionsRecycler.adapter = suggestionsAdapter
if (viewModel.searchQuery.value != "") {
binding.suggestionsRecycler.adapter = suggestionsAdapter
}
} }
} }
} }

View File

@ -2,12 +2,12 @@ package com.github.libretube.ui.fragments
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import by.kirich1409.viewbindingdelegate.viewBinding
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
@ -18,15 +18,13 @@ import com.github.libretube.extensions.TAG
import com.github.libretube.extensions.hideKeyboard import com.github.libretube.extensions.hideKeyboard
import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.adapters.SearchAdapter import com.github.libretube.ui.adapters.SearchAdapter
import com.github.libretube.ui.base.BaseFragment
import java.io.IOException import java.io.IOException
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import retrofit2.HttpException import retrofit2.HttpException
class SearchResultFragment : BaseFragment() { class SearchResultFragment : Fragment(R.layout.fragment_search_result) {
private var _binding: FragmentSearchResultBinding? = null private val binding by viewBinding(FragmentSearchResultBinding::bind)
private val binding get() = _binding!!
private var nextPage: String? = null private var nextPage: String? = null
private var query: String = "" private var query: String = ""
@ -39,15 +37,6 @@ class SearchResultFragment : BaseFragment() {
query = arguments?.getString("query").toString() query = arguments?.getString("query").toString()
} }
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentSearchResultBinding.inflate(layoutInflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@ -77,7 +66,7 @@ class SearchResultFragment : BaseFragment() {
fetchSearch() fetchSearch()
binding.searchRecycler.viewTreeObserver.addOnScrollChangedListener { binding.searchRecycler.viewTreeObserver.addOnScrollChangedListener {
if (_binding?.searchRecycler?.canScrollVertically(1) == false && if (isAdded && !binding.searchRecycler.canScrollVertically(1) &&
nextPage != null nextPage != null
) { ) {
fetchNextSearchItems() fetchNextSearchItems()
@ -85,11 +74,6 @@ class SearchResultFragment : BaseFragment() {
} }
} }
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun fetchSearch() { private fun fetchSearch() {
lifecycleScope.launchWhenCreated { lifecycleScope.launchWhenCreated {
view?.let { context?.hideKeyboard(it) } view?.let { context?.hideKeyboard(it) }

View File

@ -20,6 +20,7 @@ room = "2.5.0"
kotlinxSerialization = "1.4.1" kotlinxSerialization = "1.4.1"
kotlinxDatetime = "0.4.0" kotlinxDatetime = "0.4.0"
kotlinxRetrofit = "0.8.0" kotlinxRetrofit = "0.8.0"
viewBindingDelegate = "1.5.8"
[libraries] [libraries]
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
@ -50,4 +51,5 @@ room = { group = "androidx.room", name="room-ktx", version.ref = "room" }
room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" }
kotlinx-serialization = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinxSerialization" } kotlinx-serialization = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
kotlinx-datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "kotlinxDatetime" } kotlinx-datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "kotlinxDatetime" }
kotlinx-serialization-retrofit = { group = "com.jakewharton.retrofit", name = "retrofit2-kotlinx-serialization-converter", version.ref = "kotlinxRetrofit" } kotlinx-serialization-retrofit = { group = "com.jakewharton.retrofit", name = "retrofit2-kotlinx-serialization-converter", version.ref = "kotlinxRetrofit" }
viewBindingPropertyDelegate = { group = "com.github.kirich1409", name = "viewbindingpropertydelegate-noreflection", version.ref = "viewBindingDelegate" }