From de6c2367713f35f2ca3f7c599f9510789d2015f2 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Mon, 4 Mar 2019 10:03:38 +0100 Subject: [PATCH] Manage auto selection of new object --- .../ui/activity/EditableDataActivity.kt | 17 +++++++++ .../ui/fragment/EditableDataFragment.kt | 33 +++++++++++++++-- .../android/ui/fragment/SessionFragment.kt | 10 ------ .../bottomsheet/BottomSheetFragment.kt | 35 ++++++++++++++++++- 4 files changed, 81 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt index 4a1c5224..56315b5f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/EditableDataActivity.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?) { 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 e968cadc..6741d7f6 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 @@ -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 { 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 be317bb2..82e30fb1 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 @@ -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) 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 1f7a2760..eafa3409 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 @@ -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 = 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 {