diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1b0bb87e..29d1e601 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,7 +9,7 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:name=".PokerAnalyticsApplication" - android:theme="@style/AppTheme"> + android:theme="@style/PokerAnalyticsTheme"> - + + + + + \ No newline at end of file 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 86ccd723..46ac57e8 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,12 +1,17 @@ package net.pokeranalytics.android.model.realm +import android.content.Context import io.realm.RealmList import io.realm.RealmObject import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.ui.adapter.components.DisplayableData +import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface +import net.pokeranalytics.android.ui.adapter.components.RowViewType +import net.pokeranalytics.android.ui.fragment.components.BottomSheetType import java.util.* -open class Bankroll(name: String = "") : RealmObject() { +open class Bankroll(name: String = "") : RealmObject(), DisplayableData { @PrimaryKey var id = UUID.randomUUID().toString() @@ -24,4 +29,6 @@ open class Bankroll(name: String = "") : RealmObject() { var currency: Currency? = null // @todo rate management + + override var title: String = this.name } \ No newline at end of file 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 db1d1505..bb10b2f8 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 @@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm import io.realm.* import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.ui.adapter.components.DisplayableData import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface import net.pokeranalytics.android.ui.adapter.components.SessionRow @@ -11,7 +12,7 @@ import java.util.* import kotlin.collections.ArrayList -open class Session(comment: String = "") : RealmObject(), DynamicRowDelegate { +open class Session(comment: String = "") : RealmObject(), DynamicRowDelegate, DisplayableData { @PrimaryKey var id = UUID.randomUUID().toString() @@ -139,6 +140,8 @@ open class Session(comment: String = "") : RealmObject(), DynamicRowDelegate { else -> "--" } } + + override var title: String = "Change that: $creationDate" } enum class TournamentKind { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt new file mode 100644 index 00000000..e41805f7 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt @@ -0,0 +1,52 @@ +package net.pokeranalytics.android.ui.activity + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import io.realm.Realm +import io.realm.kotlin.where +import kotlinx.android.synthetic.main.activity_data_list.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.ui.fragment.DataListFragment +import net.pokeranalytics.android.util.PokerAnalyticsActivity +import net.pokeranalytics.android.util.data.sessionDao +import java.util.* + +class DataListActivity : PokerAnalyticsActivity() { + + companion object { + fun newInstance(context: Context, dataType: Int) { + val intent = Intent(context, DataListActivity::class.java) + intent.putExtra("dataType", dataType) + context.startActivity(intent) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_data_list) + + initUI() + } + + /** + * Init UI + */ + private fun initUI() { + + val dataType = intent.getIntExtra("dataType", 0) + val fragment = dataListFragment as DataListFragment + fragment.setData(dataType) + } + + /** + * Init data + */ + private fun initData() { + + + + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/DataManagementActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/DataManagementActivity.kt deleted file mode 100644 index ce23a658..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/DataManagementActivity.kt +++ /dev/null @@ -1,46 +0,0 @@ -package net.pokeranalytics.android.ui.activity - -import android.content.Context -import android.content.Intent -import android.os.Bundle -import net.pokeranalytics.android.R -import net.pokeranalytics.android.util.PokerAnalyticsActivity - -class DataManagementActivity: PokerAnalyticsActivity() { - - companion object { - fun newInstance(context: Context, dataType: Int) { - val intent = Intent(context, DataManagementActivity::class.java) - intent.putExtra("dataType", dataType) - context.startActivity(intent) - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) -// setContentView(R.layout.activity_data_management) - - initUI() - } - - /** - * Init UI - */ - private fun initUI() { - - val isTournament = intent.getIntExtra("dataType", 0) -// val fragment = newSessionFragment as NewSessionFragment -// fragment.setData(isTournament) - - } - - /** - * Init data - */ - private fun initData() { - - - - } - -} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt new file mode 100644 index 00000000..37b35ca5 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DataListAdapter.kt @@ -0,0 +1,51 @@ +package net.pokeranalytics.android.ui.adapter.components + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import kotlinx.android.synthetic.main.row_session.view.* +import net.pokeranalytics.android.R + +interface DataRowDelegate { + fun data(position: Int) : DisplayableData + fun size() : Int +} + +interface DataRowCallback { + fun onRowSelected(position: Int) +} + +interface DisplayableData { + var title: String +} + +class DataListAdapter(var delegate: DataRowDelegate, var callBackDelegate: DataRowCallback? = null) : RecyclerView.Adapter() { + + inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + fun bind(row: DisplayableData, listener: View.OnClickListener) { + itemView.title.text = row.title + itemView.container.setOnClickListener(listener) + } + } + + override fun getItemViewType(position: Int): Int { + return RowViewType.TITLE.ordinal + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + return DataViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_title, parent, false)) + } + + override fun getItemCount(): Int { + return delegate.size() + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + val listener = View.OnClickListener { + callBackDelegate?.onRowSelected(position) + } + (holder as DataViewHolder).bind(this.delegate.data(position), listener) + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicListAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicListAdapter.kt index 4b047693..83778819 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicListAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicListAdapter.kt @@ -2,9 +2,7 @@ package net.pokeranalytics.android.ui.adapter.components import android.view.View import android.view.ViewGroup -import android.widget.Toast import androidx.recyclerview.widget.RecyclerView -import io.realm.Realm.init interface EditableDataDelegate { fun setValue(value: Any, row: DynamicRowInterface) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt index 138681c6..4d114ce5 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt @@ -62,7 +62,7 @@ enum class BankrollRow(val resId: Int) : DynamicRowInterface { override var bottomSheetType: BottomSheetType = BottomSheetType.NONE } -enum class BusinessObjectRowType(val resId: Int) : DynamicRowInterface { +enum class DataObjectRowType(val resId: Int) : DynamicRowInterface { BANKROLL(R.string.bankroll), GAME(R.string.game), LOCATION(R.string.location), diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt index 6a2b3640..f5ac0bd2 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt @@ -10,7 +10,7 @@ import net.pokeranalytics.android.R interface DynamicHolder { - fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate, listener: View.OnClickListener) + fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate? = null, listener: View.OnClickListener) } @@ -21,20 +21,22 @@ enum class RowViewType { TITLE_VALUE; inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { - override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate, listener: View.OnClickListener) { + override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate?, listener: View.OnClickListener) { } } inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { - override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate, listener: View.OnClickListener) { + override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate?, listener: View.OnClickListener) { itemView.title.text = row.localizedTitle(itemView.context) - itemView.value.text = delegate.stringForRow(row) + delegate?.let { + itemView.value.text = it.stringForRow(row) + } itemView.container.setOnClickListener(listener) } } inner class TitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { - override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate, listener: View.OnClickListener) { + override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate?, listener: View.OnClickListener) { itemView.title.text = row.localizedTitle(itemView.context) itemView.container.setOnClickListener(listener) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BottomSheetFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BottomSheetFragment.kt deleted file mode 100644 index b306cdfd..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BottomSheetFragment.kt +++ /dev/null @@ -1,157 +0,0 @@ -package net.pokeranalytics.android.ui.fragment - -import android.app.DatePickerDialog -import android.os.Bundle -import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import android.content.DialogInterface -import android.view.* -import androidx.constraintlayout.widget.ConstraintLayout -import kotlinx.android.synthetic.main.bottom_sheet_blinds.* -import kotlinx.android.synthetic.main.bottom_sheet_date.* -import kotlinx.android.synthetic.main.fragment_bottom_sheet.* -import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface -import net.pokeranalytics.android.ui.adapter.components.EditableDataDelegate -import net.pokeranalytics.android.ui.fragment.components.BottomSheetType -import timber.log.Timber -import android.widget.DatePicker -import net.pokeranalytics.android.util.DatePickerFragment -import net.pokeranalytics.android.util.TimePickerFragment -import java.util.* - - -class BottomSheetFragment : BottomSheetDialogFragment() { - - private var row: DynamicRowInterface? = null - private var valueDelegate: EditableDataDelegate? = null - - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - - val view = inflater.inflate( - net.pokeranalytics.android.R.layout.fragment_bottom_sheet, - container, - false - ) as ConstraintLayout - - row?.let { - when (it.bottomSheetType) { - BottomSheetType.BANKROLL -> inflater.inflate( - net.pokeranalytics.android.R.layout.bottom_sheet_bankroll, - view.bottomSheetContainer, - true - ) - BottomSheetType.BLINDS -> inflater.inflate( - net.pokeranalytics.android.R.layout.bottom_sheet_blinds, - view.bottomSheetContainer, - true - ) - BottomSheetType.DATE -> inflater.inflate( - net.pokeranalytics.android.R.layout.bottom_sheet_date, - view.bottomSheetContainer, - true - ) - BottomSheetType.GAME -> inflater.inflate( - net.pokeranalytics.android.R.layout.bottom_sheet_game, - view.bottomSheetContainer, - true - ) - BottomSheetType.LOCATION -> inflater.inflate( - net.pokeranalytics.android.R.layout.bottom_sheet_location, - view.bottomSheetContainer, - true - ) - BottomSheetType.TABLE_SIZE -> inflater.inflate( - net.pokeranalytics.android.R.layout.bottom_sheet_table_size, - view.bottomSheetContainer, - true - ) - else -> { - } - } - } - - return view - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - initUI() - } - - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) - // To display correctly the keyboard - dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) - } - - override fun onStart() { - super.onStart() - - // Open the keyboard - row?.let { - when (it.bottomSheetType) { - BottomSheetType.BLINDS -> { - smallBlind.requestFocus() - } - else -> { - } - } - } - } - - override fun onDismiss(dialog: DialogInterface?) { - super.onDismiss(dialog) - - // Return the value - row?.let { - valueDelegate?.setValue("Test", it) - } - } - - /** - * Init UI - */ - private fun initUI() { - - row?.let { - //bottomSheetToolbar.title = row?.localizedTitle(requireContext()) - bottomSheetToolbar.inflateMenu(net.pokeranalytics.android.R.menu.bottom_sheet_menu) - bottomSheetToolbar.setOnMenuItemClickListener { - false - } - } - - row?.let { - when (it.bottomSheetType) { - BottomSheetType.DATE -> initDateUI() - else -> {} - } - } - } - - /** - * Init date UI - */ - private fun initDateUI() { - - startDate.setOnClickListener { - val dateFragment = DatePickerFragment() - dateFragment.show(fragmentManager, "datePicker") - } - - endDate.setOnClickListener { - val timeFragment = TimePickerFragment() - timeFragment.show(fragmentManager, "timePicker") - } - - } - - /** - * Init - */ - fun init(row: DynamicRowInterface, valueDelegate: EditableDataDelegate) { - this.row = row - this.valueDelegate = valueDelegate - } - -} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt new file mode 100644 index 00000000..40fd66ed --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt @@ -0,0 +1,79 @@ +package net.pokeranalytics.android.ui.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.LinearLayoutManager +import io.realm.Realm +import io.realm.RealmObject +import io.realm.Sort +import kotlinx.android.synthetic.main.fragment_new_session.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.realm.* +import net.pokeranalytics.android.ui.adapter.components.* +import net.pokeranalytics.android.util.PokerAnalyticsFragment + +class DataListFragment : PokerAnalyticsFragment(), DataRowDelegate, DataRowCallback { + + private lateinit var dataType: DataObjectRowType + + private lateinit var realmObjects: ArrayList + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_data_list, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } + + override fun data(position: Int): DisplayableData { + return (realmObjects[position] as DisplayableData) + } + + override fun onRowSelected(position: Int) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun size(): Int { + return realmObjects.size + } + + private fun initData() { + } + + /** + * Init UI + */ + private fun initUI() { + + val viewManager = LinearLayoutManager(requireContext()) + val dataListAdapter = DataListAdapter(this, this) + + recyclerView.apply { + setHasFixedSize(true) + layoutManager = viewManager + adapter = dataListAdapter + } + } + + + /** + * Set fragment data + */ + fun setData(dataType: Int) { + this.dataType = DataObjectRowType.values()[dataType] + val realm = Realm.getDefaultInstance() + + realmObjects = ArrayList( when (DataObjectRowType.values()[dataType]) { + DataObjectRowType.BANKROLL -> realm.where(Bankroll::class.java).findAll().sort("name", Sort.DESCENDING) + DataObjectRowType.GAME-> realm.where(Game::class.java).findAll().sort("name", Sort.DESCENDING) + DataObjectRowType.LOCATION -> realm.where(Location::class.java).findAll().sort("name", Sort.DESCENDING) + DataObjectRowType.TOURNAMENT_TYPE -> realm.where(TournamentFeature::class.java).findAll().sort("name", Sort.DESCENDING) + DataObjectRowType.TRANSACTION_TYPE -> realm.where(TransactionType::class.java).findAll().sort("name", Sort.DESCENDING) + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt index 2daa7e57..845b1835 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt @@ -5,20 +5,16 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast -import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.fragment_new_session.* -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.adapter.NewSessionAdapter import net.pokeranalytics.android.ui.adapter.components.DynamicListAdapter import net.pokeranalytics.android.ui.adapter.components.DynamicRowCallback import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface import net.pokeranalytics.android.ui.adapter.components.EditableDataDelegate +import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment +import net.pokeranalytics.android.ui.fragment.components.BottomSheetType import net.pokeranalytics.android.util.PokerAnalyticsFragment class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, EditableDataDelegate { @@ -36,8 +32,15 @@ class NewSessionFragment : PokerAnalyticsFragment(), DynamicRowCallback, Editabl } override fun onRowSelected(row: DynamicRowInterface) { - val bottomSheetFragment = openBottomSheet() - bottomSheetFragment.init(row, this) + + val data = when (row.bottomSheetType) { + BottomSheetType.BLINDS -> newSession + BottomSheetType.DATE -> newSession.timeFrame + BottomSheetType.GAME -> newSession.game + else -> Any() + } + + BottomSheetFragment.create(fragmentManager, row, this, data) } override fun setValue(value: Any, row: DynamicRowInterface) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt index e6ee295c..5b78f727 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt @@ -8,6 +8,8 @@ import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.fragment_settings.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.activity.DataListActivity +import net.pokeranalytics.android.ui.activity.NewSessionActivity import net.pokeranalytics.android.ui.adapter.components.* import net.pokeranalytics.android.util.PokerAnalyticsFragment @@ -40,12 +42,12 @@ class SettingsFragment : PokerAnalyticsFragment(), DynamicRowDelegate, DynamicRo override fun adapterRows(): ArrayList { val rows = ArrayList() - rows.addAll(BusinessObjectRowType.values()) + rows.addAll(DataObjectRowType.values()) return rows } override fun onRowSelected(row: DynamicRowInterface) { - //val bottomSheetFragment = openBottomSheet(row) + DataListActivity.newInstance(requireContext(), (row as DataObjectRowType).ordinal) } /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetBlindsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetBlindsFragment.kt new file mode 100644 index 00000000..6eaf122d --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetBlindsFragment.kt @@ -0,0 +1,57 @@ +package net.pokeranalytics.android.ui.fragment.components + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.inputmethod.EditorInfo +import kotlinx.android.synthetic.main.bottom_sheet_blinds.* +import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.realm.Session + +class BottomSheetBlindsFragment : BottomSheetFragment() { + + private var session: Session = Session() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } + + override fun clickOnCheck() { + super.clickOnCheck() + valueDelegate.setValue(session, row) + dismiss() + } + + override fun onStart() { + super.onStart() + smallBlind.requestFocus() + } + + /** + * Init data + */ + private fun initData() { + val data = getData() + session = if (data is Session) data else Session() + } + + /** + * Init UI + */ + private fun initUI() { + + LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_blinds, view?.bottomSheetContainer, true) + + bigBlind.setOnEditorActionListener { v, actionId, event -> + if (actionId == EditorInfo.IME_ACTION_DONE) { + clickOnCheck() + } + true + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDateFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDateFragment.kt new file mode 100644 index 00000000..377da2c8 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDateFragment.kt @@ -0,0 +1,61 @@ +package net.pokeranalytics.android.ui.fragment.components + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import kotlinx.android.synthetic.main.bottom_sheet_date.* +import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.realm.TimeFrame +import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment +import net.pokeranalytics.android.util.DatePickerFragment +import net.pokeranalytics.android.util.TimePickerFragment + +class BottomSheetDateFragment : BottomSheetFragment() { + + private var timeFrame: TimeFrame = TimeFrame() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } + + override fun clickOnCheck() { + super.clickOnCheck() + valueDelegate.setValue(timeFrame, row) + dismiss() + } + + /** + * Init data + */ + private fun initData() { + val data = getData() + timeFrame = if (data is TimeFrame) data else TimeFrame() + } + + /** + * Init UI + */ + private fun initUI() { + + LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_date, view?.bottomSheetContainer, true) + + setAddButtonVisible(false) + + startDate.setOnClickListener { + val dateFragment = DatePickerFragment() + dateFragment.show(fragmentManager, "datePicker") + } + + endDate.setOnClickListener { + val timeFragment = TimePickerFragment() + timeFragment.show(fragmentManager, "timePicker") + } + + //data.startDate = Date() + //data.endDate = Date() + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt new file mode 100644 index 00000000..2604736d --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt @@ -0,0 +1,143 @@ +package net.pokeranalytics.android.ui.fragment.components + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.fragment.app.FragmentManager +import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import kotlinx.android.synthetic.main.fragment_bottom_sheet.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface +import net.pokeranalytics.android.ui.adapter.components.EditableDataDelegate + +enum class BottomSheetType { + NONE, + GAME, + BLINDS, + LOCATION, + BANKROLL, + TABLE_SIZE, + DATE +} + +interface BottomSheetInterface { + fun clickOnClear() + fun clickOnCheck() + fun clickOnAdd() +} + +open class BottomSheetFragment : BottomSheetDialogFragment(), BottomSheetInterface { + + lateinit var row: DynamicRowInterface + lateinit var valueDelegate: EditableDataDelegate + + private var data: Any? = null + + companion object { + fun create( fragmentManager: FragmentManager?, row: DynamicRowInterface, valueDelegate: EditableDataDelegate, data: Any?): BottomSheetFragment { + + val bottomSheetFragment = when (row.bottomSheetType) { + BottomSheetType.BLINDS -> BottomSheetBlindsFragment() + BottomSheetType.DATE -> BottomSheetDateFragment() + BottomSheetType.GAME -> BottomSheetGameFragment() + else -> BottomSheetFragment() + } + + bottomSheetFragment.show(fragmentManager, "bottomSheet") + bottomSheetFragment.row = row + bottomSheetFragment.valueDelegate = valueDelegate + bottomSheetFragment.data = data + return bottomSheetFragment + } + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val view = inflater.inflate( + net.pokeranalytics.android.R.layout.fragment_bottom_sheet, + container, + false + ) as ConstraintLayout + + return view + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initUI() + } + + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + + // To display correctly the keyboard + dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) + } + + override fun clickOnClear() { + } + + override fun clickOnCheck() { + } + + override fun clickOnAdd() { + } + + /** + * Init UI + */ + private fun initUI() { + row.let { + bottomSheetToolbar.title = row.localizedTitle(requireContext()) + bottomSheetToolbar.inflateMenu(net.pokeranalytics.android.R.menu.bottom_sheet_menu) + bottomSheetToolbar.setOnMenuItemClickListener { + false + } + } + + // Menu + bottomSheetToolbar.menu.findItem(R.id.actionClear).setOnMenuItemClickListener { + clickOnClear() + true + } + bottomSheetToolbar.menu.findItem(R.id.actionAdd).setOnMenuItemClickListener { + clickOnAdd() + true + } + bottomSheetToolbar.menu.findItem(R.id.actionCheck).setOnMenuItemClickListener { + clickOnCheck() + true + } + } + + /** + * Return the data object + */ + fun getData() : Any? { + return data + } + + /** + * Set clear button visibility + */ + fun setClearButtonVisibile(visible: Boolean) { + bottomSheetToolbar.menu.findItem(R.id.actionClear).isVisible = visible + } + + /** + * Set check button visibility + */ + fun setCheckButtonVisibile(visible: Boolean) { + bottomSheetToolbar.menu.findItem(R.id.actionCheck).isVisible = visible + } + + /** + * Set add button visibility + */ + fun setAddButtonVisible(visible: Boolean) { + bottomSheetToolbar.menu.findItem(R.id.actionAdd).isVisible = visible + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetGameFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetGameFragment.kt new file mode 100644 index 00000000..f6cdec3c --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetGameFragment.kt @@ -0,0 +1,77 @@ +package net.pokeranalytics.android.ui.fragment.components + +import android.content.Context +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import androidx.recyclerview.widget.LinearLayoutManager +import kotlinx.android.synthetic.main.bottom_sheet_game.* +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.DynamicListAdapter +import net.pokeranalytics.android.ui.adapter.components.DynamicRowDelegate +import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface + + + +class BottomSheetGameFragment : BottomSheetFragment(), DynamicRowDelegate { + + private var game: Game = Game() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } + + override fun clickOnCheck() { + super.clickOnCheck() + valueDelegate.setValue(game, row) + dismiss() + } + + override fun adapterRows(): ArrayList { + val array = ArrayList() + array.add(TitleObject("Game 1")) + array.add(TitleObject("Game 2")) + array.add(TitleObject("Game 3")) + return array + } + + /** + * Init data + */ + private fun initData() { + val data = getData() + game = if (data is Game) data else Game() + } + + /** + * Init UI + */ + private fun initUI() { + LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_game, view?.bottomSheetContainer, true) + + val viewManager = LinearLayoutManager(requireContext()) + val dataAdapter = DynamicListAdapter(this) + + gameNameRecyclerView.apply { + setHasFixedSize(true) + layoutManager = viewManager + //adapter = dataAdapter + } + + } + + + inner class TitleObject(var title: String) : DynamicRowInterface { + override fun localizedTitle(context: Context): String { + return title + } + + override var viewType: Int = 0 + override var bottomSheetType: BottomSheetType = BottomSheetType.NONE + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetType.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetType.kt deleted file mode 100644 index 61127db5..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetType.kt +++ /dev/null @@ -1,13 +0,0 @@ -package net.pokeranalytics.android.ui.fragment.components - -enum class BottomSheetType { - - NONE, - GAME, - BLINDS, - LOCATION, - BANKROLL, - TABLE_SIZE, - DATE - -} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/util/PokerAnalyticsFragment.kt b/app/src/main/java/net/pokeranalytics/android/util/PokerAnalyticsFragment.kt index 754429c3..ac67fe13 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/PokerAnalyticsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/PokerAnalyticsFragment.kt @@ -3,8 +3,6 @@ package net.pokeranalytics.android.util import android.os.Bundle import androidx.fragment.app.Fragment import io.realm.Realm -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface -import net.pokeranalytics.android.ui.fragment.BottomSheetFragment open class PokerAnalyticsFragment: Fragment() { @@ -24,13 +22,4 @@ open class PokerAnalyticsFragment: Fragment() { return pokerAnalyticsActivity.getRealm() } - /** - * Open the bottom sheet - */ - fun openBottomSheet(): BottomSheetFragment { - val bottomSheetFragment = BottomSheetFragment() - bottomSheetFragment.show(fragmentManager, "bottomSheet") - return bottomSheetFragment - } - } \ No newline at end of file diff --git a/app/src/main/res/font/roboto.xml b/app/src/main/res/font/roboto.xml new file mode 100644 index 00000000..2641caff --- /dev/null +++ b/app/src/main/res/font/roboto.xml @@ -0,0 +1,7 @@ + + + diff --git a/app/src/main/res/font/roboto_bold.xml b/app/src/main/res/font/roboto_bold.xml new file mode 100644 index 00000000..1e8c20a1 --- /dev/null +++ b/app/src/main/res/font/roboto_bold.xml @@ -0,0 +1,7 @@ + + + diff --git a/app/src/main/res/font/roboto_light.xml b/app/src/main/res/font/roboto_light.xml new file mode 100644 index 00000000..28fbc0d7 --- /dev/null +++ b/app/src/main/res/font/roboto_light.xml @@ -0,0 +1,7 @@ + + + diff --git a/app/src/main/res/layout/activity_data_list.xml b/app/src/main/res/layout/activity_data_list.xml new file mode 100644 index 00000000..2911b5ae --- /dev/null +++ b/app/src/main/res/layout/activity_data_list.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_data_list.xml b/app/src/main/res/layout/fragment_data_list.xml new file mode 100644 index 00000000..3eaf9bf9 --- /dev/null +++ b/app/src/main/res/layout/fragment_data_list.xml @@ -0,0 +1,41 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_new_session.xml b/app/src/main/res/layout/fragment_new_session.xml index 99f85212..987c681f 100644 --- a/app/src/main/res/layout/fragment_new_session.xml +++ b/app/src/main/res/layout/fragment_new_session.xml @@ -1,31 +1,71 @@ - + + - - - - - - \ No newline at end of file + android:layout_height="match_parent" + android:fillViewport="true" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_sheet_menu.xml b/app/src/main/res/menu/bottom_sheet_menu.xml index f1301ad6..e2351f4e 100644 --- a/app/src/main/res/menu/bottom_sheet_menu.xml +++ b/app/src/main/res/menu/bottom_sheet_menu.xml @@ -15,7 +15,7 @@ android:title="Search" app:showAsAction="ifRoom" /> + + + @array/com_google_android_gms_fonts_certs_dev + @array/com_google_android_gms_fonts_certs_prod + + + + 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 + + + diff --git a/app/src/main/res/values/preloaded_fonts.xml b/app/src/main/res/values/preloaded_fonts.xml new file mode 100644 index 00000000..1cecfb90 --- /dev/null +++ b/app/src/main/res/values/preloaded_fonts.xml @@ -0,0 +1,8 @@ + + + + @font/roboto + @font/roboto_bold + @font/roboto_light + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dfc3bef0..0afe7cc7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,6 +8,7 @@ Bankroll Game Location + Session Tournament Type Transaction Type diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 9d7c9fb5..f6d293ed 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,17 +1,41 @@ - - - - - + + + + + + + + + + + + + +