diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index a9b1286f..318a8459 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -5,8 +5,11 @@ import io.realm.Realm import io.realm.RealmConfiguration import io.realm.RealmResults import io.realm.kotlin.where +import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.realm.Game +import net.pokeranalytics.android.model.realm.Result import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.model.realm.TimeFrame import net.pokeranalytics.android.util.PokerAnalyticsLogs import timber.log.Timber import java.util.* @@ -86,6 +89,53 @@ class PokerAnalyticsApplication : Application() { } } + if (BuildConfig.DEBUG) { + val sessions = realm.where().findAll() + if (sessions.size < 10) { + for (index in 0..50) { + + realm.executeTransaction { + val session = Session() + session.id = UUID.randomUUID().toString() + + val calendar = Calendar.getInstance() + calendar.set( + (2017..2018).random(), + (0..11).random(), + (0..28).random(), + (0..23).random(), + (0..59).random() + ) + + val startDate = calendar.time + calendar.add(Calendar.HOUR_OF_DAY, (2..12).random()) + calendar.add(Calendar.MINUTE, (0..59).random()) + val endDate = calendar.time + + val timeFrame = TimeFrame() + timeFrame.setDate(startDate, endDate) + session.timeFrame = timeFrame + session.creationDate = startDate + + session.limit = Limit.values().random().ordinal + session.game = realm.where().findAll().random() + + val result = Result() + result.buyin = arrayListOf(100, 200, 300, 500, 1000, 2000).random().toDouble() + result.netResult = arrayListOf( + -2500.0, -2000.0, -1500.0, -1000.0, -500.0, 200.0, 1000.0, 1500.0, + 2500.0 + ).random() + session.result = result + + realm.copyToRealmOrUpdate(session) + } + } + } + } + + realm.close() + } } \ No newline at end of file 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 680f1060..78a0b126 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt @@ -73,6 +73,8 @@ enum class Stat : RowRepresentable { } override val viewType: Int = RowViewType.TITLE_VALUE.ordinal + override var displayHeader: Boolean = false + override var headerValues: ArrayList = ArrayList() } /** diff --git a/app/src/main/java/net/pokeranalytics/android/model/Limit.kt b/app/src/main/java/net/pokeranalytics/android/model/Limit.kt index 95121954..3a907b02 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/Limit.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/Limit.kt @@ -36,6 +36,9 @@ enum class Limit : RowRepresentable { override fun getDisplayName(): String { return this.longName } + + override var displayHeader: Boolean = false + override var headerValues: ArrayList = ArrayList() } /* diff --git a/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt b/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt index d13797c5..df445b25 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/TableSize.kt @@ -33,4 +33,7 @@ class TableSize(var numberOfPlayer: Int) : RowRepresentable { override val viewType: Int get() = RowViewType.TITLE_GRID.ordinal + + override var displayHeader: Boolean = false + override var headerValues: ArrayList = ArrayList() } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt index 7e3822e0..ac5ad146 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt @@ -3,11 +3,14 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmList import io.realm.RealmObject +import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource +import net.pokeranalytics.android.ui.view.BankrollRow +import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor -import net.pokeranalytics.android.ui.view.* +import net.pokeranalytics.android.ui.view.SimpleRow import java.util.* import kotlin.collections.ArrayList @@ -89,7 +92,12 @@ open class Bankroll(name: String = "") : RealmObject(), Savable, } } - override fun isValidForSave(): Boolean { - return this.name.isNotEmpty() - } + override fun isValidForSave(): Boolean { + return this.name.isNotEmpty() + } + + @Ignore + override var displayHeader: Boolean = false + @Ignore + override var headerValues: ArrayList = ArrayList() } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt index fe4f98f8..8090f1b8 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt @@ -2,6 +2,7 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject +import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource @@ -75,4 +76,9 @@ open class Game : RealmObject(), Savable, RowRepresentableDataSource, override fun isValidForSave(): Boolean { return this.name.isNotEmpty() } + + @Ignore + override var displayHeader: Boolean = false + @Ignore + override var headerValues: ArrayList = ArrayList() } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt index 24d776a6..bbb0cbb4 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Location.kt @@ -2,6 +2,7 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject +import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource @@ -71,4 +72,9 @@ open class Location : RealmObject(), Savable, RowRepresentableDataSource, RowRep override fun isValidForSave(): Boolean { return this.name.isNotEmpty() } + + @Ignore + override var displayHeader: Boolean = false + @Ignore + override var headerValues: ArrayList = ArrayList() } 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 a210ffd4..bde9ee18 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 @@ -14,12 +14,12 @@ import net.pokeranalytics.android.model.extensions.SessionState import net.pokeranalytics.android.model.extensions.getState import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource -import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.SessionRow import net.pokeranalytics.android.util.getDuration import net.pokeranalytics.android.util.round -import net.pokeranalytics.android.util.short +import net.pokeranalytics.android.util.shortDateTime import net.pokeranalytics.android.util.toCurrency import timber.log.Timber import java.util.* @@ -95,6 +95,12 @@ open class Session : RealmObject(), SessionInterface, Savable, // The features of the tournament, like Knockout, Shootout, Turbo... var tournamentFeatures: RealmList = RealmList() + @Ignore + override var displayHeader: Boolean = false + + @Ignore + override var headerValues: ArrayList = ArrayList() + /** * Start a session */ @@ -283,8 +289,8 @@ open class Session : RealmObject(), SessionInterface, Savable, SessionRow.LOCATION -> location?.name ?: "--" SessionRow.BANKROLL -> bankroll?.name ?: "--" SessionRow.TABLE_SIZE -> tableSize?.toString() ?: "--" - SessionRow.START_DATE -> if (timeFrame != null) timeFrame?.startDate?.short() ?: "--" else "--" - SessionRow.END_DATE -> if (timeFrame != null) timeFrame?.endDate?.short() ?: "--" else "--" + 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 "--" else -> "--" } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt index 828c6673..6c974c20 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt @@ -2,6 +2,7 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject +import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource @@ -62,7 +63,12 @@ open class TournamentFeature : RealmObject(), Savable, RowRepresentableDataSourc } } - override fun isValidForSave(): Boolean { - return this.name.isNotEmpty() - } + override fun isValidForSave(): Boolean { + return this.name.isNotEmpty() + } + + @Ignore + override var displayHeader: Boolean = false + @Ignore + override var headerValues: ArrayList = ArrayList() } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt index 7338b9c8..3d0d8753 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt @@ -2,6 +2,7 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject +import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource @@ -68,9 +69,14 @@ open class TransactionType : RealmObject(), Savable, RowRepresentableDataSource, } } - override fun isValidForSave(): Boolean { - return this.name.isNotEmpty() - } + override fun isValidForSave(): Boolean { + return this.name.isNotEmpty() + } + + @Ignore + override var displayHeader: Boolean = false + @Ignore + override var headerValues: ArrayList = ArrayList() } enum class TransactionKind { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt index 9c2433d8..79ffaf32 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt @@ -4,7 +4,6 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import io.realm.RealmResults import io.realm.Sort @@ -20,6 +19,11 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType +import net.pokeranalytics.android.util.getMonthAndYear +import net.pokeranalytics.android.util.isSameDay +import net.pokeranalytics.android.util.isSameMonth +import net.pokeranalytics.android.util.longDate +import java.util.* class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, RowRepresentableDelegate { @@ -35,6 +39,7 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, private lateinit var historyAdapter: RowRepresentableAdapter private lateinit var realmSessions: RealmResults + private val sessions: ArrayList = ArrayList() override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_history, container, false) @@ -54,6 +59,10 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, override fun onResume() { super.onResume() historyAdapter.notifyDataSetChanged() + + sessions.clear() + sessions.addAll(getRealm().copyFromRealm(realmSessions)) + createSessionsHeaders() } /** @@ -61,7 +70,7 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, */ private fun initUI() { - newSession.setOnClickListener { + newCashGame.setOnClickListener { SessionActivity.newInstance(requireContext(), false) } @@ -69,13 +78,6 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, SessionActivity.newInstance(requireContext(), true) } - newHand.setOnClickListener { - Toast.makeText(requireContext(), "Open new hand", Toast.LENGTH_SHORT).show() - } - newTransaction.setOnClickListener { - Toast.makeText(requireContext(), "Open new transaction", Toast.LENGTH_SHORT).show() - } - } /** @@ -83,9 +85,12 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, */ private fun initData() { realmSessions = getRealm().where().findAll().sort("timeFrame.startDate", Sort.DESCENDING) + val viewManager = LinearLayoutManager(requireContext()) historyAdapter = RowRepresentableAdapter(this, this) + createSessionsHeaders() + recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager @@ -93,12 +98,42 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, } } + /** + * Create the sessions headers + */ + private fun createSessionsHeaders() { + + val groupedByDay = false + + val calendar = Calendar.getInstance() + val currentCalendar = Calendar.getInstance() + + for ((index, session) in sessions.withIndex()) { + currentCalendar.time = session.creationDate + if (groupedByDay) { + if (!calendar.isSameDay(currentCalendar) || index == 0) { + calendar.time = currentCalendar.time + session.displayHeader = true + session.headerValues = arrayListOf(session.creationDate.longDate(), "$ 123") + } + } else { + if (!calendar.isSameMonth(currentCalendar) || index == 0) { + calendar.time = currentCalendar.time + session.displayHeader = true + session.headerValues = arrayListOf(session.creationDate.getMonthAndYear(), "$ 123") + } + } + } + + } + + override fun rowRepresentableForPosition(position: Int): RowRepresentable { - return this.realmSessions[position] as RowRepresentable + return this.sessions[position] } override fun numberOfRows(): Int { - return this.realmSessions.size + return this.sessions.size } override fun viewTypeForPosition(position: Int): Int { @@ -106,7 +141,7 @@ class HistoryFragment : PokerAnalyticsFragment(), RowRepresentableDataSource, } override fun indexForRow(row: RowRepresentable): Int { - return this.realmSessions.indexOf(row) + return this.sessions.indexOf(row) } override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { 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 b4ee780a..c15095d6 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 @@ -69,6 +69,10 @@ interface Displayable: Localizable { get() { return false } + + var displayHeader: Boolean + var headerValues: ArrayList + } enum class SessionRow : RowRepresentable { @@ -179,6 +183,9 @@ enum class SessionRow : RowRepresentable { else -> BottomSheetType.NONE } } + + override var displayHeader: Boolean = false + override var headerValues: ArrayList = ArrayList() } enum class SimpleRow : RowRepresentable { @@ -187,6 +194,8 @@ enum class SimpleRow : RowRepresentable { override val resId: Int? = R.string.name override val viewType: Int = RowViewType.TITLE_VALUE.ordinal override val bottomSheetType: BottomSheetType = BottomSheetType.EDIT_TEXT + override var displayHeader: Boolean = false + override var headerValues: ArrayList = ArrayList() } enum class BankrollRow : RowRepresentable { @@ -212,6 +221,9 @@ enum class BankrollRow : RowRepresentable { LIVE -> BottomSheetType.NONE } } + + override var displayHeader: Boolean = false + override var headerValues: ArrayList = ArrayList() } enum class GameRow : RowRepresentable { @@ -237,6 +249,9 @@ enum class GameRow : RowRepresentable { SHORT_NAME -> BottomSheetType.EDIT_TEXT } } + + override var displayHeader: Boolean = false + override var headerValues: ArrayList = ArrayList() } enum class LocationRow : RowRepresentable { @@ -262,6 +277,9 @@ enum class LocationRow : RowRepresentable { LOCATION_STATUS -> BottomSheetType.NONE } } + + override var displayHeader: Boolean = false + override var headerValues: ArrayList = ArrayList() } enum class TransactionTypeRow : RowRepresentable { @@ -303,4 +321,7 @@ enum class SettingRow : RowRepresentable { else -> null } } + + override var displayHeader: Boolean = false + override var headerValues: ArrayList = ArrayList() } \ No newline at end of file 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 77a995f4..e2072145 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 @@ -3,6 +3,7 @@ package net.pokeranalytics.android.ui.view import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.row_bottom_sheet_grid_title.view.* import kotlinx.android.synthetic.main.row_bottom_sheet_title.view.* @@ -50,13 +51,24 @@ enum class RowViewType { inner class RowSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { - override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { - itemView.sessionRow.setData(row as Session) - val listener = View.OnClickListener { - adapter.delegate?.onRowSelected(position, row) - } - itemView.sessionRow.setOnClickListener(listener) + + override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { + + if (row.displayHeader) { + itemView.sessionHeader.isVisible = true + itemView.sessionHeader.text = row.headerValues.firstOrNull() ?: "" + } else { + itemView.sessionHeader.isVisible = false + } + + itemView.sessionRow.setData(row as Session) + val listener = View.OnClickListener { + adapter.delegate?.onRowSelected(position, row) + } + itemView.sessionRow.setOnClickListener(listener) + } + } inner class CellSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { 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 b286df75..30a0b39a 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 @@ -5,12 +5,14 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.widget.FrameLayout import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat import kotlinx.android.synthetic.main.row_session_view.view.* import net.pokeranalytics.android.R 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 { @@ -60,6 +62,10 @@ class SessionRowView : FrameLayout { rowHistorySession.gameInfo.text = session.getDuration(context) rowHistorySession.gameResult.text = session.result?.netResult?.toCurrency() ?: "$0" + 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)) + } } \ No newline at end of file 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 1e8c5ab1..9037f16a 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/Extensions.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/Extensions.kt @@ -35,19 +35,54 @@ fun Double.toCurrency(): String { return "$ ${formatter.format(this)}" } +// Calendar + +// Return if the calendar dates are in the same month +fun Calendar.isSameMonth(calendar: Calendar): Boolean { + return calendar.get(Calendar.YEAR) == this.get(Calendar.YEAR) && + calendar.get(Calendar.MONTH) == this.get(Calendar.MONTH) +} +// Return if the calendar dates are in the same day +fun Calendar.isSameDay(calendar: Calendar): Boolean { + return calendar.get(Calendar.YEAR) == this.get(Calendar.YEAR) && + calendar.get(Calendar.MONTH) == this.get(Calendar.MONTH) && + calendar.get(Calendar.DAY_OF_MONTH) == this.get(Calendar.DAY_OF_MONTH) +} + // Date // Return a short string of the date -fun Date.short(): String { +fun Date.shortDate(): String { + return DateFormat.getDateInstance(DateFormat.SHORT).format(this) +} +// Return a short string of the date +fun Date.mediumDate(): String { + return DateFormat.getDateInstance(DateFormat.MEDIUM).format(this) +} +// Return a long string of the date +fun Date.longDate(): String { + return DateFormat.getDateInstance(DateFormat.LONG).format(this) +} +// Return a short string of the date +fun Date.fullDate(): String { + return DateFormat.getDateInstance(DateFormat.FULL).format(this) +} + +// Return a short string of the date & time +fun Date.shortDateTime(): String { return DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(this) } -// Return a medium string of the date -fun Date.medium(): String { +// Return a medium string of the date & time +fun Date.mediumDateTime(): String { return DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM).format(this) } -// Return the full string of the date -fun Date.full(): String { +// Return a long string of the date & time +fun Date.longDateTime(): String { + return DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG).format(this) +} +// Return the full string of the date & time +fun Date.fullDateTime(): String { return DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL).format(this) } // Return the day number of the date @@ -56,8 +91,13 @@ fun Date.getDayNumber() : String { } // Return the 3 first letters of the date's day fun Date.getShortDayName() : String { - return SimpleDateFormat("EE", Locale.getDefault()).format(this) + return SimpleDateFormat("EE", Locale.getDefault()).format(this).substring(0, 3) +} +// Return the month & year of the date +fun Date.getMonthAndYear(): String { + return SimpleDateFormat("MMMM YYYY", Locale.getDefault()).format(this).capitalize() } + // Return the duration between two dates fun Date.getDuration(context: Context, toDate: Date) : String { val difference = (toDate.time - this.time).toInt() diff --git a/app/src/main/res/layout/fragment_history.xml b/app/src/main/res/layout/fragment_history.xml index 3408c3e6..c5b1fb98 100644 --- a/app/src/main/res/layout/fragment_history.xml +++ b/app/src/main/res/layout/fragment_history.xml @@ -7,6 +7,7 @@ android:layout_height="match_parent" tools:context=".ui.activity.HomeActivity"> + + + + + + + + \ 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 6da823a1..ac2b1e00 100644 --- a/app/src/main/res/layout/fragment_session.xml +++ b/app/src/main/res/layout/fragment_session.xml @@ -159,6 +159,7 @@ android:layout_gravity="bottom|center" android:layout_marginBottom="28dp" android:elevation="16dp" - android:src="@drawable/ic_outline_play" /> + android:src="@drawable/ic_outline_play" + android:tint="@color/black" /> \ No newline at end of file diff --git a/app/src/main/res/layout/row_history_session.xml b/app/src/main/res/layout/row_history_session.xml index c4c27304..fdefc67b 100644 --- a/app/src/main/res/layout/row_history_session.xml +++ b/app/src/main/res/layout/row_history_session.xml @@ -1,12 +1,24 @@ - + + + + android:id="@+id/sessionRow" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/row_session_view.xml b/app/src/main/res/layout/row_session_view.xml index ff4b18a8..61515f4b 100644 --- a/app/src/main/res/layout/row_session_view.xml +++ b/app/src/main/res/layout/row_session_view.xml @@ -40,7 +40,7 @@ style="@style/PokerAnalyticsTheme.TextView.SessionRow.Title" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="16dp" + android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" app:layout_constraintBottom_toTopOf="@+id/gameInfo" diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index aa5feb46..0d5387bc 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -101,6 +101,14 @@ + + + +