Code improvements

This commit is contained in:
Sylvain Berfini 2020-08-21 11:29:03 +02:00
parent d611d20cfd
commit c582b18b28
61 changed files with 222 additions and 289 deletions

View file

@ -57,7 +57,7 @@ android {
buildToolsVersion '30.0.2' buildToolsVersion '30.0.2'
defaultConfig { defaultConfig {
minSdkVersion 23 minSdkVersion 23
targetSdkVersion 29 targetSdkVersion 30
versionCode 4999 versionCode 4999
versionName "${project.version}" versionName "${project.version}"
applicationId getPackageName() applicationId getPackageName()

View file

@ -26,7 +26,6 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
@ -83,7 +82,7 @@ class AccountLoginFragment : AbstractPhoneFragment() {
startActivity(intent) startActivity(intent)
} }
viewModel.goToSmsValidationEvent.observe(viewLifecycleOwner, Observer { viewModel.goToSmsValidationEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
if (findNavController().currentDestination?.id == R.id.accountLoginFragment) { if (findNavController().currentDestination?.id == R.id.accountLoginFragment) {
val args = Bundle() val args = Bundle()
@ -94,7 +93,7 @@ class AccountLoginFragment : AbstractPhoneFragment() {
} }
}) })
viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, Observer { viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
if (coreContext.core.isEchoCancellerCalibrationRequired) { if (coreContext.core.isEchoCancellerCalibrationRequired) {
if (findNavController().currentDestination?.id == R.id.accountLoginFragment) { 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 { it.consume {
val dialogViewModel = DialogViewModel(getString(R.string.assistant_error_invalid_credentials)) val dialogViewModel = DialogViewModel(getString(R.string.assistant_error_invalid_credentials))
val dialog: Dialog = DialogUtils.getDialog(requireContext(), dialogViewModel) val dialog: Dialog = DialogUtils.getDialog(requireContext(), dialogViewModel)

View file

@ -25,7 +25,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import org.linphone.activities.assistant.viewmodels.EchoCancellerCalibrationViewModel import org.linphone.activities.assistant.viewmodels.EchoCancellerCalibrationViewModel
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
@ -53,7 +52,7 @@ class EchoCancellerCalibrationFragment : Fragment() {
viewModel = ViewModelProvider(this).get(EchoCancellerCalibrationViewModel::class.java) viewModel = ViewModelProvider(this).get(EchoCancellerCalibrationViewModel::class.java)
binding.viewModel = viewModel binding.viewModel = viewModel
viewModel.echoCalibrationTerminated.observe(viewLifecycleOwner, Observer { viewModel.echoCalibrationTerminated.observe(viewLifecycleOwner, {
it.consume { it.consume {
requireActivity().finish() requireActivity().finish()
} }

View file

@ -24,7 +24,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.R import org.linphone.R
@ -59,7 +58,7 @@ class EmailAccountCreationFragment : Fragment() {
viewModel = ViewModelProvider(this, EmailAccountCreationViewModelFactory(sharedViewModel.getAccountCreator())).get(EmailAccountCreationViewModel::class.java) viewModel = ViewModelProvider(this, EmailAccountCreationViewModelFactory(sharedViewModel.getAccountCreator())).get(EmailAccountCreationViewModel::class.java)
binding.viewModel = viewModel binding.viewModel = viewModel
viewModel.goToEmailValidationEvent.observe(viewLifecycleOwner, Observer { viewModel.goToEmailValidationEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
if (findNavController().currentDestination?.id == R.id.emailAccountCreationFragment) { if (findNavController().currentDestination?.id == R.id.emailAccountCreationFragment) {
findNavController().navigate(R.id.action_emailAccountCreationFragment_to_emailAccountValidationFragment) findNavController().navigate(R.id.action_emailAccountCreationFragment_to_emailAccountValidationFragment)

View file

@ -24,7 +24,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.R import org.linphone.R
@ -57,7 +56,7 @@ class EmailAccountValidationFragment : Fragment() {
viewModel = ViewModelProvider(this, EmailAccountValidationViewModelFactory(sharedViewModel.getAccountCreator())).get(EmailAccountValidationViewModel::class.java) viewModel = ViewModelProvider(this, EmailAccountValidationViewModelFactory(sharedViewModel.getAccountCreator())).get(EmailAccountValidationViewModel::class.java)
binding.viewModel = viewModel binding.viewModel = viewModel
viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, Observer { viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
if (findNavController().currentDestination?.id == R.id.emailAccountValidationFragment) { if (findNavController().currentDestination?.id == R.id.emailAccountValidationFragment) {
val args = Bundle() val args = Bundle()

View file

@ -25,7 +25,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
@ -63,7 +62,7 @@ class GenericAccountLoginFragment : Fragment() {
viewModel = ViewModelProvider(this, GenericLoginViewModelFactory(sharedViewModel.getAccountCreator(true))).get(GenericLoginViewModel::class.java) viewModel = ViewModelProvider(this, GenericLoginViewModelFactory(sharedViewModel.getAccountCreator(true))).get(GenericLoginViewModel::class.java)
binding.viewModel = viewModel binding.viewModel = viewModel
viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, Observer { viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
if (coreContext.core.isEchoCancellerCalibrationRequired) { if (coreContext.core.isEchoCancellerCalibrationRequired) {
if (findNavController().currentDestination?.id == R.id.genericAccountLoginFragment) { 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 { it.consume {
val dialogViewModel = DialogViewModel(getString(R.string.assistant_error_invalid_credentials)) val dialogViewModel = DialogViewModel(getString(R.string.assistant_error_invalid_credentials))
val dialog: Dialog = DialogUtils.getDialog(requireContext(), dialogViewModel) val dialog: Dialog = DialogUtils.getDialog(requireContext(), dialogViewModel)

View file

@ -23,7 +23,6 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.R import org.linphone.R
@ -66,7 +65,7 @@ class PhoneAccountCreationFragment : AbstractPhoneFragment() {
CountryPickerFragment(viewModel).show(childFragmentManager, "CountryPicker") CountryPickerFragment(viewModel).show(childFragmentManager, "CountryPicker")
} }
viewModel.goToSmsValidationEvent.observe(viewLifecycleOwner, Observer { viewModel.goToSmsValidationEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
if (findNavController().currentDestination?.id == R.id.phoneAccountCreationFragment) { if (findNavController().currentDestination?.id == R.id.phoneAccountCreationFragment) {
val args = Bundle() val args = Bundle()

View file

@ -23,7 +23,6 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication import org.linphone.LinphoneApplication
@ -80,7 +79,7 @@ class PhoneAccountLinkingFragment : AbstractPhoneFragment() {
CountryPickerFragment(viewModel).show(childFragmentManager, "CountryPicker") CountryPickerFragment(viewModel).show(childFragmentManager, "CountryPicker")
} }
viewModel.goToSmsValidationEvent.observe(viewLifecycleOwner, Observer { viewModel.goToSmsValidationEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
if (findNavController().currentDestination?.id == R.id.phoneAccountLinkingFragment) { if (findNavController().currentDestination?.id == R.id.phoneAccountLinkingFragment) {
val args = Bundle() val args = Bundle()
@ -91,7 +90,7 @@ class PhoneAccountLinkingFragment : AbstractPhoneFragment() {
} }
}) })
viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, Observer { viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
if (findNavController().currentDestination?.id == R.id.phoneAccountLinkingFragment) { if (findNavController().currentDestination?.id == R.id.phoneAccountLinkingFragment) {
if (LinphoneApplication.coreContext.core.isEchoCancellerCalibrationRequired) { if (LinphoneApplication.coreContext.core.isEchoCancellerCalibrationRequired) {

View file

@ -26,7 +26,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
@ -67,7 +66,7 @@ class PhoneAccountValidationFragment : Fragment() {
viewModel.isCreation.value = arguments?.getBoolean("IsCreation", false) viewModel.isCreation.value = arguments?.getBoolean("IsCreation", false)
viewModel.isLinking.value = arguments?.getBoolean("IsLinking", false) viewModel.isLinking.value = arguments?.getBoolean("IsLinking", false)
viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, Observer { viewModel.leaveAssistantEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
when { when {
viewModel.isLogin.value == true || viewModel.isCreation.value == true -> { viewModel.isLogin.value == true || viewModel.isCreation.value == true -> {

View file

@ -25,7 +25,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
@ -61,7 +60,7 @@ class QrCodeFragment : Fragment() {
viewModel = ViewModelProvider(this).get(QrCodeViewModel::class.java) viewModel = ViewModelProvider(this).get(QrCodeViewModel::class.java)
binding.viewModel = viewModel binding.viewModel = viewModel
viewModel.qrCodeFoundEvent.observe(viewLifecycleOwner, Observer { viewModel.qrCodeFoundEvent.observe(viewLifecycleOwner, {
it.consume { url -> it.consume { url ->
sharedViewModel.remoteProvisioningUrl.value = url sharedViewModel.remoteProvisioningUrl.value = url
findNavController().navigateUp() findNavController().navigateUp()

View file

@ -24,7 +24,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext 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 -> it.consume { success ->
if (success) { if (success) {
if (coreContext.core.isEchoCancellerCalibrationRequired) { if (coreContext.core.isEchoCancellerCalibrationRequired) {

View file

@ -24,7 +24,6 @@ import android.os.Bundle
import android.view.Gravity import android.view.Gravity
import android.view.MotionEvent import android.view.MotionEvent
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
@ -57,7 +56,7 @@ class CallActivity : ProximitySensorActivity() {
sharedViewModel = ViewModelProvider(this).get(SharedCallViewModel::class.java) sharedViewModel = ViewModelProvider(this).get(SharedCallViewModel::class.java)
sharedViewModel.toggleDrawerEvent.observe(this, Observer { sharedViewModel.toggleDrawerEvent.observe(this, {
it.consume { it.consume {
if (binding.statsMenu.isDrawerOpen(Gravity.LEFT)) { if (binding.statsMenu.isDrawerOpen(Gravity.LEFT)) {
binding.statsMenu.closeDrawer(binding.sideMenuContent, true) binding.statsMenu.closeDrawer(binding.sideMenuContent, true)
@ -67,7 +66,7 @@ class CallActivity : ProximitySensorActivity() {
} }
}) })
sharedViewModel.resetHiddenInterfaceTimerInVideoCallEvent.observe(this, Observer { sharedViewModel.resetHiddenInterfaceTimerInVideoCallEvent.observe(this, {
it.consume { it.consume {
viewModel.showMomentarily() viewModel.showMomentarily()
} }
@ -95,7 +94,7 @@ class CallActivity : ProximitySensorActivity() {
videoZoomHelper = VideoZoomHelper(this, binding.remoteVideoSurface) videoZoomHelper = VideoZoomHelper(this, binding.remoteVideoSurface)
viewModel.proximitySensorEnabled.observe(this, Observer { viewModel.proximitySensorEnabled.observe(this, {
enableProximitySensor(it) enableProximitySensor(it)
}) })
} }

View file

@ -24,7 +24,6 @@ import android.app.KeyguardManager
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
@ -65,21 +64,21 @@ class IncomingCallActivity : GenericActivity() {
)[IncomingCallViewModel::class.java] )[IncomingCallViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
viewModel.callEndedEvent.observe(this, Observer { viewModel.callEndedEvent.observe(this, {
it.consume { it.consume {
Log.i("[Incoming Call Activity] Call ended, finish activity") Log.i("[Incoming Call Activity] Call ended, finish activity")
finish() finish()
} }
}) })
viewModel.callConnectedEvent.observe(this, Observer { viewModel.callConnectedEvent.observe(this, {
it.consume { it.consume {
Log.i("[Incoming Call Activity] Call connected, finish activity") Log.i("[Incoming Call Activity] Call connected, finish activity")
finish() finish()
} }
}) })
viewModel.earlyMediaVideoEnabled.observe(this, Observer { viewModel.earlyMediaVideoEnabled.observe(this, {
if (it) { if (it) {
Log.i("[Incoming Call Activity] Early media video being received, set native window id") Log.i("[Incoming Call Activity] Early media video being received, set native window id")
coreContext.core.nativeVideoWindowId = binding.remoteVideoSurface coreContext.core.nativeVideoWindowId = binding.remoteVideoSurface

View file

@ -23,7 +23,6 @@ import android.annotation.TargetApi
import android.os.Bundle import android.os.Bundle
import android.view.WindowManager import android.view.WindowManager
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
@ -82,14 +81,14 @@ class OutgoingCallActivity : GenericActivity() {
controlsViewModel.toggleSpeaker() controlsViewModel.toggleSpeaker()
} }
viewModel.callEndedEvent.observe(this, Observer { viewModel.callEndedEvent.observe(this, {
it.consume { it.consume {
Log.i("[Outgoing Call Activity] Call ended, finish activity") Log.i("[Outgoing Call Activity] Call ended, finish activity")
finish() finish()
} }
}) })
viewModel.callConnectedEvent.observe(this, Observer { viewModel.callConnectedEvent.observe(this, {
it.consume { it.consume {
Log.i("[Outgoing Call Activity] Call connected, finish activity") Log.i("[Outgoing Call Activity] Call connected, finish activity")
finish() finish()

View file

@ -27,9 +27,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import java.util.*
import org.linphone.R import org.linphone.R
import org.linphone.activities.call.viewmodels.CallsViewModel import org.linphone.activities.call.viewmodels.CallsViewModel
import org.linphone.activities.call.viewmodels.ControlsViewModel import org.linphone.activities.call.viewmodels.ControlsViewModel
@ -74,7 +72,7 @@ class ControlsFragment : Fragment() {
controlsViewModel = ViewModelProvider(this).get(ControlsViewModel::class.java) controlsViewModel = ViewModelProvider(this).get(ControlsViewModel::class.java)
binding.controlsViewModel = controlsViewModel binding.controlsViewModel = controlsViewModel
callsViewModel.currentCallViewModel.observe(viewLifecycleOwner, Observer { callsViewModel.currentCallViewModel.observe(viewLifecycleOwner, {
if (it != null) { if (it != null) {
binding.activeCallTimer.base = binding.activeCallTimer.base =
SystemClock.elapsedRealtime() - (1000 * it.call.duration) // Linphone timestamps are in seconds 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 { it.consume {
activity?.finish() activity?.finish()
} }
}) })
callsViewModel.callUpdateEvent.observe(viewLifecycleOwner, Observer { callsViewModel.callUpdateEvent.observe(viewLifecycleOwner, {
it.consume { call -> it.consume { call ->
if (call.state == Call.State.StreamsRunning) { if (call.state == Call.State.StreamsRunning) {
dialog?.dismiss() dialog?.dismiss()
@ -98,7 +96,7 @@ class ControlsFragment : Fragment() {
} }
}) })
controlsViewModel.chatClickedEvent.observe(viewLifecycleOwner, Observer { controlsViewModel.chatClickedEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
val intent = Intent() val intent = Intent()
intent.setClass(requireContext(), MainActivity::class.java) intent.setClass(requireContext(), MainActivity::class.java)
@ -108,7 +106,7 @@ class ControlsFragment : Fragment() {
} }
}) })
controlsViewModel.addCallClickedEvent.observe(viewLifecycleOwner, Observer { controlsViewModel.addCallClickedEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
val intent = Intent() val intent = Intent()
intent.setClass(requireContext(), MainActivity::class.java) intent.setClass(requireContext(), MainActivity::class.java)
@ -119,7 +117,7 @@ class ControlsFragment : Fragment() {
} }
}) })
controlsViewModel.transferCallClickedEvent.observe(viewLifecycleOwner, Observer { controlsViewModel.transferCallClickedEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
val intent = Intent() val intent = Intent()
intent.setClass(requireContext(), MainActivity::class.java) intent.setClass(requireContext(), MainActivity::class.java)
@ -130,7 +128,7 @@ class ControlsFragment : Fragment() {
} }
}) })
controlsViewModel.somethingClickedEvent.observe(viewLifecycleOwner, Observer { controlsViewModel.somethingClickedEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
sharedViewModel.resetHiddenInterfaceTimerInVideoCallEvent.value = Event(true) sharedViewModel.resetHiddenInterfaceTimerInVideoCallEvent.value = Event(true)
} }

View file

@ -25,7 +25,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import java.util.* import java.util.*
import org.linphone.R import org.linphone.R
@ -73,7 +72,7 @@ class StatusFragment : Fragment() {
viewModel.refreshRegister() viewModel.refreshRegister()
} }
viewModel.showZrtpDialogEvent.observe(viewLifecycleOwner, Observer { viewModel.showZrtpDialogEvent.observe(viewLifecycleOwner, {
it.consume { call -> it.consume { call ->
if (call.state == Call.State.Connected || call.state == Call.State.StreamsRunning) { if (call.state == Call.State.Connected || call.state == Call.State.StreamsRunning) {
showZrtpDialog(call) showZrtpDialog(call)

View file

@ -28,7 +28,6 @@ import android.view.Gravity
import android.view.View import android.view.View
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController import androidx.navigation.NavController
@ -77,7 +76,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
sharedViewModel = ViewModelProvider(this).get(SharedMainViewModel::class.java) sharedViewModel = ViewModelProvider(this).get(SharedMainViewModel::class.java)
binding.viewModel = sharedViewModel binding.viewModel = sharedViewModel
sharedViewModel.toggleDrawerEvent.observe(this, Observer { sharedViewModel.toggleDrawerEvent.observe(this, {
it.consume { it.consume {
if (binding.sideMenu.isDrawerOpen(Gravity.LEFT)) { if (binding.sideMenu.isDrawerOpen(Gravity.LEFT)) {
binding.sideMenu.closeDrawer(binding.sideMenuContent, true) 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 -> it.consume { messageResourceId ->
showSnackBar(messageResourceId) showSnackBar(messageResourceId)
} }

View file

@ -26,7 +26,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.R import org.linphone.R
@ -73,7 +72,7 @@ class AboutFragment : Fragment() {
startActivity(browserIntent) startActivity(browserIntent)
} }
viewModel.uploadFinishedEvent.observe(viewLifecycleOwner, Observer { viewModel.uploadFinishedEvent.observe(viewLifecycleOwner, {
it.consume { url -> it.consume { url ->
val clipboard = val clipboard =
requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager

View file

@ -28,7 +28,6 @@ import android.view.ViewGroup
import androidx.appcompat.widget.PopupMenu import androidx.appcompat.widget.PopupMenu
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
@ -133,7 +132,7 @@ class ChatMessagesListAdapter(val selectionViewModel: ListTopBarViewModel) : Lif
// This is for item selection through ListTopBarFragment // This is for item selection through ListTopBarFragment
selectionListViewModel = selectionViewModel selectionListViewModel = selectionViewModel
selectionViewModel.isEditionEnabled.observe(this@ChatMessageViewHolder, Observer { selectionViewModel.isEditionEnabled.observe(this@ChatMessageViewHolder, {
position = adapterPosition position = adapterPosition
}) })
@ -292,7 +291,7 @@ class ChatMessagesListAdapter(val selectionViewModel: ListTopBarViewModel) : Lif
// This is for item selection through ListTopBarFragment // This is for item selection through ListTopBarFragment
selectionListViewModel = selectionViewModel selectionListViewModel = selectionViewModel
selectionViewModel.isEditionEnabled.observe(this@EventViewHolder, Observer { selectionViewModel.isEditionEnabled.observe(this@EventViewHolder, {
position = adapterPosition position = adapterPosition
}) })

View file

@ -23,7 +23,6 @@ import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
@ -67,11 +66,11 @@ class ChatRoomCreationContactsAdapter : LifecycleListAdapter<SearchResult, ChatR
val searchResultViewModel = ChatRoomCreationContactViewModel(searchResult) val searchResultViewModel = ChatRoomCreationContactViewModel(searchResult)
viewModel = searchResultViewModel viewModel = searchResultViewModel
securityEnabled.observe(this@ViewHolder, Observer { securityEnabled.observe(this@ViewHolder, {
updateSecurity(searchResult, searchResultViewModel, it) updateSecurity(searchResult, searchResultViewModel, it)
}) })
selectedAddresses.observe(this@ViewHolder, Observer { selectedAddresses.observe(this@ViewHolder, {
val selected = it.find { address -> val selected = it.find { address ->
val searchAddress = searchResult.address val searchAddress = searchResult.address
if (searchAddress != null) address.weakEqual(searchAddress) else false if (searchAddress != null) address.weakEqual(searchAddress) else false

View file

@ -23,7 +23,6 @@ import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.chat.viewmodels.ChatRoomViewModel 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 // This is for item selection through ListTopBarFragment
selectionListViewModel = selectionViewModel selectionListViewModel = selectionViewModel
selectionViewModel.isEditionEnabled.observe(this@ViewHolder, Observer { selectionViewModel.isEditionEnabled.observe(this@ViewHolder, {
position = adapterPosition position = adapterPosition
}) })

View file

@ -51,7 +51,7 @@ class ImdnAdapter : ListAdapter<ParticipantImdnState,
holder.bind(getItem(position)) holder.bind(getItem(position))
} }
inner class ViewHolder( class ViewHolder(
private val binding: ChatRoomImdnParticipantCellBinding private val binding: ChatRoomImdnParticipantCellBinding
) : LifecycleViewHolder(binding) { ) : LifecycleViewHolder(binding) {
fun bind(participantImdnState: ParticipantImdnState) { fun bind(participantImdnState: ParticipantImdnState) {

View file

@ -24,7 +24,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.DividerItemDecoration
@ -96,23 +95,23 @@ class ChatRoomCreationFragment : Fragment() {
viewModel.sipContactsSelected.value = true viewModel.sipContactsSelected.value = true
} }
viewModel.contactsList.observe(viewLifecycleOwner, Observer { viewModel.contactsList.observe(viewLifecycleOwner, {
adapter.submitList(it) adapter.submitList(it)
}) })
viewModel.isEncrypted.observe(viewLifecycleOwner, Observer { viewModel.isEncrypted.observe(viewLifecycleOwner, {
adapter.securityEnabled.value = it adapter.securityEnabled.value = it
}) })
viewModel.sipContactsSelected.observe(viewLifecycleOwner, Observer { viewModel.sipContactsSelected.observe(viewLifecycleOwner, {
viewModel.updateContactsList() viewModel.updateContactsList()
}) })
viewModel.selectedAddresses.observe(viewLifecycleOwner, Observer { viewModel.selectedAddresses.observe(viewLifecycleOwner, {
adapter.selectedAddresses.value = it adapter.selectedAddresses.value = it
}) })
viewModel.chatRoomCreatedEvent.observe(viewLifecycleOwner, Observer { viewModel.chatRoomCreatedEvent.observe(viewLifecycleOwner, {
it.consume { chatRoom -> it.consume { chatRoom ->
sharedViewModel.selectedChatRoom.value = chatRoom sharedViewModel.selectedChatRoom.value = chatRoom
if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) { 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() viewModel.applyFilter()
}) })
adapter.selectedContact.observe(viewLifecycleOwner, Observer { adapter.selectedContact.observe(viewLifecycleOwner, {
it.consume { searchResult -> it.consume { searchResult ->
if (createGroup) { if (createGroup) {
viewModel.toggleSelectionForSearchResult(searchResult) viewModel.toggleSelectionForSearchResult(searchResult)
@ -148,7 +147,7 @@ class ChatRoomCreationFragment : Fragment() {
} }
} }
viewModel.onErrorEvent.observe(viewLifecycleOwner, Observer { viewModel.onErrorEvent.observe(viewLifecycleOwner, {
it.consume { messageResourceId -> it.consume { messageResourceId ->
(activity as MainActivity).showSnackBar(messageResourceId) (activity as MainActivity).showSnackBar(messageResourceId)
} }

View file

@ -32,7 +32,6 @@ import android.view.*
import android.webkit.MimeTypeMap import android.webkit.MimeTypeMap
import androidx.appcompat.view.menu.MenuBuilder import androidx.appcompat.view.menu.MenuBuilder
import androidx.appcompat.view.menu.MenuPopupHelper import androidx.appcompat.view.menu.MenuPopupHelper
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
@ -129,45 +128,45 @@ class DetailChatRoomFragment : MasterFragment() {
} }
binding.chatMessagesList.addOnScrollListener(chatScrollListener) binding.chatMessagesList.addOnScrollListener(chatScrollListener)
chatSendingViewModel.textToSend.observe(viewLifecycleOwner, Observer { chatSendingViewModel.textToSend.observe(viewLifecycleOwner, {
chatSendingViewModel.onTextToSendChanged(it) chatSendingViewModel.onTextToSendChanged(it)
}) })
listViewModel.events.observe(viewLifecycleOwner, Observer { events -> listViewModel.events.observe(viewLifecycleOwner, { events ->
adapter.submitList(events) adapter.submitList(events)
}) })
listViewModel.messageUpdatedEvent.observe(viewLifecycleOwner, Observer { listViewModel.messageUpdatedEvent.observe(viewLifecycleOwner, {
it.consume { position -> it.consume { position ->
adapter.notifyItemChanged(position) adapter.notifyItemChanged(position)
} }
}) })
listViewModel.scrollToBottomOnMessageReceivedEvent.observe(viewLifecycleOwner, Observer { listViewModel.scrollToBottomOnMessageReceivedEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
scrollToBottom() scrollToBottom()
} }
}) })
listViewModel.requestWriteExternalStoragePermissionEvent.observe(viewLifecycleOwner, Observer { listViewModel.requestWriteExternalStoragePermissionEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
requestPermissions(arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE), 1) requestPermissions(arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE), 1)
} }
}) })
adapter.deleteMessageEvent.observe(viewLifecycleOwner, Observer { adapter.deleteMessageEvent.observe(viewLifecycleOwner, {
it.consume { chatMessage -> it.consume { chatMessage ->
listViewModel.deleteMessage(chatMessage) listViewModel.deleteMessage(chatMessage)
} }
}) })
adapter.resendMessageEvent.observe(viewLifecycleOwner, Observer { adapter.resendMessageEvent.observe(viewLifecycleOwner, {
it.consume { chatMessage -> it.consume { chatMessage ->
listViewModel.resendMessage(chatMessage) listViewModel.resendMessage(chatMessage)
} }
}) })
adapter.forwardMessageEvent.observe(viewLifecycleOwner, Observer { adapter.forwardMessageEvent.observe(viewLifecycleOwner, {
it.consume { chatMessage -> it.consume { chatMessage ->
// Remove observer before setting the message to forward // Remove observer before setting the message to forward
// as we don't want to forward it in this chat room // 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 -> it.consume { chatMessage ->
val args = Bundle() val args = Bundle()
args.putString("MessageId", chatMessage.messageId) args.putString("MessageId", chatMessage.messageId)
@ -186,14 +185,14 @@ class DetailChatRoomFragment : MasterFragment() {
} }
}) })
adapter.addSipUriToContactEvent.observe(viewLifecycleOwner, Observer { adapter.addSipUriToContactEvent.observe(viewLifecycleOwner, {
it.consume { sipUri -> it.consume { sipUri ->
Log.i("[Chat Room] Going to contacts list with SIP URI to add: $sipUri") Log.i("[Chat Room] Going to contacts list with SIP URI to add: $sipUri")
navigateToContacts(sipUri) navigateToContacts(sipUri)
} }
}) })
adapter.openContentEvent.observe(viewLifecycleOwner, Observer { adapter.openContentEvent.observe(viewLifecycleOwner, {
it.consume { path -> it.consume { path ->
openFile(path) openFile(path)
} }
@ -239,7 +238,7 @@ class DetailChatRoomFragment : MasterFragment() {
coreContext.startCall(viewModel.addressToCall) coreContext.startCall(viewModel.addressToCall)
} }
sharedViewModel.textToShare.observe(viewLifecycleOwner, Observer { sharedViewModel.textToShare.observe(viewLifecycleOwner, {
if (it.isNotEmpty()) { if (it.isNotEmpty()) {
Log.i("[Chat Room] Found text to share") Log.i("[Chat Room] Found text to share")
chatSendingViewModel.textToSend.value = it chatSendingViewModel.textToSend.value = it
@ -247,7 +246,7 @@ class DetailChatRoomFragment : MasterFragment() {
} }
}) })
sharedViewModel.filesToShare.observe(viewLifecycleOwner, Observer { sharedViewModel.filesToShare.observe(viewLifecycleOwner, {
if (it.isNotEmpty()) { if (it.isNotEmpty()) {
for (path in it) { for (path in it) {
Log.i("[Chat Room] Found $path file to share") 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 -> it.consume { chatMessage ->
Log.i("[Chat Room] Found message to transfer") Log.i("[Chat Room] Found message to transfer")
showForwardConfirmationDialog(chatMessage) showForwardConfirmationDialog(chatMessage)

View file

@ -25,7 +25,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.DividerItemDecoration
@ -90,21 +89,21 @@ class GroupInfoFragment : Fragment() {
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null)) dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.participants.addItemDecoration(dividerItemDecoration) binding.participants.addItemDecoration(dividerItemDecoration)
viewModel.participants.observe(viewLifecycleOwner, Observer { viewModel.participants.observe(viewLifecycleOwner, {
adapter.submitList(it) adapter.submitList(it)
}) })
viewModel.isMeAdmin.observe(viewLifecycleOwner, Observer { isMeAdmin -> viewModel.isMeAdmin.observe(viewLifecycleOwner, { isMeAdmin ->
adapter.showAdminControls(isMeAdmin && chatRoom != null) adapter.showAdminControls(isMeAdmin && chatRoom != null)
}) })
viewModel.meAdminChangedEvent.observe(viewLifecycleOwner, Observer { viewModel.meAdminChangedEvent.observe(viewLifecycleOwner, {
it.consume { isMeAdmin -> it.consume { isMeAdmin ->
showMeAdminStateChanged(isMeAdmin) showMeAdminStateChanged(isMeAdmin)
} }
}) })
adapter.participantRemovedEvent.observe(viewLifecycleOwner, Observer { adapter.participantRemovedEvent.observe(viewLifecycleOwner, {
it.consume { participant -> it.consume { participant ->
viewModel.removeParticipant(participant) viewModel.removeParticipant(participant)
} }
@ -116,7 +115,7 @@ class GroupInfoFragment : Fragment() {
findNavController().popBackStack() findNavController().popBackStack()
} }
viewModel.createdChatRoomEvent.observe(viewLifecycleOwner, Observer { viewModel.createdChatRoomEvent.observe(viewLifecycleOwner, {
it.consume { chatRoom -> it.consume { chatRoom ->
sharedViewModel.selectedChatRoom.value = chatRoom sharedViewModel.selectedChatRoom.value = chatRoom
goToChatRoom() goToChatRoom()
@ -164,7 +163,7 @@ class GroupInfoFragment : Fragment() {
dialog.show() dialog.show()
} }
viewModel.onErrorEvent.observe(viewLifecycleOwner, Observer { viewModel.onErrorEvent.observe(viewLifecycleOwner, {
it.consume { messageResourceId -> it.consume { messageResourceId ->
(activity as MainActivity).showSnackBar(messageResourceId) (activity as MainActivity).showSnackBar(messageResourceId)
} }

View file

@ -24,7 +24,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.DividerItemDecoration
@ -101,7 +100,7 @@ class ImdnFragment : Fragment() {
val headerItemDecoration = RecyclerViewHeaderDecoration(adapter) val headerItemDecoration = RecyclerViewHeaderDecoration(adapter)
binding.participantsList.addItemDecoration(headerItemDecoration) binding.participantsList.addItemDecoration(headerItemDecoration)
viewModel.participants.observe(viewLifecycleOwner, Observer { viewModel.participants.observe(viewLifecycleOwner, {
adapter.submitList(it) adapter.submitList(it)
}) })

View file

@ -25,7 +25,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
@ -127,21 +126,21 @@ class MasterChatRoomsFragment : MasterFragment() {
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null)) dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.chatList.addItemDecoration(dividerItemDecoration) binding.chatList.addItemDecoration(dividerItemDecoration)
listViewModel.chatRooms.observe(viewLifecycleOwner, Observer { chatRooms -> listViewModel.chatRooms.observe(viewLifecycleOwner, { chatRooms ->
adapter.submitList(chatRooms) adapter.submitList(chatRooms)
}) })
listViewModel.latestUpdatedChatRoomId.observe(viewLifecycleOwner, Observer { position -> listViewModel.latestUpdatedChatRoomId.observe(viewLifecycleOwner, { position ->
adapter.notifyItemChanged(position) adapter.notifyItemChanged(position)
}) })
listViewModel.contactsUpdatedEvent.observe(viewLifecycleOwner, Observer { listViewModel.contactsUpdatedEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
adapter.notifyDataSetChanged() adapter.notifyDataSetChanged()
} }
}) })
adapter.selectedChatRoomEvent.observe(viewLifecycleOwner, Observer { adapter.selectedChatRoomEvent.observe(viewLifecycleOwner, {
it.consume { chatRoom -> it.consume { chatRoom ->
sharedViewModel.selectedChatRoom.value = chatRoom sharedViewModel.selectedChatRoom.value = chatRoom
navigateToChatRoom() navigateToChatRoom()
@ -175,21 +174,21 @@ class MasterChatRoomsFragment : MasterFragment() {
adapter.selectedChatRoomEvent.value = Event(chatRoom) adapter.selectedChatRoomEvent.value = Event(chatRoom)
} }
} else { } else {
sharedViewModel.textToShare.observe(viewLifecycleOwner, Observer { sharedViewModel.textToShare.observe(viewLifecycleOwner, {
if (it.isNotEmpty()) { if (it.isNotEmpty()) {
Log.i("[Chat] Found text to share") Log.i("[Chat] Found text to share")
val activity = requireActivity() as MainActivity val activity = requireActivity() as MainActivity
activity.showSnackBar(R.string.chat_room_toast_choose_for_sharing) activity.showSnackBar(R.string.chat_room_toast_choose_for_sharing)
} }
}) })
sharedViewModel.filesToShare.observe(viewLifecycleOwner, Observer { sharedViewModel.filesToShare.observe(viewLifecycleOwner, {
if (it.isNotEmpty()) { if (it.isNotEmpty()) {
Log.i("[Chat] Found ${it.size} files to share") Log.i("[Chat] Found ${it.size} files to share")
val activity = requireActivity() as MainActivity val activity = requireActivity() as MainActivity
activity.showSnackBar(R.string.chat_room_toast_choose_for_sharing) activity.showSnackBar(R.string.chat_room_toast_choose_for_sharing)
} }
}) })
sharedViewModel.messageToForwardEvent.observe(viewLifecycleOwner, Observer { sharedViewModel.messageToForwardEvent.observe(viewLifecycleOwner, {
if (!it.consumed()) { if (!it.consumed()) {
Log.i("[Chat] Found chat message to transfer") 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 -> it.consume { messageResourceId ->
(activity as MainActivity).showSnackBar(messageResourceId) (activity as MainActivity).showSnackBar(messageResourceId)
} }

View file

@ -25,7 +25,6 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.contact.viewmodels.ContactViewModel 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 // This is for item selection through ListTopBarFragment
selectionListViewModel = selectionViewModel selectionListViewModel = selectionViewModel
selectionViewModel.isEditionEnabled.observe(this@ViewHolder, Observer { selectionViewModel.isEditionEnabled.observe(this@ViewHolder, {
position = adapterPosition position = adapterPosition
}) })

View file

@ -24,6 +24,7 @@ class SyncAccountAdapter : BaseAdapter() {
val icon = view.findViewById<ImageView>(R.id.account_icon) val icon = view.findViewById<ImageView>(R.id.account_icon)
icon.setImageDrawable(account.third) icon.setImageDrawable(account.third)
icon.contentDescription = account.second
val name = view.findViewById<TextView>(R.id.account_name) val name = view.findViewById<TextView>(R.id.account_name)
name.text = account.first name.text = account.first

View file

@ -27,7 +27,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
@ -73,13 +72,13 @@ class DetailContactFragment : Fragment() {
)[ContactViewModel::class.java] )[ContactViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
viewModel.sendSmsToEvent.observe(viewLifecycleOwner, Observer { viewModel.sendSmsToEvent.observe(viewLifecycleOwner, {
it.consume { number -> it.consume { number ->
sendSms(number) sendSms(number)
} }
}) })
viewModel.startCallToEvent.observe(viewLifecycleOwner, Observer { viewModel.startCallToEvent.observe(viewLifecycleOwner, {
it.consume { address -> it.consume { address ->
if (coreContext.core.callsNb > 0) { if (coreContext.core.callsNb > 0) {
Log.i("[Contact] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}") 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 -> it.consume { chatRoom ->
if (findNavController().currentDestination?.id == R.id.detailContactFragment) { if (findNavController().currentDestination?.id == R.id.detailContactFragment) {
val args = Bundle() val args = Bundle()
@ -123,7 +122,7 @@ class DetailContactFragment : Fragment() {
confirmContactRemoval() confirmContactRemoval()
} }
viewModel.onErrorEvent.observe(viewLifecycleOwner, Observer { viewModel.onErrorEvent.observe(viewLifecycleOwner, {
it.consume { messageResourceId -> it.consume { messageResourceId ->
(activity as MainActivity).showSnackBar(messageResourceId) (activity as MainActivity).showSnackBar(messageResourceId)
} }

View file

@ -26,7 +26,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
@ -131,7 +130,7 @@ class MasterContactsFragment : MasterFragment() {
val headerItemDecoration = RecyclerViewHeaderDecoration(adapter) val headerItemDecoration = RecyclerViewHeaderDecoration(adapter)
binding.contactsList.addItemDecoration(headerItemDecoration) binding.contactsList.addItemDecoration(headerItemDecoration)
adapter.selectedContactEvent.observe(viewLifecycleOwner, Observer { adapter.selectedContactEvent.observe(viewLifecycleOwner, {
it.consume { contact -> it.consume { contact ->
Log.i("[Contacts] Selected item in list changed: $contact") Log.i("[Contacts] Selected item in list changed: $contact")
sharedViewModel.selectedContact.value = contact sharedViewModel.selectedContact.value = contact
@ -147,7 +146,7 @@ class MasterContactsFragment : MasterFragment() {
} }
}) })
listViewModel.contactsList.observe(viewLifecycleOwner, Observer { listViewModel.contactsList.observe(viewLifecycleOwner, {
adapter.submitList(it) adapter.submitList(it)
}) })
@ -158,11 +157,11 @@ class MasterContactsFragment : MasterFragment() {
listViewModel.sipContactsSelected.value = true listViewModel.sipContactsSelected.value = true
} }
listViewModel.sipContactsSelected.observe(viewLifecycleOwner, Observer { listViewModel.sipContactsSelected.observe(viewLifecycleOwner, {
listViewModel.updateContactsList() listViewModel.updateContactsList()
}) })
listViewModel.filter.observe(viewLifecycleOwner, Observer { listViewModel.filter.observe(viewLifecycleOwner, {
listViewModel.updateContactsList() listViewModel.updateContactsList()
}) })

View file

@ -30,7 +30,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import com.google.android.material.dialog.MaterialAlertDialogBuilder 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) { if (it == corePreferences.debugPopupCode) {
displayDebugPopup() displayDebugPopup()
viewModel.enteredUri.value = "" viewModel.enteredUri.value = ""
} }
}) })
viewModel.uploadFinishedEvent.observe(viewLifecycleOwner, Observer { viewModel.uploadFinishedEvent.observe(viewLifecycleOwner, {
it.consume { url -> it.consume { url ->
// To prevent being trigger when using the Send Logs button in About page // To prevent being trigger when using the Send Logs button in About page
if (uploadLogsInitiatedByUs) { if (uploadLogsInitiatedByUs) {
@ -144,7 +143,7 @@ class DialerFragment : Fragment() {
} }
}) })
viewModel.updateAvailableEvent.observe(viewLifecycleOwner, Observer { viewModel.updateAvailableEvent.observe(viewLifecycleOwner, {
it.consume { url -> it.consume { url ->
displayNewVersionAvailableDialog(url) displayNewVersionAvailableDialog(url)
} }

View file

@ -22,7 +22,6 @@ package org.linphone.activities.main.fragments
import android.app.Dialog import android.app.Dialog
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.DialogViewModel
@ -44,23 +43,23 @@ abstract class MasterFragment : Fragment() {
// List selection // List selection
listSelectionViewModel = ViewModelProvider(this).get(ListTopBarViewModel::class.java) listSelectionViewModel = ViewModelProvider(this).get(ListTopBarViewModel::class.java)
listSelectionViewModel.isEditionEnabled.observe(viewLifecycleOwner, Observer { listSelectionViewModel.isEditionEnabled.observe(viewLifecycleOwner, {
if (!it) listSelectionViewModel.onUnSelectAll() if (!it) listSelectionViewModel.onUnSelectAll()
}) })
listSelectionViewModel.selectAllEvent.observe(viewLifecycleOwner, Observer { listSelectionViewModel.selectAllEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
listSelectionViewModel.onSelectAll(getItemCount() - 1) listSelectionViewModel.onSelectAll(getItemCount() - 1)
} }
}) })
listSelectionViewModel.unSelectAllEvent.observe(viewLifecycleOwner, Observer { listSelectionViewModel.unSelectAllEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
listSelectionViewModel.onUnSelectAll() listSelectionViewModel.onUnSelectAll()
} }
}) })
listSelectionViewModel.deleteSelectionEvent.observe(viewLifecycleOwner, Observer { listSelectionViewModel.deleteSelectionEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
val confirmationDialog = AppUtils.getStringWithPlural(dialogConfirmationMessageBeforeRemoval, listSelectionViewModel.selectedItems.value.orEmpty().size) val confirmationDialog = AppUtils.getStringWithPlural(dialogConfirmationMessageBeforeRemoval, listSelectionViewModel.selectedItems.value.orEmpty().size)
val viewModel = DialogViewModel(confirmationDialog) val viewModel = DialogViewModel(confirmationDialog)

View file

@ -24,7 +24,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
@ -59,7 +58,7 @@ class StatusFragment : Fragment() {
ViewModelProvider(this).get(SharedMainViewModel::class.java) ViewModelProvider(this).get(SharedMainViewModel::class.java)
} ?: throw Exception("Invalid Activity") } ?: 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") Log.i("[Status Fragment] A proxy config was removed, update default proxy state")
val defaultProxy = coreContext.core.defaultProxyConfig val defaultProxy = coreContext.core.defaultProxyConfig
if (defaultProxy != null) { if (defaultProxy != null) {

View file

@ -25,7 +25,6 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.history.viewmodels.CallLogViewModel 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 // This is for item selection through ListTopBarFragment
selectionListViewModel = selectionViewModel selectionListViewModel = selectionViewModel
selectionViewModel.isEditionEnabled.observe(this@ViewHolder, Observer { selectionViewModel.isEditionEnabled.observe(this@ViewHolder, {
position = adapterPosition position = adapterPosition
}) })

View file

@ -24,7 +24,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext 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 -> it.consume { address ->
if (coreContext.core.callsNb > 0) { if (coreContext.core.callsNb > 0) {
Log.i("[History] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}") 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 -> it.consume { chatRoom ->
if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) { if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) {
val args = Bundle() val args = Bundle()
@ -127,7 +126,7 @@ class DetailCallLogFragment : Fragment() {
} }
}) })
viewModel.onErrorEvent.observe(viewLifecycleOwner, Observer { viewModel.onErrorEvent.observe(viewLifecycleOwner, {
it.consume { messageResourceId -> it.consume { messageResourceId ->
(activity as MainActivity).showSnackBar(messageResourceId) (activity as MainActivity).showSnackBar(messageResourceId)
} }

View file

@ -25,7 +25,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.DividerItemDecoration
@ -128,19 +127,19 @@ class MasterCallLogsFragment : MasterFragment() {
val headerItemDecoration = RecyclerViewHeaderDecoration(adapter) val headerItemDecoration = RecyclerViewHeaderDecoration(adapter)
binding.callLogsList.addItemDecoration(headerItemDecoration) binding.callLogsList.addItemDecoration(headerItemDecoration)
listViewModel.callLogs.observe(viewLifecycleOwner, Observer { callLogs -> listViewModel.callLogs.observe(viewLifecycleOwner, { callLogs ->
if (listViewModel.missedCallLogsSelected.value == false) { if (listViewModel.missedCallLogsSelected.value == false) {
adapter.submitList(callLogs) adapter.submitList(callLogs)
} }
}) })
listViewModel.missedCallLogs.observe(viewLifecycleOwner, Observer { callLogs -> listViewModel.missedCallLogs.observe(viewLifecycleOwner, { callLogs ->
if (listViewModel.missedCallLogsSelected.value == true) { if (listViewModel.missedCallLogsSelected.value == true) {
adapter.submitList(callLogs) adapter.submitList(callLogs)
} }
}) })
listViewModel.missedCallLogsSelected.observe(viewLifecycleOwner, Observer { listViewModel.missedCallLogsSelected.observe(viewLifecycleOwner, {
if (it) { if (it) {
adapter.submitList(listViewModel.missedCallLogs.value) adapter.submitList(listViewModel.missedCallLogs.value)
} else { } else {
@ -148,20 +147,20 @@ class MasterCallLogsFragment : MasterFragment() {
} }
}) })
listViewModel.contactsUpdatedEvent.observe(viewLifecycleOwner, Observer { listViewModel.contactsUpdatedEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
adapter.notifyDataSetChanged() adapter.notifyDataSetChanged()
} }
}) })
adapter.selectedCallLogEvent.observe(viewLifecycleOwner, Observer { adapter.selectedCallLogEvent.observe(viewLifecycleOwner, {
it.consume { callLog -> it.consume { callLog ->
sharedViewModel.selectedCallLogGroup.value = callLog sharedViewModel.selectedCallLogGroup.value = callLog
navigateToCallHistory() navigateToCallHistory()
} }
}) })
adapter.startCallToEvent.observe(viewLifecycleOwner, Observer { adapter.startCallToEvent.observe(viewLifecycleOwner, {
it.consume { address -> it.consume { address ->
if (coreContext.core.callsNb > 0) { if (coreContext.core.callsNb > 0) {
Log.i("[History] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}") Log.i("[History] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}")

View file

@ -26,7 +26,6 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.recordings.viewmodels.RecordingViewModel 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 // This is for item selection through ListTopBarFragment
selectionListViewModel = selectionViewModel selectionListViewModel = selectionViewModel
selectionViewModel.isEditionEnabled.observe(this@ViewHolder, Observer { selectionViewModel.isEditionEnabled.observe(this@ViewHolder, {
position = adapterPosition 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 -> it.consume { value ->
if (value) { if (value) {
recording.setTextureView(videoSurface) recording.setTextureView(videoSurface)

View file

@ -24,7 +24,6 @@ import android.view.LayoutInflater
import android.view.MotionEvent import android.view.MotionEvent
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.DividerItemDecoration
@ -80,7 +79,7 @@ class RecordingsFragment : MasterFragment() {
val headerItemDecoration = RecyclerViewHeaderDecoration(adapter) val headerItemDecoration = RecyclerViewHeaderDecoration(adapter)
binding.recordingsList.addItemDecoration(headerItemDecoration) binding.recordingsList.addItemDecoration(headerItemDecoration)
viewModel.recordingsList.observe(viewLifecycleOwner, Observer { recordings -> viewModel.recordingsList.observe(viewLifecycleOwner, { recordings ->
adapter.submitList(recordings) adapter.submitList(recordings)
}) })
@ -105,7 +104,7 @@ class RecordingsFragment : MasterFragment() {
true true
} }
adapter.isVideoRecordingPlayingEvent.observe(viewLifecycleOwner, Observer { adapter.isVideoRecordingPlayingEvent.observe(viewLifecycleOwner, {
it.consume { value -> it.consume { value ->
viewModel.isVideoVisible.value = value viewModel.isVideoVisible.value = value
} }

View file

@ -24,7 +24,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.R import org.linphone.R
@ -64,7 +63,7 @@ class AccountSettingsFragment : Fragment() {
binding.setBackClickListener { findNavController().popBackStack() } binding.setBackClickListener { findNavController().popBackStack() }
binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE 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 { it.consume {
if (findNavController().currentDestination?.id == R.id.accountSettingsFragment) { if (findNavController().currentDestination?.id == R.id.accountSettingsFragment) {
val authInfo = viewModel.proxyConfig.findAuthInfo() val authInfo = viewModel.proxyConfig.findAuthInfo()
@ -84,7 +83,7 @@ class AccountSettingsFragment : Fragment() {
} }
}) })
viewModel.proxyConfigRemovedEvent.observe(viewLifecycleOwner, Observer { viewModel.proxyConfigRemovedEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
sharedViewModel.proxyConfigRemoved.value = true sharedViewModel.proxyConfigRemoved.value = true
findNavController().navigateUp() findNavController().navigateUp()

View file

@ -30,7 +30,6 @@ import android.view.ViewGroup
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.R import org.linphone.R
@ -64,7 +63,7 @@ class AdvancedSettingsFragment : Fragment() {
binding.setBackClickListener { findNavController().popBackStack() } binding.setBackClickListener { findNavController().popBackStack() }
binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE 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 -> it.consume { value ->
AppCompatDelegate.setDefaultNightMode( AppCompatDelegate.setDefaultNightMode(
when (value) { when (value) {
@ -78,7 +77,7 @@ class AdvancedSettingsFragment : Fragment() {
viewModel.backgroundModeEnabled.value = !DeviceUtils.isAppUserRestricted(requireContext()) viewModel.backgroundModeEnabled.value = !DeviceUtils.isAppUserRestricted(requireContext())
viewModel.goToBatterySettingsEvent.observe(viewLifecycleOwner, Observer { it.consume { viewModel.goToBatterySettingsEvent.observe(viewLifecycleOwner, { it.consume {
try { try {
val intent = Intent("android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS") val intent = Intent("android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS")
startActivity(intent) startActivity(intent)
@ -88,7 +87,7 @@ class AdvancedSettingsFragment : Fragment() {
} }) } })
viewModel.powerManagerSettingsVisibility.value = PowerManagerUtils.getDevicePowerManagerIntent(requireContext()) != null 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()) val intent = PowerManagerUtils.getDevicePowerManagerIntent(requireActivity())
if (intent != null) { if (intent != null) {
try { try {
@ -99,7 +98,7 @@ class AdvancedSettingsFragment : Fragment() {
} }
} }) } })
viewModel.goToAndroidSettingsEvent.observe(viewLifecycleOwner, Observer { it.consume { viewModel.goToAndroidSettingsEvent.observe(viewLifecycleOwner, { it.consume {
val intent = Intent() val intent = Intent()
intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
intent.addCategory(Intent.CATEGORY_DEFAULT) intent.addCategory(Intent.CATEGORY_DEFAULT)

View file

@ -27,7 +27,6 @@ import android.view.ViewGroup
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding import androidx.databinding.ViewDataBinding
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.BR import org.linphone.BR
@ -63,14 +62,14 @@ class AudioSettingsFragment : Fragment() {
binding.setBackClickListener { findNavController().popBackStack() } binding.setBackClickListener { findNavController().popBackStack() }
binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE 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 { it.consume {
Log.i("[Audio Settings] Asking for RECORD_AUDIO permission for echo canceller calibration") Log.i("[Audio Settings] Asking for RECORD_AUDIO permission for echo canceller calibration")
requestPermissions(arrayOf(android.Manifest.permission.RECORD_AUDIO), 1) requestPermissions(arrayOf(android.Manifest.permission.RECORD_AUDIO), 1)
} }
}) })
viewModel.askAudioRecordPermissionForEchoTesterEvent.observe(viewLifecycleOwner, Observer { viewModel.askAudioRecordPermissionForEchoTesterEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
Log.i("[Audio Settings] Asking for RECORD_AUDIO permission for echo tester") Log.i("[Audio Settings] Asking for RECORD_AUDIO permission for echo tester")
requestPermissions(arrayOf(android.Manifest.permission.RECORD_AUDIO), 2) requestPermissions(arrayOf(android.Manifest.permission.RECORD_AUDIO), 2)

View file

@ -28,7 +28,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.R import org.linphone.R
@ -61,7 +60,7 @@ class CallSettingsFragment : Fragment() {
binding.setBackClickListener { findNavController().popBackStack() } binding.setBackClickListener { findNavController().popBackStack() }
binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE 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 { it.consume {
if (!Compatibility.canDrawOverlay(requireContext())) { if (!Compatibility.canDrawOverlay(requireContext())) {
val intent = Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", Uri.parse("package:${requireContext().packageName}")) 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) { if (Build.VERSION.SDK_INT >= Version.API26_O_80) {
val i = Intent() val i = Intent()
i.action = Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS i.action = Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS

View file

@ -27,7 +27,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.R import org.linphone.R
@ -60,7 +59,7 @@ class ChatSettingsFragment : Fragment() {
binding.setBackClickListener { findNavController().popBackStack() } binding.setBackClickListener { findNavController().popBackStack() }
binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE 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 -> it.consume { newValue ->
if (newValue) { if (newValue) {
Compatibility.createShortcutsToChatRooms(requireContext()) 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) { if (Build.VERSION.SDK_INT >= Version.API26_O_80) {
val i = Intent() val i = Intent()
i.action = Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS i.action = Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS

View file

@ -25,7 +25,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
@ -61,7 +60,7 @@ class ContactsSettingsFragment : Fragment() {
binding.setBackClickListener { findNavController().popBackStack() } binding.setBackClickListener { findNavController().popBackStack() }
binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE 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 -> it.consume { newValue ->
if (newValue) { if (newValue) {
Compatibility.createShortcutsToContacts(requireContext()) Compatibility.createShortcutsToContacts(requireContext())
@ -74,7 +73,7 @@ class ContactsSettingsFragment : Fragment() {
} }
}) })
viewModel.askWriteContactsPermissionForPresenceStorageEvent.observe(viewLifecycleOwner, Observer { viewModel.askWriteContactsPermissionForPresenceStorageEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
Log.i("[Contacts Settings] Asking for WRITE_CONTACTS permission to be able to store presence") Log.i("[Contacts Settings] Asking for WRITE_CONTACTS permission to be able to store presence")
requestPermissions(arrayOf(android.Manifest.permission.WRITE_CONTACTS), 1) requestPermissions(arrayOf(android.Manifest.permission.WRITE_CONTACTS), 1)

View file

@ -24,7 +24,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.activities.main.* import org.linphone.activities.main.*
@ -65,7 +64,7 @@ class SettingsFragment : Fragment() {
binding.setBackClickListener { findNavController().popBackStack() } binding.setBackClickListener { findNavController().popBackStack() }
sharedViewModel.proxyConfigRemoved.observe(viewLifecycleOwner, Observer { sharedViewModel.proxyConfigRemoved.observe(viewLifecycleOwner, {
Log.i("[Settings] Proxy config removed, update accounts list") Log.i("[Settings] Proxy config removed, update accounts list")
viewModel.updateAccountsList() viewModel.updateAccountsList()
}) })

View file

@ -152,7 +152,7 @@ class VideoSettingsViewModel : GenericSettingsViewModel() {
} }
videoSizeLabels.value = labels videoSizeLabels.value = labels
videoSizeIndex.value = labels.indexOf(core.preferredVideoDefinition?.name) videoSizeIndex.value = labels.indexOf(core.preferredVideoDefinition.name)
} }
private fun initVideoPresetList() { private fun initVideoPresetList() {

View file

@ -29,7 +29,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
@ -76,7 +75,7 @@ class SideMenuFragment : Fragment() {
ViewModelProvider(this).get(SharedMainViewModel::class.java) ViewModelProvider(this).get(SharedMainViewModel::class.java)
} ?: throw Exception("Invalid Activity") } ?: throw Exception("Invalid Activity")
sharedViewModel.proxyConfigRemoved.observe(viewLifecycleOwner, Observer { sharedViewModel.proxyConfigRemoved.observe(viewLifecycleOwner, {
Log.i("[Side Menu] Proxy config removed, update accounts list") Log.i("[Side Menu] Proxy config removed, update accounts list")
viewModel.updateAccountsList() viewModel.updateAccountsList()
}) })

View file

@ -20,23 +20,20 @@
package org.linphone.compatibility package org.linphone.compatibility
import android.annotation.TargetApi import android.annotation.TargetApi
import android.app.*
import android.app.usage.UsageStatsManager
import android.content.Context import android.content.Context
import android.content.pm.ShortcutManager
import org.linphone.core.ChatRoom
@TargetApi(28) @TargetApi(30)
class Api28Compatibility { class Api30Compatibility {
companion object { companion object {
fun isAppUserRestricted(context: Context): Boolean { fun removeChatRoomShortcut(context: Context, chatRoom: ChatRoom) {
val activityManager = val peerAddress = chatRoom.peerAddress.asStringUriOnly()
context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager val localAddress = chatRoom.localAddress.asStringUriOnly()
return activityManager.isBackgroundRestricted
}
fun getAppStandbyBucket(context: Context): Int { val shortcutManager = context.getSystemService(ShortcutManager::class.java)
val usageStatsManager = val shortcutsToRemoveList = arrayListOf("$localAddress#$peerAddress")
context.getSystemService(Context.USAGE_STATS_SERVICE) as UsageStatsManager shortcutManager.removeLongLivedShortcuts(shortcutsToRemoveList)
return usageStatsManager.appStandbyBucket
} }
} }
} }

View file

@ -139,7 +139,7 @@ class Compatibility {
fun removeChatRoomShortcut(context: Context, chatRoom: ChatRoom) { fun removeChatRoomShortcut(context: Context, chatRoom: ChatRoom) {
if (Version.sdkAboveOrEqual(Version.API30_ANDROID_11)) { if (Version.sdkAboveOrEqual(Version.API30_ANDROID_11)) {
// TODO Use removeLongLivedShortcuts() Api30Compatibility.removeChatRoomShortcut(context, chatRoom)
} }
} }

View file

@ -39,7 +39,7 @@ class PhoneNumberUtils {
return null return null
} }
@SuppressLint("MissingPermission") @SuppressLint("MissingPermission", "HardwareIds")
fun getDevicePhoneNumber(context: Context): String? { fun getDevicePhoneNumber(context: Context): String? {
if (PermissionHelper.get().hasReadPhoneState()) { if (PermissionHelper.get().hasReadPhoneState()) {
try { try {

View file

@ -105,54 +105,47 @@
android:layout_below="@id/select_country_label"/> android:layout_below="@id/select_country_label"/>
<LinearLayout <LinearLayout
android:orientation="vertical" android:orientation="horizontal"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/select_country"> android:layout_below="@id/select_country">
<LinearLayout <com.google.android.material.textfield.TextInputLayout
android:orientation="horizontal" android:layout_width="100dp"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_height="wrap_content"> android:layout_marginRight="10dp"
android:hint="@string/international_prefix">
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputEditText
android:layout_width="100dp" assistantPhoneNumberPrefixValidation="@{true}"
android:layout_height="wrap_content" android:text="@={viewModel.prefix}"
android:layout_marginRight="10dp" android:imeOptions="actionNext"
android:hint="@string/international_prefix"> android:singleLine="true"
android:inputType="phone"
<com.google.android.material.textfield.TextInputEditText android:background="@color/transparent_color"
assistantPhoneNumberPrefixValidation="@{true}"
android:text="@={viewModel.prefix}"
android:imeOptions="actionNext"
android:singleLine="true"
android:inputType="phone"
android:background="@color/transparent_color"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"/>
android:hint="@string/phone_number">
<com.google.android.material.textfield.TextInputEditText </com.google.android.material.textfield.TextInputLayout>
assistantPhoneNumberValidation="@{true}"
errorMessage="@={viewModel.phoneNumberError}"
android:text="@={viewModel.phoneNumber}"
android:imeOptions="actionDone"
android:singleLine="true"
android:inputType="phone"
android:background="@color/transparent_color"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.google.android.material.textfield.TextInputLayout> <com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/phone_number">
</LinearLayout> <com.google.android.material.textfield.TextInputEditText
assistantPhoneNumberValidation="@{true}"
errorMessage="@={viewModel.phoneNumberError}"
android:text="@={viewModel.phoneNumber}"
android:imeOptions="actionDone"
android:singleLine="true"
android:inputType="phone"
android:background="@color/transparent_color"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout> </LinearLayout>
@ -212,7 +205,7 @@
<TextView <TextView
android:onClick="@{forgotPasswordClickListener}" android:onClick="@{forgotPasswordClickListener}"
android:textColor="?attr/accentColor" android:textColor="?attr/accentColor"
android:textSize="8sp" android:textSize="12sp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="right" android:layout_gravity="right"

View file

@ -119,56 +119,49 @@
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<LinearLayout <RadioGroup
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:padding="10dp"
android:gravity="center"
android:orientation="horizontal">
<RadioGroup <TextView
android:layout_width="match_parent" style="@style/assistant_input_field_header_font"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:padding="10dp" android:layout_height="match_parent"
android:gravity="center" android:gravity="center"
android:orientation="horizontal"> android:text="@string/transport"
android:textAllCaps="true" />
<TextView <com.google.android.material.radiobutton.MaterialRadioButton
style="@style/assistant_input_field_header_font" android:checked="@{viewModel.transport == TransportType.Udp}"
android:layout_width="wrap_content" android:onClick="@{() -> viewModel.setTransport(TransportType.Udp)}"
android:layout_height="match_parent" android:layout_width="wrap_content"
android:gravity="center" android:layout_height="wrap_content"
android:text="@string/transport" android:layout_margin="5dp"
android:textAllCaps="true" /> android:textColor="?attr/primaryTextColor"
android:text="@string/transport_udp" />
<com.google.android.material.radiobutton.MaterialRadioButton <com.google.android.material.radiobutton.MaterialRadioButton
android:checked="@{viewModel.transport == TransportType.Udp}" android:checked="@{viewModel.transport == TransportType.Tcp}"
android:onClick="@{() -> viewModel.setTransport(TransportType.Udp)}" android:onClick="@{() -> viewModel.setTransport(TransportType.Tcp)}"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="5dp" android:layout_margin="5dp"
android:textColor="?attr/primaryTextColor" android:textColor="?attr/primaryTextColor"
android:text="@string/transport_udp" /> android:text="@string/transport_tcp" />
<com.google.android.material.radiobutton.MaterialRadioButton <com.google.android.material.radiobutton.MaterialRadioButton
android:checked="@{viewModel.transport == TransportType.Tcp}" android:checked="@{viewModel.transport == TransportType.Tls}"
android:onClick="@{() -> viewModel.setTransport(TransportType.Tcp)}" android:onClick="@{() -> viewModel.setTransport(TransportType.Tls)}"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="5dp" android:layout_margin="5dp"
android:textColor="?attr/primaryTextColor" android:textColor="?attr/primaryTextColor"
android:text="@string/transport_tcp" /> android:text="@string/transport_tls" />
<com.google.android.material.radiobutton.MaterialRadioButton </RadioGroup>
android:checked="@{viewModel.transport == TransportType.Tls}"
android:onClick="@{() -> viewModel.setTransport(TransportType.Tls)}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:textColor="?attr/primaryTextColor"
android:text="@string/transport_tls" />
</RadioGroup>
</LinearLayout>
<TextView <TextView
android:onClick="@{() -> viewModel.createProxyConfig()}" android:onClick="@{() -> viewModel.createProxyConfig()}"

View file

@ -9,26 +9,20 @@
type="org.linphone.activities.call.viewmodels.StatisticsListViewModel" /> type="org.linphone.activities.call.viewmodels.StatisticsListViewModel" />
</data> </data>
<RelativeLayout <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?attr/backgroundColor" android:background="?attr/backgroundColor"
android:clickable="true"> android:clickable="true">
<ScrollView <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="wrap_content"
android:background="?attr/backgroundColor"
android:orientation="vertical"
app:entries="@{viewModel.callStatsList}"
app:layout="@{@layout/call_statistics_cell}" />
<LinearLayout </ScrollView>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/backgroundColor"
android:orientation="vertical"
app:entries="@{viewModel.callStatsList}"
app:layout="@{@layout/call_statistics_cell}" />
</ScrollView>
</RelativeLayout>
</layout> </layout>

View file

@ -48,6 +48,7 @@
android:layout_width="20dp" android:layout_width="20dp"
android:layout_height="20dp" android:layout_height="20dp"
android:src="@drawable/recording_play_pause" android:src="@drawable/recording_play_pause"
android:contentDescription="@string/content_description_chat_message_video_attachment"
android:layout_centerInParent="true"/> android:layout_centerInParent="true"/>
<ImageView <ImageView

View file

@ -43,13 +43,14 @@
android:layout_width="20dp" android:layout_width="20dp"
android:layout_height="20dp" android:layout_height="20dp"
android:src="@drawable/recording_play_pause" android:src="@drawable/recording_play_pause"
android:contentDescription="@string/content_description_chat_message_video_attachment"
android:layout_centerInParent="true"/> android:layout_centerInParent="true"/>
<TextView <TextView
android:onClick="@{() -> data.openFile()}" android:onClick="@{() -> data.openFile()}"
android:onLongClick="@{longClickListener}" android:onLongClick="@{longClickListener}"
android:textColor="?attr/secondaryTextColor" android:textColor="?attr/secondaryTextColor"
android:textSize="11.7sp" android:textSize="12sp"
android:fontFamily="sans-serif" android:fontFamily="sans-serif"
android:textStyle="normal" android:textStyle="normal"
android:text="@{data.content.name}" android:text="@{data.content.name}"

View file

@ -161,7 +161,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="5dp" android:layout_marginRight="5dp"
android:textColor="@color/primary_color" android:textColor="@color/primary_color"
android:textSize="10sp" android:textSize="12sp"
android:fontFamily="sans-serif" android:fontFamily="sans-serif"
android:textStyle="normal" android:textStyle="normal"
android:lineSpacingExtra="3.3sp" /> android:lineSpacingExtra="3.3sp" />

View file

@ -62,7 +62,7 @@
android:contentDescription="@string/content_description_e2e_encryption_disabled" android:contentDescription="@string/content_description_e2e_encryption_disabled"
android:src="@drawable/security_toogle_icon_grey"/> android:src="@drawable/security_toogle_icon_grey"/>
<Switch <com.google.android.material.switchmaterial.SwitchMaterial
android:checked="@={viewModel.isEncrypted}" android:checked="@={viewModel.isEncrypted}"
android:layout_width="50dp" android:layout_width="50dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -51,6 +51,7 @@
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:padding="10dp" android:padding="10dp"
android:src="@drawable/avatar" android:src="@drawable/avatar"
android:contentDescription="@string/content_description_change_own_picture"
glideAvatarFallback="@{viewModel.defaultAccountAvatar}" /> glideAvatarFallback="@{viewModel.defaultAccountAvatar}" />
<ImageView <ImageView

View file

@ -44,7 +44,7 @@
<item quantity="one">%d day</item> <item quantity="one">%d day</item>
<item quantity="other">%d days</item> <item quantity="other">%d days</item>
</plurals> </plurals>
<string name="share_uploaded_logs_link">Share logs link using...</string> <string name="share_uploaded_logs_link">Share logs link using</string>
<!-- Errors --> <!-- Errors -->
<string name="invalid_email">Invalid email</string> <string name="invalid_email">Invalid email</string>
@ -640,6 +640,7 @@
<string name="content_description_cancel_contact_edit">Discard changes</string> <string name="content_description_cancel_contact_edit">Discard changes</string>
<string name="content_description_confirm_contact_edit">Save changes</string> <string name="content_description_confirm_contact_edit">Save changes</string>
<string name="content_description_change_contact_picture">Change contact picture</string> <string name="content_description_change_contact_picture">Change contact picture</string>
<string name="content_description_change_own_picture">Change own picture</string>
<string name="content_description_call_direction">Call direction</string> <string name="content_description_call_direction">Call direction</string>
<string name="content_description_show_call_details">Go to call details</string> <string name="content_description_show_call_details">Go to call details</string>
<string name="content_description_exit_edition_mode">Quit edition mode</string> <string name="content_description_exit_edition_mode">Quit edition mode</string>
@ -687,4 +688,5 @@
<string name="content_description_call_secured">Call is secured</string> <string name="content_description_call_secured">Call is secured</string>
<string name="content_description_call_security_pending">Call security is pending</string> <string name="content_description_call_security_pending">Call security is pending</string>
<string name="content_description_toggle_call_stats">Show or hide call statistics</string> <string name="content_description_toggle_call_stats">Show or hide call statistics</string>
<string name="content_description_chat_message_video_attachment">Video attachment</string>
</resources> </resources>

View file

@ -98,11 +98,6 @@
<item name="android:textSize">18sp</item> <item name="android:textSize">18sp</item>
</style> </style>
<style name="contact_edit_form_font" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">?attr/primaryTextColor</item>
<item name="android:textSize">18sp</item>
</style>
<style name="big_contact_name_font" parent="@android:style/TextAppearance.Medium"> <style name="big_contact_name_font" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">?attr/primaryTextColor</item> <item name="android:textColor">?attr/primaryTextColor</item>
<item name="android:textSize">30sp</item> <item name="android:textSize">30sp</item>