From 7d40987e03a7125d3df4490ac7831044dc146073 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 12 Apr 2019 09:42:25 +0200 Subject: [PATCH 01/10] Add single selection --- .../android/ui/fragment/GraphFragment.kt | 13 +++++++++---- .../util/extensions/ChipGroupExtension.kt | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/util/extensions/ChipGroupExtension.kt diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt index 5cfb9755..1293fc0a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt @@ -13,6 +13,7 @@ import com.github.mikephil.charting.data.LineDataSet import com.github.mikephil.charting.highlight.Highlight import com.github.mikephil.charting.listener.OnChartValueSelectedListener import com.google.android.material.chip.Chip +import com.google.android.material.chip.ChipGroup import kotlinx.android.synthetic.main.fragment_evograph.* import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.GraphType @@ -21,7 +22,9 @@ import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.graph.setStyle import net.pokeranalytics.android.ui.view.LegendView +import net.pokeranalytics.android.util.extensions.ChipGroupExtension import net.pokeranalytics.android.util.extensions.px +import net.pokeranalytics.android.util.extensions.toast interface GraphDataSource { @@ -109,9 +112,12 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener { this.chipGroup.addView(chip) } - this.chipGroup.setOnCheckedChangeListener { group, i -> - - } + this.chipGroup.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() { + override fun onCheckedChanged(group: ChipGroup, checkedId: Int) { + super.onCheckedChanged(group, checkedId) + toast("Show: ${stat.aggregationTypes[group.getChildAt(checkedId).id].name}") + } + }) this.chipGroup.check(this.stat.aggregationTypes.first().ordinal) } @@ -144,7 +150,6 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener { // this.text.text = "" - } } diff --git a/app/src/main/java/net/pokeranalytics/android/util/extensions/ChipGroupExtension.kt b/app/src/main/java/net/pokeranalytics/android/util/extensions/ChipGroupExtension.kt new file mode 100644 index 00000000..8a642069 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/util/extensions/ChipGroupExtension.kt @@ -0,0 +1,16 @@ +package net.pokeranalytics.android.util.extensions + +import com.google.android.material.chip.ChipGroup + +class ChipGroupExtension { + + open class SingleSelectionOnCheckedListener : ChipGroup.OnCheckedChangeListener { + override fun onCheckedChanged(group: ChipGroup, checkedId: Int) { + for (i in 0 until group.childCount) { + val chip = group.getChildAt(i) + chip.isClickable = chip.id != group.checkedChipId + } + } + } + +} \ No newline at end of file From 57466bd8dc5c69900a4117cf558d067e40187b86 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 12 Apr 2019 11:19:37 +0200 Subject: [PATCH 02/10] Add new drawables --- app/src/main/res/drawable/ic_outline_calendar.xml | 9 +++++++++ app/src/main/res/drawable/ic_outline_chart.xml | 9 +++++++++ app/src/main/res/drawable/ic_outline_lock.xml | 9 +++++++++ app/src/main/res/drawable/ic_outline_more.xml | 9 +++++++++ 4 files changed, 36 insertions(+) create mode 100644 app/src/main/res/drawable/ic_outline_calendar.xml create mode 100644 app/src/main/res/drawable/ic_outline_chart.xml create mode 100644 app/src/main/res/drawable/ic_outline_lock.xml create mode 100644 app/src/main/res/drawable/ic_outline_more.xml diff --git a/app/src/main/res/drawable/ic_outline_calendar.xml b/app/src/main/res/drawable/ic_outline_calendar.xml new file mode 100644 index 00000000..9307b8fd --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_calendar.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_outline_chart.xml b/app/src/main/res/drawable/ic_outline_chart.xml new file mode 100644 index 00000000..0d4f8c3f --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_chart.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_outline_lock.xml b/app/src/main/res/drawable/ic_outline_lock.xml new file mode 100644 index 00000000..d4968533 --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_lock.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_outline_more.xml b/app/src/main/res/drawable/ic_outline_more.xml new file mode 100644 index 00000000..64325fda --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_more.xml @@ -0,0 +1,9 @@ + + + From d7fdb4113bc93495d681b4092513d9050953720f Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 12 Apr 2019 11:20:11 +0200 Subject: [PATCH 03/10] Add, update and clean layouts --- app/src/main/res/layout/activity_bankroll.xml | 15 +++ app/src/main/res/layout/activity_home.xml | 11 +-- app/src/main/res/layout/activity_settings.xml | 15 +++ app/src/main/res/layout/fragment_bankroll.xml | 56 +++++++++++ app/src/main/res/layout/fragment_calendar.xml | 18 ++++ app/src/main/res/layout/fragment_more.xml | 18 ++++ app/src/main/res/layout/fragment_reports.xml | 18 ++++ app/src/main/res/layout/fragment_session.xml | 94 +------------------ app/src/main/res/layout/fragment_settings.xml | 60 ++++++++++-- app/src/main/res/layout/row_title_arrow.xml | 3 +- .../main/res/layout/row_title_icon_arrow.xml | 59 ++++++++++++ 11 files changed, 257 insertions(+), 110 deletions(-) create mode 100644 app/src/main/res/layout/activity_bankroll.xml create mode 100644 app/src/main/res/layout/activity_settings.xml create mode 100644 app/src/main/res/layout/fragment_bankroll.xml create mode 100644 app/src/main/res/layout/fragment_calendar.xml create mode 100644 app/src/main/res/layout/fragment_more.xml create mode 100644 app/src/main/res/layout/fragment_reports.xml create mode 100644 app/src/main/res/layout/row_title_icon_arrow.xml diff --git a/app/src/main/res/layout/activity_bankroll.xml b/app/src/main/res/layout/activity_bankroll.xml new file mode 100644 index 00000000..eb1d8184 --- /dev/null +++ b/app/src/main/res/layout/activity_bankroll.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index 09f1bbc4..275db019 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -15,16 +15,6 @@ app:layout_constraintTop_toTopOf="parent" app:title="@string/app_name" /> - - + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_bankroll.xml b/app/src/main/res/layout/fragment_bankroll.xml new file mode 100644 index 00000000..0cf1c9b1 --- /dev/null +++ b/app/src/main/res/layout/fragment_bankroll.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_calendar.xml b/app/src/main/res/layout/fragment_calendar.xml new file mode 100644 index 00000000..aaa1d704 --- /dev/null +++ b/app/src/main/res/layout/fragment_calendar.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_more.xml b/app/src/main/res/layout/fragment_more.xml new file mode 100644 index 00000000..aaa1d704 --- /dev/null +++ b/app/src/main/res/layout/fragment_more.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_reports.xml b/app/src/main/res/layout/fragment_reports.xml new file mode 100644 index 00000000..aaa1d704 --- /dev/null +++ b/app/src/main/res/layout/fragment_reports.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_session.xml b/app/src/main/res/layout/fragment_session.xml index 53457fd3..872fc2f6 100644 --- a/app/src/main/res/layout/fragment_session.xml +++ b/app/src/main/res/layout/fragment_session.xml @@ -11,102 +11,18 @@ android:fillViewport="true" app:layout_behavior="@string/appbar_scrolling_view_behavior"> - - - - - - - - - - - - - - - + android:paddingBottom="96dp" /> - + diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 8b6825d0..8542d548 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -1,17 +1,57 @@ - - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/row_title_arrow.xml b/app/src/main/res/layout/row_title_arrow.xml index a1d94800..1d73205b 100644 --- a/app/src/main/res/layout/row_title_arrow.xml +++ b/app/src/main/res/layout/row_title_arrow.xml @@ -12,10 +12,11 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="16dp" + android:layout_marginEnd="16dp" android:layout_marginBottom="16dp" android:textSize="16sp" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="@+id/guidelineEnd" + app:layout_constraintEnd_toStartOf="@+id/nextArrow" app:layout_constraintStart_toStartOf="@+id/guidelineStart" app:layout_constraintTop_toTopOf="parent" tools:text="Data Type Title" /> diff --git a/app/src/main/res/layout/row_title_icon_arrow.xml b/app/src/main/res/layout/row_title_icon_arrow.xml new file mode 100644 index 00000000..950ad915 --- /dev/null +++ b/app/src/main/res/layout/row_title_icon_arrow.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + \ No newline at end of file From f182d982ff20793dc6076aafd429c958170f0cfa Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 12 Apr 2019 11:20:22 +0200 Subject: [PATCH 04/10] Add string --- app/src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5e551563..b4ceffc5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,6 +5,7 @@ Please set a start date for the session Hour Minute + More From 274bc2f8deb2bef6ac013e5c81e12a7be8d1e2a9 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 12 Apr 2019 11:20:34 +0200 Subject: [PATCH 05/10] Update navigation --- app/src/main/AndroidManifest.xml | 16 +++- .../pokeranalytics/android/model/MoreItem.kt | 31 +++++++ .../android/ui/activity/BankrollActivity.kt | 33 +++++++ .../android/ui/activity/HomeActivity.kt | 61 ++++++++++--- .../android/ui/activity/SettingsActivity.kt | 33 +++++++ .../android/ui/adapter/HomePagerAdapter.kt | 25 ++++-- .../android/ui/fragment/BankrollFragment.kt | 73 +++++++++++++++ .../android/ui/fragment/CalendarFragment.kt | 63 +++++++++++++ .../android/ui/fragment/MoreFragment.kt | 88 +++++++++++++++++++ .../android/ui/fragment/ReportsFragment.kt | 63 +++++++++++++ .../android/ui/fragment/SessionFragment.kt | 5 -- .../android/ui/fragment/SettingsFragment.kt | 26 ++++-- .../android/ui/view/RowRepresentable.kt | 13 ++- .../android/ui/view/RowViewType.kt | 10 ++- app/src/main/res/menu/navigation.xml | 56 +++++++++--- 15 files changed, 546 insertions(+), 50 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/model/MoreItem.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/activity/BankrollActivity.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/activity/SettingsActivity.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f304e967..b593e589 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,6 +34,16 @@ android:screenOrientation="portrait" android:windowSoftInputMode="adjustNothing" /> + + + + + android:name=".ui.activity.GraphActivity" + android:launchMode="singleTop" + android:screenOrientation="portrait" /> R.string.bankroll + SETTINGS -> R.string.services + } + } + + override val imageRes: Int? + get() { + return when(this) { + BANKROLL -> R.drawable.ic_outline_lock + SETTINGS -> R.drawable.ic_outline_settings + } + } + + override val viewType: Int = RowViewType.TITLE_ICON_ARROW.ordinal +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/BankrollActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/BankrollActivity.kt new file mode 100644 index 00000000..e1b6ea05 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/BankrollActivity.kt @@ -0,0 +1,33 @@ +package net.pokeranalytics.android.ui.activity + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import androidx.fragment.app.Fragment +import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity + +class BankrollActivity : PokerAnalyticsActivity() { + + companion object { + fun newInstance(context: Context) { + val intent = Intent(context, BankrollActivity::class.java) + context.startActivity(intent) + } + + /** + * Create a new instance for result + */ + fun newInstanceForResult(fragment: Fragment, requestCode: Int) { + val intent = Intent(fragment.requireContext(), BankrollActivity::class.java) + fragment.startActivityForResult(intent, requestCode) + } + + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_bankroll) + } + +} \ No newline at end of file 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 39602da7..096a6de5 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 @@ -32,20 +32,35 @@ class HomeActivity : PokerAnalyticsActivity() { private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -> when (item.itemId) { - net.pokeranalytics.android.R.id.navigation_history -> { + //CLEAN + /* + R.id.navigation_history -> { displayFragment(0) - return@OnNavigationItemSelectedListener true } - net.pokeranalytics.android.R.id.navigation_stats -> { + R.id.navigation_stats -> { displayFragment(1) - return@OnNavigationItemSelectedListener true } - net.pokeranalytics.android.R.id.navigation_settings -> { + R.id.navigation_settings -> { displayFragment(2) - return@OnNavigationItemSelectedListener true + } + */ + R.id.navigation_history -> { + displayFragment(0) + } + R.id.navigation_stats -> { + displayFragment(1) + } + R.id.navigation_calendar -> { + displayFragment(2) + } + R.id.navigation_reports -> { + displayFragment(3) + } + R.id.navigation_more -> { + displayFragment(4) } } - false + return@OnNavigationItemSelectedListener true } override fun onCreate(savedInstanceState: Bundle?) { @@ -97,7 +112,7 @@ class HomeActivity : PokerAnalyticsActivity() { setSupportActionBar(toolbar) navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) - navigation.selectedItemId = net.pokeranalytics.android.R.id.navigation_history + navigation.selectedItemId = R.id.navigation_history val homePagerAdapter = HomePagerAdapter(supportFragmentManager) viewPager.offscreenPageLimit = 5 @@ -134,9 +149,10 @@ class HomeActivity : PokerAnalyticsActivity() { */ private fun updateToolbar(index: Int) { when (index) { + //CLEAN + /* 0 -> { toolbar.title = getString(R.string.feed) - //TODO: Change filter button visibility homeMenu?.findItem(R.id.filter)?.isVisible = false } 1 -> { @@ -147,6 +163,28 @@ class HomeActivity : PokerAnalyticsActivity() { toolbar.title = getString(R.string.services) homeMenu?.findItem(R.id.filter)?.isVisible = false } + */ + + 0 -> { + toolbar.title = getString(R.string.feed) + homeMenu?.findItem(R.id.filter)?.isVisible = true + } + 1 -> { + toolbar.title = getString(R.string.stats) + homeMenu?.findItem(R.id.filter)?.isVisible = true + } + 2 -> { + toolbar.title = getString(R.string.calendar) + homeMenu?.findItem(R.id.filter)?.isVisible = false + } + 3 -> { + toolbar.title = getString(R.string.reports) + homeMenu?.findItem(R.id.filter)?.isVisible = false + } + 4 -> { + toolbar.title = getString(R.string.more) + homeMenu?.findItem(R.id.filter)?.isVisible = false + } } } @@ -171,18 +209,15 @@ class HomeActivity : PokerAnalyticsActivity() { .setCancelable(true) .setItems(choices.toTypedArray()) { _, which -> Timber.d("Click on $which") - - when(which) { + when (which) { 0 -> FiltersActivity.newInstance(this@HomeActivity) } - } .setNegativeButton(R.string.cancel) { _, _ -> Timber.d("Click on cancel") } builder.show() - } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/SettingsActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/SettingsActivity.kt new file mode 100644 index 00000000..56a1701d --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/SettingsActivity.kt @@ -0,0 +1,33 @@ +package net.pokeranalytics.android.ui.activity + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import androidx.fragment.app.Fragment +import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity + +class SettingsActivity : PokerAnalyticsActivity() { + + companion object { + fun newInstance(context: Context) { + val intent = Intent(context, SettingsActivity::class.java) + context.startActivity(intent) + } + + /** + * Create a new instance for result + */ + fun newInstanceForResult(fragment: Fragment, requestCode: Int) { + val intent = Intent(fragment.requireContext(), SettingsActivity::class.java) + fragment.startActivityForResult(intent, requestCode) + } + + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_settings) + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt index 17a16d3a..5e504fb1 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt @@ -4,9 +4,7 @@ import android.util.SparseArray import android.view.ViewGroup import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentStatePagerAdapter -import net.pokeranalytics.android.ui.fragment.HistoryFragment -import net.pokeranalytics.android.ui.fragment.SettingsFragment -import net.pokeranalytics.android.ui.fragment.StatsFragment +import net.pokeranalytics.android.ui.fragment.* import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import java.lang.ref.WeakReference @@ -19,15 +17,23 @@ class HomePagerAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAda override fun getItem(position: Int): PokerAnalyticsFragment { return when (position) { + //CLEAN + /* 0 -> HistoryFragment.newInstance() 1 -> StatsFragment.newInstance() 2 -> SettingsFragment.newInstance() + */ + 0 -> HistoryFragment.newInstance() + 1 -> StatsFragment.newInstance() + 2 -> CalendarFragment.newInstance() + 3 -> ReportsFragment.newInstance() + 4 -> MoreFragment.newInstance() else -> HistoryFragment.newInstance() } } override fun getCount(): Int { - return 3 + return 5//3 } override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { @@ -42,11 +48,18 @@ class HomePagerAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAda } override fun getItemPosition(obj: Any): Int { - val fragment = obj as PokerAnalyticsFragment - return when (fragment) { + return when (obj) { + //CLEAN + /* HistoryFragment::class.java -> 0 StatsFragment::class.java -> 1 SettingsFragment::class.java -> 2 + */ + HistoryFragment::class.java -> 0 + StatsFragment::class.java -> 1 + CalendarFragment::class.java -> 2 + ReportsFragment::class.java -> 3 + MoreFragment::class.java -> 4 else -> -1 } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt new file mode 100644 index 00000000..b0c06521 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt @@ -0,0 +1,73 @@ +package net.pokeranalytics.android.ui.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.LinearLayoutManager +import kotlinx.android.synthetic.main.fragment_bankroll.* +import kotlinx.android.synthetic.main.fragment_stats.recyclerView +import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity +import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment + +class BankrollFragment : PokerAnalyticsFragment() { + + companion object { + + /** + * Create new instance + */ + fun newInstance(): BankrollFragment { + val fragment = BankrollFragment() + val bundle = Bundle() + fragment.arguments = bundle + return fragment + } + } + + private lateinit var parentActivity: PokerAnalyticsActivity + + // Life Cycle + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_bankroll, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } + + + // Business + + /** + * Init data + */ + private fun initData() { + + } + + /** + * Init UI + */ + private fun initUI() { + + parentActivity = activity as PokerAnalyticsActivity + + parentActivity.setSupportActionBar(toolbar) + parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true) + setHasOptionsMenu(true) + + val viewManager = LinearLayoutManager(requireContext()) + + recyclerView.apply { + setHasFixedSize(true) + layoutManager = viewManager + //adapter = statsAdapter + } + } + +} \ No newline at end of file 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 new file mode 100644 index 00000000..b05d036f --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt @@ -0,0 +1,63 @@ +package net.pokeranalytics.android.ui.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.LinearLayoutManager +import kotlinx.android.synthetic.main.fragment_stats.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment + +class CalendarFragment : PokerAnalyticsFragment() { + + companion object { + + /** + * Create new instance + */ + fun newInstance(): CalendarFragment { + val fragment = CalendarFragment() + val bundle = Bundle() + fragment.arguments = bundle + return fragment + } + } + + // Life Cycle + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_calendar, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } + + + // Business + + /** + * Init data + */ + private fun initData() { + + } + + /** + * Init UI + */ + private fun initUI() { + + val viewManager = LinearLayoutManager(requireContext()) + + recyclerView.apply { + setHasFixedSize(true) + layoutManager = viewManager + //adapter = statsAdapter + } + } + +} \ No newline at end of file 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 new file mode 100644 index 00000000..9baa6e2e --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt @@ -0,0 +1,88 @@ +package net.pokeranalytics.android.ui.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.LinearLayoutManager +import kotlinx.android.synthetic.main.fragment_stats.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.MoreItem +import net.pokeranalytics.android.ui.activity.BankrollActivity +import net.pokeranalytics.android.ui.activity.SettingsActivity +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.view.RowRepresentable + +class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { + + companion object { + + /** + * Create new instance + */ + fun newInstance(): MoreFragment { + val fragment = MoreFragment() + val bundle = Bundle() + fragment.arguments = bundle + return fragment + } + } + + private lateinit var moreAdapter: RowRepresentableAdapter + + private var rowRepresentables: ArrayList = ArrayList() + + + // Life Cycle + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_calendar, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } + + // Rows + override fun adapterRows(): List? { + return rowRepresentables + } + + override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { + super.onRowSelected(position, row, fromAction) + when(row) { + MoreItem.BANKROLL -> BankrollActivity.newInstance(requireContext()) + MoreItem.SETTINGS -> SettingsActivity.newInstance(requireContext()) + } + } + + // Business + + /** + * Init data + */ + private fun initData() { + rowRepresentables.addAll(MoreItem.values()) + moreAdapter = RowRepresentableAdapter(this, this) + } + + /** + * Init UI + */ + private fun initUI() { + + val viewManager = LinearLayoutManager(requireContext()) + + recyclerView.apply { + setHasFixedSize(true) + layoutManager = viewManager + adapter = moreAdapter + } + } + +} \ No newline at end of file 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 new file mode 100644 index 00000000..06e30b5a --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt @@ -0,0 +1,63 @@ +package net.pokeranalytics.android.ui.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.LinearLayoutManager +import kotlinx.android.synthetic.main.fragment_stats.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment + +class ReportsFragment : PokerAnalyticsFragment() { + + companion object { + + /** + * Create new instance + */ + fun newInstance(): ReportsFragment { + val fragment = ReportsFragment() + val bundle = Bundle() + fragment.arguments = bundle + return fragment + } + } + + // Life Cycle + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_reports, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } + + + // Business + + /** + * Init data + */ + private fun initData() { + + } + + /** + * Init UI + */ + private fun initUI() { + + val viewManager = LinearLayoutManager(requireContext()) + + recyclerView.apply { + setHasFixedSize(true) + layoutManager = viewManager + //adapter = statsAdapter + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt index a0f6893a..b318e54b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt @@ -6,7 +6,6 @@ import android.view.* import android.view.animation.OvershootInterpolator import android.widget.Toast import androidx.appcompat.app.AlertDialog -import androidx.core.content.ContextCompat import androidx.interpolator.view.animation.FastOutSlowInInterpolator import androidx.recyclerview.widget.DiffUtil import io.realm.kotlin.where @@ -169,7 +168,6 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { when (currentSession.getState()) { SessionState.PENDING, SessionState.PLANNED -> { - state.setTextColor(ContextCompat.getColor(requireContext(), R.color.white)) sessionMenu?.findItem(R.id.restart)?.isVisible = false floatingActionButton.setImageResource(R.drawable.ic_outline_play) sessionMenu?.findItem(R.id.stop)?.isVisible = false @@ -178,7 +176,6 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { .setInterpolator(OvershootInterpolator()).start() } SessionState.STARTED -> { - state.setTextColor(ContextCompat.getColor(requireContext(), R.color.green)) sessionMenu?.findItem(R.id.restart)?.isVisible = true floatingActionButton.setImageResource(R.drawable.ic_outline_pause) sessionMenu?.findItem(R.id.stop)?.isVisible = true @@ -188,7 +185,6 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { handler.postDelayed(refreshTimer, 30000) } SessionState.PAUSED -> { - state.setTextColor(ContextCompat.getColor(requireContext(), R.color.blue)) sessionMenu?.findItem(R.id.restart)?.isVisible = true floatingActionButton.setImageResource(R.drawable.ic_outline_play) sessionMenu?.findItem(R.id.stop)?.isVisible = true @@ -197,7 +193,6 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { .setInterpolator(OvershootInterpolator()).start() } SessionState.FINISHED -> { - state.setTextColor(ContextCompat.getColor(requireContext(), R.color.white)) sessionMenu?.findItem(R.id.restart)?.isVisible = true sessionMenu?.findItem(R.id.stop)?.isVisible = false floatingActionButton.animate().scaleX(0f).scaleY(0f).alpha(0f) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt index 8b6a3802..97090c0d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt @@ -65,16 +65,17 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(net.pokeranalytics.android.R.layout.fragment_settings, container, false) + return inflater.inflate(R.layout.fragment_settings, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initData() + initUI() } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == SettingsFragment.REQUEST_CODE_CURRENCY && resultCode == Activity.RESULT_OK) { + if (requestCode == REQUEST_CODE_CURRENCY && resultCode == Activity.RESULT_OK) { data?.let { Preferences.setCurrencyCode(data.getStringExtra(CurrenciesFragment.INTENT_CURRENCY_CODE), requireContext()) settingsAdapterRow.refreshRow(SettingRow.CURRENCY) @@ -83,7 +84,7 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta } override fun adapterRows(): List? { - return SettingsFragment.rowRepresentation + return rowRepresentation } override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { @@ -92,7 +93,7 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta SettingRow.RATE_APP -> parentActivity.openPlayStorePage() SettingRow.CONTACT_US -> parentActivity.openContactMail(R.string.contact) SettingRow.BUG_REPORT -> parentActivity.openContactMail(R.string.bug_report_subject) - SettingRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@SettingsFragment, SettingsFragment.REQUEST_CODE_CURRENCY) + SettingRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@SettingsFragment, REQUEST_CODE_CURRENCY) SettingRow.FOLLOW_US -> { when (position) { 0 -> parentActivity.openUrl(URL.BLOG.value) @@ -112,24 +113,35 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta } /** - * Init data + * Init UI */ - private fun initData() { + private fun initUI() { parentActivity = activity as PokerAnalyticsActivity + parentActivity.setSupportActionBar(toolbar) + parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true) + setHasOptionsMenu(true) + val viewManager = LinearLayoutManager(requireContext()) settingsAdapterRow = RowRepresentableAdapter( this, this ) - customRecyclerView.apply { + recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager adapter = settingsAdapterRow } } + /** + * Init data + */ + private fun initData() { + + } + /** * Open GDPR Activity */ diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt index ba8b6b90..0aa25f23 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt @@ -8,7 +8,7 @@ import net.pokeranalytics.android.util.NULL_TEXT /** * An interface extending Displayable to add a way to represent an object as a String */ -interface RowRepresentable : Displayable, EditDataSource { +interface RowRepresentable : Displayable, EditDataSource, ImageDecorator { fun getDisplayName(): String { return NULL_TEXT @@ -28,6 +28,17 @@ interface DefaultEditDataSource : EditDataSource, Localizable { } } +/** + * An interface to add an image to a row + */ +interface ImageDecorator { + + val imageRes: Int? + get() { + return null + } +} + /** * An interface used so that enums numericValues can be represented visually * as rows in RecyclerViews diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index c887ff71..5757a64d 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -43,6 +43,7 @@ enum class RowViewType(private var layoutRes: Int) { // Row TITLE(R.layout.row_title), TITLE_ARROW(R.layout.row_title_arrow), + TITLE_ICON_ARROW(R.layout.row_title_icon_arrow), TITLE_VALUE(R.layout.row_title_value), TITLE_VALUE_ARROW(R.layout.row_title_value_arrow), TITLE_SWITCH(R.layout.row_title_switch), @@ -75,7 +76,7 @@ enum class RowViewType(private var layoutRes: Int) { // Row View Holder HEADER_TITLE, HEADER_TITLE_VALUE, HEADER_TITLE_AMOUNT, HEADER_TITLE_AMOUNT_BIG, LOCATION_TITLE, INFO, - TITLE, TITLE_ARROW, TITLE_VALUE, TITLE_VALUE_ARROW, TITLE_GRID, TITLE_SWITCH, TITLE_CHECK, TITLE_VALUE_CHECK, + TITLE, TITLE_ARROW, TITLE_ICON_ARROW, TITLE_VALUE, TITLE_VALUE_ARROW, TITLE_GRID, TITLE_SWITCH, TITLE_CHECK, TITLE_VALUE_CHECK, DATA, BOTTOM_SHEET_DATA, LOADER -> RowViewHolder(layout) // Row Session @@ -157,6 +158,13 @@ enum class RowViewType(private var layoutRes: Int) { it.text = adapter.dataSource.stringForRow(row, itemView.context) } + // Icon + itemView.findViewById(R.id.icon)?.let { imageView -> + row.imageRes?.let { imageRes -> + imageView.setImageResource(imageRes) + } + } + // Listener val listener = View.OnClickListener { itemView.findViewById(R.id.switchView)?.let { diff --git a/app/src/main/res/menu/navigation.xml b/app/src/main/res/menu/navigation.xml index 762f9cdb..6ac0f33b 100644 --- a/app/src/main/res/menu/navigation.xml +++ b/app/src/main/res/menu/navigation.xml @@ -1,19 +1,47 @@ - - - - - + + + + + + + + + + + From b539a23f3df0b5f875678343a25d7fe2534658df Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 12 Apr 2019 11:25:05 +0200 Subject: [PATCH 06/10] Refactor enum name --- .../model/{MoreItem.kt => MoreTabRepresentable.kt} | 2 +- .../pokeranalytics/android/ui/fragment/MoreFragment.kt | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) rename app/src/main/java/net/pokeranalytics/android/model/{MoreItem.kt => MoreTabRepresentable.kt} (92%) diff --git a/app/src/main/java/net/pokeranalytics/android/model/MoreItem.kt b/app/src/main/java/net/pokeranalytics/android/model/MoreTabRepresentable.kt similarity index 92% rename from app/src/main/java/net/pokeranalytics/android/model/MoreItem.kt rename to app/src/main/java/net/pokeranalytics/android/model/MoreTabRepresentable.kt index 8db1463e..4d95a32e 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/MoreItem.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/MoreTabRepresentable.kt @@ -7,7 +7,7 @@ import net.pokeranalytics.android.ui.view.RowViewType /** * An enum managing the rows in the more tabs */ -enum class MoreItem : RowRepresentable { +enum class MoreTabRepresentable : RowRepresentable { BANKROLL, SETTINGS; 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 9baa6e2e..cc2f2173 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 @@ -7,7 +7,7 @@ import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.fragment_stats.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.MoreItem +import net.pokeranalytics.android.model.MoreTabRepresentable import net.pokeranalytics.android.ui.activity.BankrollActivity import net.pokeranalytics.android.ui.activity.SettingsActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter @@ -56,8 +56,8 @@ class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { super.onRowSelected(position, row, fromAction) when(row) { - MoreItem.BANKROLL -> BankrollActivity.newInstance(requireContext()) - MoreItem.SETTINGS -> SettingsActivity.newInstance(requireContext()) + MoreTabRepresentable.BANKROLL -> BankrollActivity.newInstance(requireContext()) + MoreTabRepresentable.SETTINGS -> SettingsActivity.newInstance(requireContext()) } } @@ -67,7 +67,7 @@ class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, * Init data */ private fun initData() { - rowRepresentables.addAll(MoreItem.values()) + rowRepresentables.addAll(MoreTabRepresentable.values()) moreAdapter = RowRepresentableAdapter(this, this) } From 4b666468c821b602b0c36ce426652ae85cd7d88b Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 12 Apr 2019 11:30:52 +0200 Subject: [PATCH 07/10] Add ReportRow and refactor MoreTabRow --- .../android/ui/fragment/MoreFragment.kt | 8 ++--- .../view/rowrepresentable/MoreTabRow.kt} | 4 +-- .../ui/view/rowrepresentable/ReportRow.kt | 35 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 42 insertions(+), 6 deletions(-) rename app/src/main/java/net/pokeranalytics/android/{model/MoreTabRepresentable.kt => ui/view/rowrepresentable/MoreTabRow.kt} (85%) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt 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 cc2f2173..990a2a57 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 @@ -7,7 +7,7 @@ import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.fragment_stats.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.MoreTabRepresentable +import net.pokeranalytics.android.ui.view.rowrepresentable.MoreTabRow import net.pokeranalytics.android.ui.activity.BankrollActivity import net.pokeranalytics.android.ui.activity.SettingsActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter @@ -56,8 +56,8 @@ class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { super.onRowSelected(position, row, fromAction) when(row) { - MoreTabRepresentable.BANKROLL -> BankrollActivity.newInstance(requireContext()) - MoreTabRepresentable.SETTINGS -> SettingsActivity.newInstance(requireContext()) + MoreTabRow.BANKROLL -> BankrollActivity.newInstance(requireContext()) + MoreTabRow.SETTINGS -> SettingsActivity.newInstance(requireContext()) } } @@ -67,7 +67,7 @@ class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, * Init data */ private fun initData() { - rowRepresentables.addAll(MoreTabRepresentable.values()) + rowRepresentables.addAll(MoreTabRow.values()) moreAdapter = RowRepresentableAdapter(this, this) } diff --git a/app/src/main/java/net/pokeranalytics/android/model/MoreTabRepresentable.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/MoreTabRow.kt similarity index 85% rename from app/src/main/java/net/pokeranalytics/android/model/MoreTabRepresentable.kt rename to app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/MoreTabRow.kt index 4d95a32e..4e2fe8bc 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/MoreTabRepresentable.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/MoreTabRow.kt @@ -1,4 +1,4 @@ -package net.pokeranalytics.android.model +package net.pokeranalytics.android.ui.view.rowrepresentable import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.view.RowRepresentable @@ -7,7 +7,7 @@ import net.pokeranalytics.android.ui.view.RowViewType /** * An enum managing the rows in the more tabs */ -enum class MoreTabRepresentable : RowRepresentable { +enum class MoreTabRow : RowRepresentable { BANKROLL, SETTINGS; diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt new file mode 100644 index 00000000..2a46ce2a --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt @@ -0,0 +1,35 @@ +package net.pokeranalytics.android.ui.view.rowrepresentable + +import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowViewType + +/** + * An enum managing the report rows + */ +enum class ReportRow : RowRepresentable { + BLINDS, + BUY_IN, + DAY_OF_WEEKS, + GENERAL, + LOCATIONS, + NUMBER_OF_TABLES, + TOURNAMENT_TYPES, + VARIANT; + + override val resId: Int? + get() { + return when(this) { + BLINDS -> R.string.blinds + BUY_IN -> R.string.buyin + DAY_OF_WEEKS -> R.string.day_of_the_week + GENERAL -> R.string.general + LOCATIONS -> R.string.locations + NUMBER_OF_TABLES -> R.string.number_of_tables + TOURNAMENT_TYPES -> R.string.tournament_type_complete + VARIANT -> R.string.variant_ + } + } + + override val viewType: Int = RowViewType.TITLE_ARROW.ordinal +} \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b4ceffc5..958ed4bf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,6 +6,7 @@ Hour Minute More + Variant From 0946d3f3db7536dfc4fae37c49543ebac4dfdcac Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 12 Apr 2019 11:35:24 +0200 Subject: [PATCH 08/10] Improve and refactor More & Reports fragments --- .../android/ui/fragment/MoreFragment.kt | 17 ++++++---- .../android/ui/fragment/ReportsFragment.kt | 31 ++++++++++++++++--- .../ui/view/rowrepresentable/ReportRow.kt | 15 ++++++++- 3 files changed, 51 insertions(+), 12 deletions(-) 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 990a2a57..406a0fa7 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 @@ -7,7 +7,6 @@ import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.fragment_stats.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.ui.view.rowrepresentable.MoreTabRow import net.pokeranalytics.android.ui.activity.BankrollActivity import net.pokeranalytics.android.ui.activity.SettingsActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter @@ -15,6 +14,7 @@ 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.view.RowRepresentable +import net.pokeranalytics.android.ui.view.rowrepresentable.MoreTabRow class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { @@ -29,12 +29,17 @@ class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, fragment.arguments = bundle return fragment } + + val rowRepresentation: List by lazy { + val rows = ArrayList() + rows.addAll(MoreTabRow.values()) + rows + } + } private lateinit var moreAdapter: RowRepresentableAdapter - private var rowRepresentables: ArrayList = ArrayList() - // Life Cycle @@ -50,7 +55,7 @@ class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, // Rows override fun adapterRows(): List? { - return rowRepresentables + return rowRepresentation } override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { @@ -67,8 +72,6 @@ class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, * Init data */ private fun initData() { - rowRepresentables.addAll(MoreTabRow.values()) - moreAdapter = RowRepresentableAdapter(this, this) } /** @@ -76,6 +79,8 @@ class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, */ private fun initUI() { + moreAdapter = RowRepresentableAdapter(this, this) + val viewManager = LinearLayoutManager(requireContext()) recyclerView.apply { 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 06e30b5a..8dc97324 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 @@ -7,9 +7,14 @@ import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.fragment_stats.* import net.pokeranalytics.android.R +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.view.RowRepresentable +import net.pokeranalytics.android.ui.view.rowrepresentable.ReportRow -class ReportsFragment : PokerAnalyticsFragment() { +class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { companion object { @@ -22,9 +27,18 @@ class ReportsFragment : PokerAnalyticsFragment() { fragment.arguments = bundle return fragment } + + val rowRepresentation: List by lazy { + val rows = ArrayList() + rows.addAll(ReportRow.getRows()) + rows + } } - // Life Cycle + private lateinit var reportsAdapter: RowRepresentableAdapter + + + // Life Cycle override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_reports, container, false) @@ -36,14 +50,19 @@ class ReportsFragment : PokerAnalyticsFragment() { initUI() } + // Rows + + override fun adapterRows(): List? { + return rowRepresentation + } + - // Business + // Business /** * Init data */ private fun initData() { - } /** @@ -51,12 +70,14 @@ class ReportsFragment : PokerAnalyticsFragment() { */ private fun initUI() { + reportsAdapter = RowRepresentableAdapter(this, this) + val viewManager = LinearLayoutManager(requireContext()) recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager - //adapter = statsAdapter + adapter = reportsAdapter } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt index 2a46ce2a..e9d7a6dc 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt @@ -17,9 +17,22 @@ enum class ReportRow : RowRepresentable { TOURNAMENT_TYPES, VARIANT; + + companion object { + /** + * Return the report rows + */ + fun getRows(): ArrayList { + val rows = ArrayList() + rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.comparison)) + rows.addAll(values()) + return rows + } + } + override val resId: Int? get() { - return when(this) { + return when (this) { BLINDS -> R.string.blinds BUY_IN -> R.string.buyin DAY_OF_WEEKS -> R.string.day_of_the_week From ec8355fae48a30654c8f42e2f930c01654d5b4b2 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 12 Apr 2019 11:36:07 +0200 Subject: [PATCH 09/10] Fix string --- .../android/ui/view/rowrepresentable/ReportRow.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt index e9d7a6dc..12209607 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/ReportRow.kt @@ -40,7 +40,7 @@ enum class ReportRow : RowRepresentable { LOCATIONS -> R.string.locations NUMBER_OF_TABLES -> R.string.number_of_tables TOURNAMENT_TYPES -> R.string.tournament_type_complete - VARIANT -> R.string.variant_ + VARIANT -> R.string.variant } } From 4afd8a71b9d98e0bf70dbdcdb56f30edd8740d49 Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 12 Apr 2019 12:25:25 +0200 Subject: [PATCH 10/10] Adds selection and legend update on graphs --- .../android/calculus/Calculator.kt | 16 ++++++------ .../pokeranalytics/android/calculus/Report.kt | 13 +++++----- .../pokeranalytics/android/calculus/Stat.kt | 10 +++++--- .../android/model/interfaces/Timed.kt | 5 +++- .../android/model/realm/Session.kt | 11 ++++---- .../android/model/realm/SessionSet.kt | 6 +++++ .../android/ui/fragment/GraphFragment.kt | 25 ++++++------------- .../android/ui/view/LegendView.kt | 19 +++++++------- .../android/ui/view/RowViewType.kt | 11 +++++--- .../android/ui/view/SessionRowView.kt | 6 +++-- .../android/ui/view/TransactionRowView.kt | 6 +++-- .../android/ui/view/fields/FieldsExtension.kt | 10 ++++++++ 12 files changed, 79 insertions(+), 59 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/view/fields/FieldsExtension.kt diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt index 2617ae13..e8cd78ca 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt @@ -147,19 +147,19 @@ class Calculator { tHands += computable.estimatedHands val session = computable.session ?: throw IllegalStateException("Computing lone ComputableResult") - results.addEvolutionValue(tSum, NETRESULT, session) - results.addEvolutionValue(tSum / index, AVERAGE, session) - results.addEvolutionValue(index.toDouble(), NUMBER_OF_GAMES, session) - results.addEvolutionValue(tBBSum / tBBSessionCount, AVERAGE_NET_BB, session) - results.addEvolutionValue((tWinningSessionCount / index).toDouble(), WIN_RATIO, session) - results.addEvolutionValue(tBuyinSum / index, AVERAGE_BUYIN, session) + results.addEvolutionValue(tSum, stat = NETRESULT, data = session) + results.addEvolutionValue(tSum / index, stat = AVERAGE, data = session) + results.addEvolutionValue(index.toDouble(), stat = NUMBER_OF_GAMES, data = session) + results.addEvolutionValue(tBBSum / tBBSessionCount, stat = AVERAGE_NET_BB, data = session) + results.addEvolutionValue((tWinningSessionCount / index).toDouble(), stat = WIN_RATIO, data = session) + results.addEvolutionValue(tBuyinSum / index, stat = AVERAGE_BUYIN, data = session) Stat.netBBPer100Hands(tBBSum, tHands)?.let { netBB100 -> - results.addEvolutionValue(netBB100, NET_BB_PER_100_HANDS, session) + results.addEvolutionValue(netBB100, stat = NET_BB_PER_100_HANDS, data = session) } Stat.returnOnInvestment(tSum, tBuyinSum)?.let { roi -> - results.addEvolutionValue(roi, ROI, session) + results.addEvolutionValue(roi, stat = ROI, data = session) } } diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt index de8c329f..e97d56f9 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt @@ -158,13 +158,14 @@ class ComputedResults(group: ComputableGroup) { /** * Adds a value to the evolution values */ - fun addEvolutionValue(value: Double, stat: Stat, data: Any) { - this._addEvolutionValue(Point(value, data), stat = stat) - } + fun addEvolutionValue(value: Double, duration: Double? = null, stat: Stat, data: Timed) { - fun addEvolutionValue(value: Double, duration: Double, stat: Stat, data: Timed) { - stat.underlyingClass = data::class.java - this._addEvolutionValue(Point(value, y = duration, data = data.id), stat = stat) + val point = if (duration != null) { + Point(duration, y = value, data = data.objectIdentifier) + } else { + Point(value, data = data.objectIdentifier) + } + this._addEvolutionValue(point, stat = stat) } private fun _addEvolutionValue(point: Point, stat: Stat) { diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt index 1b111ecf..d4e89d06 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt @@ -1,9 +1,9 @@ package net.pokeranalytics.android.calculus import android.content.Context -import io.realm.RealmModel import net.pokeranalytics.android.R import net.pokeranalytics.android.exceptions.FormattingException +import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Timed import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType @@ -17,7 +17,11 @@ class StatFormattingException(message: String) : Exception(message) { } -interface StatBase : RealmModel { +class ObjectIdentifier(var id: String, var clazz: Class) { + +} + +interface StatBase : Identifiable { fun formattedValue(stat: Stat, context: Context): TextFormat @@ -48,7 +52,7 @@ enum class AggregationType { /** * An enum representing all the types of Session statistics */ -enum class Stat(var underlyingClass: Class? = null) : RowRepresentable { +enum class Stat : RowRepresentable { NETRESULT, HOURLY_RATE, diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt index 01431a6e..49ba2542 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt @@ -1,9 +1,10 @@ package net.pokeranalytics.android.model.interfaces +import net.pokeranalytics.android.calculus.ObjectIdentifier import net.pokeranalytics.android.calculus.StatBase import java.util.* -interface Timed : StatBase, Identifiable { +interface Timed : StatBase { fun startDate() : Date? @@ -29,4 +30,6 @@ interface Timed : StatBase, Identifiable { val hourlyDuration: Double get() = this.netDuration / 3600000.0 + val objectIdentifier : ObjectIdentifier + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 486aca1b..f65c7fac 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -11,10 +11,7 @@ import io.realm.annotations.LinkingObjects import io.realm.annotations.PrimaryKey import io.realm.kotlin.where import net.pokeranalytics.android.R -import net.pokeranalytics.android.calculus.ComputedStat -import net.pokeranalytics.android.calculus.Stat -import net.pokeranalytics.android.calculus.StatFormattingException -import net.pokeranalytics.android.calculus.TextFormat +import net.pokeranalytics.android.calculus.* import net.pokeranalytics.android.exceptions.ModelException import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.LiveData @@ -47,7 +44,6 @@ typealias BB = Double open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDataSource, RowRepresentable, Timed, TimeFilterable, Filterable { - enum class Type { CASH_GAME, TOURNAMENT @@ -871,6 +867,11 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat } + // Timed + + override val objectIdentifier: ObjectIdentifier + get() = ObjectIdentifier(this.id, Session::class.java) + } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt index 9774e1b7..4b3178e7 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt @@ -7,6 +7,7 @@ import io.realm.RealmResults import io.realm.annotations.Ignore import io.realm.annotations.LinkingObjects import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.calculus.ObjectIdentifier import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.StatFormattingException import net.pokeranalytics.android.calculus.TextFormat @@ -109,5 +110,10 @@ open class SessionSet() : RealmObject(), Timed, Filterable { } + // Timed + + override val objectIdentifier: ObjectIdentifier + get() = ObjectIdentifier(this.id, SessionSet::class.java) + } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt index 1293fc0a..6afffdbf 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt @@ -17,6 +17,7 @@ import com.google.android.material.chip.ChipGroup import kotlinx.android.synthetic.main.fragment_evograph.* import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.GraphType +import net.pokeranalytics.android.calculus.ObjectIdentifier import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment @@ -25,16 +26,11 @@ import net.pokeranalytics.android.ui.view.LegendView import net.pokeranalytics.android.util.extensions.ChipGroupExtension import net.pokeranalytics.android.util.extensions.px import net.pokeranalytics.android.util.extensions.toast - -interface GraphDataSource { - - -} +import java.text.DateFormat class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener { private lateinit var parentActivity: PokerAnalyticsActivity - lateinit var dataSource: GraphDataSource lateinit var stat: Stat lateinit var entries: List @@ -69,7 +65,7 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener { this.legendView = LegendView(requireContext()) this.legendContainer.addView(this.legendView) - this.legendView.prepareWithStat(this.stat) + this.legendView.prepareWithStat(this.stat, this.entries.size) // Avoid a bug during setting the title toolbar.title = "" @@ -133,23 +129,16 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener { e?.let { entry -> h?.let { highlight -> - val id = entry.data as String - val item = getRealm().where(this.stat.underlyingClass).equalTo("id", id).findAll().firstOrNull() + val identifier = entry.data as ObjectIdentifier + val item = getRealm().where(identifier.clazz).equalTo("id", identifier.id).findAll().firstOrNull() item?.let { - val date = it.startDate() - - val entryStatName = this.stat.localizedTitle(requireContext()) + val formattedDate = DateFormat.getDateInstance(DateFormat.SHORT).format(it.startDate()) val entryValue = it.formattedValue(this.stat, requireContext()) - - val totalStatName = this.stat.cumulativeLabelResId(requireContext()) val totalStatValue = this.stat.format(e.y.toDouble(), null, requireContext()) + this.legendView.setItemData(this.stat, formattedDate, entryValue, totalStatValue) } - -// this.text.text = "" - - } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt index a5d4ad1b..03552cde 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt @@ -8,8 +8,8 @@ import androidx.constraintlayout.widget.ConstraintLayout import kotlinx.android.synthetic.main.layout_legend_default.view.* import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.Stat -import net.pokeranalytics.android.model.realm.Session - +import net.pokeranalytics.android.calculus.TextFormat +import net.pokeranalytics.android.ui.view.fields.setTextFormat /** * Display a row session @@ -46,23 +46,22 @@ class LegendView : FrameLayout { /** * Set the stat data to the view */ - fun prepareWithStat(stat: Stat) { + fun prepareWithStat(stat: Stat, counter: Int) { this.stat1Name.text = stat.localizedTitle(context) this.stat2Name.text = stat.cumulativeLabelResId(context) - - //TODO: Set real data - this.title.text = "11/04/2019" - this.stat1Value.text = "$521" - this.stat2Value.text = "$15,051" - this.counter.text = "21 Sessions" + this.counter.text = "$counter ${context.getString(R.string.sessions)}" } /** * */ - fun setData(session: Session) { + fun setItemData(stat: Stat, title: String, statFormat1: TextFormat, statFormat2: TextFormat) { + + this.title.text = title + this.stat1Value.setTextFormat(statFormat1, context) + this.stat2Value.setTextFormat(statFormat2, context) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index c887ff71..4e757885 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -16,6 +16,7 @@ import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Transaction import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter +import net.pokeranalytics.android.ui.view.fields.setTextFormat import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable /** @@ -120,8 +121,9 @@ enum class RowViewType(private var layoutRes: Int) { itemView.findViewById(R.id.value)?.let { if (row.computedStat != null) { val format = row.computedStat!!.format(itemView.context) - it.setTextColor(format.getColor(itemView.context)) - it.text = format.text + it.setTextFormat(format, itemView.context) +// it.setTextColor(format.getColor(itemView.context)) +// it.text = format.text } else if (row.value != null) { it.text = row.value } @@ -221,8 +223,9 @@ enum class RowViewType(private var layoutRes: Int) { // Value itemView.findViewById(R.id.value)?.let { view -> adapter.dataSource.contentDescriptorForRow(row)?.textFormat?.let { - view.text = it.text - view.setTextColor(it.getColor(itemView.context)) + view.setTextFormat(it, itemView.context) +// view.text = it.text +// view.setTextColor(it.getColor(itemView.context)) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt index 6cef22f9..45dc934e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt @@ -15,6 +15,7 @@ import net.pokeranalytics.android.model.TournamentType import net.pokeranalytics.android.model.extensions.SessionState import net.pokeranalytics.android.model.extensions.getState import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.ui.view.fields.setTextFormat import net.pokeranalytics.android.util.CurrencyUtils import net.pokeranalytics.android.util.extensions.getDayNumber import net.pokeranalytics.android.util.extensions.getShortDayName @@ -150,8 +151,9 @@ class SessionRowView : FrameLayout { val result = session.result?.net ?: 0.0 val formattedStat = ComputedStat(Stat.NETRESULT, result, currency = CurrencyUtils.getCurrency(session.bankroll)).format(context) - rowHistorySession.gameResult.setTextColor(formattedStat.getColor(context)) - rowHistorySession.gameResult.text = formattedStat.text + rowHistorySession.gameResult.setTextFormat(formattedStat, context) +// rowHistorySession.gameResult.setTextColor(formattedStat.getColor(context)) +// rowHistorySession.gameResult.text = formattedStat.text } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt index ab45b09c..25f3b5a3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt @@ -10,6 +10,7 @@ import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.ComputedStat import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.model.realm.Transaction +import net.pokeranalytics.android.ui.view.fields.setTextFormat import net.pokeranalytics.android.util.extensions.getDayNumber import net.pokeranalytics.android.util.extensions.getShortDayName @@ -63,8 +64,9 @@ class TransactionRowView : FrameLayout { // Amount val formattedStat = ComputedStat(Stat.NETRESULT, transaction.amount).format(context) - rowTransaction.transactionAmount.setTextColor(formattedStat.getColor(context)) - rowTransaction.transactionAmount.text = formattedStat.text + rowTransaction.transactionAmount.setTextFormat(formattedStat, context) +// rowTransaction.transactionAmount.setTextColor(formattedStat.getColor(context)) +// rowTransaction.transactionAmount.text = formattedStat.text } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/fields/FieldsExtension.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/fields/FieldsExtension.kt new file mode 100644 index 00000000..1a7b35c5 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/fields/FieldsExtension.kt @@ -0,0 +1,10 @@ +package net.pokeranalytics.android.ui.view.fields + +import android.content.Context +import androidx.appcompat.widget.AppCompatTextView +import net.pokeranalytics.android.calculus.TextFormat + +fun AppCompatTextView.setTextFormat(textFormat: TextFormat, context: Context) { + this.setTextColor(textFormat.getColor(context)) + this.text = textFormat.text +} \ No newline at end of file