@@ -6,17 +6,16 @@ import android.view.MenuInflater
6
6
import android.view.View
7
7
import androidx.appcompat.widget.SearchView
8
8
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
9
- import com.google.android.material.snackbar.Snackbar
10
9
import com.melih.core.actions.Actions
11
10
import com.melih.core.base.lifecycle.BaseDaggerFragment
11
+ import com.melih.core.extensions.containsIgnoreCase
12
12
import com.melih.core.extensions.createFor
13
13
import com.melih.core.extensions.observe
14
14
import com.melih.list.R
15
15
import com.melih.list.databinding.ListBinding
16
16
import com.melih.repository.entities.LaunchEntity
17
17
import com.melih.repository.interactors.base.Result
18
18
import kotlinx.coroutines.ExperimentalCoroutinesApi
19
- import timber.log.Timber
20
19
21
20
class LaunchesFragment : BaseDaggerFragment <ListBinding >(), SwipeRefreshLayout.OnRefreshListener {
22
21
@@ -40,20 +39,43 @@ class LaunchesFragment : BaseDaggerFragment<ListBinding>(), SwipeRefreshLayout.O
40
39
binding.rocketList.adapter = launchesAdapter
41
40
binding.swipeRefreshLayout.setOnRefreshListener(this )
42
41
42
+ observeDataChanges()
43
+ }
44
+
45
+ override fun onCreateOptionsMenu (menu : Menu , inflater : MenuInflater ) {
46
+ inflater.inflate(R .menu.menu_rocket_list, menu)
47
+
48
+ (menu.findItem(R .id.search).actionView as SearchView ).apply {
49
+ setOnQueryTextListener(object : SearchView .OnQueryTextListener {
50
+
51
+ override fun onQueryTextSubmit (query : String? ): Boolean {
52
+ clearFocus()
53
+ return true
54
+ }
55
+
56
+ override fun onQueryTextChange (newText : String? ): Boolean {
57
+ launchesAdapter.submitList(filterItemListBy(newText))
58
+ return true
59
+ }
60
+ })
61
+ }
62
+
63
+ super .onCreateOptionsMenu(menu, inflater)
64
+ }
65
+
66
+ @ExperimentalCoroutinesApi
67
+ private fun observeDataChanges () {
68
+
43
69
// Observing state to show loading
44
70
observe(viewModel.stateData) {
45
71
binding.swipeRefreshLayout.isRefreshing = it is Result .State .Loading
46
72
}
47
73
48
74
// Observing error to show toast with retry action
49
75
observe(viewModel.errorData) {
50
- Snackbar .make(
51
- binding.root,
52
- resources.getString(it.messageRes),
53
- Snackbar .LENGTH_INDEFINITE
54
- ).setAction(com.melih.core.R .string.retry) {
76
+ showSnackbarWithAction(it) {
55
77
viewModel.retry()
56
- }.show()
78
+ }
57
79
}
58
80
59
81
observe(viewModel.successData) {
@@ -64,46 +86,18 @@ class LaunchesFragment : BaseDaggerFragment<ListBinding>(), SwipeRefreshLayout.O
64
86
}
65
87
66
88
private fun onItemSelected (item : LaunchEntity ) {
67
- Timber .i(" ${item.id} " )
68
89
startActivity(Actions .openDetailFor(item.id))
69
90
}
70
91
71
- override fun onCreateOptionsMenu (menu : Menu , inflater : MenuInflater ) {
72
- inflater.inflate(R .menu.menu_rocket_list, menu)
73
-
74
- (menu.findItem(R .id.search).actionView as SearchView ).apply {
75
- setOnQueryTextListener(object : SearchView .OnQueryTextListener {
76
-
77
- override fun onQueryTextSubmit (query : String? ): Boolean {
78
- clearFocus()
79
- return true
80
- }
81
-
82
- override fun onQueryTextChange (newText : String? ): Boolean {
83
- launchesAdapter.submitList(
84
- if (! newText.isNullOrBlank()) {
85
- itemList.filter {
86
- it.rocket.name.contains(
87
- newText,
88
- true
89
- ) || (it.missions.size > 0 && it.missions[0 ].description.contains(
90
- newText,
91
- true
92
- ))
93
- }
94
- } else {
95
- itemList
96
- }
97
- )
98
-
99
- return true
100
- }
101
- })
92
+ private fun filterItemListBy (query : String? ) =
93
+ if (! query.isNullOrBlank()) {
94
+ itemList.filter {
95
+ it.rocket.name.containsIgnoreCase(query) || it.missions.any { it.description.containsIgnoreCase(query) }
96
+ }
97
+ } else {
98
+ itemList
102
99
}
103
100
104
- super .onCreateOptionsMenu(menu, inflater)
105
- }
106
-
107
101
@ExperimentalCoroutinesApi
108
102
override fun onRefresh () {
109
103
viewModel.refresh()
0 commit comments