mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-13 17:38:42 -04:00
Fixed memory leak in search fragment
This commit is contained in:
parent
ad78332565
commit
101c0f1efd
@ -71,18 +71,11 @@ class SearchFragment : BaseFragment() {
|
|||||||
|
|
||||||
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
|
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
|
||||||
|
|
||||||
private lateinit var searchView: SearchView
|
private var searchView: SearchView? = null
|
||||||
private lateinit var searchInTextMenuItem: MenuItem
|
private var searchInTextMenuItem: MenuItem? = null
|
||||||
|
|
||||||
private val searchViewModel by lazy { viewModel<SearchViewModel>(viewModelFactory) }
|
private val searchViewModel by lazy { viewModel<SearchViewModel>(viewModelFactory) }
|
||||||
private val searchAdapter: SearchAdapter by lazy {
|
private var searchAdapter: SearchAdapter? = null
|
||||||
SearchAdapter(
|
|
||||||
RecentSearchDelegate(::onItemClick, ::onItemClickNewTab) {
|
|
||||||
searchViewModel.actions.offer(OnItemLongClick(it))
|
|
||||||
},
|
|
||||||
ZimSearchResultDelegate(::onItemClick, ::onItemClickNewTab)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun inject(baseActivity: BaseActivity) {
|
override fun inject(baseActivity: BaseActivity) {
|
||||||
baseActivity.cachedComponent.inject(this)
|
baseActivity.cachedComponent.inject(this)
|
||||||
@ -100,6 +93,12 @@ class SearchFragment : BaseFragment() {
|
|||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
searchAdapter = SearchAdapter(
|
||||||
|
RecentSearchDelegate(::onItemClick, ::onItemClickNewTab) {
|
||||||
|
searchViewModel.actions.offer(OnItemLongClick(it))
|
||||||
|
},
|
||||||
|
ZimSearchResultDelegate(::onItemClick, ::onItemClickNewTab)
|
||||||
|
)
|
||||||
setupToolbar(view)
|
setupToolbar(view)
|
||||||
search_list.run {
|
search_list.run {
|
||||||
adapter = searchAdapter
|
adapter = searchAdapter
|
||||||
@ -137,6 +136,9 @@ class SearchFragment : BaseFragment() {
|
|||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
closeKeyboard()
|
closeKeyboard()
|
||||||
activity?.intent?.action = null
|
activity?.intent?.action = null
|
||||||
|
searchView = null
|
||||||
|
searchInTextMenuItem = null
|
||||||
|
searchAdapter = null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun goBack() {
|
private fun goBack() {
|
||||||
@ -150,7 +152,7 @@ class SearchFragment : BaseFragment() {
|
|||||||
val searchMenuItem = menu.findItem(R.id.menu_search)
|
val searchMenuItem = menu.findItem(R.id.menu_search)
|
||||||
searchMenuItem.expandActionView()
|
searchMenuItem.expandActionView()
|
||||||
searchView = searchMenuItem.actionView as SearchView
|
searchView = searchMenuItem.actionView as SearchView
|
||||||
searchView.setOnQueryTextListener(
|
searchView?.setOnQueryTextListener(
|
||||||
SimpleTextListener {
|
SimpleTextListener {
|
||||||
if (it.isNotEmpty()) {
|
if (it.isNotEmpty()) {
|
||||||
searchViewModel.actions.offer(Filter(it))
|
searchViewModel.actions.offer(Filter(it))
|
||||||
@ -166,7 +168,7 @@ class SearchFragment : BaseFragment() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
searchInTextMenuItem = menu.findItem(R.id.menu_searchintext)
|
searchInTextMenuItem = menu.findItem(R.id.menu_searchintext)
|
||||||
searchInTextMenuItem.setOnMenuItemClickListener {
|
searchInTextMenuItem?.setOnMenuItemClickListener {
|
||||||
searchViewModel.actions.offer(ClickedSearchInText)
|
searchViewModel.actions.offer(ClickedSearchInText)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
@ -175,17 +177,17 @@ class SearchFragment : BaseFragment() {
|
|||||||
}
|
}
|
||||||
val searchStringFromArguments = arguments?.getString(NAV_ARG_SEARCH_STRING)
|
val searchStringFromArguments = arguments?.getString(NAV_ARG_SEARCH_STRING)
|
||||||
if (searchStringFromArguments != null) {
|
if (searchStringFromArguments != null) {
|
||||||
searchView.setQuery(searchStringFromArguments, false)
|
searchView?.setQuery(searchStringFromArguments, false)
|
||||||
}
|
}
|
||||||
searchViewModel.actions.offer(Action.CreatedWithArguments(arguments))
|
searchViewModel.actions.offer(Action.CreatedWithArguments(arguments))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun render(state: SearchState) {
|
private fun render(state: SearchState) {
|
||||||
searchInTextMenuItem.isVisible = state.searchOrigin == FromWebView
|
searchInTextMenuItem?.isVisible = state.searchOrigin == FromWebView
|
||||||
searchInTextMenuItem.isEnabled = state.searchTerm.isNotBlank()
|
searchInTextMenuItem?.isEnabled = state.searchTerm.isNotBlank()
|
||||||
searchLoadingIndicator?.isShowing(state.isLoading)
|
searchLoadingIndicator?.isShowing(state.isLoading)
|
||||||
searchNoResults?.isVisible = state.visibleResults.isEmpty()
|
searchNoResults?.isVisible = state.visibleResults.isEmpty()
|
||||||
searchAdapter.items = state.visibleResults
|
searchAdapter?.items = state.visibleResults
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onItemClick(it: SearchListItem) {
|
private fun onItemClick(it: SearchListItem) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user