Manage auto selection of new object

feature/top10
Aurelien Hubert 7 years ago
parent b55fb5da3a
commit de6c236771
  1. 17
      app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt
  2. 33
      app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt
  3. 10
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  4. 35
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetFragment.kt

@ -3,6 +3,7 @@ package net.pokeranalytics.android.ui.activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment
import kotlinx.android.synthetic.main.activity_editable_data.* import kotlinx.android.synthetic.main.activity_editable_data.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
@ -15,6 +16,9 @@ class EditableDataActivity : PokerAnalyticsActivity() {
} }
companion object { companion object {
/**
* Default constructor
*/
fun newInstance(context: Context, dataType: Int, primaryKey: String? = null) { fun newInstance(context: Context, dataType: Int, primaryKey: String? = null) {
val intent = Intent(context, EditableDataActivity::class.java) val intent = Intent(context, EditableDataActivity::class.java)
intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType) intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType)
@ -23,6 +27,19 @@ class EditableDataActivity : PokerAnalyticsActivity() {
} }
context.startActivity(intent) context.startActivity(intent)
} }
/**
* Create a new instance for result
*/
fun newInstanceForResult(fragment: Fragment, dataType: Int, primaryKey: String? = null, requestCode: Int) {
val intent = Intent(fragment.requireContext(), EditableDataActivity::class.java)
intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType)
primaryKey?.let {
intent.putExtra(IntentKey.PRIMARY_KEY.keyName, it)
}
fragment.startActivityForResult(intent, requestCode)
}
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {

@ -1,5 +1,7 @@
package net.pokeranalytics.android.ui.fragment package net.pokeranalytics.android.ui.fragment
import android.app.Activity.RESULT_OK
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.* import android.view.*
import android.widget.Toast import android.widget.Toast
@ -10,7 +12,9 @@ import kotlinx.android.synthetic.main.fragment_editable_data.*
import kotlinx.android.synthetic.main.fragment_editable_data.view.* import kotlinx.android.synthetic.main.fragment_editable_data.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
@ -27,6 +31,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate,
private lateinit var liveDataType: LiveData private lateinit var liveDataType: LiveData
private lateinit var rowRepresentableAdapter: RowRepresentableAdapter private lateinit var rowRepresentableAdapter: RowRepresentableAdapter
private var editableMenu: Menu? = null private var editableMenu: Menu? = null
private var dataType: Int? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_editable_data, container, false) return inflater.inflate(R.layout.fragment_editable_data, container, false)
@ -55,7 +60,12 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate,
} }
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
BottomSheetFragment.create(fragmentManager, row,this, (this.item as RowRepresentableDataSource).editDescriptors(row)) BottomSheetFragment.create(
fragmentManager,
row,
this,
(this.item as RowRepresentableDataSource).editDescriptors(row)
)
} }
override fun clickOnAdd(row: RowRepresentable) { override fun clickOnAdd(row: RowRepresentable) {
@ -103,9 +113,14 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate,
private fun saveData() { private fun saveData() {
if ((this.item as Savable).isValidForSave()) { if ((this.item as Savable).isValidForSave()) {
this.getRealm().executeTransaction { this.getRealm().executeTransaction {
it.copyToRealmOrUpdate(this.item) val item = it.copyToRealmOrUpdate(this.item)
val uniqueIdentifier = if (item is Identifiable) {
item.uniqueIdentifier()
} else ""
finishActivityWithResult(uniqueIdentifier)
} }
activity?.finish()
} else { } else {
val builder = AlertDialog.Builder(requireContext()) val builder = AlertDialog.Builder(requireContext())
.setMessage(R.string.empty_name_for_br_error) .setMessage(R.string.empty_name_for_br_error)
@ -141,10 +156,22 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate,
} }
/**
* Finish the activity with a result
*/
private fun finishActivityWithResult(uniqueIdentifier: String) {
val intent = Intent()
intent.putExtra(EditableDataActivity.IntentKey.DATA_TYPE.keyName, dataType)
intent.putExtra(EditableDataActivity.IntentKey.PRIMARY_KEY.keyName, uniqueIdentifier)
activity?.setResult(RESULT_OK, intent)
activity?.finish()
}
/** /**
* Set fragment data * Set fragment data
*/ */
fun setData(dataType: Int, primaryKey: String?) { fun setData(dataType: Int, primaryKey: String?) {
this.dataType = dataType
this.liveDataType = LiveData.values()[dataType] this.liveDataType = LiveData.values()[dataType]
val proxyItem: RealmObject? = this.liveDataType.getData(this.getRealm(), primaryKey) val proxyItem: RealmObject? = this.liveDataType.getData(this.getRealm(), primaryKey)
proxyItem?.let { proxyItem?.let {

@ -11,11 +11,9 @@ import androidx.recyclerview.widget.DiffUtil
import io.realm.kotlin.where import io.realm.kotlin.where
import kotlinx.android.synthetic.main.fragment_session.* import kotlinx.android.synthetic.main.fragment_session.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.extensions.SessionState import net.pokeranalytics.android.model.extensions.SessionState
import net.pokeranalytics.android.model.extensions.getState import net.pokeranalytics.android.model.extensions.getState
import net.pokeranalytics.android.model.realm.Session 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.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@ -98,14 +96,6 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
} }
} }
override fun clickOnAdd(row: RowRepresentable) {
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)
}
}
override fun onRowValueChanged(value: Any?, row: RowRepresentable) { override fun onRowValueChanged(value: Any?, row: RowRepresentable) {
currentSession.updateValue(value, row) currentSession.updateValue(value, row)
sessionAdapter.refreshRow(row) sessionAdapter.refreshRow(row)

@ -1,7 +1,9 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet package net.pokeranalytics.android.ui.fragment.components.bottomsheet
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity.RESULT_OK
import android.app.Dialog import android.app.Dialog
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -9,11 +11,16 @@ import android.view.ViewGroup
import android.view.WindowManager import android.view.WindowManager
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import io.realm.RealmObject
import kotlinx.android.synthetic.main.fragment_bottom_sheet.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow
enum class BottomSheetType { enum class BottomSheetType {
NONE, NONE,
@ -42,6 +49,9 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
private var rowRepresentableEditDescriptors: ArrayList<RowRepresentableEditDescriptor> = ArrayList() private var rowRepresentableEditDescriptors: ArrayList<RowRepresentableEditDescriptor> = ArrayList()
companion object { companion object {
const val REQUEST_CODE_ADD_NEW_OBJECT = 100
fun create( fun create(
fragmentManager: FragmentManager?, fragmentManager: FragmentManager?,
row: RowRepresentable, row: RowRepresentable,
@ -78,6 +88,23 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
initUI() initUI()
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// If we come from a creation of an object an everything is okay, we call
// the delegate onRowValueChanged with the newly created object
if (requestCode == REQUEST_CODE_ADD_NEW_OBJECT && resultCode == RESULT_OK && data != null) {
val dataType = data.getIntExtra(EditableDataActivity.IntentKey.DATA_TYPE.keyName, 0)
val primaryKey = data.getStringExtra(EditableDataActivity.IntentKey.PRIMARY_KEY.keyName)
val pokerAnalyticsActivity = activity as PokerAnalyticsActivity
val liveDataType = LiveData.values()[dataType]
val proxyItem: RealmObject? = liveDataType.getData(pokerAnalyticsActivity.getRealm(), primaryKey)
this.delegate.onRowValueChanged(proxyItem, this.row)
dismiss()
}
}
@SuppressLint("RestrictedApi") @SuppressLint("RestrictedApi")
override fun setupDialog(dialog: Dialog?, style: Int) { override fun setupDialog(dialog: Dialog?, style: Int) {
super.setupDialog(dialog, style) super.setupDialog(dialog, style)
@ -103,7 +130,13 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
true true
} }
bottomSheetToolbar.menu.findItem(R.id.actionAdd).setOnMenuItemClickListener { bottomSheetToolbar.menu.findItem(R.id.actionAdd).setOnMenuItemClickListener {
this.delegate.clickOnAdd(row) when (row) {
SessionRow.GAME -> EditableDataActivity.newInstanceForResult(this, LiveData.GAME.ordinal, requestCode = REQUEST_CODE_ADD_NEW_OBJECT)
SessionRow.BANKROLL -> EditableDataActivity.newInstanceForResult(this, LiveData.BANKROLL.ordinal, requestCode = REQUEST_CODE_ADD_NEW_OBJECT)
SessionRow.LOCATION -> EditableDataActivity.newInstanceForResult(this, LiveData.LOCATION.ordinal, requestCode = REQUEST_CODE_ADD_NEW_OBJECT)
}
//this.delegate.clickOnAdd(row)
true true
} }
bottomSheetToolbar.menu.findItem(R.id.actionCheck).setOnMenuItemClickListener { bottomSheetToolbar.menu.findItem(R.id.actionCheck).setOnMenuItemClickListener {

Loading…
Cancel
Save