diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 0c9573ab..300616c1 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -65,7 +65,7 @@ class PokerAnalyticsApplication : Application() { if (BuildConfig.DEBUG) { Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") -// this.createFakeSessions() + this.createFakeSessions() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt index 5c2b621d..62ebcdd6 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/FiltersActivity.kt @@ -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) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt index f8f24c51..359b2a28 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/ReportCreationActivity.kt @@ -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) } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt index dc8879df..794dee0c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt @@ -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 } } \ No newline at end of file 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 8ede3675..ce23386b 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 @@ -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)) } 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 7bed87d8..3fbbb256 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 @@ -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 + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt index ca06b1fc..35ffa4b3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt @@ -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 = 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() @@ -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? { @@ -261,6 +307,7 @@ class Assistant { } Step.COMPARATOR -> Criteria.all Step.FILTER -> { + val data = ArrayList() 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 + } + } + } \ No newline at end of file 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 26cb7a4f..124119fd 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 @@ -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)) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt index da8f8510..a5213f7b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt @@ -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) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt index 81684a46..0b63c3ee 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt @@ -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 { diff --git a/app/src/main/res/layout/activity_reportcreation.xml b/app/src/main/res/layout/activity_report_creation.xml similarity index 100% rename from app/src/main/res/layout/activity_reportcreation.xml rename to app/src/main/res/layout/activity_report_creation.xml diff --git a/app/src/main/res/layout/bottom_sheet_sum.xml b/app/src/main/res/layout/bottom_sheet_sum.xml index 52f9a318..b5451b6a 100644 --- a/app/src/main/res/layout/bottom_sheet_sum.xml +++ b/app/src/main/res/layout/bottom_sheet_sum.xml @@ -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" /> + app:layout_constraintTop_toTopOf="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"> - + - + - + \ No newline at end of file diff --git a/app/src/main/res/menu/toolbar_report_creation.xml b/app/src/main/res/menu/toolbar_report_creation.xml new file mode 100644 index 00000000..f39fa10a --- /dev/null +++ b/app/src/main/res/menu/toolbar_report_creation.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file