From 091184da51a344f1f99986c13de74e80027bde73 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 8 Mar 2019 17:07:50 +0100 Subject: [PATCH] Add LocationDataFragment and refactor EditableDataActivity --- .../ui/activity/EditableDataActivity.kt | 16 +++- .../ui/fragment/EditableDataFragment.kt | 89 +++++++++---------- .../ui/fragment/LocationDataFragment.kt | 38 ++++++++ .../res/layout/activity_editable_data.xml | 16 +--- 4 files changed, 97 insertions(+), 62 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/fragment/LocationDataFragment.kt 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 56315b5f..1333f2d7 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 @@ -4,13 +4,14 @@ 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.model.LiveData import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.fragment.EditableDataFragment +import net.pokeranalytics.android.ui.fragment.LocationDataFragment class EditableDataActivity : PokerAnalyticsActivity() { - enum class IntentKey(val keyName : String) { + enum class IntentKey(val keyName: String) { DATA_TYPE("DATA_TYPE"), PRIMARY_KEY("PRIMARY_KEY"); } @@ -55,7 +56,16 @@ class EditableDataActivity : PokerAnalyticsActivity() { val dataType = intent.getIntExtra(IntentKey.DATA_TYPE.keyName, 0) val primaryKey = intent.getStringExtra(IntentKey.PRIMARY_KEY.keyName) - val fragment = editableDataFragment as EditableDataFragment + + val fragmentManager = supportFragmentManager + val fragmentTransaction = fragmentManager.beginTransaction() + val fragment: EditableDataFragment = when (dataType) { + LiveData.LOCATION.ordinal -> LocationDataFragment() + else -> EditableDataFragment() + } + + fragmentTransaction.add(R.id.container, fragment) + fragmentTransaction.commit() fragment.setData(dataType, primaryKey) } } \ No newline at end of file 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 59439905..3f8e9c10 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 @@ -11,7 +11,6 @@ import io.realm.RealmObject 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.exceptions.TypeException import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Savable @@ -27,19 +26,19 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetDelegate import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetFragment -import net.pokeranalytics.android.ui.helpers.PlacePickerManager import net.pokeranalytics.android.ui.view.RowRepresentable -import net.pokeranalytics.android.ui.view.rowrepresentable.LocationRow -class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate { +open class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate { + + lateinit var parentActivity: PokerAnalyticsActivity + lateinit var item: RealmObject + lateinit var liveDataType: LiveData + lateinit var rowRepresentableAdapter: RowRepresentableAdapter - private lateinit var parentActivity: PokerAnalyticsActivity - private lateinit var item: RealmObject - private lateinit var liveDataType: LiveData - private lateinit var rowRepresentableAdapter: RowRepresentableAdapter private var editableMenu: Menu? = null private var dataType: Int? = null + private var primaryKey: String? = null private var isUpdating = false override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { @@ -49,6 +48,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initUI() + initData() } override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { @@ -68,18 +68,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, } override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { - when (row) { - LocationRow.LOCATE_ME -> { - if (item is Location) { - (item as Location).isLookingForPlaces = true - PlacePickerManager.create(parentActivity, row, this) - rowRepresentableAdapter.refreshRow(row) - } else { - throw TypeException("Need to manage LocationRow.LOCATE_ME for ${item::class.java}") - } - } - else -> 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) { @@ -90,12 +79,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, this.getRealm().executeTransaction { (this.item as Savable).updateValue(value, row) } - when (row) { - LocationRow.LOCATE_ME -> { - rowRepresentableAdapter.notifyDataSetChanged() - } - else -> rowRepresentableAdapter.refreshRow(row) - } + rowRepresentableAdapter.refreshRow(row) } /** @@ -115,6 +99,36 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, } } + + /** + * Init data + */ + private fun initData() { + if (this.dataType != null && this.primaryKey != null) { + val proxyItem: RealmObject? = this.liveDataType.getData(this.getRealm(), primaryKey) + proxyItem?.let { + this.appBar.toolbar.title = "Update ${this.liveDataType.name.toLowerCase().capitalize()}" + isUpdating = true + } ?: run { + this.appBar.toolbar.title = "New ${this.liveDataType.name.toLowerCase().capitalize()}" + } + this.item = this.liveDataType.updateOrCreate(this.getRealm(), primaryKey) + this.rowRepresentableAdapter = RowRepresentableAdapter( + (this.item as RowRepresentableDataSource), + this + ) + this.recyclerView.adapter = rowRepresentableAdapter + + // When creating an object, open automatically the keyboard for the first row + if (!isUpdating && this.item is RowRepresentableDataSource) { + val row = (this.item as RowRepresentableDataSource).adapterRows()?.firstOrNull() + row?.let { + onRowSelected(0, it) + } + } + } + } + /** * Update menu UI */ @@ -190,26 +204,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, 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 { - this.appBar.toolbar.title = "Update ${this.liveDataType.name.toLowerCase().capitalize()}" - isUpdating = true - } ?: run { - this.appBar.toolbar.title = "New ${this.liveDataType.name.toLowerCase().capitalize()}" - } - this.item = this.liveDataType.updateOrCreate(this.getRealm(), primaryKey) - this.rowRepresentableAdapter = RowRepresentableAdapter( - (this.item as RowRepresentableDataSource), - this - ) - this.recyclerView.adapter = rowRepresentableAdapter - - // When creating an object, open automatically the keyboard for the first row - if (!isUpdating && this.item is RowRepresentableDataSource) { - val row = (this.item as RowRepresentableDataSource).adapterRows()?.firstOrNull() - row?.let { - onRowSelected(0, it) - } - } + this.primaryKey = primaryKey } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/LocationDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/LocationDataFragment.kt new file mode 100644 index 00000000..a4643159 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/LocationDataFragment.kt @@ -0,0 +1,38 @@ +package net.pokeranalytics.android.ui.fragment + +import net.pokeranalytics.android.exceptions.TypeException +import net.pokeranalytics.android.model.realm.Location +import net.pokeranalytics.android.ui.helpers.PlacePickerManager +import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.rowrepresentable.LocationRow + +/** + * Custom EditableDataFragment to manage the LOCATE_ME case + */ +class LocationDataFragment: EditableDataFragment() { + + override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { + when(row) { + LocationRow.LOCATE_ME -> { + if (item is Location) { + (item as Location).isLookingForPlaces = true + PlacePickerManager.create(parentActivity, row, this) + rowRepresentableAdapter.refreshRow(row) + } else { + throw TypeException("Need to manage LocationRow.LOCATE_ME for ${item::class.java}") + } + } + else -> super.onRowSelected(position, row, fromAction) + } + } + + override fun onRowValueChanged(value: Any?, row: RowRepresentable) { + super.onRowValueChanged(value, row) + when (row) { + LocationRow.LOCATE_ME -> { + rowRepresentableAdapter.notifyDataSetChanged() + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_editable_data.xml b/app/src/main/res/layout/activity_editable_data.xml index d8f373b8..70454fb9 100644 --- a/app/src/main/res/layout/activity_editable_data.xml +++ b/app/src/main/res/layout/activity_editable_data.xml @@ -1,15 +1,7 @@ - + android:layout_height="match_parent"> - - - \ No newline at end of file + \ No newline at end of file