diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0d8cf486..23186ad9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,7 +22,7 @@ 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 a44f8f02..685d490c 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 @@ -1,7 +1,8 @@ package net.pokeranalytics.android.model.realm import android.text.InputType -import io.realm.* +import io.realm.RealmList +import io.realm.RealmObject import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.BottomSheetData @@ -73,9 +74,9 @@ open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSour return data } - override fun updateValue(value: Any, row: RowRepresentable) { + override fun updateValue(value: Any?, row: RowRepresentable) { when (row) { - SimpleRow.NAME -> this.name = value as String + SimpleRow.NAME -> this.name = value as String? ?: "" } } } \ 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 59bce216..83f3d778 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 @@ -47,9 +47,9 @@ open class Game : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, return data } - override fun updateValue(value: Any, row: RowRepresentable) { + override fun updateValue(value: Any?, row: RowRepresentable) { when (row) { - SimpleRow.NAME -> this.name = value as String + SimpleRow.NAME -> this.name = value as String? ?: "" } } } 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 baf5003a..ecd880d3 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 @@ -51,9 +51,9 @@ open class Location : RealmObject(), RowRepresentableDataSource, LiveDataDataSou return data } - override fun updateValue(value: Any, row: RowRepresentable) { + override fun updateValue(value: Any?, row: RowRepresentable) { when (row) { - SimpleRow.NAME -> this.name = value as String + SimpleRow.NAME -> this.name = value as String? ?: "" } } 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 c89ea819..67564408 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 @@ -194,8 +194,35 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource return data } - override fun updateValue(value: Any, row: RowRepresentable) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + override fun updateValue(value: Any?, row: RowRepresentable) { + realm.beginTransaction() + when(row) { + SessionRow.GAME -> game = value as Game? + SessionRow.BANKROLL -> bankroll = value as Bankroll? + SessionRow.LOCATION -> location = value as Location? + SessionRow.COMMENT -> comment = value as String? ?: "" + SessionRow.BLINDS -> if (value is ArrayList<*>) { + cgSmallBlind = try {(value[0] as String? ?: "0").toDouble()} catch (e:Exception) {null} + cgBigBlind = try {(value[1] as String? ?: "0").toDouble()} catch (e:Exception) {null} + } + //TODO: Update + SessionRow.START_DATE -> if (value is Date) { + /* + val timeFrameToUpdate = timeFrame ?: TimeFrame() + timeFrameToUpdate.setDate(value, null) + timeFrame = timeFrameToUpdate + */ + } + //TODO: Update + SessionRow.END_DATE -> if (value is Date) { + /* + val timeFrameToUpdate = timeFrame ?: TimeFrame() + timeFrameToUpdate.setDate(timeFrame?.startDate ?: Date(), value) + timeFrame = timeFrameToUpdate + */ + } + } + realm.commitTransaction() } } 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 d8799a63..346e7e39 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 @@ -45,9 +45,9 @@ open class TournamentFeature : RealmObject(), RowRepresentableDataSource, LiveDa return data } - override fun updateValue(value: Any, row: RowRepresentable) { + override fun updateValue(value: Any?, row: RowRepresentable) { when (row) { - SimpleRow.NAME -> this.name = value as String + SimpleRow.NAME -> this.name = value as String? ?: "" } } } \ 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 50a7f84e..20d6e7d4 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 @@ -54,9 +54,9 @@ open class TransactionType : RealmObject(), RowRepresentableDataSource, LiveData return data } - override fun updateValue(value: Any, row: RowRepresentable) { + override fun updateValue(value: Any?, row: RowRepresentable) { when (row) { - SimpleRow.NAME -> this.name = value as String + SimpleRow.NAME -> this.name = value as String? ?: "" } } 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 d20aa00a..b8203b78 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 @@ -4,16 +4,12 @@ import android.content.Context import android.content.Intent import android.os.Bundle import com.google.android.material.bottomnavigation.BottomNavigationView -import io.realm.Realm import kotlinx.android.synthetic.main.activity_home.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity 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.activity.components.PokerAnalyticsActivity -import net.pokeranalytics.android.util.data.sessionDao -import java.util.* @@ -49,7 +45,6 @@ class HomeActivity : PokerAnalyticsActivity() { super.onCreate(savedInstanceState) setContentView(net.pokeranalytics.android.R.layout.activity_home) - createDefaultSessions() initUI() } @@ -61,26 +56,6 @@ class HomeActivity : PokerAnalyticsActivity() { navigation.selectedItemId = net.pokeranalytics.android.R.id.navigation_history } - /** - * Create default data - */ - private fun createDefaultSessions() { - - val realm = Realm.getDefaultInstance() - if (realm.where(Session::class.java).findAll().isEmpty()) { - realm.sessionDao().deleteAllSessions() - val data = ArrayList() - for (i in 0..100) { - val session = Session() - session.creationDate = Date() - data.add(session) - } - realm.sessionDao().createOrUpdateSessions(data) - } - realm.close() - - } - /** * Display a new fragment */ diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/NewSessionActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/SessionActivity.kt similarity index 55% rename from app/src/main/java/net/pokeranalytics/android/ui/activity/NewSessionActivity.kt rename to app/src/main/java/net/pokeranalytics/android/ui/activity/SessionActivity.kt index 46c97c87..e7d7810c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/NewSessionActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/SessionActivity.kt @@ -5,17 +5,26 @@ import android.content.Intent import android.os.Bundle import kotlinx.android.synthetic.main.activity_new_session.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.ui.fragment.NewSessionFragment import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity +import net.pokeranalytics.android.ui.fragment.SessionFragment -class NewSessionActivity: PokerAnalyticsActivity() { +class SessionActivity: PokerAnalyticsActivity() { companion object { - fun newInstance(context: Context, isTournament: Boolean) { - val intent = Intent(context, NewSessionActivity::class.java) - intent.putExtra("is_tournament", isTournament) + fun newInstance(context: Context, isTournament: Boolean? = false, sessionId: String? = "") { + val intent = Intent(context, SessionActivity::class.java) + + isTournament?.let { + intent.putExtra("is_tournament", isTournament) + } + + sessionId?.let { + intent.putExtra("session_id", sessionId) + } + context.startActivity(intent) } + } override fun onCreate(savedInstanceState: Bundle?) { @@ -29,11 +38,10 @@ class NewSessionActivity: PokerAnalyticsActivity() { * Init UI */ private fun initUI() { - + val sessionId = intent.getStringExtra("session_id") val isTournament = intent.getBooleanExtra("is_tournament", false) - val fragment = newSessionFragment as NewSessionFragment - fragment.setData(isTournament) - + val fragment = newSessionFragment as SessionFragment + fragment.setData(isTournament, sessionId) } /** @@ -41,8 +49,6 @@ class NewSessionActivity: PokerAnalyticsActivity() { */ private fun initData() { - - } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt index 50212c16..e8d28787 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt @@ -46,6 +46,11 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, override fun clickOnClear(row: RowRepresentable) { Toast.makeText(requireContext(), "Clear: $row", Toast.LENGTH_SHORT).show() + (this.item as RowEditable).updateValue(null, row) + this.getRealm().executeTransaction { + it.copyToRealmOrUpdate(this.item) + } + rowRepresentableAdapter.refreshRow(row) } override fun setValue(value: Any, row: RowRepresentable) { 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 9b6c9118..517aeca3 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 @@ -6,20 +6,14 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager -import io.realm.Realm import io.realm.RealmResults import kotlinx.android.synthetic.main.fragment_history.* -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Session -import net.pokeranalytics.android.ui.activity.NewSessionActivity +import net.pokeranalytics.android.ui.activity.SessionActivity import net.pokeranalytics.android.ui.adapter.HistoryAdapter import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.util.data.sessionDao -import java.util.* class HistoryFragment : PokerAnalyticsFragment() { @@ -56,11 +50,11 @@ class HistoryFragment : PokerAnalyticsFragment() { private fun initUI() { newSession.setOnClickListener { - NewSessionActivity.newInstance(requireContext(), false) + SessionActivity.newInstance(requireContext(), false) } newTournament.setOnClickListener { - NewSessionActivity.newInstance(requireContext(), true) + SessionActivity.newInstance(requireContext(), true) } newHand.setOnClickListener { @@ -89,29 +83,13 @@ class HistoryFragment : PokerAnalyticsFragment() { adapter = historyAdapter } - it.addChangeListener { newSessions -> - historyAdapter.notifyDataSetChanged() + historyAdapter.onClickOnSession = {position, session -> + SessionActivity.newInstance(requireContext(), sessionId = session.id) } - } - - GlobalScope.launch(Dispatchers.Main) { - delay(2000) - - realmSessions?.first()?.let { - - val realm = Realm.getDefaultInstance() - - val mySession = realm.copyFromRealm(it) - mySession.creationDate = Date() - - realm.beginTransaction() - realm.copyToRealmOrUpdate(mySession) - realm.commitTransaction() - - realm.close() + it.addChangeListener { newSessions -> + historyAdapter.notifyDataSetChanged() } - } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt similarity index 56% rename from app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt rename to app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt index c92cbf67..e5b2c165 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt @@ -6,10 +6,12 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager +import io.realm.kotlin.where import kotlinx.android.synthetic.main.fragment_new_session.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.realm.* +import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.adapter.components.RowRepresentableAdapter @@ -22,10 +24,10 @@ import net.pokeranalytics.android.ui.fragment.components.DateTimePickerManager import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import java.util.* -class NewSessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate { +class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate { private lateinit var currentSession: Session - private lateinit var sessionAdapterRow : RowRepresentableAdapter + private lateinit var sessionAdapter : RowRepresentableAdapter override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_new_session, container, false) @@ -33,15 +35,24 @@ class NewSessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, B override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - initData() initUI() } override fun onRowSelected(row: RowRepresentable) { val data = currentSession.getBottomSheetData(row) - when(row) { - SessionRow.START_DATE -> DateTimePickerManager.create(requireContext(), row, this, currentSession.timeFrame?.startDate) - SessionRow.END_DATE -> DateTimePickerManager.create(requireContext(), row, this, currentSession.timeFrame?.endDate) + when (row) { + SessionRow.START_DATE -> DateTimePickerManager.create( + requireContext(), + row, + this, + currentSession.timeFrame?.startDate + ) + SessionRow.END_DATE -> DateTimePickerManager.create( + requireContext(), + row, + this, + currentSession.timeFrame?.endDate + ) else -> BottomSheetFragment.create(fragmentManager, row, this, data) } } @@ -51,7 +62,7 @@ class NewSessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, B } override fun clickOnAdd(row: RowRepresentable) { - when(row) { + when (row) { SessionRow.GAME -> EditableDataActivity.newInstance(requireContext(), LiveData.GAME.ordinal) SessionRow.BANKROLL -> EditableDataActivity.newInstance(requireContext(), LiveData.BANKROLL.ordinal) SessionRow.LOCATION -> EditableDataActivity.newInstance(requireContext(), LiveData.LOCATION.ordinal) @@ -59,47 +70,13 @@ class NewSessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, B } override fun clickOnClear(row: RowRepresentable) { - when(row) { - SessionRow.GAME -> currentSession.game = null - SessionRow.BANKROLL -> currentSession.bankroll = null - SessionRow.LOCATION -> currentSession.location = null - SessionRow.BLINDS -> { - currentSession.cgSmallBlind = null - currentSession.cgBigBlind = null - } - SessionRow.COMMENT -> currentSession.comment = "" - SessionRow.START_DATE -> currentSession.timeFrame?.setDate(Date(), null) - SessionRow.END_DATE -> currentSession.timeFrame?.setDate(Date(), null) - } - sessionAdapterRow.notifyItemChanged(SessionRow.values().indexOf(row)) + currentSession.updateValue(null, row) + sessionAdapter.refreshRow(row) } override fun setValue(value: Any, row: RowRepresentable) { - when(row) { - SessionRow.GAME -> if (value is Game) currentSession.game = value - SessionRow.BANKROLL -> if (value is Bankroll) currentSession.bankroll = value - SessionRow.LOCATION -> if (value is Location) currentSession.location = value - SessionRow.COMMENT -> if (value is String) currentSession.comment = value - SessionRow.BLINDS -> if (value is ArrayList<*>) { - currentSession.cgSmallBlind = (value[0] as String? ?: "0").toDouble() - currentSession.cgBigBlind = (value[1] as String? ?: "0").toDouble() - } - SessionRow.START_DATE -> if (value is Date) { - val timeFrame = currentSession.timeFrame ?: TimeFrame() - timeFrame.setDate(value, null) - currentSession.timeFrame = timeFrame - } - SessionRow.END_DATE -> if (value is Date) { - val timeFrame = currentSession.timeFrame ?: TimeFrame() - timeFrame.setDate(timeFrame.startDate, value) - currentSession.timeFrame = timeFrame - } - } - sessionAdapterRow.notifyItemChanged(SessionRow.values().indexOf(row)) - } - - private fun initData() { - currentSession = Session() + currentSession.updateValue(value, row) + sessionAdapter.refreshRow(row) } /** @@ -112,12 +89,12 @@ class NewSessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, B activity.supportActionBar?.setDisplayHomeAsUpEnabled(true) val viewManager = LinearLayoutManager(requireContext()) - sessionAdapterRow = RowRepresentableAdapter(currentSession, this) + sessionAdapter = RowRepresentableAdapter(currentSession, this) recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager - adapter = sessionAdapterRow + adapter = sessionAdapter } } @@ -125,8 +102,22 @@ class NewSessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, B /** * Set fragment data */ - fun setData(isTournament: Boolean) { + fun setData(isTournament: Boolean, sessionId: String) { toolbar.title = if (isTournament) "Tournament" else "Cash game" + + val realm = getRealm() + val sessionRealm = realm.where().equalTo("id", sessionId).findFirst() + if (sessionRealm != null) { + currentSession = sessionRealm + } else { + realm.beginTransaction() + currentSession = realm.createObject(Session::class.java, UUID.randomUUID().toString()) + realm.commitTransaction() + } + + sessionAdapter = RowRepresentableAdapter(currentSession, this) + recyclerView.adapter = sessionAdapter + } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowEditable.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowEditable.kt index 0313d58c..95fc3915 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowEditable.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowEditable.kt @@ -4,5 +4,5 @@ import net.pokeranalytics.android.ui.fragment.components.BottomSheetData interface RowEditable { fun getBottomSheetData(row: RowRepresentable): ArrayList - fun updateValue(value: Any, row: RowRepresentable) + fun updateValue(value: Any?, row: RowRepresentable) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_new_session.xml b/app/src/main/res/layout/activity_new_session.xml index 0ffe46ae..3305e157 100644 --- a/app/src/main/res/layout/activity_new_session.xml +++ b/app/src/main/res/layout/activity_new_session.xml @@ -8,6 +8,6 @@ android:id="@+id/newSessionFragment" android:layout_width="match_parent" android:layout_height="match_parent" - android:name="net.pokeranalytics.android.ui.fragment.NewSessionFragment" /> + android:name="net.pokeranalytics.android.ui.fragment.SessionFragment" /> \ No newline at end of file