diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/EditContactFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/EditContactFragment.kt index 1c380d583..2cfec619d 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/EditContactFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/EditContactFragment.kt @@ -31,6 +31,7 @@ import androidx.core.view.doOnPreDraw import androidx.databinding.DataBindingUtil import androidx.databinding.ViewDataBinding import androidx.lifecycle.lifecycleScope +import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import androidx.navigation.navGraphViewModels import kotlinx.coroutines.launch @@ -55,7 +56,7 @@ class EditContactFragment : GenericFragment() { private lateinit var binding: ContactNewOrEditFragmentBinding private val viewModel: ContactNewOrEditViewModel by navGraphViewModels( - R.id.main_nav_graph + R.id.contact_nav_graph ) private val args: EditContactFragmentArgs by navArgs() @@ -114,7 +115,7 @@ class EditContactFragment : GenericFragment() { model.confirmRemovalEvent.observe(viewLifecycleOwner) { it.consume { - goBack() + findNavController().popBackStack() dialog.dismiss() } } @@ -134,7 +135,7 @@ class EditContactFragment : GenericFragment() { getString(R.string.contact_editor_saved_changes_toast), R.drawable.info ) - goBack() + findNavController().popBackStack() } else { (requireActivity() as MainActivity).showRedToast( getString(R.string.contact_editor_error_saving_changes_toast), diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt index 8e242b701..e7eb41230 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt @@ -31,6 +31,7 @@ import androidx.annotation.UiThread import androidx.databinding.DataBindingUtil import androidx.databinding.ViewDataBinding import androidx.lifecycle.lifecycleScope +import androidx.navigation.fragment.findNavController import androidx.navigation.navGraphViewModels import kotlinx.coroutines.launch import org.linphone.BR @@ -129,7 +130,8 @@ class NewContactFragment : GenericFragment() { it.consume { refKey -> if (refKey.isNotEmpty()) { backPressedCallback.isEnabled = false - goBack() + findNavController().popBackStack() + sharedViewModel.showContactEvent.value = Event(refKey) (requireActivity() as MainActivity).showGreenToast( getString(R.string.contact_editor_saved_contact_toast), @@ -222,7 +224,7 @@ class NewContactFragment : GenericFragment() { model.confirmRemovalEvent.observe(viewLifecycleOwner) { it.consume { backPressedCallback.isEnabled = false - goBack() + findNavController().popBackStack() dialog.dismiss() } } diff --git a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactNewOrEditViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactNewOrEditViewModel.kt index 309249de9..78358c603 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactNewOrEditViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactNewOrEditViewModel.kt @@ -81,6 +81,8 @@ class ContactNewOrEditViewModel @UiThread constructor() : ViewModel() { @UiThread fun findFriendByRefKey(refKey: String?) { + reset() + coreContext.postOnCoreThread { core -> friend = if (refKey.isNullOrEmpty()) { core.createFriend() @@ -257,4 +259,17 @@ class ContactNewOrEditViewModel @UiThread constructor() : ViewModel() { private fun isSaveButtonEnabled(): Boolean { return firstName.value.orEmpty().isNotEmpty() || lastName.value.orEmpty().isNotEmpty() } + + @UiThread + private fun reset() { + isEdit.value = false + picturePath.value = "" + firstName.value = "" + lastName.value = "" + sipAddresses.clear() + phoneNumbers.clear() + company.value = "" + jobTitle.value = "" + saveButtonEnabled.value = false + } } diff --git a/app/src/main/java/org/linphone/ui/main/help/fragment/DebugFragment.kt b/app/src/main/java/org/linphone/ui/main/help/fragment/DebugFragment.kt new file mode 100644 index 000000000..b5f807a65 --- /dev/null +++ b/app/src/main/java/org/linphone/ui/main/help/fragment/DebugFragment.kt @@ -0,0 +1,102 @@ +/* + * 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.help.fragment + +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.navigation.navGraphViewModels +import org.linphone.R +import org.linphone.databinding.HelpDebugFragmentBinding +import org.linphone.ui.main.MainActivity +import org.linphone.ui.main.fragment.GenericFragment +import org.linphone.ui.main.help.viewmodel.HelpViewModel +import org.linphone.utils.AppUtils + +class DebugFragment : GenericFragment() { + companion object { + private const val TAG = "[Debug Fragment]" + } + + private lateinit var binding: HelpDebugFragmentBinding + + val viewModel: HelpViewModel by navGraphViewModels( + R.id.main_nav_graph + ) + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = HelpDebugFragmentBinding.inflate(layoutInflater) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding.lifecycleOwner = viewLifecycleOwner + binding.viewModel = viewModel + + binding.setBackClickListener { + goBack() + } + + viewModel.debugLogsCleanedEvent.observe(viewLifecycleOwner) { + it.consume { + (requireActivity() as MainActivity).showGreenToast( + getString(R.string.help_advanced_debug_logs_cleaned_toast_message), + R.drawable.info + ) + } + } + + viewModel.uploadDebugLogsFinishedEvent.observe(viewLifecycleOwner) { + it.consume { url -> + val clipboard = + requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val clip = ClipData.newPlainText("Logs url", url) + clipboard.setPrimaryClip(clip) + + (requireActivity() as MainActivity).showGreenToast( + getString( + R.string.help_advanced_debug_logs_url_copied_into_clipboard_toast_message + ), + R.drawable.info + ) + + AppUtils.shareUploadedLogsUrl(requireActivity(), url) + } + } + + viewModel.uploadDebugLogsErrorEvent.observe(viewLifecycleOwner) { + it.consume { + (requireActivity() as MainActivity).showRedToast( + getString(R.string.help_advanced_debug_logs_upload_error_toast_message), + R.drawable.warning_circle + ) + } + } + } +} diff --git a/app/src/main/java/org/linphone/ui/main/settings/fragment/HelpFragment.kt b/app/src/main/java/org/linphone/ui/main/help/fragment/HelpFragment.kt similarity index 69% rename from app/src/main/java/org/linphone/ui/main/settings/fragment/HelpFragment.kt rename to app/src/main/java/org/linphone/ui/main/help/fragment/HelpFragment.kt index f471d7d76..165f44113 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/fragment/HelpFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/help/fragment/HelpFragment.kt @@ -1,8 +1,5 @@ -package org.linphone.ui.main.settings.fragment +package org.linphone.ui.main.help.fragment -import android.content.ClipData -import android.content.ClipboardManager -import android.content.Context import android.content.Intent import android.net.Uri import android.os.Bundle @@ -10,14 +7,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.annotation.UiThread +import androidx.navigation.fragment.findNavController import androidx.navigation.navGraphViewModels import org.linphone.R import org.linphone.core.tools.Log import org.linphone.databinding.HelpFragmentBinding import org.linphone.ui.main.MainActivity import org.linphone.ui.main.fragment.GenericFragment -import org.linphone.ui.main.settings.viewmodel.HelpViewModel -import org.linphone.utils.AppUtils +import org.linphone.ui.main.help.viewmodel.HelpViewModel @UiThread class HelpFragment : GenericFragment() { @@ -49,6 +46,11 @@ class HelpFragment : GenericFragment() { goBack() } + binding.setDebugClickListener { + val action = HelpFragmentDirections.actionHelpFragmentToDebugFragment() + findNavController().navigate(action) + } + binding.setPrivacyPolicyClickListener { val url = getString(R.string.privacy_policy_url) try { @@ -111,41 +113,5 @@ class HelpFragment : GenericFragment() { ) } } - - viewModel.debugLogsCleanedEvent.observe(viewLifecycleOwner) { - it.consume { - (requireActivity() as MainActivity).showGreenToast( - getString(R.string.help_advanced_debug_logs_cleaned_toast_message), - R.drawable.info - ) - } - } - - viewModel.uploadDebugLogsFinishedEvent.observe(viewLifecycleOwner) { - it.consume { url -> - val clipboard = - requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - val clip = ClipData.newPlainText("Logs url", url) - clipboard.setPrimaryClip(clip) - - (requireActivity() as MainActivity).showGreenToast( - getString( - R.string.help_advanced_debug_logs_url_copied_into_clipboard_toast_message - ), - R.drawable.info - ) - - AppUtils.shareUploadedLogsUrl(requireActivity(), url) - } - } - - viewModel.uploadDebugLogsErrorEvent.observe(viewLifecycleOwner) { - it.consume { - (requireActivity() as MainActivity).showRedToast( - getString(R.string.help_advanced_debug_logs_upload_error_toast_message), - R.drawable.warning_circle - ) - } - } } } diff --git a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/HelpViewModel.kt b/app/src/main/java/org/linphone/ui/main/help/viewmodel/HelpViewModel.kt similarity index 99% rename from app/src/main/java/org/linphone/ui/main/settings/viewmodel/HelpViewModel.kt rename to app/src/main/java/org/linphone/ui/main/help/viewmodel/HelpViewModel.kt index 1c8f328ae..a0586da94 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/HelpViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/help/viewmodel/HelpViewModel.kt @@ -17,7 +17,7 @@ * 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.viewmodel +package org.linphone.ui.main.help.viewmodel import androidx.annotation.UiThread import androidx.annotation.WorkerThread diff --git a/app/src/main/res/drawable/secondary_cell_background.xml b/app/src/main/res/drawable/secondary_cell_background.xml index b0e3d17fd..269221cf3 100644 --- a/app/src/main/res/drawable/secondary_cell_background.xml +++ b/app/src/main/res/drawable/secondary_cell_background.xml @@ -5,5 +5,5 @@ + android:drawable="@color/transparent_color" /> \ No newline at end of file diff --git a/app/src/main/res/layout/account_list_cell.xml b/app/src/main/res/layout/account_list_cell.xml index 8782df3d4..133bedee5 100644 --- a/app/src/main/res/layout/account_list_cell.xml +++ b/app/src/main/res/layout/account_list_cell.xml @@ -15,7 +15,7 @@ android:onClick="@{() -> model.setAsDefault()}" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@color/white"> + android:background="@{model.isDefault ? @color/transparent_light_orange : @color/white, default=@color/transparent_light_orange}"> @@ -85,26 +87,12 @@ android:text="@{model.registrationState, default=@string/drawer_menu_account_connection_status_connected}" android:textColor="@{model.isConnected ? @color/green_online : model.inError ? @color/red_danger : @color/gray_1, default=@color/green_online}" android:textSize="12sp" + app:layout_constraintHorizontal_bias="0" app:layout_constraintStart_toStartOf="@id/name" + app:layout_constraintEnd_toStartOf="@id/menu" app:layout_constraintTop_toBottomOf="@id/name" app:layout_constraintBottom_toTopOf="@id/separator"/> - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@id/title" + app:layout_constraintBottom_toBottomOf="parent"> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/app/src/main/res/layout/contact_device_trust_list_cell.xml b/app/src/main/res/layout/contact_device_trust_list_cell.xml index 0f1ad5131..8db0dd2b2 100644 --- a/app/src/main/res/layout/contact_device_trust_list_cell.xml +++ b/app/src/main/res/layout/contact_device_trust_list_cell.xml @@ -15,8 +15,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="8dp" - android:paddingBottom="8dp" - android:background="@drawable/secondary_cell_background"> + android:paddingBottom="8dp"> diff --git a/app/src/main/res/layout/drawer_menu.xml b/app/src/main/res/layout/drawer_menu.xml index 129becab3..74e4b7002 100644 --- a/app/src/main/res/layout/drawer_menu.xml +++ b/app/src/main/res/layout/drawer_menu.xml @@ -61,6 +61,7 @@ android:layout_height="0dp" android:layout_marginTop="20dp" android:layout_marginBottom="20dp" + android:fillViewport="true" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/brand_name" @@ -69,17 +70,35 @@ - + android:layout_height="wrap_content" + android:src="@drawable/illu" + android:layout_margin="10dp" + app:layout_constraintHeight_max="200dp" + app:layout_constraintBottom_toTopOf="@id/no_contacts_label" + app:layout_constraintDimensionRatio="1:1" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/background" /> + + diff --git a/app/src/main/res/layout/help_debug_fragment.xml b/app/src/main/res/layout/help_debug_fragment.xml new file mode 100644 index 000000000..6ff00cb0f --- /dev/null +++ b/app/src/main/res/layout/help_debug_fragment.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/help_fragment.xml b/app/src/main/res/layout/help_fragment.xml index d0c883c43..d2113c50b 100644 --- a/app/src/main/res/layout/help_fragment.xml +++ b/app/src/main/res/layout/help_fragment.xml @@ -17,9 +17,12 @@ + + type="org.linphone.ui.main.help.viewmodel.HelpViewModel" /> + app:layout_constraintBottom_toBottomOf="@id/debug_title" /> - - - - - - - - + app:layout_constraintEnd_toEndOf="parent"/> diff --git a/app/src/main/res/layout/settings_fragment.xml b/app/src/main/res/layout/settings_fragment.xml index 99b281838..235db486c 100644 --- a/app/src/main/res/layout/settings_fragment.xml +++ b/app/src/main/res/layout/settings_fragment.xml @@ -13,524 +13,535 @@ type="org.linphone.ui.main.settings.viewmodel.SettingsViewModel" /> - + android:layout_height="match_parent"> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + \ 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 284cc7f39..a8363de33 100644 --- a/app/src/main/res/navigation/main_nav_graph.xml +++ b/app/src/main/res/navigation/main_nav_graph.xml @@ -56,7 +56,8 @@ app:enterAnim="@anim/slide_in_right" app:exitAnim="@anim/slide_out_left" app:popEnterAnim="@anim/slide_in_left" - app:popExitAnim="@anim/slide_out_right" /> + app:popExitAnim="@anim/slide_out_right" + app:launchSingleTop="true" /> + tools:layout="@layout/help_fragment" > + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 60a2c658c..c56828f37 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -21,6 +21,7 @@ #FFEACB #FFB266 #A622334D + #1ABF4601 #EEF7F8 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1b9622208..1b13e3b35 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -111,7 +111,6 @@ Phone number already used Invalid phone number and/or prefix - Default Manage the profile Connected Refreshing @@ -132,6 +131,7 @@ Check update Contribute on &appName; translation Advanced + Troubleshooting Enable/disable debug logs Blah Clean logs