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

dev
Laurent 7 years ago
commit 642c290f0c
  1. 2
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 35
      app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt
  3. 10
      app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt
  4. 7
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  5. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt
  6. 15
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt
  7. 85
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt
  8. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt
  9. 14
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt
  10. 6
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt
  11. 0
      app/src/main/res/layout/activity_report_creation.xml
  12. 13
      app/src/main/res/layout/bottom_sheet_sum.xml
  13. 63
      app/src/main/res/layout/fragment_report_creation.xml
  14. 12
      app/src/main/res/menu/toolbar_report_creation.xml

@ -65,7 +65,7 @@ class PokerAnalyticsApplication : Application() {
if (BuildConfig.DEBUG) {
Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}")
// this.createFakeSessions()
this.createFakeSessions()
}

@ -10,12 +10,13 @@ import net.pokeranalytics.android.ui.fragment.FiltersFragment
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
import net.pokeranalytics.android.ui.interfaces.FilterableType
class FiltersActivity : PokerAnalyticsActivity() {
class FiltersActivity : PokerAnalyticsActivity() {
enum class IntentKey(val keyName: String) {
FILTER_ID("FILTER_ID"),
FILTERABLE_TYPE("FILTERABLE_TYPE"),
;
FILTERABLE_TYPE("FILTERABLE_TYPE"),
HIDE_MOST_USED_FILTERS("HIDE_MOST_USED_FILTERS"),
;
}
private lateinit var fragment: FiltersFragment
@ -24,18 +25,20 @@ class FiltersActivity : PokerAnalyticsActivity() {
/**
* Create a new instance for result
*/
fun newInstanceForResult(fragment: Fragment, filterId: String? = null, currentFilterable: FilterableType) {
fragment.startActivityForResult(getIntent(fragment.requireContext(), filterId, currentFilterable), FilterActivityRequestCode.SELECT_FILTER.ordinal)
fun newInstanceForResult(fragment: Fragment, filterId: String? = null, currentFilterable: FilterableType, hideMostUsedFilters: Boolean = false) {
val intent = getIntent(fragment.requireContext(), filterId, currentFilterable, hideMostUsedFilters)
fragment.startActivityForResult(intent, FilterActivityRequestCode.CREATE_FILTER.ordinal)
}
private fun getIntent(context:Context, filterId:String?, currentFilterable: FilterableType) : Intent {
val intent = Intent(context, FiltersActivity::class.java)
intent.putExtra(IntentKey.FILTERABLE_TYPE.keyName, currentFilterable.ordinal)
filterId?.let {
intent.putExtra(IntentKey.FILTER_ID.keyName, it)
}
return intent
}
private fun getIntent(context: Context, filterId: String?, currentFilterable: FilterableType, hideMostUsedFilters: Boolean = false): Intent {
val intent = Intent(context, FiltersActivity::class.java)
intent.putExtra(IntentKey.FILTERABLE_TYPE.keyName, currentFilterable.ordinal)
intent.putExtra(IntentKey.HIDE_MOST_USED_FILTERS.keyName, hideMostUsedFilters)
filterId?.let {
intent.putExtra(IntentKey.FILTER_ID.keyName, it)
}
return intent
}
}
override fun onCreate(savedInstanceState: Bundle?) {
@ -56,13 +59,15 @@ class FiltersActivity : PokerAnalyticsActivity() {
val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
val filterId = intent.getStringExtra(IntentKey.FILTER_ID.keyName)
val ordinal = intent.getIntExtra(IntentKey.FILTERABLE_TYPE.keyName, 0)
val filterableType = FilterableType.values()[ordinal]
val ordinal = intent.getIntExtra(IntentKey.FILTERABLE_TYPE.keyName, 0)
val hideMostUsedFilters = intent.getBooleanExtra(IntentKey.HIDE_MOST_USED_FILTERS.keyName, false)
val filterableType = FilterableType.values()[ordinal]
fragment = FiltersFragment()
fragmentTransaction.add(R.id.container, fragment)
fragmentTransaction.commit()
fragment.setData(filterId, filterableType)
fragment.updateMostUsedFiltersVisibility(!hideMostUsedFilters)
}

@ -14,25 +14,19 @@ class ReportCreationActivity : PokerAnalyticsActivity() {
NEW_REPORT
}
companion object {
companion object {
var options: Calculator.Options? = null
// fun newInstance(context: Context) {
// val intent = Intent(context, ReportCreationActivity::class.java)
// context.startActivity(intent)
// }
fun newInstanceForResult(fragment: Fragment, context: Context) {
val intent = Intent(context, ReportCreationActivity::class.java)
fragment.startActivityForResult(intent, RequestCode.NEW_REPORT.ordinal)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_reportcreation)
setContentView(R.layout.activity_report_creation)
}
}

@ -6,6 +6,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.RealmResults
@ -143,11 +144,7 @@ class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataSource
* Update UI
*/
fun updateUI(showAddButton: Boolean) {
if (showAddButton) {
this.addButton.show()
} else {
this.addButton.hide()
}
this.addButton.isVisible = showAddButton
}
}

@ -84,7 +84,7 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate {
if (data.getBooleanExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, false)) {
deleteSelectedTransaction()
}
} else if (requestCode == FilterActivityRequestCode.SELECT_FILTER.ordinal && resultCode == RESULT_OK) {
} else if (requestCode == FilterActivityRequestCode.CREATE_FILTER.ordinal && resultCode == RESULT_OK) {
data?.let {
this.saveFilter(this.requireContext(), it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName))
}

@ -4,6 +4,7 @@ import android.app.Activity.RESULT_OK
import android.content.Intent
import android.os.Bundle
import android.view.*
import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.chip.Chip
import kotlinx.android.synthetic.main.fragment_editable_data.appBar
@ -27,6 +28,7 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import net.pokeranalytics.android.util.Preferences
import net.pokeranalytics.android.util.extensions.sorted
import timber.log.Timber
open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate {
@ -50,7 +52,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
private var selectedRow: RowRepresentable? = null
private var isUpdating = false
private var isSaved = false
private var showMostUsedFiltersLayout = true
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
@ -158,6 +160,8 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
moreFilters.setOnClickListener {
DataListActivity.newSelectInstance(this, LiveData.FILTER.ordinal, false)
}
mostUsedFiltersLayout.isVisible = showMostUsedFiltersLayout
}
/**
@ -292,4 +296,13 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
this.filterableType = filterableType
}
/**
* Update the most used filters visibility
*/
fun updateMostUsedFiltersVisibility(visible: Boolean) {
Timber.d("updateMostUsedFiltersVisibility: $visible")
showMostUsedFiltersLayout = visible
mostUsedFiltersLayout?.isVisible = visible
}
}

@ -3,9 +3,7 @@ package net.pokeranalytics.android.ui.fragment
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.*
import androidx.recyclerview.widget.LinearLayoutManager
import io.realm.Realm
import kotlinx.android.synthetic.main.fragment_report_creation.*
@ -14,11 +12,14 @@ import net.pokeranalytics.android.calculus.Calculator
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.FiltersActivity
import net.pokeranalytics.android.ui.activity.ReportCreationActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.ui.interfaces.FilterActivityRequestCode
import net.pokeranalytics.android.ui.interfaces.FilterableType
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
@ -29,6 +30,7 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR
private var assistant = Assistant()
private var currentRows: List<RowRepresentable> = listOf()
private var reportCreationMenu: Menu? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
@ -37,6 +39,47 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
this.initUI()
this.updateUIWithCurrentStep()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == FilterActivityRequestCode.CREATE_FILTER.ordinal && resultCode == Activity.RESULT_OK) {
this.updateUIWithCurrentStep()
val selectedFilterId = data?.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName)
val filterPosition = currentRows.indexOfFirst { it is Filter && it.id == selectedFilterId }
if (filterPosition != -1) {
onRowSelected(filterPosition, currentRows[filterPosition])
}
}
}
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
super.onCreateOptionsMenu(menu, inflater)
menu?.clear()
inflater?.inflate(R.menu.toolbar_report_creation, menu)
menu?.findItem(R.id.add)?.isVisible = false
reportCreationMenu = menu
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item?.itemId) {
R.id.add -> {
if (this.assistant.step == Assistant.Step.FILTER) {
FiltersActivity.newInstanceForResult(this, currentFilterable = FilterableType.SESSION, hideMostUsedFilters = true)
}
}
}
return super.onOptionsItemSelected(item)
}
/**
* Init UI
*/
private fun initUI() {
setDisplayHomeAsUpEnabled(true)
this.optionsAdapter = RowRepresentableAdapter(this, this)
@ -47,8 +90,6 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR
adapter = optionsAdapter
}
this.updateUIWithCurrentStep()
this.next.setOnClickListener {
if (assistant.nextEnabled) {
this.assistant.nextStep()
@ -68,23 +109,17 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR
}
}
}
}
private fun finishActivityWithOptions(options: Calculator.Options) {
ReportCreationActivity.options = options // temp object
val intent = Intent()
activity?.setResult(Activity.RESULT_OK, intent)
activity?.finish()
}
/**
* Update UI when changing the current step
*/
private fun updateUIWithCurrentStep() {
this.next.visibility = if (this.assistant.nextButtonShouldAppear) View.VISIBLE else View.GONE
this.next.text = requireContext().getString(this.assistant.nextButtonTitleResId)
this.next.isEnabled = this.assistant.nextEnabled
this.reportCreationMenu?.findItem(R.id.add)?.isVisible = this.assistant.addButtonShouldAppear
val rows = mutableListOf<RowRepresentable>()
@ -99,6 +134,17 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR
}
/**
* Finish activity
*/
private fun finishActivityWithOptions(options: Calculator.Options) {
ReportCreationActivity.options = options // temp object
val intent = Intent()
activity?.setResult(Activity.RESULT_OK, intent)
activity?.finish()
}
// RowRepresentableDataSource
override fun adapterRows(): List<RowRepresentable>? {
@ -261,6 +307,7 @@ class Assistant {
}
Step.COMPARATOR -> Criteria.all
Step.FILTER -> {
val data = ArrayList<RowRepresentable>()
val realm = Realm.getDefaultInstance()
val filters = Filter.sortedByUsage(realm)
realm.close()
@ -296,4 +343,12 @@ class Assistant {
}
}
val addButtonShouldAppear: Boolean
get() {
return when (this.step) {
Step.FILTER -> true
else -> false
}
}
}

