From c582b18b28a1944c871567c308908953b2590b2a Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 21 Aug 2020 11:29:03 +0200 Subject: [PATCH] Code improvements --- app/build.gradle | 2 +- .../fragments/AccountLoginFragment.kt | 7 +- .../EchoCancellerCalibrationFragment.kt | 3 +- .../fragments/EmailAccountCreationFragment.kt | 3 +- .../EmailAccountValidationFragment.kt | 3 +- .../fragments/GenericAccountLoginFragment.kt | 5 +- .../fragments/PhoneAccountCreationFragment.kt | 3 +- .../fragments/PhoneAccountLinkingFragment.kt | 5 +- .../PhoneAccountValidationFragment.kt | 3 +- .../assistant/fragments/QrCodeFragment.kt | 3 +- .../fragments/RemoteProvisioningFragment.kt | 3 +- .../linphone/activities/call/CallActivity.kt | 7 +- .../activities/call/IncomingCallActivity.kt | 7 +- .../activities/call/OutgoingCallActivity.kt | 5 +- .../call/fragments/ControlsFragment.kt | 16 ++-- .../call/fragments/StatusFragment.kt | 3 +- .../linphone/activities/main/MainActivity.kt | 5 +- .../activities/main/about/AboutFragment.kt | 3 +- .../chat/adapters/ChatMessagesListAdapter.kt | 5 +- .../ChatRoomCreationContactsAdapter.kt | 5 +- .../chat/adapters/ChatRoomsListAdapter.kt | 3 +- .../main/chat/adapters/ImdnAdapter.kt | 2 +- .../fragments/ChatRoomCreationFragment.kt | 17 ++-- .../chat/fragments/DetailChatRoomFragment.kt | 29 ++++--- .../main/chat/fragments/GroupInfoFragment.kt | 13 ++-- .../main/chat/fragments/ImdnFragment.kt | 3 +- .../chat/fragments/MasterChatRoomsFragment.kt | 17 ++-- .../contact/adapters/ContactsListAdapter.kt | 3 +- .../contact/adapters/SyncAccountAdapter.kt | 1 + .../fragments/DetailContactFragment.kt | 9 +-- .../fragments/MasterContactsFragment.kt | 9 +-- .../main/dialer/fragments/DialerFragment.kt | 7 +- .../main/fragments/MasterFragment.kt | 9 +-- .../main/fragments/StatusFragment.kt | 3 +- .../history/adapters/CallLogsListAdapter.kt | 3 +- .../fragments/DetailCallLogFragment.kt | 7 +- .../fragments/MasterCallLogsFragment.kt | 13 ++-- .../adapters/RecordingsListAdapter.kt | 5 +- .../fragments/RecordingsFragment.kt | 5 +- .../fragments/AccountSettingsFragment.kt | 5 +- .../fragments/AdvancedSettingsFragment.kt | 9 +-- .../fragments/AudioSettingsFragment.kt | 5 +- .../fragments/CallSettingsFragment.kt | 5 +- .../fragments/ChatSettingsFragment.kt | 5 +- .../fragments/ContactsSettingsFragment.kt | 5 +- .../settings/fragments/SettingsFragment.kt | 3 +- .../viewmodels/VideoSettingsViewModel.kt | 2 +- .../sidemenu/fragments/SideMenuFragment.kt | 3 +- ...Compatibility.kt => Api30Compatibility.kt} | 23 +++--- .../linphone/compatibility/Compatibility.kt | 2 +- .../org/linphone/utils/PhoneNumberUtils.kt | 2 +- .../assistant_account_login_fragment.xml | 71 ++++++++--------- ...sistant_generic_account_login_fragment.xml | 77 +++++++++---------- .../res/layout/call_statistics_fragment.xml | 22 ++---- .../layout/chat_message_attachment_cell.xml | 1 + .../res/layout/chat_message_content_cell.xml | 3 +- .../res/layout/chat_message_list_cell.xml | 2 +- .../layout/chat_room_creation_fragment.xml | 2 +- .../main/res/layout/side_menu_fragment.xml | 1 + app/src/main/res/values/strings.xml | 4 +- app/src/main/res/values/styles.xml | 5 -- 61 files changed, 222 insertions(+), 289 deletions(-) rename app/src/main/java/org/linphone/compatibility/{Api28Compatibility.kt => Api30Compatibility.kt} (61%) diff --git a/app/build.gradle b/app/build.gradle index b93bd348a..35289450a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ android { buildToolsVersion '30.0.2' defaultConfig { minSdkVersion 23 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 4999 versionName "${project.version}" applicationId getPackageName() diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt index 7abb12dbd..e4e5ab124 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt @@ -26,7 +26,6 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication.Companion.coreContext @@ -83,7 +82,7 @@ class AccountLoginFragment : AbstractPhoneFragment() { startActivity(intent) } - viewModel.goToSmsValidationEvent.observe(viewLifecycleOwner, Observer { + viewModel.goToSmsValidationEvent.observe(viewLifecycleOwner, { it.consume { if (findNavController().currentDestination?.id == R.id.accountLoginFragment) { val args = Bundle() @@ -94,7 +93,7 @@ class AccountLoginFragment : AbstractPhoneFragment() { } }) - viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, Observer { + viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, { it.consume { if (coreContext.core.isEchoCancellerCalibrationRequired) { if (findNavController().currentDestination?.id == R.id.accountLoginFragment) { @@ -106,7 +105,7 @@ class AccountLoginFragment : AbstractPhoneFragment() { } }) - viewModel.invalidCredentialsEvent.observe(viewLifecycleOwner, Observer { + viewModel.invalidCredentialsEvent.observe(viewLifecycleOwner, { it.consume { val dialogViewModel = DialogViewModel(getString(R.string.assistant_error_invalid_credentials)) val dialog: Dialog = DialogUtils.getDialog(requireContext(), dialogViewModel) diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/EchoCancellerCalibrationFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/EchoCancellerCalibrationFragment.kt index d1883fe34..5bc497175 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/EchoCancellerCalibrationFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/EchoCancellerCalibrationFragment.kt @@ -25,7 +25,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import org.linphone.activities.assistant.viewmodels.EchoCancellerCalibrationViewModel import org.linphone.core.tools.Log @@ -53,7 +52,7 @@ class EchoCancellerCalibrationFragment : Fragment() { viewModel = ViewModelProvider(this).get(EchoCancellerCalibrationViewModel::class.java) binding.viewModel = viewModel - viewModel.echoCalibrationTerminated.observe(viewLifecycleOwner, Observer { + viewModel.echoCalibrationTerminated.observe(viewLifecycleOwner, { it.consume { requireActivity().finish() } diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/EmailAccountCreationFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/EmailAccountCreationFragment.kt index ad1d394b4..cadc39f1e 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/EmailAccountCreationFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/EmailAccountCreationFragment.kt @@ -24,7 +24,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R @@ -59,7 +58,7 @@ class EmailAccountCreationFragment : Fragment() { viewModel = ViewModelProvider(this, EmailAccountCreationViewModelFactory(sharedViewModel.getAccountCreator())).get(EmailAccountCreationViewModel::class.java) binding.viewModel = viewModel - viewModel.goToEmailValidationEvent.observe(viewLifecycleOwner, Observer { + viewModel.goToEmailValidationEvent.observe(viewLifecycleOwner, { it.consume { if (findNavController().currentDestination?.id == R.id.emailAccountCreationFragment) { findNavController().navigate(R.id.action_emailAccountCreationFragment_to_emailAccountValidationFragment) diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/EmailAccountValidationFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/EmailAccountValidationFragment.kt index 3547ed61d..d56f23631 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/EmailAccountValidationFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/EmailAccountValidationFragment.kt @@ -24,7 +24,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R @@ -57,7 +56,7 @@ class EmailAccountValidationFragment : Fragment() { viewModel = ViewModelProvider(this, EmailAccountValidationViewModelFactory(sharedViewModel.getAccountCreator())).get(EmailAccountValidationViewModel::class.java) binding.viewModel = viewModel - viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, Observer { + viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, { it.consume { if (findNavController().currentDestination?.id == R.id.emailAccountValidationFragment) { val args = Bundle() diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/GenericAccountLoginFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/GenericAccountLoginFragment.kt index d2ebe0361..1c4ee8f51 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/GenericAccountLoginFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/GenericAccountLoginFragment.kt @@ -25,7 +25,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication.Companion.coreContext @@ -63,7 +62,7 @@ class GenericAccountLoginFragment : Fragment() { viewModel = ViewModelProvider(this, GenericLoginViewModelFactory(sharedViewModel.getAccountCreator(true))).get(GenericLoginViewModel::class.java) binding.viewModel = viewModel - viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, Observer { + viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, { it.consume { if (coreContext.core.isEchoCancellerCalibrationRequired) { if (findNavController().currentDestination?.id == R.id.genericAccountLoginFragment) { @@ -75,7 +74,7 @@ class GenericAccountLoginFragment : Fragment() { } }) - viewModel.invalidCredentialsEvent.observe(viewLifecycleOwner, Observer { + viewModel.invalidCredentialsEvent.observe(viewLifecycleOwner, { it.consume { val dialogViewModel = DialogViewModel(getString(R.string.assistant_error_invalid_credentials)) val dialog: Dialog = DialogUtils.getDialog(requireContext(), dialogViewModel) diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountCreationFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountCreationFragment.kt index 6b5c194d5..d801a5f66 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountCreationFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountCreationFragment.kt @@ -23,7 +23,6 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R @@ -66,7 +65,7 @@ class PhoneAccountCreationFragment : AbstractPhoneFragment() { CountryPickerFragment(viewModel).show(childFragmentManager, "CountryPicker") } - viewModel.goToSmsValidationEvent.observe(viewLifecycleOwner, Observer { + viewModel.goToSmsValidationEvent.observe(viewLifecycleOwner, { it.consume { if (findNavController().currentDestination?.id == R.id.phoneAccountCreationFragment) { val args = Bundle() diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountLinkingFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountLinkingFragment.kt index 151e1fa72..e5c58fbd2 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountLinkingFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountLinkingFragment.kt @@ -23,7 +23,6 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication @@ -80,7 +79,7 @@ class PhoneAccountLinkingFragment : AbstractPhoneFragment() { CountryPickerFragment(viewModel).show(childFragmentManager, "CountryPicker") } - viewModel.goToSmsValidationEvent.observe(viewLifecycleOwner, Observer { + viewModel.goToSmsValidationEvent.observe(viewLifecycleOwner, { it.consume { if (findNavController().currentDestination?.id == R.id.phoneAccountLinkingFragment) { val args = Bundle() @@ -91,7 +90,7 @@ class PhoneAccountLinkingFragment : AbstractPhoneFragment() { } }) - viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, Observer { + viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, { it.consume { if (findNavController().currentDestination?.id == R.id.phoneAccountLinkingFragment) { if (LinphoneApplication.coreContext.core.isEchoCancellerCalibrationRequired) { 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 930c2488e..ae59a53d1 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 @@ -26,7 +26,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication.Companion.coreContext @@ -67,7 +66,7 @@ class PhoneAccountValidationFragment : Fragment() { viewModel.isCreation.value = arguments?.getBoolean("IsCreation", false) viewModel.isLinking.value = arguments?.getBoolean("IsLinking", false) - viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, Observer { + viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, { it.consume { when { viewModel.isLogin.value == true || viewModel.isCreation.value == true -> { diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/QrCodeFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/QrCodeFragment.kt index efb785649..b00691b32 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/QrCodeFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/QrCodeFragment.kt @@ -25,7 +25,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication.Companion.coreContext @@ -61,7 +60,7 @@ class QrCodeFragment : Fragment() { viewModel = ViewModelProvider(this).get(QrCodeViewModel::class.java) binding.viewModel = viewModel - viewModel.qrCodeFoundEvent.observe(viewLifecycleOwner, Observer { + viewModel.qrCodeFoundEvent.observe(viewLifecycleOwner, { it.consume { url -> sharedViewModel.remoteProvisioningUrl.value = url findNavController().navigateUp() diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/RemoteProvisioningFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/RemoteProvisioningFragment.kt index 772287922..4df4f6cd5 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/RemoteProvisioningFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/RemoteProvisioningFragment.kt @@ -24,7 +24,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication.Companion.coreContext @@ -66,7 +65,7 @@ class RemoteProvisioningFragment : Fragment() { } } - viewModel.fetchSuccessfulEvent.observe(viewLifecycleOwner, Observer { + viewModel.fetchSuccessfulEvent.observe(viewLifecycleOwner, { it.consume { success -> if (success) { if (coreContext.core.isEchoCancellerCalibrationRequired) { diff --git a/app/src/main/java/org/linphone/activities/call/CallActivity.kt b/app/src/main/java/org/linphone/activities/call/CallActivity.kt index 25bab5c4f..732b390b2 100644 --- a/app/src/main/java/org/linphone/activities/call/CallActivity.kt +++ b/app/src/main/java/org/linphone/activities/call/CallActivity.kt @@ -24,7 +24,6 @@ import android.os.Bundle import android.view.Gravity import android.view.MotionEvent import androidx.databinding.DataBindingUtil -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R @@ -57,7 +56,7 @@ class CallActivity : ProximitySensorActivity() { sharedViewModel = ViewModelProvider(this).get(SharedCallViewModel::class.java) - sharedViewModel.toggleDrawerEvent.observe(this, Observer { + sharedViewModel.toggleDrawerEvent.observe(this, { it.consume { if (binding.statsMenu.isDrawerOpen(Gravity.LEFT)) { binding.statsMenu.closeDrawer(binding.sideMenuContent, true) @@ -67,7 +66,7 @@ class CallActivity : ProximitySensorActivity() { } }) - sharedViewModel.resetHiddenInterfaceTimerInVideoCallEvent.observe(this, Observer { + sharedViewModel.resetHiddenInterfaceTimerInVideoCallEvent.observe(this, { it.consume { viewModel.showMomentarily() } @@ -95,7 +94,7 @@ class CallActivity : ProximitySensorActivity() { videoZoomHelper = VideoZoomHelper(this, binding.remoteVideoSurface) - viewModel.proximitySensorEnabled.observe(this, Observer { + viewModel.proximitySensorEnabled.observe(this, { enableProximitySensor(it) }) } diff --git a/app/src/main/java/org/linphone/activities/call/IncomingCallActivity.kt b/app/src/main/java/org/linphone/activities/call/IncomingCallActivity.kt index ece6ff7ea..0e9d23d72 100644 --- a/app/src/main/java/org/linphone/activities/call/IncomingCallActivity.kt +++ b/app/src/main/java/org/linphone/activities/call/IncomingCallActivity.kt @@ -24,7 +24,6 @@ import android.app.KeyguardManager import android.content.Context import android.os.Bundle import androidx.databinding.DataBindingUtil -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R @@ -65,21 +64,21 @@ class IncomingCallActivity : GenericActivity() { )[IncomingCallViewModel::class.java] binding.viewModel = viewModel - viewModel.callEndedEvent.observe(this, Observer { + viewModel.callEndedEvent.observe(this, { it.consume { Log.i("[Incoming Call Activity] Call ended, finish activity") finish() } }) - viewModel.callConnectedEvent.observe(this, Observer { + viewModel.callConnectedEvent.observe(this, { it.consume { Log.i("[Incoming Call Activity] Call connected, finish activity") finish() } }) - viewModel.earlyMediaVideoEnabled.observe(this, Observer { + viewModel.earlyMediaVideoEnabled.observe(this, { if (it) { Log.i("[Incoming Call Activity] Early media video being received, set native window id") coreContext.core.nativeVideoWindowId = binding.remoteVideoSurface diff --git a/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt b/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt index 78a161947..da781e0d5 100644 --- a/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt +++ b/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt @@ -23,7 +23,6 @@ import android.annotation.TargetApi import android.os.Bundle import android.view.WindowManager import androidx.databinding.DataBindingUtil -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R @@ -82,14 +81,14 @@ class OutgoingCallActivity : GenericActivity() { controlsViewModel.toggleSpeaker() } - viewModel.callEndedEvent.observe(this, Observer { + viewModel.callEndedEvent.observe(this, { it.consume { Log.i("[Outgoing Call Activity] Call ended, finish activity") finish() } }) - viewModel.callConnectedEvent.observe(this, Observer { + viewModel.callConnectedEvent.observe(this, { it.consume { Log.i("[Outgoing Call Activity] Call connected, finish activity") finish() diff --git a/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt b/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt index 94570dab5..bfa5360ae 100644 --- a/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt +++ b/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt @@ -27,9 +27,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import java.util.* import org.linphone.R import org.linphone.activities.call.viewmodels.CallsViewModel import org.linphone.activities.call.viewmodels.ControlsViewModel @@ -74,7 +72,7 @@ class ControlsFragment : Fragment() { controlsViewModel = ViewModelProvider(this).get(ControlsViewModel::class.java) binding.controlsViewModel = controlsViewModel - callsViewModel.currentCallViewModel.observe(viewLifecycleOwner, Observer { + callsViewModel.currentCallViewModel.observe(viewLifecycleOwner, { if (it != null) { binding.activeCallTimer.base = SystemClock.elapsedRealtime() - (1000 * it.call.duration) // Linphone timestamps are in seconds @@ -82,13 +80,13 @@ class ControlsFragment : Fragment() { } }) - callsViewModel.noMoreCallEvent.observe(viewLifecycleOwner, Observer { + callsViewModel.noMoreCallEvent.observe(viewLifecycleOwner, { it.consume { activity?.finish() } }) - callsViewModel.callUpdateEvent.observe(viewLifecycleOwner, Observer { + callsViewModel.callUpdateEvent.observe(viewLifecycleOwner, { it.consume { call -> if (call.state == Call.State.StreamsRunning) { dialog?.dismiss() @@ -98,7 +96,7 @@ class ControlsFragment : Fragment() { } }) - controlsViewModel.chatClickedEvent.observe(viewLifecycleOwner, Observer { + controlsViewModel.chatClickedEvent.observe(viewLifecycleOwner, { it.consume { val intent = Intent() intent.setClass(requireContext(), MainActivity::class.java) @@ -108,7 +106,7 @@ class ControlsFragment : Fragment() { } }) - controlsViewModel.addCallClickedEvent.observe(viewLifecycleOwner, Observer { + controlsViewModel.addCallClickedEvent.observe(viewLifecycleOwner, { it.consume { val intent = Intent() intent.setClass(requireContext(), MainActivity::class.java) @@ -119,7 +117,7 @@ class ControlsFragment : Fragment() { } }) - controlsViewModel.transferCallClickedEvent.observe(viewLifecycleOwner, Observer { + controlsViewModel.transferCallClickedEvent.observe(viewLifecycleOwner, { it.consume { val intent = Intent() intent.setClass(requireContext(), MainActivity::class.java) @@ -130,7 +128,7 @@ class ControlsFragment : Fragment() { } }) - controlsViewModel.somethingClickedEvent.observe(viewLifecycleOwner, Observer { + controlsViewModel.somethingClickedEvent.observe(viewLifecycleOwner, { it.consume { sharedViewModel.resetHiddenInterfaceTimerInVideoCallEvent.value = Event(true) } diff --git a/app/src/main/java/org/linphone/activities/call/fragments/StatusFragment.kt b/app/src/main/java/org/linphone/activities/call/fragments/StatusFragment.kt index 9e819759d..61b8199b2 100644 --- a/app/src/main/java/org/linphone/activities/call/fragments/StatusFragment.kt +++ b/app/src/main/java/org/linphone/activities/call/fragments/StatusFragment.kt @@ -25,7 +25,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import java.util.* import org.linphone.R @@ -73,7 +72,7 @@ class StatusFragment : Fragment() { viewModel.refreshRegister() } - viewModel.showZrtpDialogEvent.observe(viewLifecycleOwner, Observer { + viewModel.showZrtpDialogEvent.observe(viewLifecycleOwner, { it.consume { call -> if (call.state == Call.State.Connected || call.state == Call.State.StreamsRunning) { showZrtpDialog(call) diff --git a/app/src/main/java/org/linphone/activities/main/MainActivity.kt b/app/src/main/java/org/linphone/activities/main/MainActivity.kt index 80ea6e0d1..a8ef1e6a2 100644 --- a/app/src/main/java/org/linphone/activities/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/activities/main/MainActivity.kt @@ -28,7 +28,6 @@ import android.view.Gravity import android.view.View import android.view.inputmethod.InputMethodManager import androidx.databinding.DataBindingUtil -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.navigation.NavController @@ -77,7 +76,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin sharedViewModel = ViewModelProvider(this).get(SharedMainViewModel::class.java) binding.viewModel = sharedViewModel - sharedViewModel.toggleDrawerEvent.observe(this, Observer { + sharedViewModel.toggleDrawerEvent.observe(this, { it.consume { if (binding.sideMenu.isDrawerOpen(Gravity.LEFT)) { binding.sideMenu.closeDrawer(binding.sideMenuContent, true) @@ -87,7 +86,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin } }) - coreContext.callErrorMessageResourceId.observe(this, Observer { + coreContext.callErrorMessageResourceId.observe(this, { it.consume { messageResourceId -> showSnackBar(messageResourceId) } diff --git a/app/src/main/java/org/linphone/activities/main/about/AboutFragment.kt b/app/src/main/java/org/linphone/activities/main/about/AboutFragment.kt index c52eca8ec..1a6ebc6e4 100644 --- a/app/src/main/java/org/linphone/activities/main/about/AboutFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/about/AboutFragment.kt @@ -26,7 +26,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R @@ -73,7 +72,7 @@ class AboutFragment : Fragment() { startActivity(browserIntent) } - viewModel.uploadFinishedEvent.observe(viewLifecycleOwner, Observer { + viewModel.uploadFinishedEvent.observe(viewLifecycleOwner, { it.consume { url -> val clipboard = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager diff --git a/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatMessagesListAdapter.kt b/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatMessagesListAdapter.kt index 6c414fa9a..a0791a0a3 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatMessagesListAdapter.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatMessagesListAdapter.kt @@ -28,7 +28,6 @@ import android.view.ViewGroup import androidx.appcompat.widget.PopupMenu import androidx.databinding.DataBindingUtil import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.Observer import androidx.recyclerview.widget.DiffUtil import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R @@ -133,7 +132,7 @@ class ChatMessagesListAdapter(val selectionViewModel: ListTopBarViewModel) : Lif // This is for item selection through ListTopBarFragment selectionListViewModel = selectionViewModel - selectionViewModel.isEditionEnabled.observe(this@ChatMessageViewHolder, Observer { + selectionViewModel.isEditionEnabled.observe(this@ChatMessageViewHolder, { position = adapterPosition }) @@ -292,7 +291,7 @@ class ChatMessagesListAdapter(val selectionViewModel: ListTopBarViewModel) : Lif // This is for item selection through ListTopBarFragment selectionListViewModel = selectionViewModel - selectionViewModel.isEditionEnabled.observe(this@EventViewHolder, Observer { + selectionViewModel.isEditionEnabled.observe(this@EventViewHolder, { position = adapterPosition }) diff --git a/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatRoomCreationContactsAdapter.kt b/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatRoomCreationContactsAdapter.kt index b43d8932b..2f1172589 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatRoomCreationContactsAdapter.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatRoomCreationContactsAdapter.kt @@ -23,7 +23,6 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.Observer import androidx.recyclerview.widget.DiffUtil import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R @@ -67,11 +66,11 @@ class ChatRoomCreationContactsAdapter : LifecycleListAdapter val searchAddress = searchResult.address if (searchAddress != null) address.weakEqual(searchAddress) else false diff --git a/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatRoomsListAdapter.kt b/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatRoomsListAdapter.kt index 0c0786bf1..3bcf1e97a 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatRoomsListAdapter.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatRoomsListAdapter.kt @@ -23,7 +23,6 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.Observer import androidx.recyclerview.widget.DiffUtil import org.linphone.R import org.linphone.activities.main.chat.viewmodels.ChatRoomViewModel @@ -63,7 +62,7 @@ class ChatRoomsListAdapter(val selectionViewModel: ListTopBarViewModel) : Lifecy // This is for item selection through ListTopBarFragment selectionListViewModel = selectionViewModel - selectionViewModel.isEditionEnabled.observe(this@ViewHolder, Observer { + selectionViewModel.isEditionEnabled.observe(this@ViewHolder, { position = adapterPosition }) diff --git a/app/src/main/java/org/linphone/activities/main/chat/adapters/ImdnAdapter.kt b/app/src/main/java/org/linphone/activities/main/chat/adapters/ImdnAdapter.kt index 0100ab227..146cea8d3 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/adapters/ImdnAdapter.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/adapters/ImdnAdapter.kt @@ -51,7 +51,7 @@ class ImdnAdapter : ListAdapter sharedViewModel.selectedChatRoom.value = chatRoom if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) { @@ -121,11 +120,11 @@ class ChatRoomCreationFragment : Fragment() { } }) - viewModel.filter.observe(viewLifecycleOwner, Observer { + viewModel.filter.observe(viewLifecycleOwner, { viewModel.applyFilter() }) - adapter.selectedContact.observe(viewLifecycleOwner, Observer { + adapter.selectedContact.observe(viewLifecycleOwner, { it.consume { searchResult -> if (createGroup) { viewModel.toggleSelectionForSearchResult(searchResult) @@ -148,7 +147,7 @@ class ChatRoomCreationFragment : Fragment() { } } - viewModel.onErrorEvent.observe(viewLifecycleOwner, Observer { + viewModel.onErrorEvent.observe(viewLifecycleOwner, { it.consume { messageResourceId -> (activity as MainActivity).showSnackBar(messageResourceId) } 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 41185b5ed..4fc56c505 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 @@ -32,7 +32,6 @@ import android.view.* import android.webkit.MimeTypeMap import androidx.appcompat.view.menu.MenuBuilder import androidx.appcompat.view.menu.MenuPopupHelper -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController @@ -129,45 +128,45 @@ class DetailChatRoomFragment : MasterFragment() { } binding.chatMessagesList.addOnScrollListener(chatScrollListener) - chatSendingViewModel.textToSend.observe(viewLifecycleOwner, Observer { + chatSendingViewModel.textToSend.observe(viewLifecycleOwner, { chatSendingViewModel.onTextToSendChanged(it) }) - listViewModel.events.observe(viewLifecycleOwner, Observer { events -> + listViewModel.events.observe(viewLifecycleOwner, { events -> adapter.submitList(events) }) - listViewModel.messageUpdatedEvent.observe(viewLifecycleOwner, Observer { + listViewModel.messageUpdatedEvent.observe(viewLifecycleOwner, { it.consume { position -> adapter.notifyItemChanged(position) } }) - listViewModel.scrollToBottomOnMessageReceivedEvent.observe(viewLifecycleOwner, Observer { + listViewModel.scrollToBottomOnMessageReceivedEvent.observe(viewLifecycleOwner, { it.consume { scrollToBottom() } }) - listViewModel.requestWriteExternalStoragePermissionEvent.observe(viewLifecycleOwner, Observer { + listViewModel.requestWriteExternalStoragePermissionEvent.observe(viewLifecycleOwner, { it.consume { requestPermissions(arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE), 1) } }) - adapter.deleteMessageEvent.observe(viewLifecycleOwner, Observer { + adapter.deleteMessageEvent.observe(viewLifecycleOwner, { it.consume { chatMessage -> listViewModel.deleteMessage(chatMessage) } }) - adapter.resendMessageEvent.observe(viewLifecycleOwner, Observer { + adapter.resendMessageEvent.observe(viewLifecycleOwner, { it.consume { chatMessage -> listViewModel.resendMessage(chatMessage) } }) - adapter.forwardMessageEvent.observe(viewLifecycleOwner, Observer { + adapter.forwardMessageEvent.observe(viewLifecycleOwner, { it.consume { chatMessage -> // Remove observer before setting the message to forward // as we don't want to forward it in this chat room @@ -178,7 +177,7 @@ class DetailChatRoomFragment : MasterFragment() { } }) - adapter.showImdnForMessageEvent.observe(viewLifecycleOwner, Observer { + adapter.showImdnForMessageEvent.observe(viewLifecycleOwner, { it.consume { chatMessage -> val args = Bundle() args.putString("MessageId", chatMessage.messageId) @@ -186,14 +185,14 @@ class DetailChatRoomFragment : MasterFragment() { } }) - adapter.addSipUriToContactEvent.observe(viewLifecycleOwner, Observer { + adapter.addSipUriToContactEvent.observe(viewLifecycleOwner, { it.consume { sipUri -> Log.i("[Chat Room] Going to contacts list with SIP URI to add: $sipUri") navigateToContacts(sipUri) } }) - adapter.openContentEvent.observe(viewLifecycleOwner, Observer { + adapter.openContentEvent.observe(viewLifecycleOwner, { it.consume { path -> openFile(path) } @@ -239,7 +238,7 @@ class DetailChatRoomFragment : MasterFragment() { coreContext.startCall(viewModel.addressToCall) } - sharedViewModel.textToShare.observe(viewLifecycleOwner, Observer { + sharedViewModel.textToShare.observe(viewLifecycleOwner, { if (it.isNotEmpty()) { Log.i("[Chat Room] Found text to share") chatSendingViewModel.textToSend.value = it @@ -247,7 +246,7 @@ class DetailChatRoomFragment : MasterFragment() { } }) - sharedViewModel.filesToShare.observe(viewLifecycleOwner, Observer { + sharedViewModel.filesToShare.observe(viewLifecycleOwner, { if (it.isNotEmpty()) { for (path in it) { Log.i("[Chat Room] Found $path file to share") @@ -257,7 +256,7 @@ class DetailChatRoomFragment : MasterFragment() { } }) - sharedViewModel.messageToForwardEvent.observe(viewLifecycleOwner, Observer { + sharedViewModel.messageToForwardEvent.observe(viewLifecycleOwner, { it.consume { chatMessage -> Log.i("[Chat Room] Found message to transfer") showForwardConfirmationDialog(chatMessage) diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/GroupInfoFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/GroupInfoFragment.kt index 7ce8324ee..622da8a00 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/GroupInfoFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/GroupInfoFragment.kt @@ -25,7 +25,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DividerItemDecoration @@ -90,21 +89,21 @@ class GroupInfoFragment : Fragment() { dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null)) binding.participants.addItemDecoration(dividerItemDecoration) - viewModel.participants.observe(viewLifecycleOwner, Observer { + viewModel.participants.observe(viewLifecycleOwner, { adapter.submitList(it) }) - viewModel.isMeAdmin.observe(viewLifecycleOwner, Observer { isMeAdmin -> + viewModel.isMeAdmin.observe(viewLifecycleOwner, { isMeAdmin -> adapter.showAdminControls(isMeAdmin && chatRoom != null) }) - viewModel.meAdminChangedEvent.observe(viewLifecycleOwner, Observer { + viewModel.meAdminChangedEvent.observe(viewLifecycleOwner, { it.consume { isMeAdmin -> showMeAdminStateChanged(isMeAdmin) } }) - adapter.participantRemovedEvent.observe(viewLifecycleOwner, Observer { + adapter.participantRemovedEvent.observe(viewLifecycleOwner, { it.consume { participant -> viewModel.removeParticipant(participant) } @@ -116,7 +115,7 @@ class GroupInfoFragment : Fragment() { findNavController().popBackStack() } - viewModel.createdChatRoomEvent.observe(viewLifecycleOwner, Observer { + viewModel.createdChatRoomEvent.observe(viewLifecycleOwner, { it.consume { chatRoom -> sharedViewModel.selectedChatRoom.value = chatRoom goToChatRoom() @@ -164,7 +163,7 @@ class GroupInfoFragment : Fragment() { dialog.show() } - viewModel.onErrorEvent.observe(viewLifecycleOwner, Observer { + viewModel.onErrorEvent.observe(viewLifecycleOwner, { it.consume { messageResourceId -> (activity as MainActivity).showSnackBar(messageResourceId) } diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/ImdnFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/ImdnFragment.kt index 600dec8a9..89f025917 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/ImdnFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/ImdnFragment.kt @@ -24,7 +24,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DividerItemDecoration @@ -101,7 +100,7 @@ class ImdnFragment : Fragment() { val headerItemDecoration = RecyclerViewHeaderDecoration(adapter) binding.participantsList.addItemDecoration(headerItemDecoration) - viewModel.participants.observe(viewLifecycleOwner, Observer { + viewModel.participants.observe(viewLifecycleOwner, { adapter.submitList(it) }) diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt index 77b717470..0721c77f0 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt @@ -25,7 +25,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.content.ContextCompat -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.ItemTouchHelper @@ -127,21 +126,21 @@ class MasterChatRoomsFragment : MasterFragment() { dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null)) binding.chatList.addItemDecoration(dividerItemDecoration) - listViewModel.chatRooms.observe(viewLifecycleOwner, Observer { chatRooms -> + listViewModel.chatRooms.observe(viewLifecycleOwner, { chatRooms -> adapter.submitList(chatRooms) }) - listViewModel.latestUpdatedChatRoomId.observe(viewLifecycleOwner, Observer { position -> + listViewModel.latestUpdatedChatRoomId.observe(viewLifecycleOwner, { position -> adapter.notifyItemChanged(position) }) - listViewModel.contactsUpdatedEvent.observe(viewLifecycleOwner, Observer { + listViewModel.contactsUpdatedEvent.observe(viewLifecycleOwner, { it.consume { adapter.notifyDataSetChanged() } }) - adapter.selectedChatRoomEvent.observe(viewLifecycleOwner, Observer { + adapter.selectedChatRoomEvent.observe(viewLifecycleOwner, { it.consume { chatRoom -> sharedViewModel.selectedChatRoom.value = chatRoom navigateToChatRoom() @@ -175,21 +174,21 @@ class MasterChatRoomsFragment : MasterFragment() { adapter.selectedChatRoomEvent.value = Event(chatRoom) } } else { - sharedViewModel.textToShare.observe(viewLifecycleOwner, Observer { + sharedViewModel.textToShare.observe(viewLifecycleOwner, { if (it.isNotEmpty()) { Log.i("[Chat] Found text to share") val activity = requireActivity() as MainActivity activity.showSnackBar(R.string.chat_room_toast_choose_for_sharing) } }) - sharedViewModel.filesToShare.observe(viewLifecycleOwner, Observer { + sharedViewModel.filesToShare.observe(viewLifecycleOwner, { if (it.isNotEmpty()) { Log.i("[Chat] Found ${it.size} files to share") val activity = requireActivity() as MainActivity activity.showSnackBar(R.string.chat_room_toast_choose_for_sharing) } }) - sharedViewModel.messageToForwardEvent.observe(viewLifecycleOwner, Observer { + sharedViewModel.messageToForwardEvent.observe(viewLifecycleOwner, { if (!it.consumed()) { Log.i("[Chat] Found chat message to transfer") @@ -198,7 +197,7 @@ class MasterChatRoomsFragment : MasterFragment() { } }) - listViewModel.onErrorEvent.observe(viewLifecycleOwner, Observer { + listViewModel.onErrorEvent.observe(viewLifecycleOwner, { it.consume { messageResourceId -> (activity as MainActivity).showSnackBar(messageResourceId) } diff --git a/app/src/main/java/org/linphone/activities/main/contact/adapters/ContactsListAdapter.kt b/app/src/main/java/org/linphone/activities/main/contact/adapters/ContactsListAdapter.kt index d922d86cb..e7556ad33 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/adapters/ContactsListAdapter.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/adapters/ContactsListAdapter.kt @@ -25,7 +25,6 @@ import android.view.View import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.Observer import androidx.recyclerview.widget.DiffUtil import org.linphone.R import org.linphone.activities.main.contact.viewmodels.ContactViewModel @@ -67,7 +66,7 @@ class ContactsListAdapter(val selectionViewModel: ListTopBarViewModel) : Lifecyc // This is for item selection through ListTopBarFragment selectionListViewModel = selectionViewModel - selectionViewModel.isEditionEnabled.observe(this@ViewHolder, Observer { + selectionViewModel.isEditionEnabled.observe(this@ViewHolder, { position = adapterPosition }) diff --git a/app/src/main/java/org/linphone/activities/main/contact/adapters/SyncAccountAdapter.kt b/app/src/main/java/org/linphone/activities/main/contact/adapters/SyncAccountAdapter.kt index 7d8f91c6c..45e201c49 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/adapters/SyncAccountAdapter.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/adapters/SyncAccountAdapter.kt @@ -24,6 +24,7 @@ class SyncAccountAdapter : BaseAdapter() { val icon = view.findViewById(R.id.account_icon) icon.setImageDrawable(account.third) + icon.contentDescription = account.second val name = view.findViewById(R.id.account_name) name.text = account.first diff --git a/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt b/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt index 78a8cc0cb..659a81673 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt @@ -27,7 +27,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication.Companion.coreContext @@ -73,13 +72,13 @@ class DetailContactFragment : Fragment() { )[ContactViewModel::class.java] binding.viewModel = viewModel - viewModel.sendSmsToEvent.observe(viewLifecycleOwner, Observer { + viewModel.sendSmsToEvent.observe(viewLifecycleOwner, { it.consume { number -> sendSms(number) } }) - viewModel.startCallToEvent.observe(viewLifecycleOwner, Observer { + viewModel.startCallToEvent.observe(viewLifecycleOwner, { it.consume { address -> if (coreContext.core.callsNb > 0) { Log.i("[Contact] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}") @@ -97,7 +96,7 @@ class DetailContactFragment : Fragment() { } }) - viewModel.chatRoomCreatedEvent.observe(viewLifecycleOwner, Observer { + viewModel.chatRoomCreatedEvent.observe(viewLifecycleOwner, { it.consume { chatRoom -> if (findNavController().currentDestination?.id == R.id.detailContactFragment) { val args = Bundle() @@ -123,7 +122,7 @@ class DetailContactFragment : Fragment() { confirmContactRemoval() } - viewModel.onErrorEvent.observe(viewLifecycleOwner, Observer { + viewModel.onErrorEvent.observe(viewLifecycleOwner, { it.consume { messageResourceId -> (activity as MainActivity).showSnackBar(messageResourceId) } 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 622686c24..c8a890a16 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 @@ -26,7 +26,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.content.ContextCompat -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.ItemTouchHelper @@ -131,7 +130,7 @@ class MasterContactsFragment : MasterFragment() { val headerItemDecoration = RecyclerViewHeaderDecoration(adapter) binding.contactsList.addItemDecoration(headerItemDecoration) - adapter.selectedContactEvent.observe(viewLifecycleOwner, Observer { + adapter.selectedContactEvent.observe(viewLifecycleOwner, { it.consume { contact -> Log.i("[Contacts] Selected item in list changed: $contact") sharedViewModel.selectedContact.value = contact @@ -147,7 +146,7 @@ class MasterContactsFragment : MasterFragment() { } }) - listViewModel.contactsList.observe(viewLifecycleOwner, Observer { + listViewModel.contactsList.observe(viewLifecycleOwner, { adapter.submitList(it) }) @@ -158,11 +157,11 @@ class MasterContactsFragment : MasterFragment() { listViewModel.sipContactsSelected.value = true } - listViewModel.sipContactsSelected.observe(viewLifecycleOwner, Observer { + listViewModel.sipContactsSelected.observe(viewLifecycleOwner, { listViewModel.updateContactsList() }) - listViewModel.filter.observe(viewLifecycleOwner, Observer { + listViewModel.filter.observe(viewLifecycleOwner, { listViewModel.updateContactsList() }) diff --git a/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt b/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt index 2dd2096bf..62f894d70 100644 --- a/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt @@ -30,7 +30,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -120,14 +119,14 @@ class DialerFragment : Fragment() { } } - viewModel.enteredUri.observe(viewLifecycleOwner, Observer { + viewModel.enteredUri.observe(viewLifecycleOwner, { if (it == corePreferences.debugPopupCode) { displayDebugPopup() viewModel.enteredUri.value = "" } }) - viewModel.uploadFinishedEvent.observe(viewLifecycleOwner, Observer { + viewModel.uploadFinishedEvent.observe(viewLifecycleOwner, { it.consume { url -> // To prevent being trigger when using the Send Logs button in About page if (uploadLogsInitiatedByUs) { @@ -144,7 +143,7 @@ class DialerFragment : Fragment() { } }) - viewModel.updateAvailableEvent.observe(viewLifecycleOwner, Observer { + viewModel.updateAvailableEvent.observe(viewLifecycleOwner, { it.consume { url -> displayNewVersionAvailableDialog(url) } diff --git a/app/src/main/java/org/linphone/activities/main/fragments/MasterFragment.kt b/app/src/main/java/org/linphone/activities/main/fragments/MasterFragment.kt index 0b912516f..8c2f9f4b1 100644 --- a/app/src/main/java/org/linphone/activities/main/fragments/MasterFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/fragments/MasterFragment.kt @@ -22,7 +22,6 @@ package org.linphone.activities.main.fragments import android.app.Dialog import android.os.Bundle import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import org.linphone.R import org.linphone.activities.main.viewmodels.DialogViewModel @@ -44,23 +43,23 @@ abstract class MasterFragment : Fragment() { // List selection listSelectionViewModel = ViewModelProvider(this).get(ListTopBarViewModel::class.java) - listSelectionViewModel.isEditionEnabled.observe(viewLifecycleOwner, Observer { + listSelectionViewModel.isEditionEnabled.observe(viewLifecycleOwner, { if (!it) listSelectionViewModel.onUnSelectAll() }) - listSelectionViewModel.selectAllEvent.observe(viewLifecycleOwner, Observer { + listSelectionViewModel.selectAllEvent.observe(viewLifecycleOwner, { it.consume { listSelectionViewModel.onSelectAll(getItemCount() - 1) } }) - listSelectionViewModel.unSelectAllEvent.observe(viewLifecycleOwner, Observer { + listSelectionViewModel.unSelectAllEvent.observe(viewLifecycleOwner, { it.consume { listSelectionViewModel.onUnSelectAll() } }) - listSelectionViewModel.deleteSelectionEvent.observe(viewLifecycleOwner, Observer { + listSelectionViewModel.deleteSelectionEvent.observe(viewLifecycleOwner, { it.consume { val confirmationDialog = AppUtils.getStringWithPlural(dialogConfirmationMessageBeforeRemoval, listSelectionViewModel.selectedItems.value.orEmpty().size) val viewModel = DialogViewModel(confirmationDialog) diff --git a/app/src/main/java/org/linphone/activities/main/fragments/StatusFragment.kt b/app/src/main/java/org/linphone/activities/main/fragments/StatusFragment.kt index dec02a69a..da8d801ee 100644 --- a/app/src/main/java/org/linphone/activities/main/fragments/StatusFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/fragments/StatusFragment.kt @@ -24,7 +24,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.activities.main.viewmodels.SharedMainViewModel @@ -59,7 +58,7 @@ class StatusFragment : Fragment() { ViewModelProvider(this).get(SharedMainViewModel::class.java) } ?: throw Exception("Invalid Activity") - sharedViewModel.proxyConfigRemoved.observe(viewLifecycleOwner, Observer { + sharedViewModel.proxyConfigRemoved.observe(viewLifecycleOwner, { Log.i("[Status Fragment] A proxy config was removed, update default proxy state") val defaultProxy = coreContext.core.defaultProxyConfig if (defaultProxy != null) { diff --git a/app/src/main/java/org/linphone/activities/main/history/adapters/CallLogsListAdapter.kt b/app/src/main/java/org/linphone/activities/main/history/adapters/CallLogsListAdapter.kt index 7e6e471e5..bb383f7fb 100644 --- a/app/src/main/java/org/linphone/activities/main/history/adapters/CallLogsListAdapter.kt +++ b/app/src/main/java/org/linphone/activities/main/history/adapters/CallLogsListAdapter.kt @@ -25,7 +25,6 @@ import android.view.View import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.Observer import androidx.recyclerview.widget.DiffUtil import org.linphone.R import org.linphone.activities.main.history.viewmodels.CallLogViewModel @@ -69,7 +68,7 @@ class CallLogsListAdapter(val selectionViewModel: ListTopBarViewModel) : Lifecyc // This is for item selection through ListTopBarFragment selectionListViewModel = selectionViewModel - selectionViewModel.isEditionEnabled.observe(this@ViewHolder, Observer { + selectionViewModel.isEditionEnabled.observe(this@ViewHolder, { position = adapterPosition }) diff --git a/app/src/main/java/org/linphone/activities/main/history/fragments/DetailCallLogFragment.kt b/app/src/main/java/org/linphone/activities/main/history/fragments/DetailCallLogFragment.kt index 5348fed8b..0167badb7 100644 --- a/app/src/main/java/org/linphone/activities/main/history/fragments/DetailCallLogFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/history/fragments/DetailCallLogFragment.kt @@ -24,7 +24,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication.Companion.coreContext @@ -98,7 +97,7 @@ class DetailCallLogFragment : Fragment() { } } - viewModel.startCallEvent.observe(viewLifecycleOwner, Observer { + viewModel.startCallEvent.observe(viewLifecycleOwner, { it.consume { address -> if (coreContext.core.callsNb > 0) { Log.i("[History] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}") @@ -116,7 +115,7 @@ class DetailCallLogFragment : Fragment() { } }) - viewModel.chatRoomCreatedEvent.observe(viewLifecycleOwner, Observer { + viewModel.chatRoomCreatedEvent.observe(viewLifecycleOwner, { it.consume { chatRoom -> if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) { val args = Bundle() @@ -127,7 +126,7 @@ class DetailCallLogFragment : Fragment() { } }) - viewModel.onErrorEvent.observe(viewLifecycleOwner, Observer { + viewModel.onErrorEvent.observe(viewLifecycleOwner, { it.consume { messageResourceId -> (activity as MainActivity).showSnackBar(messageResourceId) } 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 9ecf1ffb2..c01833794 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 @@ -25,7 +25,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.content.ContextCompat -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DividerItemDecoration @@ -128,19 +127,19 @@ class MasterCallLogsFragment : MasterFragment() { val headerItemDecoration = RecyclerViewHeaderDecoration(adapter) binding.callLogsList.addItemDecoration(headerItemDecoration) - listViewModel.callLogs.observe(viewLifecycleOwner, Observer { callLogs -> + listViewModel.callLogs.observe(viewLifecycleOwner, { callLogs -> if (listViewModel.missedCallLogsSelected.value == false) { adapter.submitList(callLogs) } }) - listViewModel.missedCallLogs.observe(viewLifecycleOwner, Observer { callLogs -> + listViewModel.missedCallLogs.observe(viewLifecycleOwner, { callLogs -> if (listViewModel.missedCallLogsSelected.value == true) { adapter.submitList(callLogs) } }) - listViewModel.missedCallLogsSelected.observe(viewLifecycleOwner, Observer { + listViewModel.missedCallLogsSelected.observe(viewLifecycleOwner, { if (it) { adapter.submitList(listViewModel.missedCallLogs.value) } else { @@ -148,20 +147,20 @@ class MasterCallLogsFragment : MasterFragment() { } }) - listViewModel.contactsUpdatedEvent.observe(viewLifecycleOwner, Observer { + listViewModel.contactsUpdatedEvent.observe(viewLifecycleOwner, { it.consume { adapter.notifyDataSetChanged() } }) - adapter.selectedCallLogEvent.observe(viewLifecycleOwner, Observer { + adapter.selectedCallLogEvent.observe(viewLifecycleOwner, { it.consume { callLog -> sharedViewModel.selectedCallLogGroup.value = callLog navigateToCallHistory() } }) - adapter.startCallToEvent.observe(viewLifecycleOwner, Observer { + adapter.startCallToEvent.observe(viewLifecycleOwner, { it.consume { address -> if (coreContext.core.callsNb > 0) { Log.i("[History] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}") diff --git a/app/src/main/java/org/linphone/activities/main/recordings/adapters/RecordingsListAdapter.kt b/app/src/main/java/org/linphone/activities/main/recordings/adapters/RecordingsListAdapter.kt index f5582da7b..8b6e88f7f 100644 --- a/app/src/main/java/org/linphone/activities/main/recordings/adapters/RecordingsListAdapter.kt +++ b/app/src/main/java/org/linphone/activities/main/recordings/adapters/RecordingsListAdapter.kt @@ -26,7 +26,6 @@ import android.view.View import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.Observer import androidx.recyclerview.widget.DiffUtil import org.linphone.R import org.linphone.activities.main.recordings.viewmodels.RecordingViewModel @@ -72,7 +71,7 @@ class RecordingsListAdapter(val selectionViewModel: ListTopBarViewModel) : Lifec // This is for item selection through ListTopBarFragment selectionListViewModel = selectionViewModel - selectionViewModel.isEditionEnabled.observe(this@ViewHolder, Observer { + selectionViewModel.isEditionEnabled.observe(this@ViewHolder, { position = adapterPosition }) @@ -82,7 +81,7 @@ class RecordingsListAdapter(val selectionViewModel: ListTopBarViewModel) : Lifec } } - recording.isVideoRecordingPlayingEvent.observe(this@ViewHolder, Observer { + recording.isVideoRecordingPlayingEvent.observe(this@ViewHolder, { it.consume { value -> if (value) { recording.setTextureView(videoSurface) diff --git a/app/src/main/java/org/linphone/activities/main/recordings/fragments/RecordingsFragment.kt b/app/src/main/java/org/linphone/activities/main/recordings/fragments/RecordingsFragment.kt index d6b2c6d7e..738cf8110 100644 --- a/app/src/main/java/org/linphone/activities/main/recordings/fragments/RecordingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/recordings/fragments/RecordingsFragment.kt @@ -24,7 +24,6 @@ import android.view.LayoutInflater import android.view.MotionEvent import android.view.View import android.view.ViewGroup -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DividerItemDecoration @@ -80,7 +79,7 @@ class RecordingsFragment : MasterFragment() { val headerItemDecoration = RecyclerViewHeaderDecoration(adapter) binding.recordingsList.addItemDecoration(headerItemDecoration) - viewModel.recordingsList.observe(viewLifecycleOwner, Observer { recordings -> + viewModel.recordingsList.observe(viewLifecycleOwner, { recordings -> adapter.submitList(recordings) }) @@ -105,7 +104,7 @@ class RecordingsFragment : MasterFragment() { true } - adapter.isVideoRecordingPlayingEvent.observe(viewLifecycleOwner, Observer { + adapter.isVideoRecordingPlayingEvent.observe(viewLifecycleOwner, { it.consume { value -> viewModel.isVideoVisible.value = value } diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt index f73c1ab1a..624b60174 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt @@ -24,7 +24,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R @@ -64,7 +63,7 @@ class AccountSettingsFragment : Fragment() { binding.setBackClickListener { findNavController().popBackStack() } binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE - viewModel.linkPhoneNumberEvent.observe(viewLifecycleOwner, Observer { + viewModel.linkPhoneNumberEvent.observe(viewLifecycleOwner, { it.consume { if (findNavController().currentDestination?.id == R.id.accountSettingsFragment) { val authInfo = viewModel.proxyConfig.findAuthInfo() @@ -84,7 +83,7 @@ class AccountSettingsFragment : Fragment() { } }) - viewModel.proxyConfigRemovedEvent.observe(viewLifecycleOwner, Observer { + viewModel.proxyConfigRemovedEvent.observe(viewLifecycleOwner, { it.consume { sharedViewModel.proxyConfigRemoved.value = true findNavController().navigateUp() diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/AdvancedSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/AdvancedSettingsFragment.kt index 6ec408252..a13379407 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/AdvancedSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/AdvancedSettingsFragment.kt @@ -30,7 +30,6 @@ import android.view.ViewGroup import androidx.appcompat.app.AppCompatDelegate import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R @@ -64,7 +63,7 @@ class AdvancedSettingsFragment : Fragment() { binding.setBackClickListener { findNavController().popBackStack() } binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE - viewModel.setNightModeEvent.observe(viewLifecycleOwner, Observer { + viewModel.setNightModeEvent.observe(viewLifecycleOwner, { it.consume { value -> AppCompatDelegate.setDefaultNightMode( when (value) { @@ -78,7 +77,7 @@ class AdvancedSettingsFragment : Fragment() { viewModel.backgroundModeEnabled.value = !DeviceUtils.isAppUserRestricted(requireContext()) - viewModel.goToBatterySettingsEvent.observe(viewLifecycleOwner, Observer { it.consume { + viewModel.goToBatterySettingsEvent.observe(viewLifecycleOwner, { it.consume { try { val intent = Intent("android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS") startActivity(intent) @@ -88,7 +87,7 @@ class AdvancedSettingsFragment : Fragment() { } }) viewModel.powerManagerSettingsVisibility.value = PowerManagerUtils.getDevicePowerManagerIntent(requireContext()) != null - viewModel.goToPowerManagerSettingsEvent.observe(viewLifecycleOwner, Observer { it.consume { + viewModel.goToPowerManagerSettingsEvent.observe(viewLifecycleOwner, { it.consume { val intent = PowerManagerUtils.getDevicePowerManagerIntent(requireActivity()) if (intent != null) { try { @@ -99,7 +98,7 @@ class AdvancedSettingsFragment : Fragment() { } } }) - viewModel.goToAndroidSettingsEvent.observe(viewLifecycleOwner, Observer { it.consume { + viewModel.goToAndroidSettingsEvent.observe(viewLifecycleOwner, { it.consume { val intent = Intent() intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS intent.addCategory(Intent.CATEGORY_DEFAULT) diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/AudioSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/AudioSettingsFragment.kt index 8e1259fd7..39ca68c67 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/AudioSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/AudioSettingsFragment.kt @@ -27,7 +27,6 @@ import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.databinding.ViewDataBinding import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.BR @@ -63,14 +62,14 @@ class AudioSettingsFragment : Fragment() { binding.setBackClickListener { findNavController().popBackStack() } binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE - viewModel.askAudioRecordPermissionForEchoCancellerCalibrationEvent.observe(viewLifecycleOwner, Observer { + viewModel.askAudioRecordPermissionForEchoCancellerCalibrationEvent.observe(viewLifecycleOwner, { it.consume { Log.i("[Audio Settings] Asking for RECORD_AUDIO permission for echo canceller calibration") requestPermissions(arrayOf(android.Manifest.permission.RECORD_AUDIO), 1) } }) - viewModel.askAudioRecordPermissionForEchoTesterEvent.observe(viewLifecycleOwner, Observer { + viewModel.askAudioRecordPermissionForEchoTesterEvent.observe(viewLifecycleOwner, { it.consume { Log.i("[Audio Settings] Asking for RECORD_AUDIO permission for echo tester") requestPermissions(arrayOf(android.Manifest.permission.RECORD_AUDIO), 2) diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt index 1d48b7f1c..6de1a6e83 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt @@ -28,7 +28,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R @@ -61,7 +60,7 @@ class CallSettingsFragment : Fragment() { binding.setBackClickListener { findNavController().popBackStack() } binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE - viewModel.overlayEnabledEvent.observe(viewLifecycleOwner, Observer { + viewModel.overlayEnabledEvent.observe(viewLifecycleOwner, { it.consume { if (!Compatibility.canDrawOverlay(requireContext())) { val intent = Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", Uri.parse("package:${requireContext().packageName}")) @@ -70,7 +69,7 @@ class CallSettingsFragment : Fragment() { } }) - viewModel.goToAndroidNotificationSettingsEvent.observe(viewLifecycleOwner, Observer { it.consume { + viewModel.goToAndroidNotificationSettingsEvent.observe(viewLifecycleOwner, { it.consume { if (Build.VERSION.SDK_INT >= Version.API26_O_80) { val i = Intent() i.action = Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/ChatSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/ChatSettingsFragment.kt index 5576708ab..10d85ccbc 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/ChatSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/ChatSettingsFragment.kt @@ -27,7 +27,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R @@ -60,7 +59,7 @@ class ChatSettingsFragment : Fragment() { binding.setBackClickListener { findNavController().popBackStack() } binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE - viewModel.launcherShortcutsEvent.observe(viewLifecycleOwner, Observer { + viewModel.launcherShortcutsEvent.observe(viewLifecycleOwner, { it.consume { newValue -> if (newValue) { Compatibility.createShortcutsToChatRooms(requireContext()) @@ -70,7 +69,7 @@ class ChatSettingsFragment : Fragment() { } }) - viewModel.goToAndroidNotificationSettingsEvent.observe(viewLifecycleOwner, Observer { it.consume { + viewModel.goToAndroidNotificationSettingsEvent.observe(viewLifecycleOwner, { it.consume { if (Build.VERSION.SDK_INT >= Version.API26_O_80) { val i = Intent() i.action = Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/ContactsSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/ContactsSettingsFragment.kt index f97ecc342..d4925ca25 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/ContactsSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/ContactsSettingsFragment.kt @@ -25,7 +25,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication.Companion.coreContext @@ -61,7 +60,7 @@ class ContactsSettingsFragment : Fragment() { binding.setBackClickListener { findNavController().popBackStack() } binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE - viewModel.launcherShortcutsEvent.observe(viewLifecycleOwner, Observer { + viewModel.launcherShortcutsEvent.observe(viewLifecycleOwner, { it.consume { newValue -> if (newValue) { Compatibility.createShortcutsToContacts(requireContext()) @@ -74,7 +73,7 @@ class ContactsSettingsFragment : Fragment() { } }) - viewModel.askWriteContactsPermissionForPresenceStorageEvent.observe(viewLifecycleOwner, Observer { + viewModel.askWriteContactsPermissionForPresenceStorageEvent.observe(viewLifecycleOwner, { it.consume { Log.i("[Contacts Settings] Asking for WRITE_CONTACTS permission to be able to store presence") requestPermissions(arrayOf(android.Manifest.permission.WRITE_CONTACTS), 1) diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/SettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/SettingsFragment.kt index 8bb6441f6..7931fbd19 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/SettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/SettingsFragment.kt @@ -24,7 +24,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.activities.main.* @@ -65,7 +64,7 @@ class SettingsFragment : Fragment() { binding.setBackClickListener { findNavController().popBackStack() } - sharedViewModel.proxyConfigRemoved.observe(viewLifecycleOwner, Observer { + sharedViewModel.proxyConfigRemoved.observe(viewLifecycleOwner, { Log.i("[Settings] Proxy config removed, update accounts list") viewModel.updateAccountsList() }) diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/VideoSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/VideoSettingsViewModel.kt index cca4c86c0..ee4461c64 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/VideoSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/VideoSettingsViewModel.kt @@ -152,7 +152,7 @@ class VideoSettingsViewModel : GenericSettingsViewModel() { } videoSizeLabels.value = labels - videoSizeIndex.value = labels.indexOf(core.preferredVideoDefinition?.name) + videoSizeIndex.value = labels.indexOf(core.preferredVideoDefinition.name) } private fun initVideoPresetList() { diff --git a/app/src/main/java/org/linphone/activities/main/sidemenu/fragments/SideMenuFragment.kt b/app/src/main/java/org/linphone/activities/main/sidemenu/fragments/SideMenuFragment.kt index 1115d22b2..4029a9248 100644 --- a/app/src/main/java/org/linphone/activities/main/sidemenu/fragments/SideMenuFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/sidemenu/fragments/SideMenuFragment.kt @@ -29,7 +29,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController @@ -76,7 +75,7 @@ class SideMenuFragment : Fragment() { ViewModelProvider(this).get(SharedMainViewModel::class.java) } ?: throw Exception("Invalid Activity") - sharedViewModel.proxyConfigRemoved.observe(viewLifecycleOwner, Observer { + sharedViewModel.proxyConfigRemoved.observe(viewLifecycleOwner, { Log.i("[Side Menu] Proxy config removed, update accounts list") viewModel.updateAccountsList() }) diff --git a/app/src/main/java/org/linphone/compatibility/Api28Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api30Compatibility.kt similarity index 61% rename from app/src/main/java/org/linphone/compatibility/Api28Compatibility.kt rename to app/src/main/java/org/linphone/compatibility/Api30Compatibility.kt index a42de5071..b15fd5c54 100644 --- a/app/src/main/java/org/linphone/compatibility/Api28Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api30Compatibility.kt @@ -20,23 +20,20 @@ package org.linphone.compatibility import android.annotation.TargetApi -import android.app.* -import android.app.usage.UsageStatsManager import android.content.Context +import android.content.pm.ShortcutManager +import org.linphone.core.ChatRoom -@TargetApi(28) -class Api28Compatibility { +@TargetApi(30) +class Api30Compatibility { companion object { - fun isAppUserRestricted(context: Context): Boolean { - val activityManager = - context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager - return activityManager.isBackgroundRestricted - } + fun removeChatRoomShortcut(context: Context, chatRoom: ChatRoom) { + val peerAddress = chatRoom.peerAddress.asStringUriOnly() + val localAddress = chatRoom.localAddress.asStringUriOnly() - fun getAppStandbyBucket(context: Context): Int { - val usageStatsManager = - context.getSystemService(Context.USAGE_STATS_SERVICE) as UsageStatsManager - return usageStatsManager.appStandbyBucket + val shortcutManager = context.getSystemService(ShortcutManager::class.java) + val shortcutsToRemoveList = arrayListOf("$localAddress#$peerAddress") + shortcutManager.removeLongLivedShortcuts(shortcutsToRemoveList) } } } diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Compatibility.kt index ab7b955b1..8ca2bd236 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.kt @@ -139,7 +139,7 @@ class Compatibility { fun removeChatRoomShortcut(context: Context, chatRoom: ChatRoom) { if (Version.sdkAboveOrEqual(Version.API30_ANDROID_11)) { - // TODO Use removeLongLivedShortcuts() + Api30Compatibility.removeChatRoomShortcut(context, chatRoom) } } diff --git a/app/src/main/java/org/linphone/utils/PhoneNumberUtils.kt b/app/src/main/java/org/linphone/utils/PhoneNumberUtils.kt index 78b4807c3..a9b0724b0 100644 --- a/app/src/main/java/org/linphone/utils/PhoneNumberUtils.kt +++ b/app/src/main/java/org/linphone/utils/PhoneNumberUtils.kt @@ -39,7 +39,7 @@ class PhoneNumberUtils { return null } - @SuppressLint("MissingPermission") + @SuppressLint("MissingPermission", "HardwareIds") fun getDevicePhoneNumber(context: Context): String? { if (PermissionHelper.get().hasReadPhoneState()) { try { diff --git a/app/src/main/res/layout/assistant_account_login_fragment.xml b/app/src/main/res/layout/assistant_account_login_fragment.xml index cd01272a5..29e2c37d1 100644 --- a/app/src/main/res/layout/assistant_account_login_fragment.xml +++ b/app/src/main/res/layout/assistant_account_login_fragment.xml @@ -105,54 +105,47 @@ android:layout_below="@id/select_country_label"/> - + - - - - - - - + android:layout_height="wrap_content"/> - + - + - + + + @@ -212,7 +205,7 @@ - + android:padding="10dp" + android:gravity="center" + android:orientation="horizontal"> - + android:text="@string/transport" + android:textAllCaps="true" /> - + - + - + - - - - - + - - + android:layout_height="wrap_content" + android:background="?attr/backgroundColor" + android:orientation="vertical" + app:entries="@{viewModel.callStatsList}" + app:layout="@{@layout/call_statistics_cell}" /> - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/chat_message_attachment_cell.xml b/app/src/main/res/layout/chat_message_attachment_cell.xml index 5ff0171ab..826d85cbb 100644 --- a/app/src/main/res/layout/chat_message_attachment_cell.xml +++ b/app/src/main/res/layout/chat_message_attachment_cell.xml @@ -48,6 +48,7 @@ android:layout_width="20dp" android:layout_height="20dp" android:src="@drawable/recording_play_pause" + android:contentDescription="@string/content_description_chat_message_video_attachment" android:layout_centerInParent="true"/> diff --git a/app/src/main/res/layout/chat_room_creation_fragment.xml b/app/src/main/res/layout/chat_room_creation_fragment.xml index 46b1588ee..a943762bc 100644 --- a/app/src/main/res/layout/chat_room_creation_fragment.xml +++ b/app/src/main/res/layout/chat_room_creation_fragment.xml @@ -62,7 +62,7 @@ android:contentDescription="@string/content_description_e2e_encryption_disabled" android:src="@drawable/security_toogle_icon_grey"/> - %d day %d days - Share logs link using... + Share logs link using… Invalid email @@ -640,6 +640,7 @@ Discard changes Save changes Change contact picture + Change own picture Call direction Go to call details Quit edition mode @@ -687,4 +688,5 @@ Call is secured Call security is pending Show or hide call statistics + Video attachment diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 972d76ef5..4e34660d8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -98,11 +98,6 @@ 18sp - -