From 0391cac72516d46c6119bec8656141145c4fa8a9 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Mon, 25 Feb 2019 14:40:45 +0100 Subject: [PATCH 01/10] add GDPR wip --- .../net/pokeranalytics/android/ui/view/RowRepresentable.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 ddab69b5..b4ee780a 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 @@ -271,6 +271,7 @@ enum class TournamentFeatureRow : RowRepresentable { } enum class SettingRow : RowRepresentable { + GDPR, BANKROLL, GAME, LOCATION, @@ -282,7 +283,10 @@ enum class SettingRow : RowRepresentable { this.relatedResultsRepresentable?.let { return it.resId } ?: run { - return super.resId + return when (this) { + GDPR -> R.string.gdpr + else -> null + } } } @@ -296,6 +300,7 @@ enum class SettingRow : RowRepresentable { LOCATION -> LiveData.LOCATION TOURNAMENT_FEATURE -> LiveData.TOURNAMENT_FEATURE TRANSACTION_TYPE -> LiveData.TRANSACTION_TYPE + else -> null } } } \ No newline at end of file From 665d8f491d1dd19f274e142b57773a54794c03ae Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Mon, 25 Feb 2019 15:39:53 +0100 Subject: [PATCH 02/10] Improve Session history UI --- .../android/ui/view/SessionRowView.kt | 59 ++++++++- .../pokeranalytics/android/util/Extensions.kt | 4 +- app/src/main/res/layout/row_session_view.xml | 121 ++++++++++++++++-- app/src/main/res/values/styles.xml | 1 + 4 files changed, 167 insertions(+), 18 deletions(-) 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 30a0b39a..b791200e 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 @@ -6,13 +6,16 @@ import android.view.LayoutInflater import android.widget.FrameLayout import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat +import androidx.core.view.isVisible import kotlinx.android.synthetic.main.row_session_view.view.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.TableSize +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.util.getDayNumber import net.pokeranalytics.android.util.getShortDayName import net.pokeranalytics.android.util.toCurrency -import timber.log.Timber class SessionRowView : FrameLayout { @@ -55,16 +58,58 @@ class SessionRowView : FrameLayout { */ fun setData(session: Session) { + // Date rowHistorySession.dateDay.text = session.creationDate.getShortDayName() rowHistorySession.dateNumber.text = session.creationDate.getDayNumber() - rowHistorySession.gameType.text = session.getGameTitle() - rowHistorySession.gameInfo.text = session.getDuration(context) - rowHistorySession.gameResult.text = session.result?.netResult?.toCurrency() ?: "$0" + // Title / Game type + var title = "" + if (session.cgSmallBlind != null && session.cgBigBlind != null) { + title += session.getBlinds() + } + session.game?.let { + title += session.getGameTitle() + } + title += if (title.isEmpty()) "--" else "" - val result = session.result?.netResult ?: 0.0 - val resultColor = if (result >= 0.0) R.color.green else R.color.red - rowHistorySession.gameResult.setTextColor(ContextCompat.getColor(context, resultColor)) + rowHistorySession.sessionTitle.text = title + + // Duration + rowHistorySession.sessionInfoDurationIcon.isVisible = session.timeFrame != null + rowHistorySession.sessionInfoDurationValue.isVisible = session.timeFrame != null + session.timeFrame?.let { + rowHistorySession.sessionInfoDurationValue.text = session.getDuration(context) + } + + // Location + rowHistorySession.sessionInfoLocationIcon.isVisible = session.location != null + rowHistorySession.sessionInfoLocationValue.isVisible = session.location != null + session.location?.let { + rowHistorySession.sessionInfoLocationValue.text = it.name + } + + // Table size + rowHistorySession.sessionInfoTableIcon.isVisible = session.tableSize != null + rowHistorySession.sessionInfoTableValue.isVisible = session.tableSize != null + session.tableSize?.let { + rowHistorySession.sessionInfoTableValue.text = TableSize.all[it].localizedTitle(context) + } + + // State + if (session.getState() == SessionState.STARTED) { + rowHistorySession.gameResult.isVisible = false + rowHistorySession.playingIcon.isVisible = true + rowHistorySession.playingTitle.isVisible = true + } else { + rowHistorySession.gameResult.isVisible = true + rowHistorySession.playingIcon.isVisible = false + rowHistorySession.playingTitle.isVisible = false + + val result = session.result?.netResult ?: 0.0 + val resultColor = if (result >= 0.0) R.color.green else R.color.red + rowHistorySession.gameResult.text = result.toCurrency() + rowHistorySession.gameResult.setTextColor(ContextCompat.getColor(context, resultColor)) + } } diff --git a/app/src/main/java/net/pokeranalytics/android/util/Extensions.kt b/app/src/main/java/net/pokeranalytics/android/util/Extensions.kt index 9037f16a..b02ee6a0 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/Extensions.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/Extensions.kt @@ -104,13 +104,11 @@ fun Date.getDuration(context: Context, toDate: Date) : String { val numOfDays = (difference / (1000 * 60 * 60 * 24)) val hours = (difference / (1000 * 60 * 60)) val minutes = (difference / (1000 * 60)) % 60 - val seconds = (difference / 1000) % 60 val hoursStr = if (hours < 10) "0$hours" else "$hours" val minutesStr = if (minutes < 10) "0$minutes" else "$minutes" - val secondsStr = if (seconds < 10) "0$seconds" else "$seconds" - return "$hoursStr:$minutesStr:$secondsStr" + return "$hoursStr:$minutesStr" } diff --git a/app/src/main/res/layout/row_session_view.xml b/app/src/main/res/layout/row_session_view.xml index 61515f4b..b8520741 100644 --- a/app/src/main/res/layout/row_session_view.xml +++ b/app/src/main/res/layout/row_session_view.xml @@ -36,14 +36,14 @@ tools:text="21" /> + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toTopOf="@+id/sessionTitle"> + + + + 12sp @font/roboto + 0.02 - + + + From ccd72bb3085f83959cab7943dbc7f2aae420619d Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Mon, 25 Feb 2019 18:21:31 +0100 Subject: [PATCH 09/10] update tablesize grid --- .../android/ui/adapter/RowRepresentableRecyclerView.kt | 2 -- .../components/bottomsheet/BottomSheetTableSizeGridFragment.kt | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableRecyclerView.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableRecyclerView.kt index 43d3a789..e2703c35 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableRecyclerView.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableRecyclerView.kt @@ -26,8 +26,6 @@ class RowRepresentableRecyclerView : RecyclerView { /** * Init - * - * @param attrs */ private fun init() { val itemDecorator = DividerItemDecoration(this.context, DividerItemDecoration.VERTICAL) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt index 43508ed7..17bd215f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetTableSizeGridFragment.kt @@ -85,7 +85,7 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment(), } override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { - this.delegate.onRowValueChanged((this.row as TableSize).numberOfPlayer, row) + this.delegate.onRowValueChanged((this.rowRepresentableForPosition(position) as TableSize).numberOfPlayer, this.row) dismiss() } From c8280700bf66ecb9344839f12bbbd95aba7b6c32 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Mon, 25 Feb 2019 18:54:33 +0100 Subject: [PATCH 10/10] fix issue with localized tablesize --- .../net/pokeranalytics/android/model/realm/Session.kt | 6 ++++-- .../android/ui/adapter/RowRepresentableAdapter.kt | 9 +++++++++ .../net/pokeranalytics/android/ui/view/RowViewType.kt | 8 +++----- 3 files changed, 16 insertions(+), 7 deletions(-) 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 e71237ec..574dc576 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 @@ -2,6 +2,7 @@ package net.pokeranalytics.android.model.realm import android.content.Context import android.text.InputType +import com.google.android.material.tabs.TabLayout import io.realm.RealmList import io.realm.RealmObject import io.realm.annotations.Ignore @@ -10,6 +11,7 @@ import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.SessionInterface import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.LiveData +import net.pokeranalytics.android.model.TableSize import net.pokeranalytics.android.model.extensions.SessionState import net.pokeranalytics.android.model.extensions.getState import net.pokeranalytics.android.model.interfaces.Savable @@ -281,14 +283,14 @@ open class Session : RealmObject(), SessionInterface, Savable, return false } - override fun stringForRow(row: RowRepresentable): String { + override fun stringForRow(row: RowRepresentable, context:Context): String { return when (row) { SessionRow.BUY_IN -> buyin.toCurrency() SessionRow.BLINDS -> getBlinds() SessionRow.GAME -> getGameTitle() SessionRow.LOCATION -> location?.name ?: "--" SessionRow.BANKROLL -> bankroll?.name ?: "--" - SessionRow.TABLE_SIZE -> tableSize?.toString() ?: "--" // if (tableSize != null) TableSize(tableSize ?: 0).localizedTitle(context) else "--" + SessionRow.TABLE_SIZE -> this.tableSize?.let { TableSize(it).localizedTitle(context) } ?: "--" SessionRow.START_DATE -> if (timeFrame != null) timeFrame?.startDate?.shortDateTime() ?: "--" else "--" SessionRow.END_DATE -> if (timeFrame != null) timeFrame?.endDate?.shortDateTime() ?: "--" else "--" SessionRow.COMMENT -> if (comment.isNotEmpty()) comment else "--" diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt index da324bcf..cd6f2623 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableAdapter.kt @@ -1,5 +1,6 @@ package net.pokeranalytics.android.ui.adapter +import android.content.Context import android.os.Handler import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil @@ -64,6 +65,13 @@ interface DisplayableDataSource { return false } + /** + * Returns a localized string for a specific row + */ + fun stringForRow(row: RowRepresentable, context: Context): String { + return stringForRow(row) + } + /** * Returns a string for a specific row */ @@ -71,6 +79,7 @@ interface DisplayableDataSource { return "" } + /** * Returns an action icon identifier for a specific row */ 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 e2072145..f760d507 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,8 +16,6 @@ import kotlinx.android.synthetic.main.row_title_value_action.view.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter -import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource -import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate /** * An interface used to factor the configuration of RecyclerView.ViewHolder @@ -117,7 +115,7 @@ enum class RowViewType { override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { itemView.rowHeaderTitleValue_title.text = row.localizedTitle(itemView.context) adapter.dataSource?.let { - itemView.rowHeaderTitleValue_value.text = it.stringForRow(row) + itemView.rowHeaderTitleValue_value.text = it.stringForRow(row, itemView.context) } val listener = View.OnClickListener { adapter.delegate?.onRowSelected(position, row) @@ -132,7 +130,7 @@ enum class RowViewType { override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { itemView.rowTitleValue_title.text = row.localizedTitle(itemView.context) adapter.dataSource?.let { - itemView.rowTitleValue_value.text = it.stringForRow(row) + itemView.rowTitleValue_value.text = it.stringForRow(row, itemView.context) } val listener = View.OnClickListener { adapter.delegate?.onRowSelected(position, row) @@ -168,7 +166,7 @@ enum class RowViewType { itemView.rowTitleValueAction_title.text = row.localizedTitle(itemView.context) adapter.dataSource?.let { rowDelegate -> - val value = rowDelegate.stringForRow(row) + val value = rowDelegate.stringForRow(row, itemView.context) itemView.rowTitleValueAction_value.text = value itemView.rowTitleValueAction_action.visibility = if (value == "--") View.GONE else View.VISIBLE rowDelegate.actionIconForRow(row)?.let {icon ->