From 7efd9f36a127c9510cb94a283a2d623c7f042eae Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Thu, 23 May 2019 19:45:24 +0200 Subject: [PATCH] Fix & improve Filter management --- .../android/ui/activity/HomeActivity.kt | 4 +- .../android/ui/fragment/CalendarFragment.kt | 9 +-- .../android/ui/fragment/FeedFragment.kt | 23 +++--- .../android/ui/fragment/FiltersFragment.kt | 73 +++++++------------ .../android/ui/fragment/MoreFragment.kt | 7 +- .../android/ui/fragment/ReportsFragment.kt | 9 +-- .../android/ui/fragment/StatisticsFragment.kt | 22 +----- .../fragment/components/FilterableFragment.kt | 71 +++++++++++++++--- .../fragment/data/CustomFieldDataFragment.kt | 14 ---- .../android/ui/interfaces/FilterHandler.kt | 14 ++-- app/src/main/res/layout/fragment_stats.xml | 14 +++- 11 files changed, 135 insertions(+), 125 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt index 3e26844b..6bfbf3a5 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt @@ -27,6 +27,7 @@ class HomeActivity : PokerAnalyticsActivity() { } private lateinit var currencies: RealmResults + private var homePagerAdapter: HomePagerAdapter? = null private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -> when (item.itemId) { @@ -97,11 +98,10 @@ class HomeActivity : PokerAnalyticsActivity() { navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) navigation.selectedItemId = R.id.navigation_history - val homePagerAdapter = HomePagerAdapter(supportFragmentManager) + homePagerAdapter = HomePagerAdapter(supportFragmentManager) viewPager.offscreenPageLimit = 5 viewPager.enablePaging = false viewPager.adapter = homePagerAdapter - } /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt index c74088a5..6ef0f106 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt @@ -28,7 +28,6 @@ import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.extensions.hideWithAnimation import net.pokeranalytics.android.ui.extensions.showWithAnimation import net.pokeranalytics.android.ui.fragment.components.RealmFragment -import net.pokeranalytics.android.ui.interfaces.FragmentVisibility import net.pokeranalytics.android.ui.view.CalendarTabs import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType @@ -39,8 +38,8 @@ import java.util.* import kotlin.coroutines.CoroutineContext -class CalendarFragmentVisibility : RealmFragment(), CoroutineScope, StaticRowRepresentableDataSource, - RowRepresentableDelegate, FragmentVisibility { +class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentableDataSource, + RowRepresentableDelegate { enum class TimeFilter { MONTH, YEAR @@ -51,8 +50,8 @@ class CalendarFragmentVisibility : RealmFragment(), CoroutineScope, StaticRowRep /** * Create new instance */ - fun newInstance(): CalendarFragmentVisibility { - val fragment = CalendarFragmentVisibility() + fun newInstance(): CalendarFragment { + val fragment = CalendarFragment() val bundle = Bundle() fragment.arguments = bundle return fragment diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt index 5987e632..8ede3675 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt @@ -31,20 +31,19 @@ import net.pokeranalytics.android.ui.interfaces.FilterableType import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager import net.pokeranalytics.android.util.Preferences -import timber.log.Timber import java.text.SimpleDateFormat import java.util.* -class FeedFragmentVisibility : FilterableFragment(), RowRepresentableDelegate { +class FeedFragment : FilterableFragment(), RowRepresentableDelegate { companion object { const val REQUEST_CODE_MENU = 100 const val REQUEST_CODE_TRANSACTION_DETAILS = 101 - fun newInstance(): FeedFragmentVisibility { - val fragment = FeedFragmentVisibility() + fun newInstance(): FeedFragment { + val fragment = FeedFragment() val bundle = Bundle() fragment.arguments = bundle return fragment @@ -58,6 +57,7 @@ class FeedFragmentVisibility : FilterableFragment(), RowRepresentableDelegate { private lateinit var betaLimitDate: Date private var newSessionCreated: Boolean = false + private var adapterHasBeenSet: Boolean = false private var selectedTransaction: Transaction? = null private var selectedTransactionPosition: Int = -1 @@ -282,28 +282,31 @@ class FeedFragmentVisibility : FilterableFragment(), RowRepresentableDelegate { // Filter Handler - override fun createFilter() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - override fun applyFilter() { super.applyFilter() - Timber.d("applyFilter") + val filter: Filter? = this.currentFilter(this.requireContext(), getRealm()) this.loadSessions(filter) this.loadTransactions(filter) + filter?.let { if (it.filterableType == FilterableType.SESSION) { recyclerView.adapter = feedSessionAdapter } else { recyclerView.adapter = feedTransactionAdapter } + adapterHasBeenSet = true } + + if (!adapterHasBeenSet) { + adapterHasBeenSet = true + recyclerView.adapter = feedSessionAdapter + } } override fun removeFilter() { super.removeFilter() - Timber.d("removeFilter") + this.loadSessions() this.loadTransactions() if (currentFilterable== FilterableType.SESSION) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt index bc4e9a29..c1cfe849 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt @@ -6,7 +6,6 @@ import android.os.Bundle import android.view.* import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.chip.Chip -import io.realm.kotlin.where import kotlinx.android.synthetic.main.fragment_editable_data.appBar import kotlinx.android.synthetic.main.fragment_editable_data.recyclerView import kotlinx.android.synthetic.main.fragment_filters.* @@ -105,7 +104,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, if (isUpdating) { cancelUpdates() } else { - deleteFilter() + activity?.finish() } } @@ -151,7 +150,6 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, this.appBar.toolbar.title = getString(R.string.filter) val viewManager = LinearLayoutManager(requireContext()) - recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager @@ -169,10 +167,6 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, val realm = getRealm() - //TODO: Remove that - val filters = realm.where().findAll() - Timber.d("Filters: ${filters.size}") - primaryKey?.let { currentFilter = realm.copyFromRealm(Filter.getFilterBydId(realm, it)) isUpdating = true @@ -211,30 +205,34 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, val currentFilterId = Preferences.getActiveFilterId(requireContext()) mostUsedFilters.removeAllViews() - filters.forEachIndexed { index, filter -> - if (index < 3) { - val chip = Chip(requireContext()) - chip.id = View.generateViewId() - chip.tag = filter.id - chip.text = filter.getDisplayName(requireContext()) - chip.chipStartPadding = 8f.px - chip.chipEndPadding = 8f.px - - chip.isChecked = filter.id == currentFilterId - chip.setOnCloseIconClickListener { - - chip.isChecked = false - } - chip.setOnClickListener { - if (chip.isChecked) { - deleteFilter(false) - finishActivityWithResult(filter.id) - } else { - Preferences.removeActiveFilterId(requireContext()) - deleteFilter(true) + + var nbChips = 0 + filters.forEach { filter -> + if (nbChips < 3) { + + if (filter.id != currentFilterId) { + val chip = Chip(requireContext()) + chip.id = View.generateViewId() + chip.tag = filter.id + chip.text = filter.getDisplayName(requireContext()) + chip.chipStartPadding = 8f.px + chip.chipEndPadding = 8f.px + + chip.isChecked = filter.id == currentFilterId + chip.setOnCloseIconClickListener { + + chip.isChecked = false } + chip.setOnClickListener { + if (chip.isChecked) { + finishActivityWithResult(filter.id) + } else { + finishActivityWithResult("") + } + } + mostUsedFilters.addView(chip) + nbChips++ } - mostUsedFilters.addView(chip) } } @@ -284,23 +282,6 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, finishActivityWithResult(filterId) } - /** - * Delete data - */ - private fun deleteFilter(closeActivity: Boolean = true) { - Timber.d("Delete queryWith") - if (currentFilter?.isValid == true && currentFilter?.isManaged == true) { - val realm = getRealm() - realm.beginTransaction() - currentFilter?.deleteFromRealm() - realm.commitTransaction() - } - - if (closeActivity) { - finishActivityWithResult("") - } - } - /** * Finish the activity with a result */ diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt index 8347253a..997ff82c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt @@ -13,19 +13,18 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment -import net.pokeranalytics.android.ui.interfaces.FragmentVisibility import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.MoreTabRow -class MoreFragmentVisibility : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate, FragmentVisibility { +class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { companion object { /** * Create new instance */ - fun newInstance(): MoreFragmentVisibility { - val fragment = MoreFragmentVisibility() + fun newInstance(): MoreFragment { + val fragment = MoreFragment() val bundle = Bundle() fragment.arguments = bundle return fragment diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt index d03df6f3..00594ac2 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt @@ -29,7 +29,6 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.fragment.components.DeletableItemFragment -import net.pokeranalytics.android.ui.interfaces.FragmentVisibility import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable @@ -37,7 +36,7 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.ReportRow import timber.log.Timber import java.util.* -class ReportsFragmentVisibility : DeletableItemFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate, FragmentVisibility { +class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { // private lateinit var dataListAdapter: RowRepresentableAdapter private lateinit var reportSetups: RealmResults @@ -52,8 +51,8 @@ class ReportsFragmentVisibility : DeletableItemFragment(), StaticRowRepresentabl /** * Create new instance */ - fun newInstance(): ReportsFragmentVisibility { - val fragment = ReportsFragmentVisibility() + fun newInstance(): ReportsFragment { + val fragment = ReportsFragment() val bundle = Bundle() fragment.arguments = bundle return fragment @@ -199,7 +198,7 @@ class ReportsFragmentVisibility : DeletableItemFragment(), StaticRowRepresentabl launch(Dispatchers.Main) { if (!isDetached) { hideLoader() - ReportActivity.newInstanceForResult(this@ReportsFragmentVisibility, report, reportName) + ReportActivity.newInstanceForResult(this@ReportsFragment, report, reportName) } } realm.close() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt index 7948e1f5..26cb7a4f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt @@ -25,13 +25,12 @@ import net.pokeranalytics.android.ui.activity.FiltersActivity import net.pokeranalytics.android.ui.fragment.components.FilterableFragment import net.pokeranalytics.android.ui.fragment.report.ComposableTableReportFragment import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode -import net.pokeranalytics.android.ui.interfaces.FilterHandler import net.pokeranalytics.android.ui.interfaces.FilterableType import timber.log.Timber import java.util.* import kotlin.coroutines.CoroutineContext -class StatisticsFragmentVisibility : FilterableFragment(), FilterHandler { +class StatisticsFragment : FilterableFragment() { val coroutineContext: CoroutineContext get() = Dispatchers.Main @@ -43,8 +42,8 @@ class StatisticsFragmentVisibility : FilterableFragment(), FilterHandler { /** * Create new instance */ - fun newInstance(): StatisticsFragmentVisibility { - val fragment = StatisticsFragmentVisibility() + fun newInstance(): StatisticsFragment { + val fragment = StatisticsFragment() val bundle = Bundle() fragment.arguments = bundle return fragment @@ -61,21 +60,9 @@ class StatisticsFragmentVisibility : FilterableFragment(), FilterHandler { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initUI() - launchStatComputation() + applyFilter() } - /* - override fun setUserVisibleHint(isVisibleToUser: Boolean) { - super.setUserVisibleHint(isVisibleToUser) - if (isVisibleToUser && view != null) { - if (FilterHandler.filterWasUpdated) { - applyFilter() - FilterHandler.filterWasUpdated = false - } - } - } - */ - private fun initUI() { val fragmentTransaction = requireFragmentManager().beginTransaction() val fragment = ComposableTableReportFragment.newInstance(null) @@ -121,7 +108,6 @@ class StatisticsFragmentVisibility : FilterableFragment(), FilterHandler { override fun removeFilter() { super.removeFilter() - Timber.d("removeFilter") this.entitiesChanged() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/FilterableFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/FilterableFragment.kt index 3d88f52f..40987b84 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/FilterableFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/FilterableFragment.kt @@ -1,5 +1,9 @@ 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.view.* import androidx.appcompat.widget.Toolbar @@ -8,8 +12,11 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import net.pokeranalytics.android.R 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.util.Preferences import timber.log.Timber @@ -25,6 +32,30 @@ open class FilterableFragment : RealmFragment(), FilterHandler { 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? { setHasOptionsMenu(true) return super.onCreateView(inflater, container, savedInstanceState) @@ -32,20 +63,17 @@ open class FilterableFragment : RealmFragment(), FilterHandler { override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { super.onCreateOptionsMenu(menu, inflater) - Timber.d("onCreateOptionsMenu") - - view?.findViewById(net.pokeranalytics.android.R.id.toolbar)?.let { toolbar -> - Timber.d("toolbar menu ${toolbar.menu}") - 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) + view?.findViewById(R.id.toolbar)?.let { toolbar -> + toolbar.menu.removeItem(R.id.menu_item_filter) + filterMenuItem = toolbar.menu?.add(0, R.id.menu_item_filter, 0, R.string.filter) + filterMenuItem?.setIcon(R.drawable.ic_outline_filter_list) filterMenuItem?.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM) } } override fun onOptionsItemSelected(item: MenuItem?): Boolean { when (item?.itemId) { - net.pokeranalytics.android.R.id.menu_item_filter -> { + R.id.menu_item_filter -> { manageFilters(this) } } @@ -56,19 +84,35 @@ open class FilterableFragment : RealmFragment(), FilterHandler { } override fun applyFilter() { - displaySelectedFilter() + Timber.d("applyFilter") + updateFilterUI() } override fun removeFilter() { + Timber.d("removeFilter") 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() { currentFilter(requireContext(), getRealm())?.let { filter -> - view?.findViewById(net.pokeranalytics.android.R.id.selectedFilter)?.let { viewGroup -> + view?.findViewById(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.deselectFilter.setOnClickListener { saveFilter(requireContext(), "") @@ -85,8 +129,11 @@ open class FilterableFragment : RealmFragment(), FilterHandler { } } + /** + * Hide the filter UI + */ private fun hideSelectedFilter() { - view?.findViewById(net.pokeranalytics.android.R.id.selectedFilter).let { + view?.findViewById(R.id.selectedFilter).let { GlobalScope.launch(Dispatchers.Main) { it?.visibility = View.GONE } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt index 90a636d5..b0d68bbe 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt @@ -8,12 +8,10 @@ import androidx.interpolator.view.animation.FastOutSlowInInterpolator import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView import com.google.android.material.chip.ChipGroup -import io.realm.kotlin.where import kotlinx.android.synthetic.main.fragment_custom_view.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.CustomField import net.pokeranalytics.android.model.realm.CustomFieldEntry -import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.extensions.ChipGroupExtension @@ -25,7 +23,6 @@ import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.rowrepresentable.CustomFieldRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.util.NULL_TEXT -import timber.log.Timber import java.util.* import kotlin.collections.ArrayList @@ -40,8 +37,6 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa return this.item as CustomField } - private val deletedCustomFieldEntries: ArrayList = ArrayList() - private val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() { var dragFrom = -1 @@ -263,15 +258,6 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa onRowSelected(0, it) } } - - - val entries = getRealm().where().equalTo("customField.id", customField.id).findAll() - Timber.d("delete customField: entries: ${entries.size}") - entries.forEach { - val sessions = getRealm().where().contains("customFieldEntries.id", it.id).findAll() - Timber.d("Sessions: ${sessions.size} with entry value: ${it.value}") - } - } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/interfaces/FilterHandler.kt b/app/src/main/java/net/pokeranalytics/android/ui/interfaces/FilterHandler.kt index 8f176ea6..e66f2329 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/interfaces/FilterHandler.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/interfaces/FilterHandler.kt @@ -1,6 +1,7 @@ package net.pokeranalytics.android.ui.interfaces import android.content.Context +import android.content.Intent import androidx.fragment.app.Fragment import io.realm.Realm import io.realm.kotlin.where @@ -25,7 +26,7 @@ enum class FilterableType { interface FilterHandler { companion object { - var filterWasUpdated: Boolean = false + const val INTENT_FILTER_UPDATE_FILTER_UI = "net.pokeranalytics.android.UPDATE_FILTER_UI" } fun createFilter() @@ -34,12 +35,11 @@ interface FilterHandler { fun saveFilter(context: Context, filterId:String) { Preferences.setActiveFilterId(filterId, context) - filterWasUpdated = true - if (filterId.isNotEmpty()) { - this.applyFilter() - } else { - this.removeFilter() - } + + // Send broadcast + val intent = Intent() + intent.action = INTENT_FILTER_UPDATE_FILTER_UI + context.sendBroadcast(intent) } fun currentFilter(context: Context, realm: Realm): Filter? { diff --git a/app/src/main/res/layout/fragment_stats.xml b/app/src/main/res/layout/fragment_stats.xml index 468e754d..ea43175c 100644 --- a/app/src/main/res/layout/fragment_stats.xml +++ b/app/src/main/res/layout/fragment_stats.xml @@ -2,7 +2,8 @@ + android:layout_height="match_parent" + android:animateLayoutChanges="true"> + + + app:layout_constraintTop_toBottomOf="@+id/selectedFilter" /> \ No newline at end of file