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.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import kotlinx.android.synthetic.main.activity_editable_data.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
@ -15,6 +16,9 @@ class EditableDataActivity : PokerAnalyticsActivity() {
}
companion object {
/**
* Default constructor
*/
fun newInstance(context: Context, dataType: Int, primaryKey: String? = null) {
val intent = Intent(context, EditableDataActivity::class.java)
intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType)
@ -23,6 +27,19 @@ class EditableDataActivity : PokerAnalyticsActivity() {
}
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?) {

@ -1,5 +1,7 @@
package net.pokeranalytics.android.ui.fragment
import android.app.Activity.RESULT_OK
import android.content.Intent
import android.os.Bundle
import android.view.*
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 net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Identifiable
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.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
@ -27,6 +31,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate,
private lateinit var liveDataType: LiveData
private lateinit var rowRepresentableAdapter: RowRepresentableAdapter
private var editableMenu: Menu? = null
private var dataType: Int? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
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) {
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) {
@ -103,9 +113,14 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate,
private fun saveData() {
if ((this.item as Savable).isValidForSave()) {
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 {
val builder = AlertDialog.Builder(requireContext())
.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
*/
fun setData(dataType: Int, primaryKey: String?) {
this.dataType = dataType
this.liveDataType = LiveData.values()[dataType]
val proxyItem: RealmObject? = this.liveDataType.getData(this.getRealm(), primaryKey)
proxyItem?.let {

@ -11,11 +11,9 @@ import androidx.recyclerview.widget.DiffUtil
import io.realm.kotlin.where
import kotlinx.android.synthetic.main.fragment_session.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.extensions.SessionState
import net.pokeranalytics.android.model.extensions.getState
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
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) {
currentSession.updateValue(value, row)
sessionAdapter.refreshRow(row)

@ -1,7 +1,9 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
import android.annotation.SuppressLint
import android.app.Activity.RESULT_OK
import android.app.Dialog
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@ -9,11 +11,16 @@ import android.view.ViewGroup
import android.view.WindowManager
import androidx.fragment.app.FragmentManager
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import io.realm.RealmObject
import kotlinx.android.synthetic.main.fragment_bottom_sheet.*
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.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow
enum class BottomSheetType {
NONE,
@ -42,6 +49,9 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
private var rowRepresentableEditDescriptors: ArrayList<RowRepresentableEditDescriptor> = ArrayList()
companion object {
const val REQUEST_CODE_ADD_NEW_OBJECT = 100
fun create(
fragmentManager: FragmentManager?,
row: RowRepresentable,
@ -78,6 +88,23 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
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")
override fun setupDialog(dialog: Dialog?, style: Int) {
super.setupDialog(dialog, style)
@ -103,7 +130,13 @@ open class BottomSheetFragment : BottomSheetDialogFragment() {
true
}
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
}
bottomSheetToolbar.menu.findItem(R.id.actionCheck).setOnMenuItemClickListener {

Loading…
Cancel
Save