@ -90,7 +90,7 @@ class StatisticsFragment : FilterableFragment() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == FilterActivityRequestCode.SELECT_FILTER.ordinal && resultCode == Activity.RESULT_OK) {
if (requestCode == FilterActivityRequestCode.CREATE_FILTER.ordinal && resultCode == Activity.RESULT_OK) {
data?.let {
this.saveFilter(this.requireContext(), it.getStringExtra(FiltersActivity.IntentKey.FILTER_ID.keyName))
}

@ -36,6 +36,7 @@ class BottomSheetNumericTextFragment : BottomSheetFragment() {
* Init data
*/
private fun initData() {
valueHasPlaceholder = true
}
/**
@ -61,13 +62,20 @@ class BottomSheetNumericTextFragment : BottomSheetFragment() {
}
data[0].defaultValue?.let {
if (it is Double || it is Long) {
val valueString = if (it is Double || it is Long) {
val formatter = NumberFormat.getNumberInstance()
formatter.maximumFractionDigits = 6
formatter.isGroupingUsed = false
editText1.setText(formatter.format(it))
formatter.format(it)
} else {
editText1.setText(it.toString())
it.toString()
}
if (valueHasPlaceholder) {
this.value = it.toString().toDoubleOrNull()
editText1.hint = valueString
} else {
editText1.setText(valueString)
}
}

@ -6,6 +6,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.inputmethod.EditorInfo
import androidx.core.widget.addTextChangedListener
import com.ibm.icu.text.NumberFormat
import kotlinx.android.synthetic.main.bottom_sheet_sum.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
@ -63,7 +64,10 @@ class BottomSheetSumFragment : BottomSheetFragment() {
0.0
}
currentValue.text = currentDefaultValue.toCurrency(currentCurrency)
val formatter = NumberFormat.getNumberInstance()
formatter.maximumFractionDigits = 6
formatter.isGroupingUsed = false
currentValue.text = formatter.format(currentDefaultValue)
// First value
val defaultValue1 = try {

@ -15,12 +15,12 @@
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:text="+ 1000 $"
app:layout_constraintEnd_toStartOf="@+id/button2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:text="+ 1000 $" />
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button2"
@ -30,11 +30,11 @@
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:text="+ 2000 $"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button1"
app:layout_constraintTop_toTopOf="parent"
android:text="+ 2000 $" />
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/currentValue"
@ -44,6 +44,11 @@
android:layout_marginStart="8dp"
android:layout_marginBottom="8dp"
android:gravity="center"
android:lines="1"
app:autoSizeMaxTextSize="22sp"
app:autoSizeMinTextSize="12sp"
app:autoSizeStepGranularity="2sp"
app:autoSizeTextType="uniform"
app:layout_constraintBottom_toBottomOf="@+id/editText1"
app:layout_constraintEnd_toStartOf="@+id/more"
app:layout_constraintHorizontal_bias="0.5"

@ -1,37 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
app:title="@string/new_report"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:title="@string/new_report" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/toolbar"
app:layout_constraintBottom_toTopOf="@+id/next"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:clipToPadding="false"
android:paddingBottom="72dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar"
tools:listitem="@layout/row_title" />
<com.google.android.material.button.MaterialButton
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
tools:text="Next" />
<com.google.android.material.button.MaterialButton
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
tools:text="Next" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/add"
android:icon="@drawable/ic_add"
android:title="@string/new_str"
android:iconTint="@color/white"
app:showAsAction="ifRoom" />
</menu>
Loading…
Cancel
Save