diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 293d6a4e..a9b1286f 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -4,14 +4,17 @@ import android.app.Application import io.realm.Realm import io.realm.RealmConfiguration import io.realm.RealmResults +import io.realm.kotlin.where +import net.pokeranalytics.android.model.realm.Game import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.util.PokerAnalyticsLogs import timber.log.Timber +import java.util.* -class PokerAnalyticsApplication: Application() { +class PokerAnalyticsApplication : Application() { - var sessions: RealmResults? = null + var sessions: RealmResults? = null // private val listener: OrderedRealmCollectionChangeListener> = // OrderedRealmCollectionChangeListener() { realmResults: RealmResults, changeSet: OrderedCollectionChangeSet -> @@ -27,34 +30,62 @@ class PokerAnalyticsApplication: Application() { // // } - override fun onCreate() { - super.onCreate() + override fun onCreate() { + super.onCreate() - // Realm - Realm.init(this) - val realmConfiguration = RealmConfiguration.Builder() - .name(Realm.DEFAULT_REALM_NAME) - .deleteRealmIfMigrationNeeded() - .build() - Realm.setDefaultConfiguration(realmConfiguration) + // Realm + Realm.init(this) + val realmConfiguration = RealmConfiguration.Builder() + .name(Realm.DEFAULT_REALM_NAME) + .deleteRealmIfMigrationNeeded() + .build() + Realm.setDefaultConfiguration(realmConfiguration) - val realm: Realm = Realm.getDefaultInstance() - // Add observer on session time frame changes - this.sessions = realm.where(Session::class.java).findAll() // monitor session deletions - this.sessions?.addChangeListener { t, changeSet -> + val realm: Realm = Realm.getDefaultInstance() + // Add observer on session time frame changes + this.sessions = realm.where(Session::class.java).findAll() // monitor session deletions + this.sessions?.addChangeListener { t, changeSet -> + /* + val deletedSessions = + realm.where(Session::class.java).`in`("id", changeSet.deletions.toTypedArray()).findAll() + deletedSessions.forEach { it.cleanup() } + */ + } - val deletedSessions = realm.where(Session::class.java).`in`("id", changeSet.deletions.toTypedArray()).findAll() - deletedSessions.forEach { it.cleanup() } + if (BuildConfig.DEBUG) { + // Logs + Timber.plant(PokerAnalyticsLogs()) + } else { + //Fabric.with(this, Crashlytics()) + } - } + if (BuildConfig.DEBUG) { + createDefaultData() + } - if (BuildConfig.DEBUG) { - // Logs - Timber.plant(PokerAnalyticsLogs()) - } else { - //Fabric.with(this, Crashlytics()) - } + } - } + /** + * Create default data + */ + private fun createDefaultData() { + + val gamesName = resources.getStringArray(R.array.game_name) + val gamesShortName = resources.getStringArray(R.array.game_short_name) + + val realm = Realm.getDefaultInstance() + if (realm.where().findAll().isEmpty()) { + realm.executeTransaction { + for ((index, name) in gamesName.withIndex()) { + val game = Game() + game.id = UUID.randomUUID().toString() + game.name = name + game.shortName = gamesShortName[index] + realm.copyToRealmOrUpdate(game) + } + } + } + + } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt index d35a3755..48212554 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt @@ -6,6 +6,7 @@ import io.realm.RealmResults import io.realm.Sort import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.* +import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource import net.pokeranalytics.android.ui.view.Localizable /** @@ -63,6 +64,19 @@ enum class LiveData : Localizable { } } + fun deleteData(realm:Realm, data:LiveDataDataSource) { + realm.where(this.relatedEntity).equalTo("id", data.primaryKey).findAll().deleteAllFromRealm() + } + + fun updateOrCreate(realm:Realm, primaryKey:String?): RealmObject { + val proxyItem: RealmObject? = this.getData(realm, primaryKey) + proxyItem?.let { + return proxyItem + } ?: run { + return this.newEntity() + } + } + fun newEntity(): RealmObject { return when (this) { BANKROLL -> Bankroll() @@ -84,19 +98,6 @@ enum class LiveData : Localizable { return proxyItem } - fun updateOrCreate(realm: Realm, primaryKey: String?): RealmObject { - val proxyItem: RealmObject? = this.getData(realm, primaryKey) - proxyItem?.let { - return realm.copyFromRealm(it) - } ?: run { - return this.newEntity() -/* realm.beginTransaction() - val t = realm.createObject(this.relatedEntity, UUID.randomUUID().toString()) - realm.commitTransaction() - return realm.copyFromRealm(t)*/ - } - } - override val resId: Int? get() { return when (this) { 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 d33a9174..240ce6de 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 @@ -81,4 +81,8 @@ open class Bankroll(name: String = "") : RealmObject(), RowRepresentableDataSour SimpleRow.NAME -> this.name = value as String? ?: "" } } + + override fun isValidForSave(): Boolean { + return this.name.isNotEmpty() + } } \ 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 ed6a31a1..2171bfb4 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 @@ -59,9 +59,6 @@ open class Game : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, } override fun isValidForSave(): Boolean { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + return this.name.isNotEmpty() } - - - } 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 528ec9a4..e5d24908 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 @@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.model.ObjectSavable import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData import net.pokeranalytics.android.ui.view.RowEditable @@ -12,7 +13,7 @@ import net.pokeranalytics.android.ui.view.SimpleRow import java.util.* -open class Location : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable { +open class Location : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -57,4 +58,7 @@ open class Location : RealmObject(), RowRepresentableDataSource, LiveDataDataSou } } + override fun isValidForSave(): Boolean { + return this.name.isNotEmpty() + } } 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 39055af6..08b54500 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 @@ -143,8 +143,8 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource * TODO: Cascade delete? */ fun delete() { + cleanup() realm.executeTransaction { - cleanup() deleteFromRealm() } } @@ -188,7 +188,6 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource return gameTitle } - companion object { fun newInstance(): Session { var session: Session = Session() @@ -299,9 +298,10 @@ 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 -> {} + SessionRow.TABLE_SIZE -> {data.add(BottomSheetData(tableSize))} SessionRow.GAME -> { // Add current game & games list + data.add(BottomSheetData(limit)) data.add(BottomSheetData(game, data = LiveData.GAME.items(realm))) } SessionRow.LOCATION -> { @@ -351,13 +351,17 @@ open class Session : RealmObject(), SessionInterface, RowRepresentableDataSource } } //TODO: Update - SessionRow.START_DATE -> if (value is Date) { - val timeFrameToUpdate = if (timeFrame != null) timeFrame as TimeFrame else realm.createObject(TimeFrame::class.java) - timeFrameToUpdate.setDate(value, null) - timeFrame = timeFrameToUpdate + SessionRow.START_DATE -> if (value is Date?) { + if (value == null) { + timeFrame = null + } else { + 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) { + SessionRow.END_DATE -> if (value is Date?) { 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/model/realm/TimeFrame.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TimeFrame.kt index c41267b6..0fe3fa16 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TimeFrame.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TimeFrame.kt @@ -90,7 +90,7 @@ open class TimeFrame : RealmObject() { // Timber.d("this> sd = : ${this.startDate}, ed = ${this.endDate}") if (this.endDate == null) { - query.greaterThan("timeFrame.startDate", this.startDate.time).or().greaterThan("timeFrame.endDate", this.startDate.time) + query.greaterThan("timeFrame.startDate", this.startDate).or().greaterThan("timeFrame.endDate", this.startDate) } else { val endDate = this.endDate!! query 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 a92a3e76..b90c304b 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 @@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.model.ObjectSavable import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData import net.pokeranalytics.android.ui.view.RowEditable @@ -11,7 +12,7 @@ import net.pokeranalytics.android.ui.view.SimpleRow import net.pokeranalytics.android.ui.view.TournamentFeatureRow import java.util.* -open class TournamentFeature : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable { +open class TournamentFeature : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -50,4 +51,8 @@ open class TournamentFeature : RealmObject(), RowRepresentableDataSource, LiveDa SimpleRow.NAME -> this.name = value as String? ?: "" } } + + override fun isValidForSave(): Boolean { + return this.name.isNotEmpty() + } } \ 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 c38f3942..f569440e 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 @@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.model.ObjectSavable import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetData import net.pokeranalytics.android.ui.view.RowEditable @@ -12,7 +13,7 @@ import net.pokeranalytics.android.ui.view.TransactionTypeRow import java.util.* -open class TransactionType : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable { +open class TransactionType : RealmObject(), RowRepresentableDataSource, LiveDataDataSource, RowEditable, ObjectSavable { @PrimaryKey var id = UUID.randomUUID().toString() @@ -60,6 +61,9 @@ open class TransactionType : RealmObject(), RowRepresentableDataSource, LiveData } } + override fun isValidForSave(): Boolean { + return this.name.isNotEmpty() + } } enum class TransactionKind { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/LimitTypesAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/LimitTypesAdapter.kt new file mode 100644 index 00000000..81e5af9a --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/LimitTypesAdapter.kt @@ -0,0 +1,50 @@ +package net.pokeranalytics.android.ui.adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import kotlinx.android.synthetic.main.row_bottom_sheet_grid_title.view.* +import net.pokeranalytics.android.R + +class LimitTypesAdapter(private var tableSizes: ArrayList) : RecyclerView.Adapter() { + + companion object { + const val ROW_LIMIT: Int = 100 + } + + var onClickOnItem: ((position: Int) -> Unit)? = null + + inner class CellSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + + fun bind(tableSize: String) { + itemView.title.text = tableSize + itemView.container.setOnClickListener { + onClickOnItem?.invoke(adapterPosition) + } + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + when (viewType) { + ROW_LIMIT -> return CellSessionViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_bottom_sheet_title, parent, false)) + else -> throw IllegalStateException("Need to implement type $viewType in HistoryAdapter") + } + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (getItemViewType(position)) { + ROW_LIMIT -> (holder as LimitTypesAdapter.CellSessionViewHolder).bind(tableSizes[position]) + } + } + + override fun getItemCount(): Int { + return tableSizes.size + } + + override fun getItemViewType(position: Int): Int { + return ROW_LIMIT + } + + +} \ 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 97bc80e7..62e25c8f 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 @@ -21,6 +21,7 @@ import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheet import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment import net.pokeranalytics.android.ui.view.RowEditable import net.pokeranalytics.android.ui.view.RowRepresentable +import timber.log.Timber class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate { @@ -55,7 +56,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, rowRepresentableAdapter.refreshRow(row) } - override fun setValue(value: Any, row: RowRepresentable) { + override fun setValue(value: Any?, row: RowRepresentable) { (this.item as RowEditable).updateValue(value, row) this.getRealm().executeTransaction { it.copyToRealmOrUpdate(this.item) @@ -93,7 +94,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, } } else { val builder = AlertDialog.Builder(it.context) - builder.setTitle(R.string.warning) + .setMessage(R.string.empty_name_for_br_error) .setNegativeButton(R.string.ok, null) builder.show() } @@ -106,8 +107,16 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, .setMessage(R.string.are_you_sure_you_want_to_do_that_) .setNeutralButton(R.string.no, null) .setNegativeButton(R.string.yes, DialogInterface.OnClickListener { dialog, id -> - this.getRealm().executeTransaction { - this.item.deleteFromRealm() + + if (this.item.isManaged) { + Toast.makeText(requireContext(), "isManaged", Toast.LENGTH_SHORT).show() + Timber.d("is managed") + this.getRealm().executeTransaction { + this.liveDataType.deleteData(it, (this.item as LiveDataDataSource)) + } + } else { + Toast.makeText(requireContext(), "isNotManaged", Toast.LENGTH_SHORT).show() + Timber.d("is not managed") } this.activity?.let { it.finish() 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 a71988a4..9c3a73bb 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 @@ -91,11 +91,17 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott override fun clickOnClear(row: RowRepresentable) { currentSession.updateValue(null, row) sessionAdapter.refreshRow(row) + when(row) { + SessionRow.START_DATE, SessionRow.END_DATE -> updateSessionUI() + } } - override fun setValue(value: Any, row: RowRepresentable) { + override fun setValue(value: Any?, row: RowRepresentable) { currentSession.updateValue(value, row) sessionAdapter.refreshRow(row) + when(row) { + SessionRow.START_DATE, SessionRow.END_DATE -> updateSessionUI() + } } /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt index 13f12ff3..066693d8 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt @@ -26,7 +26,7 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() { editText1.requestFocus() } - override fun getValue(): Any { + override fun getValue(): Any? { return values } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleListFragment.kt deleted file mode 100644 index 672817f2..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleListFragment.kt +++ /dev/null @@ -1,62 +0,0 @@ -package net.pokeranalytics.android.ui.fragment.components.bottomsheet - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import androidx.recyclerview.widget.LinearLayoutManager -import kotlinx.android.synthetic.main.bottom_sheet_double_list.* -import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* -import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.realm.Game -import net.pokeranalytics.android.ui.adapter.components.LiveDataAdapter -import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource -import net.pokeranalytics.android.ui.adapter.components.LiveDataDelegate - - -class BottomSheetDoubleListFragment : BottomSheetFragment(), LiveDataDelegate { - - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - initData() - initUI() - } - - override fun data(position: Int): LiveDataDataSource { - //TODO: Change that - return Game() - } - - override fun onRowSelected(position: Int) { - } - - override fun size(): Int { - return 1 - } - - /** - * Init data - */ - private fun initData() { - val data = getData() - //game = if (data is Game) data else Game() - //game.title = "Test" - } - - /** - * Init UI - */ - private fun initUI() { - LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_double_list, view?.bottomSheetContainer, true) - - val viewManager = LinearLayoutManager(requireContext()) - val dataAdapter = LiveDataAdapter(this, R.layout.row_bottom_sheet_title) - - reyclerView1.apply { - setHasFixedSize(true) - layoutManager = viewManager - adapter = dataAdapter - } - } - -} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt index 0420957c..b9fdb024 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt @@ -26,7 +26,7 @@ class BottomSheetEditTextFragment : BottomSheetFragment() { editText1.requestFocus() } - override fun getValue(): Any { + override fun getValue(): Any? { return value } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt index bf079696..518a7b69 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt @@ -14,6 +14,7 @@ import net.pokeranalytics.android.ui.view.RowRepresentable enum class BottomSheetType { NONE, LIST, + LIST_GAME, DOUBLE_LIST, GRID, EDIT_TEXT, @@ -24,7 +25,7 @@ enum class BottomSheetType { interface BottomSheetDelegate { fun clickOnAdd(row: RowRepresentable) fun clickOnClear(row: RowRepresentable) - fun setValue(value: Any, row: RowRepresentable) + fun setValue(value: Any?, row: RowRepresentable) } @@ -37,16 +38,17 @@ open class BottomSheetFragment : BottomSheetDialogFragment() { companion object { fun create( - fragmentManager: FragmentManager?, - row: RowRepresentable, - bottomSheetDelegate: BottomSheetDelegate, - data: ArrayList + fragmentManager: FragmentManager?, + row: RowRepresentable, + bottomSheetDelegate: BottomSheetDelegate, + data: ArrayList ): BottomSheetFragment { val bottomSheetFragment = when (row.bottomSheetType) { BottomSheetType.LIST -> BottomSheetListFragment() + BottomSheetType.LIST_GAME -> BottomSheetListGameFragment() BottomSheetType.GRID -> BottomSheetTableSizeGridFragment() - BottomSheetType.DOUBLE_LIST -> BottomSheetDoubleListFragment() + BottomSheetType.DOUBLE_LIST -> BottomSheetListGameFragment() BottomSheetType.EDIT_TEXT -> BottomSheetEditTextFragment() BottomSheetType.DOUBLE_EDIT_TEXT -> BottomSheetDoubleEditTextFragment() BottomSheetType.SUM -> BottomSheetSumFragment() @@ -62,7 +64,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment() { } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_bottom_sheet,container,false) + return inflater.inflate(R.layout.fragment_bottom_sheet, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -114,8 +116,8 @@ open class BottomSheetFragment : BottomSheetDialogFragment() { return data } - open fun getValue(): Any { - return Any() + open fun getValue(): Any? { + return null } /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt index ac569e71..7f083f62 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListFragment.kt @@ -55,7 +55,6 @@ class BottomSheetListFragment : BottomSheetFragment(), LiveDataDelegate { * Init data */ private fun initData() { - val bottomSheetData = getData() if (bottomSheetData.isNotEmpty() && bottomSheetData.first().data != null) { this.realmData = bottomSheetData.first().data as RealmResults<*> diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt new file mode 100644 index 00000000..08fcce2d --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetListGameFragment.kt @@ -0,0 +1,103 @@ +package net.pokeranalytics.android.ui.fragment.components.bottomsheet + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import androidx.recyclerview.widget.LinearLayoutManager +import io.realm.RealmResults +import kotlinx.android.synthetic.main.bottom_sheet_game_list.* +import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.realm.Game +import net.pokeranalytics.android.ui.adapter.LimitTypesAdapter +import net.pokeranalytics.android.ui.adapter.components.LiveDataAdapter +import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource +import net.pokeranalytics.android.ui.adapter.components.LiveDataDelegate +import timber.log.Timber + + +class BottomSheetListGameFragment : BottomSheetFragment(), LiveDataDelegate { + + private var realmData: RealmResults<*>? = null + private lateinit var dataAdapter: LiveDataAdapter + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } + + override fun onResume() { + super.onResume() + dataAdapter.notifyDataSetChanged() + } + + override fun data(position: Int): LiveDataDataSource { + realmData?.let { + return it[position] as LiveDataDataSource + } + //TODO: Change that + return Game() + } + + override fun onRowSelected(position: Int) { + realmData?.let { + val selectedData = it[position] + selectedData?.let {data -> + bottomSheetDelegate.setValue(data, row) + dismiss() + } + } + } + + override fun size(): Int { + + Timber.d("Games: ${realmData?.size}") + + return realmData?.size ?: 0 + } + + /** + * Init data + */ + private fun initData() { + val bottomSheetData = getData() + if (bottomSheetData.isNotEmpty() && bottomSheetData.size >= 2 && bottomSheetData[1].data != null) { + this.realmData = bottomSheetData[1].data as RealmResults<*> + } + } + + /** + * Init UI + */ + private fun initUI() { + + LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_game_list, view?.bottomSheetContainer, true) + + val limits = ArrayList() + limits.addAll(resources.getStringArray(R.array.limit_short_name)) + + + val viewManager1 = LinearLayoutManager(requireContext()) + val gameDataAdapter1 = LimitTypesAdapter(limits) + + recyclerView1.apply { + setHasFixedSize(true) + layoutManager = viewManager1 + adapter = gameDataAdapter1 + isNestedScrollingEnabled = false + } + + + val viewManager2 = LinearLayoutManager(requireContext()) + dataAdapter = LiveDataAdapter(this, R.layout.row_bottom_sheet_title) + + recyclerView2.apply { + setHasFixedSize(true) + layoutManager = viewManager2 + adapter = dataAdapter + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt index a4ed4188..b1e5ca3e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt @@ -28,7 +28,7 @@ class BottomSheetSumFragment : BottomSheetFragment() { editText1.requestFocus() } - override fun getValue(): Any { + override fun getValue(): Any? { return value } 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 33b6c63e..868d17e7 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 @@ -15,6 +15,7 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment() { private var dataList: ArrayList = ArrayList() private lateinit var dataAdapter: TableSizeGridAdapter + private var defaultSize: Int? = null override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -27,11 +28,20 @@ class BottomSheetTableSizeGridFragment : BottomSheetFragment() { dataAdapter.notifyDataSetChanged() } + override fun getValue(): Any? { + return defaultSize + } + /** * Init data */ private fun initData() { + val bottomSheetData = getData() + if (bottomSheetData.isNotEmpty() && bottomSheetData.first().defaultValue != null) { + defaultSize = bottomSheetData.first().defaultValue as Int? + } + dataList.add(getString(net.pokeranalytics.android.R.string.heads_up)) for (i in 3..10) { dataList.add("$i-max") 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 0858657e..e8f11af6 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 @@ -149,7 +149,8 @@ enum class SessionRow : RowRepresentable { CASHED_OUT, BREAK_TIME -> BottomSheetType.EDIT_TEXT BUY_IN, TIPS -> BottomSheetType.SUM BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT - GAME, LOCATION, BANKROLL -> BottomSheetType.LIST + GAME -> BottomSheetType.LIST_GAME + LOCATION, BANKROLL -> BottomSheetType.LIST TABLE_SIZE -> BottomSheetType.GRID COMMENT -> BottomSheetType.EDIT_TEXT else -> BottomSheetType.NONE diff --git a/app/src/main/res/layout/bottom_sheet_double_list.xml b/app/src/main/res/layout/bottom_sheet_double_list.xml deleted file mode 100644 index 53c8e506..00000000 --- a/app/src/main/res/layout/bottom_sheet_double_list.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_game_list.xml b/app/src/main/res/layout/bottom_sheet_game_list.xml new file mode 100644 index 00000000..7f658f14 --- /dev/null +++ b/app/src/main/res/layout/bottom_sheet_game_list.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/array_blind.xml b/app/src/main/res/values/array_blind.xml new file mode 100644 index 00000000..ec11808d --- /dev/null +++ b/app/src/main/res/values/array_blind.xml @@ -0,0 +1,44 @@ + + + + 2 + 4 + 6 + 10 + 20 + 40 + 50 + 60 + 80 + 100 + 150 + 200 + 250 + 300 + 400 + 500 + 600 + 800 + 1000 + 1200 + 1600 + 2000 + 2500 + 3000 + 4000 + 5000 + 6000 + 8000 + 10000 + 12000 + 15000 + 20000 + 25000 + 30000 + 40000 + 50000 + 60000 + 80000 + 100000 + + \ No newline at end of file diff --git a/app/src/main/res/values/array_limit.xml b/app/src/main/res/values/array_limit.xml new file mode 100644 index 00000000..096fef29 --- /dev/null +++ b/app/src/main/res/values/array_limit.xml @@ -0,0 +1,17 @@ + + + + No Limit + Pot Limit + Fixed Limit + Spread Limit + Mixed Limit + + + NL + PL + FL + SL + ML + + \ No newline at end of file diff --git a/app/src/main/res/values/array_variant.xml b/app/src/main/res/values/array_variant.xml new file mode 100644 index 00000000..3f6dd1b0 --- /dev/null +++ b/app/src/main/res/values/array_variant.xml @@ -0,0 +1,21 @@ + + + + Hold\'em + Omaha + Omaha Hi-Low + Seven Card Stud + Seven Card Stud Hi-Low + H.O.R.S.E. + Seven Card Razz + + + HE + OH + OH8 + 7S + Stud8 + HORSE + Razz + + \ 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 bb83197b..12798b39 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -18,7 +18,6 @@ Standard deviation hourly Hands played - Save