Merge branch 'dev' of gitlab.com:stax-river/poker-analytics into dev

dev
Laurent 7 years ago
commit 31822bb410
  1. 7
      app/src/main/java/net/pokeranalytics/android/model/LiveData.kt
  2. 20
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  3. 20
      app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt
  4. 20
      app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt
  5. 36
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  6. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
  7. 3
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt
  8. 25
      app/src/main/java/net/pokeranalytics/android/ui/interfaces/FilterHandler.kt

@ -22,10 +22,11 @@ enum class LiveData : Localizable {
TOURNAMENT_NAME, TOURNAMENT_NAME,
TOURNAMENT_FEATURE, TOURNAMENT_FEATURE,
TRANSACTION, TRANSACTION,
TRANSACTION_TYPE; TRANSACTION_TYPE,
FILTER;
fun items(realm: Realm, fieldName: String? = null, sortOrder: Sort? = null): RealmResults<*> { fun items(realm: Realm, fieldName: String? = null, sortOrder: Sort? = null): RealmResults<*> {
var results = realm.where(this.relatedEntity).findAll().sort(fieldName ?: this.sortingFieldName, sortOrder ?: this.sorting) val results = realm.where(this.relatedEntity).findAll().sort(fieldName ?: this.sortingFieldName, sortOrder ?: this.sorting)
if (results.size > 0) { if (results.size > 0) {
if (results.first() is CountableUsage) { if (results.first() is CountableUsage) {
@ -101,6 +102,7 @@ enum class LiveData : Localizable {
TOURNAMENT_FEATURE -> TournamentFeature::class.java TOURNAMENT_FEATURE -> TournamentFeature::class.java
TRANSACTION -> Transaction::class.java TRANSACTION -> Transaction::class.java
TRANSACTION_TYPE -> TransactionType::class.java TRANSACTION_TYPE -> TransactionType::class.java
FILTER -> Filter::class.java
} }
} }
@ -142,6 +144,7 @@ enum class LiveData : Localizable {
TOURNAMENT_FEATURE -> R.string.tournament_feature TOURNAMENT_FEATURE -> R.string.tournament_feature
TRANSACTION -> R.string.operations TRANSACTION -> R.string.operations
TRANSACTION_TYPE -> R.string.operation_types TRANSACTION_TYPE -> R.string.operation_types
FILTER -> R.string.filter
} }
} }

@ -3,10 +3,20 @@ package net.pokeranalytics.android.model.realm
import io.realm.* import io.realm.*
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.filter.Filterable import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.interfaces.CountableUsage
import net.pokeranalytics.android.model.interfaces.NameManageable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import net.pokeranalytics.android.ui.view.rowrepresentable.GameRow
import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow
import net.pokeranalytics.android.util.NULL_TEXT
import timber.log.Timber import timber.log.Timber
import java.util.* import java.util.*
@ -15,7 +25,7 @@ import java.util.*
* It contains a list of [FilterCondition] describing the complete query to launch * It contains a list of [FilterCondition] describing the complete query to launch
* The [Filter] is working closely with a [Filterable] interface providing the entity we want the query being launched on * The [Filter] is working closely with a [Filterable] interface providing the entity we want the query being launched on
*/ */
open class Filter : RealmObject() { open class Filter : RealmObject(), RowRepresentable {
companion object { companion object {
@ -44,10 +54,10 @@ open class Filter : RealmObject() {
} }
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
// the queryWith name // the queryWith name
var name: String = "" var name: String = ""
// the number of use of the queryWith, // the number of use of the queryWith,
// for MutableRealmInteger, see https://realm.io/docs/java/latest/#counters // for MutableRealmInteger, see https://realm.io/docs/java/latest/#counters
@ -139,4 +149,8 @@ open class Filter : RealmObject() {
} }
override fun getDisplayName(): String {
if (name.isNotEmpty()) return name
return this.query.name
}
} }

@ -3,25 +3,37 @@ package net.pokeranalytics.android.ui.activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment
import kotlinx.android.synthetic.main.activity_data_list.* import kotlinx.android.synthetic.main.activity_data_list.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.fragment.DataListFragment import net.pokeranalytics.android.ui.fragment.DataListFragment
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
class DataListActivity : PokerAnalyticsActivity() { class DataListActivity : PokerAnalyticsActivity() {
enum class IntentKey(val keyName: String) { enum class IntentKey(val keyName: String) {
DATA_TYPE("DATA_TYPE"), DATA_TYPE("DATA_TYPE"),
LIVE_DATA_TYPE("LIVE_DATA_TYPE"),
ITEM_DELETED("ITEM_DELETED") ITEM_DELETED("ITEM_DELETED")
} }
companion object { companion object {
fun newInstance(context: Context, dataType: Int) { fun newInstance(context: Context, dataType: Int) {
val intent = Intent(context, DataListActivity::class.java) context.startActivity(getIntent(context, dataType))
intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType)
context.startActivity(intent)
} }
}
fun newSelectInstance(fragment: Fragment, dataType: Int) {
val context = fragment.requireContext()
fragment.startActivityForResult(getIntent(context, dataType), FilterActivityRequestCode.SELECT_FILTER.ordinal)
}
private fun getIntent(context:Context, dataType:Int) : Intent {
val intent = Intent(context, DataListActivity::class.java)
intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType)
return intent
}
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)

@ -7,6 +7,7 @@ import androidx.fragment.app.Fragment
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.fragment.FiltersFragment import net.pokeranalytics.android.ui.fragment.FiltersFragment
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
class FiltersActivity : PokerAnalyticsActivity() { class FiltersActivity : PokerAnalyticsActivity() {
@ -21,20 +22,23 @@ class FiltersActivity : PokerAnalyticsActivity() {
* Default constructor * Default constructor
*/ */
fun newInstance(context: Context, filterId: String? = null) { fun newInstance(context: Context, filterId: String? = null) {
val intent = Intent(context, FiltersActivity::class.java) context.startActivity(getIntent(context, filterId))
filterId?.let {
intent.putExtra(IntentKey.FILTER_ID.keyName, it)
}
context.startActivity(intent)
} }
/** /**
* Create a new instance for result * Create a new instance for result
*/ */
fun newInstanceForResult(fragment: Fragment, requestCode: Int) { fun newInstanceForResult(fragment: Fragment, filterId: String? = null) {
val intent = Intent(fragment.requireContext(), FiltersActivity::class.java) fragment.startActivityForResult(getIntent(fragment.requireContext(), filterId), FilterActivityRequestCode.SELECT_FILTER.ordinal)
fragment.startActivityForResult(intent, requestCode)
} }
private fun getIntent(context:Context, filterId:String?) : Intent {
val intent = Intent(context, FiltersActivity::class.java)
filterId?.let {
intent.putExtra(IntentKey.FILTER_ID.keyName, it)
}
return intent
}
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {

@ -18,10 +18,13 @@ 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.R
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Deletable import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.FiltersActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
@ -30,8 +33,6 @@ import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.helpers.SwipeToDeleteCallback import net.pokeranalytics.android.ui.helpers.SwipeToDeleteCallback
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.SettingRow
class DataListFragment : RealmFragment(), LiveRowRepresentableDataSource, RowRepresentableDelegate { class DataListFragment : RealmFragment(), LiveRowRepresentableDataSource, RowRepresentableDelegate {
@ -39,7 +40,7 @@ class DataListFragment : RealmFragment(), LiveRowRepresentableDataSource, RowRep
const val REQUEST_CODE_DETAILS = 1000 const val REQUEST_CODE_DETAILS = 1000
} }
private lateinit var dataType: SettingRow private lateinit var dataType: LiveData
private lateinit var items: RealmResults<*> private lateinit var items: RealmResults<*>
private lateinit var dataListAdapter: RowRepresentableAdapter private lateinit var dataListAdapter: RowRepresentableAdapter
@ -93,14 +94,21 @@ class DataListFragment : RealmFragment(), LiveRowRepresentableDataSource, RowRep
} }
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
this.dataType.relatedResultsRepresentable?.let { this.dataType?.let {
lastItemClickedPosition = position if (it == LiveData.FILTER) {
EditableDataActivity.newInstanceForResult( val intent = Intent()
this, intent.putExtra(FiltersActivity.IntentKey.FILTER_ID.keyName, (row as Filter).id)
it.ordinal, activity?.setResult(Activity.RESULT_OK, intent)
(row as Identifiable).id, activity?.finish()
REQUEST_CODE_DETAILS } else {
) lastItemClickedPosition = position
EditableDataActivity.newInstanceForResult(
this,
it.ordinal,
(row as Identifiable).id,
REQUEST_CODE_DETAILS
)
}
} }
} }
@ -135,7 +143,7 @@ class DataListFragment : RealmFragment(), LiveRowRepresentableDataSource, RowRep
} }
this.addButton.setOnClickListener { this.addButton.setOnClickListener {
this.dataType.relatedResultsRepresentable?.let { this.dataType?.let {
EditableDataActivity.newInstance( EditableDataActivity.newInstance(
requireContext(), requireContext(),
dataType = it.ordinal, dataType = it.ordinal,
@ -199,9 +207,9 @@ class DataListFragment : RealmFragment(), LiveRowRepresentableDataSource, RowRep
* Set fragment data * Set fragment data
*/ */
fun setData(dataType: Int) { fun setData(dataType: Int) {
this.dataType = SettingRow.values()[dataType] this.dataType = LiveData.values()[dataType]
this.toolbar.title = this.dataType.localizedTitle(requireContext()) this.toolbar.title = this.dataType.localizedTitle(requireContext())
this.dataType.relatedResultsRepresentable?.let { this.dataType?.let {
this.items = it.items(getRealm()) this.items = it.items(getRealm())
} }
} }

@ -124,7 +124,7 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta
} }
row.relatedResultsRepresentable?.let { row.relatedResultsRepresentable?.let {
DataListActivity.newInstance(requireContext(), (row as SettingRow).ordinal) DataListActivity.newInstance(requireContext(), it.ordinal)
} }
} }

@ -23,6 +23,7 @@ import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.FiltersActivity import net.pokeranalytics.android.ui.activity.FiltersActivity
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
import net.pokeranalytics.android.ui.interfaces.FilterHandler import net.pokeranalytics.android.ui.interfaces.FilterHandler
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
@ -83,7 +84,7 @@ class StatisticsFragment : TableReportFragment(), FilterHandler {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 0 && resultCode == Activity.RESULT_OK) { if (requestCode == FilterActivityRequestCode.SELECT_FILTER.ordinal && resultCode == Activity.RESULT_OK) {
data?.let { data?.let {
this.saveFilter(this.requireContext(), it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName)) this.saveFilter(this.requireContext(), it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName))
} }

@ -6,11 +6,19 @@ import androidx.fragment.app.Fragment
import io.realm.Realm import io.realm.Realm
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.activity.FiltersActivity import net.pokeranalytics.android.ui.activity.FiltersActivity
import net.pokeranalytics.android.util.Preferences import net.pokeranalytics.android.util.Preferences
import timber.log.Timber import timber.log.Timber
enum class FilterActivityRequestCode {
SELECT_FILTER,
CREATE_FILTER,
;
}
interface FilterHandler { interface FilterHandler {
fun createFilter() fun createFilter()
@ -36,15 +44,22 @@ interface FilterHandler {
fun manageFilters(fragment: Fragment) { fun manageFilters(fragment: Fragment) {
val context = fragment.requireContext() val context = fragment.requireContext()
val filterId = Preferences.getActiveFilterId(context)
val filterSelected = filterId != null
val filterSelected = Preferences.getActiveFilterId(context) != null val realm = Realm.getDefaultInstance()
val count = realm.where<Filter>().count().toInt()
realm.close()
val choices = ArrayList<CharSequence>() val choices = ArrayList<CharSequence>()
choices.add(fragment.getString(R.string.new_str)) choices.add(fragment.getString(R.string.new_str))
if (count > 0) {
choices.add(fragment.getString(R.string.load_from_db))
}
if (filterSelected) { if (filterSelected) {
choices.add(fragment.getString(R.string.modify_current_filter)) choices.add(fragment.getString(R.string.modify_current_filter))
choices.add(fragment.getString(R.string.load_from_db))
choices.add(fragment.getString(R.string.remove_filter)) choices.add(fragment.getString(R.string.remove_filter))
} }
@ -54,9 +69,9 @@ interface FilterHandler {
.setItems(choices.toTypedArray()) { _, which -> .setItems(choices.toTypedArray()) { _, which ->
Timber.d("Click on $which") Timber.d("Click on $which")
when (which) { when (which) {
0 -> FiltersActivity.newInstanceForResult(fragment = fragment, requestCode = 0) 0 -> FiltersActivity.newInstanceForResult(fragment = fragment)
1 -> FiltersActivity.newInstanceForResult(fragment = fragment, requestCode = 0) 1 -> DataListActivity.newSelectInstance(fragment, LiveData.FILTER.ordinal)
2 -> FiltersActivity.newInstanceForResult(fragment = fragment, requestCode = 0) 2 -> FiltersActivity.newInstanceForResult(fragment = fragment, filterId = filterId)
3 -> { 3 -> {
Preferences.removeActiveFilterId(context) Preferences.removeActiveFilterId(context)
removeFilter() removeFilter()

Loading…
Cancel
Save