mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-04-30 18:56:23 +00:00
Added confirmation dialog when going back during new/edit contact
This commit is contained in:
parent
838f9f592c
commit
4ac78c5b30
7 changed files with 208 additions and 8 deletions
|
|
@ -40,7 +40,7 @@ import org.linphone.databinding.CallsListFragmentBinding
|
||||||
import org.linphone.databinding.CallsListPopupMenuBinding
|
import org.linphone.databinding.CallsListPopupMenuBinding
|
||||||
import org.linphone.ui.main.MainActivity
|
import org.linphone.ui.main.MainActivity
|
||||||
import org.linphone.ui.main.calls.adapter.CallsListAdapter
|
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.calls.viewmodel.CallsListViewModel
|
||||||
import org.linphone.ui.main.fragment.GenericFragment
|
import org.linphone.ui.main.fragment.GenericFragment
|
||||||
import org.linphone.utils.DialogUtils
|
import org.linphone.utils.DialogUtils
|
||||||
|
|
@ -179,7 +179,7 @@ class CallsListFragment : GenericFragment() {
|
||||||
)
|
)
|
||||||
|
|
||||||
popupView.setDeleteAllHistoryClickListener {
|
popupView.setDeleteAllHistoryClickListener {
|
||||||
val model = RemoveAllCallLogsDialogModel()
|
val model = ConfirmationDialogModel()
|
||||||
val dialog = DialogUtils.getRemoveAllCallLogsConfirmationDialog(
|
val dialog = DialogUtils.getRemoveAllCallLogsConfirmationDialog(
|
||||||
requireActivity(),
|
requireActivity(),
|
||||||
model
|
model
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ package org.linphone.ui.main.calls.model
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import org.linphone.utils.Event
|
import org.linphone.utils.Event
|
||||||
|
|
||||||
class RemoveAllCallLogsDialogModel() {
|
class ConfirmationDialogModel() {
|
||||||
val dismissEvent = MutableLiveData<Event<Boolean>>()
|
val dismissEvent = MutableLiveData<Event<Boolean>>()
|
||||||
|
|
||||||
val confirmRemovalEvent = MutableLiveData<Event<Boolean>>()
|
val confirmRemovalEvent = MutableLiveData<Event<Boolean>>()
|
||||||
|
|
@ -38,9 +38,11 @@ import org.linphone.R
|
||||||
import org.linphone.core.tools.Log
|
import org.linphone.core.tools.Log
|
||||||
import org.linphone.databinding.ContactNewOrEditFragmentBinding
|
import org.linphone.databinding.ContactNewOrEditFragmentBinding
|
||||||
import org.linphone.ui.main.MainActivity
|
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.model.NewOrEditNumberOrAddressModel
|
||||||
import org.linphone.ui.main.contacts.viewmodel.ContactNewOrEditViewModel
|
import org.linphone.ui.main.contacts.viewmodel.ContactNewOrEditViewModel
|
||||||
import org.linphone.ui.main.fragment.GenericFragment
|
import org.linphone.ui.main.fragment.GenericFragment
|
||||||
|
import org.linphone.utils.DialogUtils
|
||||||
import org.linphone.utils.FileUtils
|
import org.linphone.utils.FileUtils
|
||||||
|
|
||||||
class EditContactFragment : GenericFragment() {
|
class EditContactFragment : GenericFragment() {
|
||||||
|
|
@ -101,7 +103,26 @@ class EditContactFragment : GenericFragment() {
|
||||||
viewModel.findFriendByRefKey(refKey)
|
viewModel.findFriendByRefKey(refKey)
|
||||||
|
|
||||||
binding.setCancelClickListener {
|
binding.setCancelClickListener {
|
||||||
|
val model = ConfirmationDialogModel()
|
||||||
|
val dialog = DialogUtils.getCancelContactChangesConfirmationDialog(
|
||||||
|
requireActivity(),
|
||||||
|
model
|
||||||
|
)
|
||||||
|
|
||||||
|
model.dismissEvent.observe(viewLifecycleOwner) {
|
||||||
|
it.consume {
|
||||||
|
dialog.dismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
model.confirmRemovalEvent.observe(viewLifecycleOwner) {
|
||||||
|
it.consume {
|
||||||
goBack()
|
goBack()
|
||||||
|
dialog.dismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dialog.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.setPickImageClickListener {
|
binding.setPickImageClickListener {
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,11 @@ import org.linphone.R
|
||||||
import org.linphone.core.tools.Log
|
import org.linphone.core.tools.Log
|
||||||
import org.linphone.databinding.ContactNewOrEditFragmentBinding
|
import org.linphone.databinding.ContactNewOrEditFragmentBinding
|
||||||
import org.linphone.ui.main.MainActivity
|
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.model.NewOrEditNumberOrAddressModel
|
||||||
import org.linphone.ui.main.contacts.viewmodel.ContactNewOrEditViewModel
|
import org.linphone.ui.main.contacts.viewmodel.ContactNewOrEditViewModel
|
||||||
import org.linphone.ui.main.fragment.GenericFragment
|
import org.linphone.ui.main.fragment.GenericFragment
|
||||||
|
import org.linphone.utils.DialogUtils
|
||||||
import org.linphone.utils.Event
|
import org.linphone.utils.Event
|
||||||
import org.linphone.utils.FileUtils
|
import org.linphone.utils.FileUtils
|
||||||
|
|
||||||
|
|
@ -95,7 +97,26 @@ class NewContactFragment : GenericFragment() {
|
||||||
viewModel.findFriendByRefKey("")
|
viewModel.findFriendByRefKey("")
|
||||||
|
|
||||||
binding.setCancelClickListener {
|
binding.setCancelClickListener {
|
||||||
|
val model = ConfirmationDialogModel()
|
||||||
|
val dialog = DialogUtils.getCancelContactChangesConfirmationDialog(
|
||||||
|
requireActivity(),
|
||||||
|
model
|
||||||
|
)
|
||||||
|
|
||||||
|
model.dismissEvent.observe(viewLifecycleOwner) {
|
||||||
|
it.consume {
|
||||||
|
dialog.dismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
model.confirmRemovalEvent.observe(viewLifecycleOwner) {
|
||||||
|
it.consume {
|
||||||
goBack()
|
goBack()
|
||||||
|
dialog.dismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dialog.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.setPickImageClickListener {
|
binding.setPickImageClickListener {
|
||||||
|
|
|
||||||
|
|
@ -29,10 +29,11 @@ import android.view.WindowManager
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.databinding.DataBindingUtil
|
import androidx.databinding.DataBindingUtil
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
|
import org.linphone.databinding.DialogCancelContactChangesBinding
|
||||||
import org.linphone.databinding.DialogConfirmZrtpSasBinding
|
import org.linphone.databinding.DialogConfirmZrtpSasBinding
|
||||||
import org.linphone.databinding.DialogPickNumberOrAddressBinding
|
import org.linphone.databinding.DialogPickNumberOrAddressBinding
|
||||||
import org.linphone.databinding.DialogRemoveAllCallLogsBinding
|
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.main.contacts.model.NumberOrAddressPickerDialogModel
|
||||||
import org.linphone.ui.voip.model.ZrtpSasConfirmationDialogModel
|
import org.linphone.ui.voip.model.ZrtpSasConfirmationDialogModel
|
||||||
|
|
||||||
|
|
@ -66,9 +67,10 @@ class DialogUtils {
|
||||||
dialog.window?.setBackgroundDrawable(d)
|
dialog.window?.setBackgroundDrawable(d)
|
||||||
return dialog
|
return dialog
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getRemoveAllCallLogsConfirmationDialog(
|
fun getRemoveAllCallLogsConfirmationDialog(
|
||||||
context: Context,
|
context: Context,
|
||||||
model: RemoveAllCallLogsDialogModel
|
model: ConfirmationDialogModel
|
||||||
): Dialog {
|
): Dialog {
|
||||||
val dialog = Dialog(context, R.style.Theme_LinphoneDialog)
|
val dialog = Dialog(context, R.style.Theme_LinphoneDialog)
|
||||||
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
|
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
|
||||||
|
|
@ -95,6 +97,35 @@ class DialogUtils {
|
||||||
return dialog
|
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(
|
fun getZrtpSasConfirmationDialog(
|
||||||
context: Context,
|
context: Context,
|
||||||
viewModel: ZrtpSasConfirmationDialogModel
|
viewModel: ZrtpSasConfirmationDialogModel
|
||||||
|
|
|
||||||
127
app/src/main/res/layout/dialog_cancel_contact_changes.xml
Normal file
127
app/src/main/res/layout/dialog_cancel_contact_changes.xml
Normal 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>
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
<import type="android.graphics.Typeface" />
|
<import type="android.graphics.Typeface" />
|
||||||
<variable
|
<variable
|
||||||
name="viewModel"
|
name="viewModel"
|
||||||
type="org.linphone.ui.main.calls.model.RemoveAllCallLogsDialogModel" />
|
type="org.linphone.ui.main.calls.model.ConfirmationDialogModel" />
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue