Improve bottom sheets management

dev_raz_wip
Aurelien Hubert 7 years ago
parent 5615854ec1
commit 95618e18c6
  1. 157
      app/src/main/java/net/pokeranalytics/android/ui/fragment/BottomSheetFragment.kt
  2. 19
      app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt
  3. 44
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetBlindsFragment.kt
  4. 61
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDateFragment.kt
  5. 143
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt
  6. 42
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetGameFragment.kt
  7. 13
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetType.kt
  8. 11
      app/src/main/java/net/pokeranalytics/android/util/PokerAnalyticsFragment.kt
  9. 2
      app/src/main/res/menu/bottom_sheet_menu.xml

@ -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
}
}

@ -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) {

@ -0,0 +1,44 @@
package net.pokeranalytics.android.ui.fragment.components
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.fragment.components.BottomSheetFragment
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()
}
/**
* 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)
}
}

@ -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()
}
}

@ -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
}
}

@ -0,0 +1,42 @@
package net.pokeranalytics.android.ui.fragment.components
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
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.fragment.components.BottomSheetFragment
class BottomSheetGameFragment : BottomSheetFragment() {
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()
}
/**
* 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)
}
}

@ -1,13 +0,0 @@
package net.pokeranalytics.android.ui.fragment.components
enum class BottomSheetType {
NONE,
GAME,
BLINDS,
LOCATION,
BANKROLL,
TABLE_SIZE,
DATE
}

@ -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
}
}

@ -15,7 +15,7 @@
android:title="Search"
app:showAsAction="ifRoom" />
<item
android:id="@+id/actionSave"
android:id="@+id/actionCheck"
android:icon="@drawable/ic_check_white_24dp"
android:orderInCategory="300"
android:title="User"

Loading…
Cancel
Save