Use dialog for deleting child users

This commit is contained in:
Jonas L 2019-01-14 17:10:00 +01:00
parent 89d9ef2539
commit 39067d0f53
7 changed files with 121 additions and 114 deletions

View file

@ -0,0 +1,88 @@
/*
* Open TimeLimit Copyright <C> 2019 Jonas Lochmann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package io.timelimit.android.ui.manage.child.advanced
import android.os.Bundle
import android.view.View
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
import io.timelimit.android.R
import io.timelimit.android.data.model.User
import io.timelimit.android.data.model.UserType
import io.timelimit.android.extensions.showSafe
import io.timelimit.android.logic.DefaultAppLogic
import io.timelimit.android.sync.actions.RemoveUserAction
import io.timelimit.android.ui.main.ActivityViewModel
import io.timelimit.android.ui.main.ActivityViewModelHolder
import io.timelimit.android.ui.util.ConfirmDeleteDialogFragment
class DeleteChildDialogFragment: ConfirmDeleteDialogFragment() {
companion object {
private const val DIALOG_TAG = "DeleteChildDialogFragment"
private const val CHILD_ID = "childId"
fun newInstance(childId: String) = DeleteChildDialogFragment().apply {
arguments = Bundle().apply {
putString(CHILD_ID, childId)
}
}
}
val auth: ActivityViewModel by lazy {
(activity as ActivityViewModelHolder).getActivityViewModel()
}
val childId: String by lazy { arguments!!.getString(CHILD_ID) }
val userEntry: LiveData<User?> by lazy {
DefaultAppLogic.with(context!!).database.user().getChildUserByIdLive(childId)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
auth.authenticatedUser.observe(this, Observer {
if (it?.second?.type != UserType.Parent) {
dismissAllowingStateLoss()
}
})
userEntry.observe(this, Observer {
if (it == null) {
dismissAllowingStateLoss()
}
})
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
userEntry.observe(this, Observer {
binding.text = getString(R.string.delete_child_text, it?.name)
})
}
override fun onConfirmDeletion() {
auth.tryDispatchParentAction(
RemoveUserAction(
userId = childId
)
)
dismiss()
}
fun show(fragmentManager: FragmentManager) = showSafe(fragmentManager, DIALOG_TAG)
}

View file

@ -1,50 +0,0 @@
/*
* Open TimeLimit Copyright <C> 2019 Jonas Lochmann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package io.timelimit.android.ui.manage.child.advanced
import io.timelimit.android.databinding.DeleteChildViewBinding
import io.timelimit.android.sync.actions.RemoveUserAction
import io.timelimit.android.ui.main.ActivityViewModel
object DeleteChildView {
fun bind(
model: ActivityViewModel,
view: DeleteChildViewBinding,
childId: String
) {
view.btnConfirmDeleteUser.isEnabled = view.checkConfirmDeleteUser.isChecked
view.btnConfirmDeleteUser.setOnClickListener {
model.tryDispatchParentAction(
RemoveUserAction(
userId = childId
)
)
}
view.checkConfirmDeleteUser.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
if (!model.requestAuthenticationOrReturnTrue()) {
view.checkConfirmDeleteUser.isChecked = false
} else {
view.btnConfirmDeleteUser.isEnabled = true
}
} else {
view.btnConfirmDeleteUser.isEnabled = false
}
}
}
}

View file

@ -119,11 +119,11 @@ class ManageChildAdvancedFragment : Fragment() {
})
}
DeleteChildView.bind(
model = auth,
view = binding.deleteChild,
childId = params.childId
)
binding.deleteUserButton.setOnClickListener {
if (auth.requestAuthenticationOrReturnTrue()) {
DeleteChildDialogFragment.newInstance(params.childId).show(fragmentManager!!)
}
}
return binding.root
}