|
|
|
@ -1,5 +1,9 @@ |
|
|
|
package net.pokeranalytics.android.ui.fragment.components |
|
|
|
package net.pokeranalytics.android.ui.fragment.components |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import android.content.BroadcastReceiver |
|
|
|
|
|
|
|
import android.content.Context |
|
|
|
|
|
|
|
import android.content.Intent |
|
|
|
|
|
|
|
import android.content.IntentFilter |
|
|
|
import android.os.Bundle |
|
|
|
import android.os.Bundle |
|
|
|
import android.view.* |
|
|
|
import android.view.* |
|
|
|
import androidx.appcompat.widget.Toolbar |
|
|
|
import androidx.appcompat.widget.Toolbar |
|
|
|
@ -8,8 +12,11 @@ import kotlinx.coroutines.Dispatchers |
|
|
|
import kotlinx.coroutines.GlobalScope |
|
|
|
import kotlinx.coroutines.GlobalScope |
|
|
|
import kotlinx.coroutines.delay |
|
|
|
import kotlinx.coroutines.delay |
|
|
|
import kotlinx.coroutines.launch |
|
|
|
import kotlinx.coroutines.launch |
|
|
|
|
|
|
|
import net.pokeranalytics.android.R |
|
|
|
import net.pokeranalytics.android.ui.interfaces.FilterHandler |
|
|
|
import net.pokeranalytics.android.ui.interfaces.FilterHandler |
|
|
|
|
|
|
|
import net.pokeranalytics.android.ui.interfaces.FilterHandler.Companion.INTENT_FILTER_UPDATE_FILTER_UI |
|
|
|
import net.pokeranalytics.android.ui.interfaces.FilterableType |
|
|
|
import net.pokeranalytics.android.ui.interfaces.FilterableType |
|
|
|
|
|
|
|
import net.pokeranalytics.android.util.Preferences |
|
|
|
import timber.log.Timber |
|
|
|
import timber.log.Timber |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -25,6 +32,30 @@ open class FilterableFragment : RealmFragment(), FilterHandler { |
|
|
|
|
|
|
|
|
|
|
|
private var filterMenuItem: MenuItem? = null |
|
|
|
private var filterMenuItem: MenuItem? = null |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private val updateFilterUIBroadcast = object : BroadcastReceiver() { |
|
|
|
|
|
|
|
override fun onReceive(context: Context?, intent: Intent?) { |
|
|
|
|
|
|
|
context?.let { |
|
|
|
|
|
|
|
if (Preferences.getActiveFilterId(context)?.isNotEmpty() == true) { |
|
|
|
|
|
|
|
applyFilter() |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
removeFilter() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun onActivityCreated(savedInstanceState: Bundle?) { |
|
|
|
|
|
|
|
super.onActivityCreated(savedInstanceState) |
|
|
|
|
|
|
|
Timber.d("onActivityCreated: $parentActivity") |
|
|
|
|
|
|
|
parentActivity?.registerReceiver(updateFilterUIBroadcast, IntentFilter(INTENT_FILTER_UPDATE_FILTER_UI)) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun onDestroy() { |
|
|
|
|
|
|
|
super.onDestroy() |
|
|
|
|
|
|
|
Timber.d("onDestroy: $parentActivity") |
|
|
|
|
|
|
|
parentActivity?.unregisterReceiver(updateFilterUIBroadcast) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { |
|
|
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { |
|
|
|
setHasOptionsMenu(true) |
|
|
|
setHasOptionsMenu(true) |
|
|
|
return super.onCreateView(inflater, container, savedInstanceState) |
|
|
|
return super.onCreateView(inflater, container, savedInstanceState) |
|
|
|
@ -32,20 +63,17 @@ open class FilterableFragment : RealmFragment(), FilterHandler { |
|
|
|
|
|
|
|
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { |
|
|
|
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { |
|
|
|
super.onCreateOptionsMenu(menu, inflater) |
|
|
|
super.onCreateOptionsMenu(menu, inflater) |
|
|
|
Timber.d("onCreateOptionsMenu") |
|
|
|
view?.findViewById<Toolbar>(R.id.toolbar)?.let { toolbar -> |
|
|
|
|
|
|
|
toolbar.menu.removeItem(R.id.menu_item_filter) |
|
|
|
view?.findViewById<Toolbar>(net.pokeranalytics.android.R.id.toolbar)?.let { toolbar -> |
|
|
|
filterMenuItem = toolbar.menu?.add(0, R.id.menu_item_filter, 0, R.string.filter) |
|
|
|
Timber.d("toolbar menu ${toolbar.menu}") |
|
|
|
filterMenuItem?.setIcon(R.drawable.ic_outline_filter_list) |
|
|
|
toolbar.menu.removeItem(net.pokeranalytics.android.R.id.menu_item_filter) |
|
|
|
|
|
|
|
filterMenuItem = toolbar.menu?.add(0, net.pokeranalytics.android.R.id.menu_item_filter, 0, net.pokeranalytics.android.R.string.filter) |
|
|
|
|
|
|
|
filterMenuItem?.setIcon(net.pokeranalytics.android.R.drawable.ic_outline_filter_list) |
|
|
|
|
|
|
|
filterMenuItem?.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM) |
|
|
|
filterMenuItem?.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem?): Boolean { |
|
|
|
override fun onOptionsItemSelected(item: MenuItem?): Boolean { |
|
|
|
when (item?.itemId) { |
|
|
|
when (item?.itemId) { |
|
|
|
net.pokeranalytics.android.R.id.menu_item_filter -> { |
|
|
|
R.id.menu_item_filter -> { |
|
|
|
manageFilters(this) |
|
|
|
manageFilters(this) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -56,19 +84,35 @@ open class FilterableFragment : RealmFragment(), FilterHandler { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun applyFilter() { |
|
|
|
override fun applyFilter() { |
|
|
|
displaySelectedFilter() |
|
|
|
Timber.d("applyFilter") |
|
|
|
|
|
|
|
updateFilterUI() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun removeFilter() { |
|
|
|
override fun removeFilter() { |
|
|
|
|
|
|
|
Timber.d("removeFilter") |
|
|
|
hideSelectedFilter() |
|
|
|
hideSelectedFilter() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Show or hide the filter UI |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
private fun updateFilterUI() { |
|
|
|
|
|
|
|
if (Preferences.getActiveFilterId(requireContext())?.isNotEmpty() == true) { |
|
|
|
|
|
|
|
displaySelectedFilter() |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
hideSelectedFilter() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Display the filter UI |
|
|
|
|
|
|
|
*/ |
|
|
|
private fun displaySelectedFilter() { |
|
|
|
private fun displaySelectedFilter() { |
|
|
|
|
|
|
|
|
|
|
|
currentFilter(requireContext(), getRealm())?.let { filter -> |
|
|
|
currentFilter(requireContext(), getRealm())?.let { filter -> |
|
|
|
view?.findViewById<ViewGroup>(net.pokeranalytics.android.R.id.selectedFilter)?.let { viewGroup -> |
|
|
|
view?.findViewById<ViewGroup>(R.id.selectedFilter)?.let { viewGroup -> |
|
|
|
|
|
|
|
|
|
|
|
val layoutCurrentFilter = LayoutInflater.from(requireContext()).inflate(net.pokeranalytics.android.R.layout.view_selected_filter, viewGroup, false) |
|
|
|
val layoutCurrentFilter = LayoutInflater.from(requireContext()).inflate(R.layout.view_selected_filter, viewGroup, false) |
|
|
|
layoutCurrentFilter.filterName.text = filter.getDisplayName(requireContext()) |
|
|
|
layoutCurrentFilter.filterName.text = filter.getDisplayName(requireContext()) |
|
|
|
layoutCurrentFilter.deselectFilter.setOnClickListener { |
|
|
|
layoutCurrentFilter.deselectFilter.setOnClickListener { |
|
|
|
saveFilter(requireContext(), "") |
|
|
|
saveFilter(requireContext(), "") |
|
|
|
@ -85,8 +129,11 @@ open class FilterableFragment : RealmFragment(), FilterHandler { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Hide the filter UI |
|
|
|
|
|
|
|
*/ |
|
|
|
private fun hideSelectedFilter() { |
|
|
|
private fun hideSelectedFilter() { |
|
|
|
view?.findViewById<ViewGroup>(net.pokeranalytics.android.R.id.selectedFilter).let { |
|
|
|
view?.findViewById<ViewGroup>(R.id.selectedFilter).let { |
|
|
|
GlobalScope.launch(Dispatchers.Main) { |
|
|
|
GlobalScope.launch(Dispatchers.Main) { |
|
|
|
it?.visibility = View.GONE |
|
|
|
it?.visibility = View.GONE |
|
|
|
} |
|
|
|
} |
|
|
|
|