Added confirmation dialog when going back during new/edit contact

This commit is contained in:
Sylvain Berfini 2023-08-18 14:17:07 +02:00
parent 838f9f592c
commit 4ac78c5b30
7 changed files with 208 additions and 8 deletions

View file

@ -40,7 +40,7 @@ import org.linphone.databinding.CallsListFragmentBinding
import org.linphone.databinding.CallsListPopupMenuBinding
import org.linphone.ui.main.MainActivity
import org.linphone.ui.main.calls.adapter.CallsListAdapter
import org.linphone.ui.main.calls.model.RemoveAllCallLogsDialogModel
import org.linphone.ui.main.calls.model.ConfirmationDialogModel
import org.linphone.ui.main.calls.viewmodel.CallsListViewModel
import org.linphone.ui.main.fragment.GenericFragment
import org.linphone.utils.DialogUtils
@ -179,7 +179,7 @@ class CallsListFragment : GenericFragment() {
)
popupView.setDeleteAllHistoryClickListener {
val model = RemoveAllCallLogsDialogModel()
val model = ConfirmationDialogModel()
val dialog = DialogUtils.getRemoveAllCallLogsConfirmationDialog(
requireActivity(),
model

View file

@ -22,7 +22,7 @@ package org.linphone.ui.main.calls.model
import androidx.lifecycle.MutableLiveData
import org.linphone.utils.Event
class RemoveAllCallLogsDialogModel() {
class ConfirmationDialogModel() {
val dismissEvent = MutableLiveData<Event<Boolean>>()
val confirmRemovalEvent = MutableLiveData<Event<Boolean>>()

View file

@ -38,9 +38,11 @@ import org.linphone.R
import org.linphone.core.tools.Log
import org.linphone.databinding.ContactNewOrEditFragmentBinding
import org.linphone.ui.main.MainActivity
import org.linphone.ui.main.calls.model.ConfirmationDialogModel
import org.linphone.ui.main.contacts.model.NewOrEditNumberOrAddressModel
import org.linphone.ui.main.contacts.viewmodel.ContactNewOrEditViewModel
import org.linphone.ui.main.fragment.GenericFragment
import org.linphone.utils.DialogUtils
import org.linphone.utils.FileUtils
class EditContactFragment : GenericFragment() {
@ -101,7 +103,26 @@ class EditContactFragment : GenericFragment() {
viewModel.findFriendByRefKey(refKey)
binding.setCancelClickListener {
goBack()
val model = ConfirmationDialogModel()
val dialog = DialogUtils.getCancelContactChangesConfirmationDialog(
requireActivity(),
model
)
model.dismissEvent.observe(viewLifecycleOwner) {
it.consume {
dialog.dismiss()
}
}
model.confirmRemovalEvent.observe(viewLifecycleOwner) {
it.consume {
goBack()
dialog.dismiss()
}
}
dialog.show()
}
binding.setPickImageClickListener {

View file

@ -37,9 +37,11 @@ import org.linphone.R
import org.linphone.core.tools.Log
import org.linphone.databinding.ContactNewOrEditFragmentBinding
import org.linphone.ui.main.MainActivity
import org.linphone.ui.main.calls.model.ConfirmationDialogModel
import org.linphone.ui.main.contacts.model.NewOrEditNumberOrAddressModel
import org.linphone.ui.main.contacts.viewmodel.ContactNewOrEditViewModel
import org.linphone.ui.main.fragment.GenericFragment
import org.linphone.utils.DialogUtils
import org.linphone.utils.Event
import org.linphone.utils.FileUtils
@ -95,7 +97,26 @@ class NewContactFragment : GenericFragment() {
viewModel.findFriendByRefKey("")
binding.setCancelClickListener {
goBack()
val model = ConfirmationDialogModel()
val dialog = DialogUtils.getCancelContactChangesConfirmationDialog(
requireActivity(),
model
)
model.dismissEvent.observe(viewLifecycleOwner) {
it.consume {
dialog.dismiss()
}
}
model.confirmRemovalEvent.observe(viewLifecycleOwner) {
it.consume {
goBack()
dialog.dismiss()
}
}
dialog.show()
}
binding.setPickImageClickListener {

View file

@ -29,10 +29,11 @@ import android.view.WindowManager
import androidx.core.content.ContextCompat
import androidx.databinding.DataBindingUtil
import org.linphone.R
import org.linphone.databinding.DialogCancelContactChangesBinding
import org.linphone.databinding.DialogConfirmZrtpSasBinding
import org.linphone.databinding.DialogPickNumberOrAddressBinding
import org.linphone.databinding.DialogRemoveAllCallLogsBinding
import org.linphone.ui.main.calls.model.RemoveAllCallLogsDialogModel
import org.linphone.ui.main.calls.model.ConfirmationDialogModel
import org.linphone.ui.main.contacts.model.NumberOrAddressPickerDialogModel
import org.linphone.ui.voip.model.ZrtpSasConfirmationDialogModel
@ -66,9 +67,10 @@ class DialogUtils {
dialog.window?.setBackgroundDrawable(d)
return dialog
}
fun getRemoveAllCallLogsConfirmationDialog(
context: Context,
model: RemoveAllCallLogsDialogModel
model: ConfirmationDialogModel
): Dialog {
val dialog = Dialog(context, R.style.Theme_LinphoneDialog)
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
@ -95,6 +97,35 @@ class DialogUtils {
return dialog
}
fun getCancelContactChangesConfirmationDialog(
context: Context,
model: ConfirmationDialogModel
): Dialog {
val dialog = Dialog(context, R.style.Theme_LinphoneDialog)
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
val binding: DialogCancelContactChangesBinding = DataBindingUtil.inflate(
LayoutInflater.from(context),
R.layout.dialog_cancel_contact_changes,
null,
false
)
binding.viewModel = model
dialog.setContentView(binding.root)
val d: Drawable = ColorDrawable(
ContextCompat.getColor(dialog.context, R.color.dialog_background)
)
d.alpha = 166
dialog.window
?.setLayout(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT
)
dialog.window?.setBackgroundDrawable(d)
return dialog
}
fun getZrtpSasConfirmationDialog(
context: Context,
viewModel: ZrtpSasConfirmationDialogModel

View file

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<import type="android.graphics.Typeface" />
<variable
name="viewModel"
type="org.linphone.ui.main.calls.model.ConfirmationDialogModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:onClick="@{() -> viewModel.dismiss()}"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusable="true">
<ImageView
android:id="@+id/dialog_background_shadow"
android:layout_width="0dp"
android:layout_height="0dp"
android:src="@drawable/shape_dialog_orange_shadow"
app:layout_constraintBottom_toBottomOf="@id/anchor"
app:layout_constraintEnd_toEndOf="@id/dialog_background"
app:layout_constraintStart_toStartOf="@id/dialog_background"
app:layout_constraintTop_toTopOf="@id/dialog_background" />
<ImageView
android:id="@+id/dialog_background"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:layout_marginBottom="2dp"
android:src="@drawable/shape_dialog_background"
app:layout_constraintBottom_toBottomOf="@id/anchor"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/title" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style_800"
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:paddingTop="25dp"
android:text="Don't save changes?"
android:textSize="16sp"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintBottom_toTopOf="@id/message"
app:layout_constraintStart_toStartOf="@id/dialog_background"
app:layout_constraintEnd_toEndOf="@id/dialog_background"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/message"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
android:layout_marginTop="10dp"
android:text="All changes will be lost"
android:textSize="14sp"
app:layout_constraintBottom_toTopOf="@id/cancel"
app:layout_constraintStart_toStartOf="@id/dialog_background"
app:layout_constraintEnd_toEndOf="@id/dialog_background"
app:layout_constraintTop_toBottomOf="@id/title" />
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> viewModel.dismiss()}"
style="@style/default_text_style_600"
android:id="@+id/cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
android:paddingBottom="13dp"
android:paddingTop="13dp"
android:gravity="center"
android:background="@drawable/secondary_button_background"
android:text="Cancel"
android:textSize="18sp"
android:textColor="@color/secondary_button_label_color"
app:layout_constraintStart_toStartOf="@id/dialog_background"
app:layout_constraintEnd_toEndOf="@id/dialog_background"
app:layout_constraintTop_toBottomOf="@id/message"
app:layout_constraintBottom_toTopOf="@id/confirm"/>
<androidx.appcompat.widget.AppCompatTextView
android:onClick="@{() -> viewModel.confirmRemoval()}"
style="@style/default_text_style_600"
android:id="@+id/confirm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
android:paddingBottom="13dp"
android:paddingTop="13dp"
android:gravity="center"
android:background="@drawable/primary_button_background"
android:text="Ok"
android:textSize="18sp"
android:textColor="@color/primary_button_label_color"
app:layout_constraintStart_toStartOf="@id/dialog_background"
app:layout_constraintEnd_toEndOf="@id/dialog_background"
app:layout_constraintTop_toBottomOf="@id/cancel"
app:layout_constraintBottom_toTopOf="@id/anchor"/>
<View
android:id="@+id/anchor"
android:layout_width="wrap_content"
android:layout_height="20dp"
app:layout_constraintTop_toBottomOf="@id/confirm"
app:layout_constraintStart_toStartOf="@id/dialog_background"
app:layout_constraintEnd_toEndOf="@id/dialog_background"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View file

@ -8,7 +8,7 @@
<import type="android.graphics.Typeface" />
<variable
name="viewModel"
type="org.linphone.ui.main.calls.model.RemoveAllCallLogsDialogModel" />
type="org.linphone.ui.main.calls.model.ConfirmationDialogModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout