diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountValidationFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountValidationFragment.kt index 41b1de32a..928424315 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountValidationFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountValidationFragment.kt @@ -24,6 +24,7 @@ import android.content.Context.CLIPBOARD_SERVICE import android.os.Bundle import android.view.View import androidx.lifecycle.ViewModelProvider +import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.activities.GenericFragment @@ -73,12 +74,16 @@ class PhoneAccountValidationFragment : GenericFragment { - val args = Bundle() - args.putString( - "Identity", - "sip:${viewModel.accountCreator.username}@${viewModel.accountCreator.domain}" - ) - navigateToAccountSettings(args) + if (findNavController().graph.id == R.id.settings_nav_graph_xml) { + val args = Bundle() + args.putString( + "Identity", + "sip:${viewModel.accountCreator.username}@${viewModel.accountCreator.domain}" + ) + navigateToAccountSettings(args) + } else { + requireActivity().finish() + } } } } diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/WelcomeFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/WelcomeFragment.kt index 012f63682..07dd1a0ea 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/WelcomeFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/WelcomeFragment.kt @@ -36,6 +36,7 @@ import org.linphone.activities.assistant.viewmodels.WelcomeViewModel import org.linphone.activities.navigateToAccountLogin import org.linphone.activities.navigateToEmailAccountCreation import org.linphone.activities.navigateToRemoteProvisioning +import org.linphone.core.tools.Log import org.linphone.databinding.AssistantWelcomeFragmentBinding class WelcomeFragment : GenericFragment() { @@ -99,7 +100,11 @@ class WelcomeFragment : GenericFragment() { Intent.ACTION_VIEW, Uri.parse(getString(R.string.assistant_general_terms_link)) ) - startActivity(browserIntent) + try { + startActivity(browserIntent) + } catch (e: Exception) { + Log.e("[Welcome] Can't start activity: $e") + } } } spannable.setSpan(clickableSpan, termsMatcher.start(0), termsMatcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) @@ -113,7 +118,11 @@ class WelcomeFragment : GenericFragment() { Intent.ACTION_VIEW, Uri.parse(getString(R.string.assistant_privacy_policy_link)) ) - startActivity(browserIntent) + try { + startActivity(browserIntent) + } catch (e: Exception) { + Log.e("[Welcome] Can't start activity: $e") + } } } spannable.setSpan(clickableSpan, policyMatcher.start(0), policyMatcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt index 3c2f2dd9c..747c201e2 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt @@ -241,24 +241,32 @@ class DetailChatRoomFragment : MasterFragment= adapter.currentList.size) { + Log.e("[Chat Room] Index is out of bound, can't reply to chat message") + } else { + adapter.notifyItemChanged(index) - val chatMessageEventLog = adapter.currentList[viewHolder.bindingAdapterPosition] - val chatMessage = chatMessageEventLog.eventLog.chatMessage - if (chatMessage != null) { - chatSendingViewModel.pendingChatMessageToReplyTo.value?.destroy() - chatSendingViewModel.pendingChatMessageToReplyTo.value = - ChatMessageData(chatMessage) - chatSendingViewModel.isPendingAnswer.value = true + val chatMessageEventLog = adapter.currentList[index] + val chatMessage = chatMessageEventLog.eventLog.chatMessage + if (chatMessage != null) { + chatSendingViewModel.pendingChatMessageToReplyTo.value?.destroy() + chatSendingViewModel.pendingChatMessageToReplyTo.value = + ChatMessageData(chatMessage) + chatSendingViewModel.isPendingAnswer.value = true + } } } override fun onRightToLeftSwipe(viewHolder: RecyclerView.ViewHolder) { - val position = viewHolder.bindingAdapterPosition - // adapter.notifyItemRemoved(viewHolder.bindingAdapterPosition) - - val eventLog = adapter.currentList[position] - addDeleteMessageTaskToQueue(eventLog, position) + val index = viewHolder.bindingAdapterPosition + if (index < 0 || index >= adapter.currentList.size) { + Log.e("[Chat Room] Index is out of bound, can't delete chat message") + } else { + // adapter.notifyItemRemoved(index) + val eventLog = adapter.currentList[index] + addDeleteMessageTaskToQueue(eventLog, index) + } } } RecyclerViewSwipeUtils(ItemTouchHelper.RIGHT or ItemTouchHelper.LEFT, swipeConfiguration, swipeListener) @@ -421,7 +429,7 @@ class DetailChatRoomFragment : MasterFragment { if (content.isFileEncrypted) { - Log.w("[Chat Message] File is encrypted and can't be opened in one of our viewers...") + Log.w("[Chat Room] File is encrypted and can't be opened in one of our viewers...") showDialogForUserConsentBeforeExportingFileInThirdPartyApp( content ) @@ -654,11 +662,11 @@ class DetailChatRoomFragment : MasterFragment - Log.i("[Chat] Found rich content URI: $uri") + Log.i("[Chat Room] Found rich content URI: $uri") lifecycleScope.launch { withContext(Dispatchers.Main) { val path = FileUtils.getFilePath(requireContext(), uri) - Log.i("[Chat] Rich content URI: $uri matching path is: $path") + Log.i("[Chat Room] Rich content URI: $uri matching path is: $path") if (path != null) { chatSendingViewModel.addAttachment(path) } @@ -1053,18 +1061,22 @@ class DetailChatRoomFragment : MasterFragment= adapter.currentList.size) { + Log.e("[Chat] Index is out of bound, can't mark chat room as read") + } else { + val chatRoom = adapter.currentList[viewHolder.bindingAdapterPosition] + chatRoom.markAsRead() + adapter.notifyItemChanged(viewHolder.bindingAdapterPosition) + } } override fun onRightToLeftSwipe(viewHolder: RecyclerView.ViewHolder) { val viewModel = DialogViewModel(getString(R.string.chat_room_delete_one_dialog)) val dialog: Dialog = DialogUtils.getDialog(requireContext(), viewModel) - viewModel.showCancelButton { - adapter.notifyItemChanged(viewHolder.bindingAdapterPosition) - dialog.dismiss() - } - - viewModel.showDeleteButton( - { - val deletedChatRoom = adapter.currentList[viewHolder.bindingAdapterPosition] - listViewModel.deleteChatRoom(deletedChatRoom) - if (!binding.slidingPane.isSlideable && - deletedChatRoom == sharedViewModel.selectedChatRoom.value - ) { - Log.i("[Chat] Currently displayed chat room has been deleted, removing detail fragment") - clearDisplayedChatRoom() - } + val index = viewHolder.bindingAdapterPosition + if (index < 0 || index >= adapter.currentList.size) { + Log.e("[Chat] Index is out of bound, can't delete chat room") + } else { + viewModel.showCancelButton { + adapter.notifyItemChanged(viewHolder.bindingAdapterPosition) dialog.dismiss() - }, - getString(R.string.dialog_delete) - ) + } - dialog.show() + viewModel.showDeleteButton( + { + val deletedChatRoom = + adapter.currentList[index] + listViewModel.deleteChatRoom(deletedChatRoom) + if (!binding.slidingPane.isSlideable && + deletedChatRoom == sharedViewModel.selectedChatRoom.value + ) { + Log.i("[Chat] Currently displayed chat room has been deleted, removing detail fragment") + clearDisplayedChatRoom() + } + dialog.dismiss() + }, + getString(R.string.dialog_delete) + ) + + dialog.show() + } } } RecyclerViewSwipeUtils(ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT, swipeConfiguration, swipeListener) diff --git a/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt b/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt index 0fedcbabe..b69fde325 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt @@ -173,35 +173,41 @@ class MasterContactsFragment : MasterFragment= adapter.currentList.size) { + Log.e("[Contacts] Index is out of bound, can't delete contact") + } else { + val contactViewModel = adapter.currentList[index] + if (contactViewModel.isNativeContact.value == false) { + adapter.notifyItemChanged(index) + val activity = requireActivity() as MainActivity + activity.showSnackBar(R.string.contact_cant_be_deleted) + return + } - viewModel.showCancelButton { - adapter.notifyItemChanged(viewHolder.bindingAdapterPosition) - dialog.dismiss() - } - - viewModel.showDeleteButton( - { - val deletedContact = adapter.currentList[viewHolder.bindingAdapterPosition].contact.value - if (deletedContact != null) { - listViewModel.deleteContact(deletedContact) - if (!binding.slidingPane.isSlideable && - deletedContact == sharedViewModel.selectedContact.value - ) { - Log.i("[Contacts] Currently displayed contact has been deleted, removing detail fragment") - clearDisplayedContact() - } - } + viewModel.showCancelButton { + adapter.notifyItemChanged(index) dialog.dismiss() - }, - getString(R.string.dialog_delete) - ) + } + + viewModel.showDeleteButton( + { + val deletedContact = + adapter.currentList[index].contact.value + if (deletedContact != null) { + listViewModel.deleteContact(deletedContact) + if (!binding.slidingPane.isSlideable && + deletedContact == sharedViewModel.selectedContact.value + ) { + Log.i("[Contacts] Currently displayed contact has been deleted, removing detail fragment") + clearDisplayedContact() + } + } + dialog.dismiss() + }, + getString(R.string.dialog_delete) + ) + } dialog.show() } diff --git a/app/src/main/java/org/linphone/activities/main/history/fragments/MasterCallLogsFragment.kt b/app/src/main/java/org/linphone/activities/main/history/fragments/MasterCallLogsFragment.kt index 4e4dff4f9..bcf5854b9 100644 --- a/app/src/main/java/org/linphone/activities/main/history/fragments/MasterCallLogsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/history/fragments/MasterCallLogsFragment.kt @@ -159,25 +159,30 @@ class MasterCallLogsFragment : MasterFragment= adapter.currentList.size) { + Log.e("[History] Index is out of bound, can't delete call log") + } else { + viewModel.showCancelButton { + adapter.notifyItemChanged(index) dialog.dismiss() - }, - getString(R.string.dialog_delete) - ) + } + + viewModel.showDeleteButton( + { + val deletedCallGroup = adapter.currentList[index] + listViewModel.deleteCallLogGroup(deletedCallGroup) + if (!binding.slidingPane.isSlideable && + deletedCallGroup.lastCallLog.callId == sharedViewModel.selectedCallLogGroup.value?.lastCallLog?.callId + ) { + Log.i("[History] Currently displayed history has been deleted, removing detail fragment") + clearDisplayedCallHistory() + } + dialog.dismiss() + }, + getString(R.string.dialog_delete) + ) + } dialog.show() } diff --git a/app/src/main/res/navigation/settings_nav_graph.xml b/app/src/main/res/navigation/settings_nav_graph.xml index be8927f31..6125340e3 100644 --- a/app/src/main/res/navigation/settings_nav_graph.xml +++ b/app/src/main/res/navigation/settings_nav_graph.xml @@ -2,6 +2,7 @@