Fix & improve Filter management

dev
Aurelien Hubert 7 years ago
parent ef509213fd
commit 7efd9f36a1
  1. 4
      app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
  2. 9
      app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt
  3. 23
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt
  4. 39
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt
  5. 7
      app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt
  6. 9
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
  7. 20
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt
  8. 71
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/FilterableFragment.kt
  9. 14
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt
  10. 14
      app/src/main/java/net/pokeranalytics/android/ui/interfaces/FilterHandler.kt
  11. 14
      app/src/main/res/layout/fragment_stats.xml

@ -27,6 +27,7 @@ class HomeActivity : PokerAnalyticsActivity() {
} }
private lateinit var currencies: RealmResults<Currency> private lateinit var currencies: RealmResults<Currency>
private var homePagerAdapter: HomePagerAdapter? = null
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -> private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) { when (item.itemId) {
@ -97,11 +98,10 @@ class HomeActivity : PokerAnalyticsActivity() {
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
navigation.selectedItemId = R.id.navigation_history navigation.selectedItemId = R.id.navigation_history
val homePagerAdapter = HomePagerAdapter(supportFragmentManager) homePagerAdapter = HomePagerAdapter(supportFragmentManager)
viewPager.offscreenPageLimit = 5 viewPager.offscreenPageLimit = 5
viewPager.enablePaging = false viewPager.enablePaging = false
viewPager.adapter = homePagerAdapter viewPager.adapter = homePagerAdapter
} }
/** /**

@ -28,7 +28,6 @@ import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.extensions.hideWithAnimation import net.pokeranalytics.android.ui.extensions.hideWithAnimation
import net.pokeranalytics.android.ui.extensions.showWithAnimation import net.pokeranalytics.android.ui.extensions.showWithAnimation
import net.pokeranalytics.android.ui.fragment.components.RealmFragment 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.CalendarTabs
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
@ -39,8 +38,8 @@ import java.util.*
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
class CalendarFragmentVisibility : RealmFragment(), CoroutineScope, StaticRowRepresentableDataSource, class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentableDataSource,
RowRepresentableDelegate, FragmentVisibility { RowRepresentableDelegate {
enum class TimeFilter { enum class TimeFilter {
MONTH, YEAR MONTH, YEAR
@ -51,8 +50,8 @@ class CalendarFragmentVisibility : RealmFragment(), CoroutineScope, StaticRowRep
/** /**
* Create new instance * Create new instance
*/ */
fun newInstance(): CalendarFragmentVisibility { fun newInstance(): CalendarFragment {
val fragment = CalendarFragmentVisibility() val fragment = CalendarFragment()
val bundle = Bundle() val bundle = Bundle()
fragment.arguments = bundle fragment.arguments = bundle
return fragment return fragment

@ -31,20 +31,19 @@ import net.pokeranalytics.android.ui.interfaces.FilterableType
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager
import net.pokeranalytics.android.util.Preferences import net.pokeranalytics.android.util.Preferences
import timber.log.Timber
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
class FeedFragmentVisibility : FilterableFragment(), RowRepresentableDelegate { class FeedFragment : FilterableFragment(), RowRepresentableDelegate {
companion object { companion object {
const val REQUEST_CODE_MENU = 100 const val REQUEST_CODE_MENU = 100
const val REQUEST_CODE_TRANSACTION_DETAILS = 101 const val REQUEST_CODE_TRANSACTION_DETAILS = 101
fun newInstance(): FeedFragmentVisibility { fun newInstance(): FeedFragment {
val fragment = FeedFragmentVisibility() val fragment = FeedFragment()
val bundle = Bundle() val bundle = Bundle()
fragment.arguments = bundle fragment.arguments = bundle
return fragment return fragment
@ -58,6 +57,7 @@ class FeedFragmentVisibility : FilterableFragment(), RowRepresentableDelegate {
private lateinit var betaLimitDate: Date private lateinit var betaLimitDate: Date
private var newSessionCreated: Boolean = false private var newSessionCreated: Boolean = false
private var adapterHasBeenSet: Boolean = false
private var selectedTransaction: Transaction? = null private var selectedTransaction: Transaction? = null
private var selectedTransactionPosition: Int = -1 private var selectedTransactionPosition: Int = -1
@ -282,28 +282,31 @@ class FeedFragmentVisibility : FilterableFragment(), RowRepresentableDelegate {
// Filter Handler // Filter Handler
override fun createFilter() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun applyFilter() { override fun applyFilter() {
super.applyFilter() super.applyFilter()
Timber.d("applyFilter")
val filter: Filter? = this.currentFilter(this.requireContext(), getRealm()) val filter: Filter? = this.currentFilter(this.requireContext(), getRealm())
this.loadSessions(filter) this.loadSessions(filter)
this.loadTransactions(filter) this.loadTransactions(filter)
filter?.let { filter?.let {
if (it.filterableType == FilterableType.SESSION) { if (it.filterableType == FilterableType.SESSION) {
recyclerView.adapter = feedSessionAdapter recyclerView.adapter = feedSessionAdapter
} else { } else {
recyclerView.adapter = feedTransactionAdapter recyclerView.adapter = feedTransactionAdapter
} }
adapterHasBeenSet = true
}
if (!adapterHasBeenSet) {
adapterHasBeenSet = true
recyclerView.adapter = feedSessionAdapter
} }
} }
override fun removeFilter() { override fun removeFilter() {
super.removeFilter() super.removeFilter()
Timber.d("removeFilter")
this.loadSessions() this.loadSessions()
this.loadTransactions() this.loadTransactions()
if (currentFilterable== FilterableType.SESSION) { if (currentFilterable== FilterableType.SESSION) {

@ -6,7 +6,6 @@ import android.os.Bundle
import android.view.* import android.view.*
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.chip.Chip 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.appBar
import kotlinx.android.synthetic.main.fragment_editable_data.recyclerView import kotlinx.android.synthetic.main.fragment_editable_data.recyclerView
import kotlinx.android.synthetic.main.fragment_filters.* import kotlinx.android.synthetic.main.fragment_filters.*
@ -105,7 +104,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
if (isUpdating) { if (isUpdating) {
cancelUpdates() cancelUpdates()
} else { } else {
deleteFilter() activity?.finish()
} }
} }
@ -151,7 +150,6 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
this.appBar.toolbar.title = getString(R.string.filter) this.appBar.toolbar.title = getString(R.string.filter)
val viewManager = LinearLayoutManager(requireContext()) val viewManager = LinearLayoutManager(requireContext())
recyclerView.apply { recyclerView.apply {
setHasFixedSize(true) setHasFixedSize(true)
layoutManager = viewManager layoutManager = viewManager
@ -169,10 +167,6 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
val realm = getRealm() val realm = getRealm()
//TODO: Remove that
val filters = realm.where<Filter>().findAll()
Timber.d("Filters: ${filters.size}")
primaryKey?.let { primaryKey?.let {
currentFilter = realm.copyFromRealm(Filter.getFilterBydId(realm, it)) currentFilter = realm.copyFromRealm(Filter.getFilterBydId(realm, it))
isUpdating = true isUpdating = true
@ -211,8 +205,12 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
val currentFilterId = Preferences.getActiveFilterId(requireContext()) val currentFilterId = Preferences.getActiveFilterId(requireContext())
mostUsedFilters.removeAllViews() mostUsedFilters.removeAllViews()
filters.forEachIndexed { index, filter ->
if (index < 3) { var nbChips = 0
filters.forEach { filter ->
if (nbChips < 3) {
if (filter.id != currentFilterId) {
val chip = Chip(requireContext()) val chip = Chip(requireContext())
chip.id = View.generateViewId() chip.id = View.generateViewId()
chip.tag = filter.id chip.tag = filter.id
@ -227,14 +225,14 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
} }
chip.setOnClickListener { chip.setOnClickListener {
if (chip.isChecked) { if (chip.isChecked) {
deleteFilter(false)
finishActivityWithResult(filter.id) finishActivityWithResult(filter.id)
} else { } else {
Preferences.removeActiveFilterId(requireContext()) finishActivityWithResult("")
deleteFilter(true)
} }
} }
mostUsedFilters.addView(chip) mostUsedFilters.addView(chip)
nbChips++
}
} }
} }
@ -284,23 +282,6 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
finishActivityWithResult(filterId) 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 * Finish the activity with a result
*/ */

@ -13,19 +13,18 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment 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
import net.pokeranalytics.android.ui.view.rowrepresentable.MoreTabRow import net.pokeranalytics.android.ui.view.rowrepresentable.MoreTabRow
class MoreFragmentVisibility : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate, FragmentVisibility { class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
companion object { companion object {
/** /**
* Create new instance * Create new instance
*/ */
fun newInstance(): MoreFragmentVisibility { fun newInstance(): MoreFragment {
val fragment = MoreFragmentVisibility() val fragment = MoreFragment()
val bundle = Bundle() val bundle = Bundle()
fragment.arguments = bundle fragment.arguments = bundle
return fragment return fragment

@ -29,7 +29,6 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.fragment.components.DeletableItemFragment 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.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable 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 timber.log.Timber
import java.util.* import java.util.*
class ReportsFragmentVisibility : DeletableItemFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate, FragmentVisibility { class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
// private lateinit var dataListAdapter: RowRepresentableAdapter // private lateinit var dataListAdapter: RowRepresentableAdapter
private lateinit var reportSetups: RealmResults<ReportSetup> private lateinit var reportSetups: RealmResults<ReportSetup>
@ -52,8 +51,8 @@ class ReportsFragmentVisibility : DeletableItemFragment(), StaticRowRepresentabl
/** /**
* Create new instance * Create new instance
*/ */
fun newInstance(): ReportsFragmentVisibility { fun newInstance(): ReportsFragment {
val fragment = ReportsFragmentVisibility() val fragment = ReportsFragment()
val bundle = Bundle() val bundle = Bundle()
fragment.arguments = bundle fragment.arguments = bundle
return fragment return fragment
@ -199,7 +198,7 @@ class ReportsFragmentVisibility : DeletableItemFragment(), StaticRowRepresentabl
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
if (!isDetached) { if (!isDetached) {
hideLoader() hideLoader()
ReportActivity.newInstanceForResult(this@ReportsFragmentVisibility, report, reportName) ReportActivity.newInstanceForResult(this@ReportsFragment, report, reportName)
} }
} }
realm.close() realm.close()

@ -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.components.FilterableFragment
import net.pokeranalytics.android.ui.fragment.report.ComposableTableReportFragment import net.pokeranalytics.android.ui.fragment.report.ComposableTableReportFragment
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
import net.pokeranalytics.android.ui.interfaces.FilterHandler
import net.pokeranalytics.android.ui.interfaces.FilterableType import net.pokeranalytics.android.ui.interfaces.FilterableType
import timber.log.Timber import timber.log.Timber
import java.util.* import java.util.*
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
class StatisticsFragmentVisibility : FilterableFragment(), FilterHandler { class StatisticsFragment : FilterableFragment() {
val coroutineContext: CoroutineContext val coroutineContext: CoroutineContext
get() = Dispatchers.Main get() = Dispatchers.Main
@ -43,8 +42,8 @@ class StatisticsFragmentVisibility : FilterableFragment(), FilterHandler {
/** /**
* Create new instance * Create new instance
*/ */
fun newInstance(): StatisticsFragmentVisibility { fun newInstance(): StatisticsFragment {
val fragment = StatisticsFragmentVisibility() val fragment = StatisticsFragment()
val bundle = Bundle() val bundle = Bundle()
fragment.arguments = bundle fragment.arguments = bundle
return fragment return fragment
@ -61,20 +60,8 @@ class StatisticsFragmentVisibility : FilterableFragment(), FilterHandler {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
initUI() initUI()
launchStatComputation()
}
/*
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if (isVisibleToUser && view != null) {
if (FilterHandler.filterWasUpdated) {
applyFilter() applyFilter()
FilterHandler.filterWasUpdated = false
}
} }
}
*/
private fun initUI() { private fun initUI() {
val fragmentTransaction = requireFragmentManager().beginTransaction() val fragmentTransaction = requireFragmentManager().beginTransaction()
@ -121,7 +108,6 @@ class StatisticsFragmentVisibility : FilterableFragment(), FilterHandler {
override fun removeFilter() { override fun removeFilter() {
super.removeFilter() super.removeFilter()
Timber.d("removeFilter")
this.entitiesChanged() this.entitiesChanged()
} }

@ -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
} }

@ -8,12 +8,10 @@ import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.chip.ChipGroup import com.google.android.material.chip.ChipGroup
import io.realm.kotlin.where
import kotlinx.android.synthetic.main.fragment_custom_view.* import kotlinx.android.synthetic.main.fragment_custom_view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.CustomField import net.pokeranalytics.android.model.realm.CustomField
import net.pokeranalytics.android.model.realm.CustomFieldEntry 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.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.extensions.ChipGroupExtension 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.CustomFieldRow
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
import timber.log.Timber
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
@ -40,8 +37,6 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa
return this.item as CustomField return this.item as CustomField
} }
private val deletedCustomFieldEntries: ArrayList<CustomFieldEntry> = ArrayList()
private val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() { private val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() {
var dragFrom = -1 var dragFrom = -1
@ -263,15 +258,6 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa
onRowSelected(0, it) onRowSelected(0, it)
} }
} }
val entries = getRealm().where<CustomFieldEntry>().equalTo("customField.id", customField.id).findAll()
Timber.d("delete customField: entries: ${entries.size}")
entries.forEach {
val sessions = getRealm().where<Session>().contains("customFieldEntries.id", it.id).findAll()
Timber.d("Sessions: ${sessions.size} with entry value: ${it.value}")
}
} }

@ -1,6 +1,7 @@
package net.pokeranalytics.android.ui.interfaces package net.pokeranalytics.android.ui.interfaces
import android.content.Context import android.content.Context
import android.content.Intent
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import io.realm.Realm import io.realm.Realm
import io.realm.kotlin.where import io.realm.kotlin.where
@ -25,7 +26,7 @@ enum class FilterableType {
interface FilterHandler { interface FilterHandler {
companion object { companion object {
var filterWasUpdated: Boolean = false const val INTENT_FILTER_UPDATE_FILTER_UI = "net.pokeranalytics.android.UPDATE_FILTER_UI"
} }
fun createFilter() fun createFilter()
@ -34,12 +35,11 @@ interface FilterHandler {
fun saveFilter(context: Context, filterId:String) { fun saveFilter(context: Context, filterId:String) {
Preferences.setActiveFilterId(filterId, context) Preferences.setActiveFilterId(filterId, context)
filterWasUpdated = true
if (filterId.isNotEmpty()) { // Send broadcast
this.applyFilter() val intent = Intent()
} else { intent.action = INTENT_FILTER_UPDATE_FILTER_UI
this.removeFilter() context.sendBroadcast(intent)
}
} }
fun currentFilter(context: Context, realm: Realm): Filter? { fun currentFilter(context: Context, realm: Realm): Filter? {

@ -2,7 +2,8 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:animateLayoutChanges="true">
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar" android:id="@+id/appBar"
@ -24,6 +25,15 @@
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<FrameLayout
android:id="@+id/selectedFilter"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/appBar" />
<FrameLayout <FrameLayout
android:id="@+id/tableContainer" android:id="@+id/tableContainer"
android:layout_width="0dp" android:layout_width="0dp"
@ -31,6 +41,6 @@
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/appBar" /> app:layout_constraintTop_toBottomOf="@+id/selectedFilter" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save