From 27063c9e4542358fdc9089cce152fcf865617669 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 13 Sep 2023 10:30:40 +0200 Subject: [PATCH] Added profile mode fragment for account params --- .../assistant/fragment/ProfileModeFragment.kt | 7 +- .../linphone/ui/main/model/AccountModel.kt | 6 +- .../fragment/AccountProfileFragment.kt | 2 +- .../fragment/AccountProfileModeFragment.kt | 72 +++++ .../viewmodel/AccountProfileViewModel.kt | 2 +- .../java/org/linphone/utils/DialogUtils.kt | 23 ++ .../res/layout/account_profile_fragment.xml | 7 +- .../account_profile_secure_mode_fragment.xml | 273 ++++++++++++++++++ .../res/layout/assistant_login_fragment.xml | 1 + .../layout/assistant_secure_mode_fragment.xml | 21 +- ...third_party_sip_account_login_fragment.xml | 2 + ...ird_party_sip_account_warning_fragment.xml | 4 +- .../dialog_account_modes_explanation.xml | 107 +++++++ .../main/res/navigation/main_nav_graph.xml | 12 +- app/src/main/res/values/strings.xml | 10 + 15 files changed, 525 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileModeFragment.kt create mode 100644 app/src/main/res/layout/account_profile_secure_mode_fragment.xml create mode 100644 app/src/main/res/layout/dialog_account_modes_explanation.xml diff --git a/app/src/main/java/org/linphone/ui/assistant/fragment/ProfileModeFragment.kt b/app/src/main/java/org/linphone/ui/assistant/fragment/ProfileModeFragment.kt index 51882d61e..fc3ab2afa 100644 --- a/app/src/main/java/org/linphone/ui/assistant/fragment/ProfileModeFragment.kt +++ b/app/src/main/java/org/linphone/ui/assistant/fragment/ProfileModeFragment.kt @@ -27,6 +27,7 @@ import androidx.annotation.UiThread import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import org.linphone.databinding.AssistantSecureModeFragmentBinding +import org.linphone.utils.DialogUtils @UiThread class ProfileModeFragment : Fragment() { @@ -59,11 +60,13 @@ class ProfileModeFragment : Fragment() { } binding.setDefaultModeTooltipClickListener { - // TODO + val dialog = DialogUtils.getAccountModeExplanationDialog(requireActivity(), true) + dialog.show() } binding.setInteropModeTooltipClickListener { - // TODO + val dialog = DialogUtils.getAccountModeExplanationDialog(requireActivity(), false) + dialog.show() } } } diff --git a/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt b/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt index bcb76b138..d11dd8e56 100644 --- a/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt +++ b/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt @@ -133,8 +133,10 @@ class AccountModel @WorkerThread constructor( initials.postValue(LinphoneUtils.getInitials(name)) val pictureUri = account.params.pictureUri.orEmpty() - avatar.postValue(pictureUri) - Log.d("$TAG Account picture URI is [$pictureUri]") + if (pictureUri != avatar.value) { + avatar.postValue(pictureUri) + Log.d("$TAG Account picture URI is [$pictureUri]") + } isDefault.postValue(coreContext.core.defaultAccount == account) diff --git a/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileFragment.kt b/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileFragment.kt index 2a1ac9ab4..add59a80e 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileFragment.kt @@ -82,7 +82,7 @@ class AccountProfileFragment : GenericFragment() { } binding.setChangeModeClickListener { - val action = AccountProfileFragmentDirections.actionAccountProfileFragmentToProfileModeFragment() + val action = AccountProfileFragmentDirections.actionAccountProfileFragmentToAccountProfileModeFragment() findNavController().navigate(action) } diff --git a/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileModeFragment.kt b/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileModeFragment.kt new file mode 100644 index 000000000..ff55b9f57 --- /dev/null +++ b/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileModeFragment.kt @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2010-2023 Belledonne Communications SARL. + * + * This file is part of linphone-android + * (see https://www.linphone.org). + * + * 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, either version 3 of the License, or + * (at your option) any later version. + * + * 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 . + */ +package org.linphone.ui.main.settings.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.annotation.UiThread +import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController +import org.linphone.databinding.AccountProfileSecureModeFragmentBinding +import org.linphone.utils.DialogUtils + +@UiThread +class AccountProfileModeFragment : Fragment() { + companion object { + private const val TAG = "[Account Profile Mode Fragment]" + } + + private lateinit var binding: AccountProfileSecureModeFragmentBinding + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = AccountProfileSecureModeFragmentBinding.inflate(layoutInflater) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + binding.lifecycleOwner = viewLifecycleOwner + + binding.setBackClickListener { + findNavController().popBackStack() + } + + binding.setContinueClickListener { + findNavController().popBackStack() + } + + binding.setDefaultModeTooltipClickListener { + val dialog = DialogUtils.getAccountModeExplanationDialog(requireActivity(), true) + dialog.show() + } + + binding.setInteropModeTooltipClickListener { + val dialog = DialogUtils.getAccountModeExplanationDialog(requireActivity(), false) + dialog.show() + } + } +} diff --git a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt index c1e85af3e..02549cc33 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt @@ -58,7 +58,7 @@ class AccountProfileViewModel @UiThread constructor() : ViewModel() { account = found accountModel.postValue(AccountModel(account)) currentMode.postValue( - "Mode ${AppUtils.getString(R.string.assistant_secure_mode_default_title)}" + AppUtils.getString(R.string.manage_account_secure_mode_default_title) ) // TODO FIXME registerEnabled.postValue(account.params.isRegisterEnabled) diff --git a/app/src/main/java/org/linphone/utils/DialogUtils.kt b/app/src/main/java/org/linphone/utils/DialogUtils.kt index 4b0d0fc12..06955a9e6 100644 --- a/app/src/main/java/org/linphone/utils/DialogUtils.kt +++ b/app/src/main/java/org/linphone/utils/DialogUtils.kt @@ -32,6 +32,7 @@ import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil import androidx.databinding.ViewDataBinding import org.linphone.R +import org.linphone.databinding.DialogAccountModesExplanationBinding import org.linphone.databinding.DialogAssistantAcceptConditionsAndPolicyBinding import org.linphone.databinding.DialogAssistantCreateAccountConfirmPhoneNumberBinding import org.linphone.databinding.DialogCancelContactChangesBinding @@ -82,6 +83,28 @@ class DialogUtils { return getDialog(context, binding) } + @UiThread + fun getAccountModeExplanationDialog( + context: Context, + defaultMode: Boolean + ): Dialog { + lateinit var dialog: Dialog + + val binding: DialogAccountModesExplanationBinding = DataBindingUtil.inflate( + LayoutInflater.from(context), + R.layout.dialog_account_modes_explanation, + null, + false + ) + binding.defaultMode = defaultMode + binding.setDismissClickListener { + dialog.dismiss() + } + + dialog = getDialog(context, binding) + return dialog + } + @UiThread fun getNumberOrAddressPickerDialog( context: Context, diff --git a/app/src/main/res/layout/account_profile_fragment.xml b/app/src/main/res/layout/account_profile_fragment.xml index 7e6b182c0..455b9fe1f 100644 --- a/app/src/main/res/layout/account_profile_fragment.xml +++ b/app/src/main/res/layout/account_profile_fragment.xml @@ -28,6 +28,7 @@ - @@ -302,7 +303,7 @@ android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginEnd="16dp" - android:text="@{viewModel.currentMode, default=@string/assistant_secure_mode_default_title}" + android:text="@{viewModel.currentMode, default=@string/manage_account_secure_mode_default_title}" android:textSize="13sp" android:textColor="@color/gray_9" app:layout_constraintTop_toTopOf="@id/mode_background" diff --git a/app/src/main/res/layout/account_profile_secure_mode_fragment.xml b/app/src/main/res/layout/account_profile_secure_mode_fragment.xml new file mode 100644 index 000000000..0bcc7091d --- /dev/null +++ b/app/src/main/res/layout/account_profile_secure_mode_fragment.xml @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/assistant_login_fragment.xml b/app/src/main/res/layout/assistant_login_fragment.xml index 4058fc8ad..6793cd5bb 100644 --- a/app/src/main/res/layout/assistant_login_fragment.xml +++ b/app/src/main/res/layout/assistant_login_fragment.xml @@ -28,6 +28,7 @@ - @@ -121,7 +123,7 @@ android:paddingBottom="21dp" android:paddingStart="17dp" android:paddingEnd="17dp" - android:text="Explication :\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam velit sapien, egestas sit amet dictum eget, condimentum a ligula. " + android:text="@string/manage_account_secure_mode_default_summary" android:textSize="14sp" android:gravity="center" app:layout_constraintTop_toBottomOf="@id/default_mode" @@ -213,7 +215,7 @@ app:layout_constraintEnd_toEndOf="@id/image2" app:layout_constraintBottom_toBottomOf="@id/image2"/> - @@ -253,7 +256,7 @@ android:paddingBottom="21dp" android:paddingStart="17dp" android:paddingEnd="17dp" - android:text="Explication :\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam velit sapien, egestas sit amet dictum eget, condimentum a ligula. " + android:text="@string/dialog_account_secure_mode_interoperable_summary" android:textSize="14sp" android:gravity="center" app:layout_constraintTop_toBottomOf="@id/interop_mode" @@ -266,19 +269,21 @@ android:id="@+id/login" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="138dp" + android:layout_marginTop="32dp" + android:layout_marginBottom="32dp" android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:paddingTop="@dimen/primary_secondary_buttons_label_padding" android:paddingBottom="@dimen/primary_secondary_buttons_label_padding" android:paddingStart="20dp" android:paddingEnd="20dp" - android:text="@string/dialog_continue" + android:text="@string/assistant_secure_mode_finish_account_login" android:textSize="18sp" android:textColor="@color/primary_button_label_color" android:gravity="center" android:background="@drawable/primary_button_background" app:layout_constraintWidth_max="@dimen/button_max_width" + app:layout_constraintVertical_bias="1" app:layout_constraintTop_toBottomOf="@id/interop_mode_summary" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout/assistant_third_party_sip_account_login_fragment.xml b/app/src/main/res/layout/assistant_third_party_sip_account_login_fragment.xml index ea1213a32..c9e1d86c4 100644 --- a/app/src/main/res/layout/assistant_third_party_sip_account_login_fragment.xml +++ b/app/src/main/res/layout/assistant_third_party_sip_account_login_fragment.xml @@ -16,6 +16,7 @@ diff --git a/app/src/main/res/layout/assistant_third_party_sip_account_warning_fragment.xml b/app/src/main/res/layout/assistant_third_party_sip_account_warning_fragment.xml index b78be72d6..7f915313b 100644 --- a/app/src/main/res/layout/assistant_third_party_sip_account_warning_fragment.xml +++ b/app/src/main/res/layout/assistant_third_party_sip_account_warning_fragment.xml @@ -22,6 +22,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/main_nav_graph.xml b/app/src/main/res/navigation/main_nav_graph.xml index eb46e8929..284cc7f39 100644 --- a/app/src/main/res/navigation/main_nav_graph.xml +++ b/app/src/main/res/navigation/main_nav_graph.xml @@ -41,8 +41,8 @@ android:name="accountIdentity" app:argType="string" /> + android:id="@+id/accountProfileModeFragment" + android:name="org.linphone.ui.main.settings.fragment.AccountProfileModeFragment" + android:label="AccountProfileModeFragment" + tools:layout="@layout/account_profile_secure_mode_fragment"/> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 25689c64c..89b7ba198 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -41,6 +41,7 @@ OK Call Delete + Close Do not show this dialog anymore General terms & privacy policy blah blah blah @@ -58,6 +59,8 @@ Which canal do you choose? Do you really want to delete all calls history? All calls will be deleted of the history + Blah + Blah QR code validated! Invalid QR code! @@ -89,6 +92,7 @@ You may change that mode later Default Interoperable + Continue Default Manage the profile @@ -116,6 +120,12 @@ International Prefix Account settings Delete account + Choose account mode + Apply + Default mode + Interoperable mode + Blah + Blah Online Online on %s