@@ -7,20 +7,27 @@ import android.util.Log
77import android.view.*
88import android.view.inputmethod.EditorInfo
99import android.widget.EditText
10+ import android.widget.RadioButton
11+ import android.widget.RadioGroup
12+ import android.widget.TextView
1013import androidx.appcompat.app.AppCompatActivity
1114import androidx.appcompat.widget.SearchView
1215import androidx.lifecycle.Observer
1316import androidx.navigation.fragment.findNavController
1417import androidx.recyclerview.widget.LinearLayoutManager
1518import androidx.recyclerview.widget.RecyclerView
1619import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
20+ import com.afollestad.materialdialogs.MaterialDialog
21+ import com.afollestad.materialdialogs.customview.customView
22+ import com.afollestad.materialdialogs.customview.getCustomView
1723import com.codingwithmitch.openapi.R
1824import com.codingwithmitch.openapi.models.BlogPost
25+ import com.codingwithmitch.openapi.persistence.BlogQueryUtils.Companion.BLOG_FILTER_DATE_UPDATED
26+ import com.codingwithmitch.openapi.persistence.BlogQueryUtils.Companion.BLOG_FILTER_USERNAME
27+ import com.codingwithmitch.openapi.persistence.BlogQueryUtils.Companion.BLOG_ORDER_ASC
1928import com.codingwithmitch.openapi.ui.DataState
2029import com.codingwithmitch.openapi.ui.main.blog.state.BlogViewState
21- import com.codingwithmitch.openapi.ui.main.blog.viewmodel.setBlogPost
22- import com.codingwithmitch.openapi.ui.main.blog.viewmodel.setQuery
23- import com.codingwithmitch.openapi.ui.main.blog.viewmodel.setQueryExhausted
30+ import com.codingwithmitch.openapi.ui.main.blog.viewmodel.*
2431import com.codingwithmitch.openapi.util.ErrorHandling
2532import com.codingwithmitch.openapi.util.TopSpacingItemDecoration
2633import handleIncomingBlogListData
@@ -48,6 +55,7 @@ class BlogFragment : BaseBlogFragment(),
4855 super .onViewCreated(view, savedInstanceState)
4956 (activity as AppCompatActivity ).supportActionBar?.setDisplayShowTitleEnabled(false )
5057 setHasOptionsMenu(true )
58+ swipe_refresh.setOnRefreshListener(this )
5159
5260 initRecyclerView()
5361 subscribeObservers()
@@ -186,6 +194,17 @@ class BlogFragment : BaseBlogFragment(),
186194 initSearchView(menu)
187195 }
188196
197+ override fun onOptionsItemSelected (item : MenuItem ): Boolean {
198+
199+ when (item.itemId){
200+ R .id.action_filter_settings -> {
201+ showFilterDialog()
202+ return true
203+ }
204+ }
205+ return super .onOptionsItemSelected(item)
206+ }
207+
189208 override fun onItemSelected (position : Int , item : BlogPost ) {
190209 viewModel.setBlogPost(item)
191210 findNavController().navigate(R .id.action_blogFragment_to_viewBlogFragment)
@@ -202,7 +221,67 @@ class BlogFragment : BaseBlogFragment(),
202221 swipe_refresh.isRefreshing = false
203222 }
204223
224+ fun showFilterDialog (){
225+
226+ activity?.let {
227+ val dialog = MaterialDialog (it)
228+ .noAutoDismiss()
229+ .customView(R .layout.layout_blog_filter)
230+
231+ val view = dialog.getCustomView()
232+
233+ val filter = viewModel.getFilter()
234+ val order = viewModel.getOrder()
235+
236+ if (filter.equals(BLOG_FILTER_DATE_UPDATED )){
237+ view.findViewById<RadioGroup >(R .id.filter_group).check(R .id.filter_date)
238+ }
239+ else {
240+ view.findViewById<RadioGroup >(R .id.filter_group).check(R .id.filter_author)
241+ }
242+
243+ if (order.equals(BLOG_ORDER_ASC )){
244+ view.findViewById<RadioGroup >(R .id.order_group).check(R .id.filter_asc)
245+ }
246+ else {
247+ view.findViewById<RadioGroup >(R .id.order_group).check(R .id.filter_desc)
248+ }
249+
250+ view.findViewById<TextView >(R .id.positive_button).setOnClickListener{
251+ Log .d(TAG , " FilterDialog: apply filter." )
205252
253+ val selectedFilter = dialog.getCustomView().findViewById<RadioButton >(
254+ dialog.getCustomView().findViewById<RadioGroup >(R .id.filter_group).checkedRadioButtonId
255+ )
256+ val selectedOrder= dialog.getCustomView().findViewById<RadioButton >(
257+ dialog.getCustomView().findViewById<RadioGroup >(R .id.order_group).checkedRadioButtonId
258+ )
259+
260+ var filter = BLOG_FILTER_DATE_UPDATED
261+ if (selectedFilter.text.toString().equals(getString(R .string.filter_author))){
262+ filter = BLOG_FILTER_USERNAME
263+ }
264+
265+ var order = " "
266+ if (selectedOrder.text.toString().equals(getString(R .string.filter_desc))){
267+ order = " -"
268+ }
269+ viewModel.saveFilterOptions(filter, order).let {
270+ viewModel.setBlogFilter(filter)
271+ viewModel.setBlogOrder(order)
272+ onBlogSearchOrFilter()
273+ }
274+ dialog.dismiss()
275+ }
276+
277+ view.findViewById<TextView >(R .id.negative_button).setOnClickListener {
278+ Log .d(TAG , " FilterDialog: cancelling filter." )
279+ dialog.dismiss()
280+ }
281+
282+ dialog.show()
283+ }
284+ }
206285}
207286
208287
0 commit comments