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 bab4effd..e023d1e5 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 @@ -1,5 +1,6 @@ package net.pokeranalytics.android.model.realm +import android.content.Context import android.text.InputType import io.realm.* import io.realm.annotations.Ignore @@ -16,6 +17,7 @@ import net.pokeranalytics.android.ui.view.RowEditable import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.SessionRow import net.pokeranalytics.android.util.data.sessionDao +import net.pokeranalytics.android.util.getDuration import net.pokeranalytics.android.util.short import net.pokeranalytics.android.util.toCurrency import java.util.* @@ -138,6 +140,15 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource } } + /** + * Return the duration of the current session + */ + fun getDuration(context: Context): String { + val startDate = timeFrame?.startDate ?: Date() + val enDate = timeFrame?.endDate ?: Date() + return startDate.getDuration(context, enDate) + } + /** * Delete the object from realm * TODO: Cascade delete? @@ -270,7 +281,6 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource override val primaryKey: String get() = this.id - override fun getBottomSheetData(row: RowRepresentable): ArrayList { val data = ArrayList() @@ -282,8 +292,18 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource data.add(BottomSheetData(100.0 * (cgBigBlind ?: 0.0))) data.add(BottomSheetData(200.0 * (cgBigBlind ?: 0.0))) data.add(BottomSheetData(buyin)) - data.add(BottomSheetData("",inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL)) - data.add(BottomSheetData("",inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL)) + data.add( + BottomSheetData( + "", + inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL + ) + ) + data.add( + BottomSheetData( + "", + inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL + ) + ) } SessionRow.TIPS -> { // Disable the buttons with value = 0, add current value & set the 2 edit texts @@ -294,7 +314,9 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource data.add(BottomSheetData("", inputType = InputType.TYPE_CLASS_NUMBER)) data.add(BottomSheetData("", inputType = InputType.TYPE_CLASS_NUMBER)) } - SessionRow.TABLE_SIZE -> {data.add(BottomSheetData(tableSize))} + SessionRow.TABLE_SIZE -> { + data.add(BottomSheetData(tableSize)) + } SessionRow.GAME -> { // Add current game & games list data.add(BottomSheetData(limit)) @@ -351,14 +373,16 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource if (value == null) { timeFrame = null } else { - val timeFrameToUpdate = if (timeFrame != null) timeFrame as TimeFrame else realm.createObject(TimeFrame::class.java) + val timeFrameToUpdate = + if (timeFrame != null) timeFrame as TimeFrame else realm.createObject(TimeFrame::class.java) timeFrameToUpdate.setDate(value, null) timeFrame = timeFrameToUpdate } } //TODO: Update SessionRow.END_DATE -> if (value is Date?) { - val timeFrameToUpdate = if (timeFrame != null) timeFrame as TimeFrame else realm.createObject(TimeFrame::class.java) + val timeFrameToUpdate = + if (timeFrame != null) timeFrame as TimeFrame else realm.createObject(TimeFrame::class.java) timeFrameToUpdate.setDate(null, value) timeFrame = timeFrameToUpdate } 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 32481276..944d3a6d 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 @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.* import android.view.animation.OvershootInterpolator import android.widget.Toast +import androidx.core.content.ContextCompat import androidx.interpolator.view.animation.FastOutSlowInInterpolator import io.realm.kotlin.where import kotlinx.android.synthetic.main.fragment_session.* @@ -23,6 +24,7 @@ import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheet import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.SessionRow import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager +import net.pokeranalytics.android.util.px import net.pokeranalytics.android.util.toast import timber.log.Timber import java.util.* @@ -156,6 +158,10 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott when (currentSession.getState()) { SessionState.PENDING -> { + state.text = "WAITING" + state.setTextColor(ContextCompat.getColor(requireContext(), R.color.white)) + sessionData.animate().translationY(-(72f.px)).alpha(0f).setInterpolator(FastOutSlowInInterpolator()).setDuration(500).start() + recyclerView.animate().translationY(-(72f.px)).setInterpolator(FastOutSlowInInterpolator()).setDuration(500).start() sessionMenu?.findItem(R.id.restart)?.isVisible = false floatingActionButton.setImageResource(R.drawable.ic_outline_play) bottomAppBar.menu.findItem(R.id.stop).isVisible = false @@ -163,6 +169,10 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott .setInterpolator(OvershootInterpolator()).start() } SessionState.STARTED -> { + state.text = "PLAYING" + state.setTextColor(ContextCompat.getColor(requireContext(), R.color.green)) + sessionData.animate().translationY(0f).alpha(1f).setInterpolator(FastOutSlowInInterpolator()).setDuration(500).start() + recyclerView.animate().translationY(0f.px).setInterpolator(FastOutSlowInInterpolator()).setDuration(500).start() sessionMenu?.findItem(R.id.restart)?.isVisible = true floatingActionButton.setImageResource(R.drawable.ic_outline_pause) bottomAppBar.menu.findItem(R.id.stop).isVisible = true @@ -170,6 +180,10 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott .setInterpolator(OvershootInterpolator()).start() } SessionState.PAUSED -> { + state.text = "BREAK" + state.setTextColor(ContextCompat.getColor(requireContext(), R.color.blue)) + sessionData.animate().translationY(0f).alpha(1f).setInterpolator(FastOutSlowInInterpolator()).setDuration(500).start() + recyclerView.animate().translationY(0f.px).setInterpolator(FastOutSlowInInterpolator()).setDuration(500).start() sessionMenu?.findItem(R.id.restart)?.isVisible = true floatingActionButton.setImageResource(R.drawable.ic_outline_play) bottomAppBar.menu.findItem(R.id.stop).isVisible = true @@ -177,6 +191,10 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott .setInterpolator(OvershootInterpolator()).start() } SessionState.FINISHED -> { + state.text = "FINISHED" + state.setTextColor(ContextCompat.getColor(requireContext(), R.color.white)) + sessionData.animate().translationY(0f).alpha(1f).setInterpolator(FastOutSlowInInterpolator()).setDuration(500).start() + recyclerView.animate().translationY(0f.px).setInterpolator(FastOutSlowInInterpolator()).setDuration(500).start() sessionMenu?.findItem(R.id.restart)?.isVisible = true bottomAppBar.menu.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/view/SessionRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt index b1300f1c..0161b68c 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 @@ -64,7 +64,7 @@ class SessionRowView : FrameLayout { rowHistorySession.gameType.text = gameTitle - rowHistorySession.gameInfo.text = "Game info: duration, table size, ..." + rowHistorySession.gameInfo.text = session.getDuration(context) rowHistorySession.gameResult.text = "$ 0" } 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 10fc83fe..1e8c5ab1 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/Extensions.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/Extensions.kt @@ -1,5 +1,6 @@ package net.pokeranalytics.android.util +import android.content.Context import android.content.res.Resources import android.widget.Toast import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity @@ -9,6 +10,8 @@ import java.text.DecimalFormat import java.text.SimpleDateFormat import java.util.* + + // Sizes val Int.dp: Int get() = (this / Resources.getSystem().displayMetrics.density).toInt() @@ -55,6 +58,20 @@ fun Date.getDayNumber() : String { fun Date.getShortDayName() : String { return SimpleDateFormat("EE", Locale.getDefault()).format(this) } +// Return the duration between two dates +fun Date.getDuration(context: Context, toDate: Date) : String { + val difference = (toDate.time - this.time).toInt() + 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" +} // Toast diff --git a/app/src/main/res/layout/fragment_session.xml b/app/src/main/res/layout/fragment_session.xml index 95e68273..2ff2e6e1 100644 --- a/app/src/main/res/layout/fragment_session.xml +++ b/app/src/main/res/layout/fragment_session.xml @@ -15,16 +15,98 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/sessionData" + tools:translationY="0dp" /> @@ -55,6 +137,7 @@ app:titleTextColor="@color/white" tools:title="Poker Analytics" /> + @@ -63,10 +146,10 @@ android:id="@+id/bottomAppBar" android:layout_width="match_parent" android:layout_height="wrap_content" - app:fabAlignmentMode="center" + android:layout_gravity="bottom" android:background="@color/red" android:theme="@style/PokerAnalyticsTheme.BottomAppBar" - android:layout_gravity="bottom" /> + app:fabAlignmentMode="center" />