1
1
package com.arctouch.codechallenge.ui.home
2
2
3
+ import android.app.SearchManager
4
+ import android.content.Context
3
5
import android.nfc.tech.MifareUltralight.PAGE_SIZE
4
6
import android.os.Bundle
5
- import android.view.LayoutInflater
6
- import android.view.View
7
- import android.view.ViewGroup
7
+ import android.view.*
8
+ import androidx.appcompat.widget.SearchView
8
9
import androidx.fragment.app.Fragment
9
10
import androidx.lifecycle.LifecycleOwner
10
11
import androidx.lifecycle.Observer
@@ -21,7 +22,9 @@ class HomeFragment : Fragment() {
21
22
22
23
private val mViewModel: HomeViewModel by viewModel()
23
24
private var isLoading = false
25
+ private var isSearching = false
24
26
private lateinit var adapter: HomeAdapter
27
+ private lateinit var searchView: SearchView
25
28
26
29
override fun onCreateView (
27
30
inflater : LayoutInflater ,
@@ -33,17 +36,61 @@ class HomeFragment : Fragment() {
33
36
34
37
override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
35
38
super .onViewCreated(view, savedInstanceState)
39
+ setHasOptionsMenu(true )
36
40
setUpAdapter(mViewModel.upcomingMovies.value)
37
41
configScrollListener(recyclerView)
38
42
observeViewModel()
39
43
}
40
44
45
+ override fun onCreateOptionsMenu (menu : Menu , inflater : MenuInflater ) {
46
+ inflater.inflate(R .menu.search_menu, menu)
47
+ val searchAction = menu.findItem(R .id.search_action)
48
+ searchAction.setOnActionExpandListener(object : MenuItem .OnActionExpandListener {
49
+ override fun onMenuItemActionExpand (item : MenuItem ? ): Boolean {
50
+ isSearching = true
51
+ return true
52
+ }
53
+
54
+ override fun onMenuItemActionCollapse (item : MenuItem ? ): Boolean {
55
+ isSearching = false
56
+ return true
57
+ }
58
+ })
59
+ searchView = searchAction?.actionView as SearchView
60
+ configSearchView()
61
+ super .onCreateOptionsMenu(menu, inflater)
62
+ }
63
+
64
+ private fun configSearchView () {
65
+ val searchManager = activity?.getSystemService(Context .SEARCH_SERVICE ) as SearchManager
66
+ searchView.setSearchableInfo(searchManager.getSearchableInfo(activity?.componentName))
67
+ searchView.setOnQueryTextListener(object : SearchView .OnQueryTextListener {
68
+ override fun onQueryTextChange (newText : String? ): Boolean {
69
+ if (newText.isNullOrEmpty()) {
70
+ setUpAdapter(mViewModel.upcomingMovies.value)
71
+ mViewModel.getUpComingMovies()
72
+ isSearching = false
73
+ } else {
74
+ mViewModel.searchMovies(newText)
75
+ }
76
+ return true
77
+ }
78
+
79
+ override fun onQueryTextSubmit (query : String? ): Boolean {
80
+ return true
81
+ }
82
+ })
83
+ }
84
+
41
85
private fun observeViewModel () {
42
86
mViewModel.upcomingMovies.observe(this as LifecycleOwner , Observer {
43
87
isLoading = false
44
88
progressBar.visibility = View .GONE
45
89
adapter.notifyDataSetChanged()
46
90
})
91
+ mViewModel.searchLiveData.observe(this as LifecycleOwner , Observer {
92
+ setUpAdapter(it.toMutableList())
93
+ })
47
94
}
48
95
49
96
private fun loadMoreMovies () {
@@ -72,6 +119,9 @@ class HomeFragment : Fragment() {
72
119
73
120
override fun onScrolled (recyclerView : RecyclerView , dx : Int , dy : Int ) {
74
121
super .onScrolled(recyclerView, dx, dy)
122
+ if (isSearching) {
123
+ return
124
+ }
75
125
val layoutManager = recyclerView
76
126
.layoutManager as LinearLayoutManager
77
127
val visibleItemCount: Int = layoutManager.childCount
0 commit comments