|
@@ -0,0 +1,185 @@
|
|
|
|
|
+package com.example.stores
|
|
|
|
|
+
|
|
|
|
|
+import android.os.Bundle
|
|
|
|
|
+import android.text.Editable
|
|
|
|
|
+import android.view.*
|
|
|
|
|
+import android.widget.Toast
|
|
|
|
|
+import androidx.core.widget.addTextChangedListener
|
|
|
|
|
+import androidx.fragment.app.Fragment
|
|
|
|
|
+import com.bumptech.glide.Glide
|
|
|
|
|
+import com.bumptech.glide.load.engine.DiskCacheStrategy
|
|
|
|
|
+import com.example.stores.databinding.ActivityMainBinding
|
|
|
|
|
+import com.example.stores.databinding.FragmentEditStoreBinding
|
|
|
|
|
+import com.google.android.material.floatingactionbutton.FloatingActionButton
|
|
|
|
|
+import com.google.android.material.snackbar.Snackbar
|
|
|
|
|
+import com.google.android.material.textfield.TextInputEditText
|
|
|
|
|
+import com.google.android.material.textfield.TextInputLayout
|
|
|
|
|
+import org.jetbrains.anko.doAsync
|
|
|
|
|
+import org.jetbrains.anko.uiThread
|
|
|
|
|
+
|
|
|
|
|
+class EditStoreFragment : Fragment() {
|
|
|
|
|
+
|
|
|
|
|
+ private lateinit var mBinding: FragmentEditStoreBinding
|
|
|
|
|
+ private var mActivity: MainActivity? = null
|
|
|
|
|
+ private var mIsEditMode: Boolean = false
|
|
|
|
|
+ private var mStoreEntity: StoreEntity? = null
|
|
|
|
|
+
|
|
|
|
|
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
|
|
|
|
+ mBinding = FragmentEditStoreBinding.inflate(inflater, container, false)
|
|
|
|
|
+
|
|
|
|
|
+ return mBinding.root
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
|
|
|
+ super.onViewCreated(view, savedInstanceState)
|
|
|
|
|
+
|
|
|
|
|
+ val id = arguments?.getLong(getString(R.string.arg_id), 0)
|
|
|
|
|
+ if (id !== null && id !== 0L) {
|
|
|
|
|
+ mIsEditMode = true
|
|
|
|
|
+ getStore(id)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ mIsEditMode = false
|
|
|
|
|
+ mStoreEntity = StoreEntity(name = "", phone = "", photoUrl = "")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ val modeTitle = if (mIsEditMode) getString(R.string.edit_store_title_edit) else getString(R.string.edit_store_title_add)
|
|
|
|
|
+ setupActionBar(modeTitle)
|
|
|
|
|
+ setupTextFields()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private fun setupActionBar(mode: String) {
|
|
|
|
|
+ mActivity = activity as? MainActivity
|
|
|
|
|
+ setConfigActionBar(true, mode, true)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private fun setupTextFields() {
|
|
|
|
|
+ with (mBinding) {
|
|
|
|
|
+ etName.addTextChangedListener { validateFields(tilName) }
|
|
|
|
|
+ etPhone.addTextChangedListener { validateFields(tilPhone) }
|
|
|
|
|
+ etPhotoUrl.addTextChangedListener {
|
|
|
|
|
+ validateFields(mBinding.tilPhotoUrl)
|
|
|
|
|
+ loadImage(it.toString().trim())
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private fun loadImage(url: String) {
|
|
|
|
|
+ mBinding.etPhotoUrl.addTextChangedListener {
|
|
|
|
|
+ Glide.with(this)
|
|
|
|
|
+ .load(url)
|
|
|
|
|
+ .diskCacheStrategy(DiskCacheStrategy.ALL)
|
|
|
|
|
+ .centerCrop()
|
|
|
|
|
+ .into(mBinding.imgPhoto)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private fun getStore(id: Long) {
|
|
|
|
|
+ doAsync {
|
|
|
|
|
+ mStoreEntity = StoreApplication.database.storeDao().getStoreById(id)
|
|
|
|
|
+ uiThread {
|
|
|
|
|
+ if (mStoreEntity !== null) setUIStore(mStoreEntity!!)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private fun setUIStore(storeEntity: StoreEntity) {
|
|
|
|
|
+ with(mBinding) {
|
|
|
|
|
+ etName.text =(storeEntity.name.editable())
|
|
|
|
|
+ etPhone.text =(storeEntity.phone.editable())
|
|
|
|
|
+ etWebsite.text =(storeEntity.website.editable())
|
|
|
|
|
+ etPhotoUrl.text =(storeEntity.photoUrl.editable())
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private fun String.editable(): Editable = Editable.Factory.getInstance().newEditable(this)
|
|
|
|
|
+
|
|
|
|
|
+ override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
|
|
|
|
+ inflater.inflate(R.menu.menu_save, menu)
|
|
|
|
|
+ super.onCreateOptionsMenu(menu, inflater)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
|
|
|
+ return when(item.itemId) {
|
|
|
|
|
+ android.R.id.home -> {
|
|
|
|
|
+ requireActivity() // Return the FragmentActivity this fragment is currently associated with.
|
|
|
|
|
+ requireActivity().onBackPressedDispatcher.onBackPressed()
|
|
|
|
|
+ true
|
|
|
|
|
+ }
|
|
|
|
|
+ R.id.action_save -> {
|
|
|
|
|
+ if (mStoreEntity !== null && validateFields(mBinding.tilPhotoUrl, mBinding.tilPhone, mBinding.tilName)) {
|
|
|
|
|
+ with(mStoreEntity!!) {
|
|
|
|
|
+ name = mBinding.etName.text.toString().trim()
|
|
|
|
|
+ phone = mBinding.etPhone.text.toString().trim()
|
|
|
|
|
+ isFavorite = false
|
|
|
|
|
+ website = mBinding.etWebsite.text.toString().trim()
|
|
|
|
|
+ photoUrl = mBinding.etPhotoUrl.text.toString().trim()
|
|
|
|
|
+ }
|
|
|
|
|
+ doAsync {
|
|
|
|
|
+ if (mIsEditMode) {
|
|
|
|
|
+ StoreApplication.database.storeDao().updateStore(mStoreEntity!!)
|
|
|
|
|
+ uiThread {
|
|
|
|
|
+ mActivity?.updateStore(mStoreEntity!!)
|
|
|
|
|
+ Snackbar.make(mBinding.root, R.string.edit_store_message_update_success, Snackbar.LENGTH_SHORT).show()
|
|
|
|
|
+ requireActivity().onBackPressedDispatcher.onBackPressed()
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ mStoreEntity!!.id = StoreApplication.database.storeDao().addStore(mStoreEntity!!)
|
|
|
|
|
+ uiThread {
|
|
|
|
|
+ mActivity?.addStore(mStoreEntity!!)
|
|
|
|
|
+ Toast.makeText(mActivity, R.string.edit_store_message_save_success, Toast.LENGTH_SHORT).show()
|
|
|
|
|
+ requireActivity().onBackPressedDispatcher.onBackPressed()
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ true
|
|
|
|
|
+ }
|
|
|
|
|
+ else -> return super.onOptionsItemSelected(item)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private fun validateFields(vararg textFields: TextInputLayout): Boolean {
|
|
|
|
|
+ var isValid = true
|
|
|
|
|
+ for (textField in textFields) {
|
|
|
|
|
+ if (textField.editText?.text.toString().trim().isEmpty()) {
|
|
|
|
|
+ textField.error = getString(R.string.helper_required)
|
|
|
|
|
+ textField.editText?.requestFocus()
|
|
|
|
|
+ isValid = false
|
|
|
|
|
+ } else textField.error = null
|
|
|
|
|
+ }
|
|
|
|
|
+ return isValid
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /*private fun validateFields(): Boolean {
|
|
|
|
|
+ var isValid = true
|
|
|
|
|
+ if (mBinding.etPhotoUrl.text.toString().trim().isEmpty()) {
|
|
|
|
|
+ mBinding.tilPhotoUrl.error = getString(R.string.helper_required)
|
|
|
|
|
+ mBinding.etPhotoUrl.requestFocus()
|
|
|
|
|
+ isValid = false
|
|
|
|
|
+ }
|
|
|
|
|
+ if (mBinding.etPhone.text.toString().trim().isEmpty()) {
|
|
|
|
|
+ mBinding.tilPhone.error = getString(R.string.helper_required)
|
|
|
|
|
+ mBinding.etPhone.requestFocus()
|
|
|
|
|
+ isValid = false
|
|
|
|
|
+ }
|
|
|
|
|
+ if (mBinding.etName.text.toString().trim().isEmpty()) {
|
|
|
|
|
+ mBinding.tilName.error = getString(R.string.helper_required)
|
|
|
|
|
+ mBinding.etName.requestFocus()
|
|
|
|
|
+ isValid = false
|
|
|
|
|
+ }
|
|
|
|
|
+ return isValid
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ override fun onDestroy() {
|
|
|
|
|
+ setConfigActionBar(false, getString(R.string.app_name), false)
|
|
|
|
|
+ mActivity?.hideFab(true)
|
|
|
|
|
+ super.onDestroy()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private fun setConfigActionBar (displayHome: Boolean, title: String, hasOptionMenu: Boolean) {
|
|
|
|
|
+ mActivity?.supportActionBar?.setDisplayHomeAsUpEnabled(displayHome) // Agrega action bar
|
|
|
|
|
+ mActivity?.supportActionBar?.title = title // Cambia titulo
|
|
|
|
|
+ setHasOptionsMenu(hasOptionMenu)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|