From 1beed62fcf94d02ba8a682248b918dd032b5467c Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Fri, 22 Feb 2019 09:41:14 +0100 Subject: [PATCH] Improve editable data UI --- .../ui/fragment/EditableDataFragment.kt | 115 +++++++++++------- .../res/layout/fragment_editable_data.xml | 87 ++++++------- app/src/main/res/menu/editable_data.xml | 17 +++ app/src/main/res/values/styles.xml | 13 +- 4 files changed, 138 insertions(+), 94 deletions(-) create mode 100644 app/src/main/res/menu/editable_data.xml 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 62e25c8f..27c2dcc4 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,10 +1,7 @@ package net.pokeranalytics.android.ui.fragment -import android.content.DialogInterface import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup +import android.view.* import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.recyclerview.widget.LinearLayoutManager @@ -15,7 +12,10 @@ import net.pokeranalytics.android.R import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.ObjectSavable import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity -import net.pokeranalytics.android.ui.adapter.components.* +import net.pokeranalytics.android.ui.adapter.components.LiveDataDataSource +import net.pokeranalytics.android.ui.adapter.components.RowRepresentableAdapter +import net.pokeranalytics.android.ui.adapter.components.RowRepresentableDataSource +import net.pokeranalytics.android.ui.adapter.components.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 @@ -25,9 +25,10 @@ import timber.log.Timber class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, BottomSheetDelegate { - private lateinit var item: RealmObject + private lateinit var item: RealmObject private lateinit var liveDataType: LiveData private lateinit var rowRepresentableAdapter: RowRepresentableAdapter + private var editableMenu: Menu? = null override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_editable_data, container, false) @@ -39,6 +40,22 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, initUI() } + override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { + inflater?.inflate(R.menu.editable_data, menu) + this.editableMenu = menu + updateMenuUI() + super.onCreateOptionsMenu(menu, inflater) + } + + + override fun onOptionsItemSelected(item: MenuItem?): Boolean { + when (item!!.itemId) { + R.id.save -> saveData() + R.id.delete -> deleteData() + } + return true + } + override fun onRowSelected(row: RowRepresentable) { BottomSheetFragment.create(fragmentManager, row, this, (this.item as RowEditable).getBottomSheetData(row)) } @@ -74,6 +91,7 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, val activity = activity as PokerAnalyticsActivity activity.setSupportActionBar(toolbar) activity.supportActionBar?.setDisplayHomeAsUpEnabled(true) + setHasOptionsMenu(true) val viewManager = LinearLayoutManager(requireContext()) @@ -81,49 +99,60 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, setHasFixedSize(true) layoutManager = viewManager } + } + + /** + * Update menu UI + */ + private fun updateMenuUI() { + editableMenu?.findItem(R.id.delete)?.isVisible = item.isManaged + editableMenu?.findItem(R.id.save)?.isVisible = true + } + + /** + * Save data + */ + private fun saveData() { + if ((this.item as ObjectSavable).isValidForSave()) { + this.getRealm().executeTransaction { + it.copyToRealmOrUpdate(this.item) + } + activity?.finish() + } else { + val builder = AlertDialog.Builder(requireContext()) + .setMessage(R.string.empty_name_for_br_error) + .setNegativeButton(R.string.ok, null) + builder.show() + } - this.saveButton.text = this.saveButton.context.getString(R.string.save) - this.saveButton.setOnClickListener { + } - if ((this.item as ObjectSavable).isValidForSave()) { - this.getRealm().executeTransaction { - it.copyToRealmOrUpdate(this.item) + /** + * Delete data + */ + private fun deleteData() { + + val builder = AlertDialog.Builder(requireContext()) + builder.setTitle(R.string.warning) + .setMessage(R.string.are_you_sure_you_want_to_do_that_) + .setNegativeButton(R.string.no, null) + .setPositiveButton(R.string.yes) { dialog, id -> + if (this.item.isManaged) { + Toast.makeText(requireContext(), "isManaged", Toast.LENGTH_SHORT).show() + Timber.d("is managed") + this.getRealm().executeTransaction { + this.liveDataType.deleteData(it, (this.item as LiveDataDataSource)) + } + } else { + Toast.makeText(requireContext(), "isNotManaged", Toast.LENGTH_SHORT).show() + Timber.d("is not managed") } this.activity?.let { it.finish() } - } else { - val builder = AlertDialog.Builder(it.context) - .setMessage(R.string.empty_name_for_br_error) - .setNegativeButton(R.string.ok, null) - builder.show() } - } + builder.show() - this.deleteButton.text = this.deleteButton.context.getString(R.string.delete) - this.deleteButton.setOnClickListener { - val builder = AlertDialog.Builder(it.context) - builder.setTitle(R.string.warning) - .setMessage(R.string.are_you_sure_you_want_to_do_that_) - .setNeutralButton(R.string.no, null) - .setNegativeButton(R.string.yes, DialogInterface.OnClickListener { dialog, id -> - - if (this.item.isManaged) { - Toast.makeText(requireContext(), "isManaged", Toast.LENGTH_SHORT).show() - Timber.d("is managed") - this.getRealm().executeTransaction { - this.liveDataType.deleteData(it, (this.item as LiveDataDataSource)) - } - } else { - Toast.makeText(requireContext(), "isNotManaged", Toast.LENGTH_SHORT).show() - Timber.d("is not managed") - } - this.activity?.let { - it.finish() - } - }) - builder.show() - } } /** @@ -131,8 +160,8 @@ class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, */ fun setData(dataType: Int, primaryKey: String?) { this.liveDataType = LiveData.values()[dataType] - var proxyItem : RealmObject? = this.liveDataType.getData(this.getRealm(), primaryKey) - proxyItem?.let { + var proxyItem: RealmObject? = this.liveDataType.getData(this.getRealm(), primaryKey) + proxyItem?.let { this.appBar.toolbar.title = "Update ${this.liveDataType.name.toLowerCase().capitalize()}" } ?: run { this.appBar.toolbar.title = "New ${this.liveDataType.name.toLowerCase().capitalize()}" diff --git a/app/src/main/res/layout/fragment_editable_data.xml b/app/src/main/res/layout/fragment_editable_data.xml index ed7b8bf4..bab049a9 100644 --- a/app/src/main/res/layout/fragment_editable_data.xml +++ b/app/src/main/res/layout/fragment_editable_data.xml @@ -1,74 +1,61 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:id="@+id/nestedScrollView" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fillViewport="true" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> + android:layout_width="match_parent" + android:layout_height="wrap_content"> + android:id="@+id/recyclerView" + android:layout_width="0dp" + android:layout_height="0dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + android:id="@+id/appBar" + android:layout_width="match_parent" + android:layout_height="128dp" + android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> + android:id="@+id/collapsingToolbar" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:collapsedTitleTextAppearance="@style/PokerAnalyticsTheme.Toolbar.CollapsedTitleAppearance" + app:contentScrim="?attr/colorPrimary" + app:expandedTitleGravity="bottom" + app:expandedTitleMarginStart="72dp" + app:expandedTitleTextAppearance="@style/PokerAnalyticsTheme.Toolbar.ExpandedTitleAppearance" + app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"> + android:id="@+id/toolbar" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + app:layout_collapseMode="pin" + app:title="Poker Analytics" + app:titleTextColor="@color/white" /> -