Bumped dependencies + required code changes + updated CHANGELOG from release/4.5

This commit is contained in:
Sylvain Berfini 2021-10-28 13:16:55 +02:00
parent 9874b04d9c
commit 7e0322abb5
85 changed files with 210 additions and 233 deletions

View file

@ -38,6 +38,11 @@ Group changes to describe their impact on the project, as follows:
### Removed
- Global push notification setting in Network, use the switch in each Account instead
## [4.5.5] - 2021-10-28
### Changed
- SDK updated to 5.0.45
## [4.5.4] - 2021-10-19
### Changed

View file

@ -214,20 +214,20 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.media:media:1.4.1'
implementation 'androidx.fragment:fragment-ktx:1.4.0-alpha08'
implementation 'androidx.core:core-ktx:1.7.0-alpha02'
implementation 'androidx.media:media:1.4.3'
implementation 'androidx.fragment:fragment-ktx:1.4.0-beta01'
implementation 'androidx.core:core-ktx:1.7.0'
def nav_version = "2.4.0-alpha08"
def nav_version = "2.4.0-beta01"
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
implementation "androidx.slidingpanelayout:slidingpanelayout:1.2.0-beta01"
implementation "androidx.window:window:1.0.0-beta02"
implementation "androidx.window:window:1.0.0-beta03"
implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation "androidx.security:security-crypto-ktx:1.1.0-alpha03"

View file

@ -20,32 +20,33 @@
package org.linphone.activities.assistant
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.lifecycle.ViewModelProvider
import com.google.android.material.snackbar.Snackbar
import org.linphone.R
import org.linphone.activities.GenericActivity
import org.linphone.activities.SnackBarActivity
import org.linphone.activities.assistant.viewmodels.SharedAssistantViewModel
import org.linphone.databinding.AssistantActivityBinding
class AssistantActivity : GenericActivity(), SnackBarActivity {
private lateinit var binding: AssistantActivityBinding
private lateinit var sharedViewModel: SharedAssistantViewModel
private lateinit var coordinator: CoordinatorLayout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.assistant_activity)
setContentView(R.layout.assistant_activity)
sharedViewModel = ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
sharedViewModel = ViewModelProvider(this)[SharedAssistantViewModel::class.java]
coordinator = findViewById(R.id.coordinator)
}
override fun showSnackBar(resourceId: Int) {
Snackbar.make(binding.coordinator, resourceId, Snackbar.LENGTH_LONG).show()
Snackbar.make(coordinator, resourceId, Snackbar.LENGTH_LONG).show()
}
override fun showSnackBar(message: String) {
Snackbar.make(binding.coordinator, message, Snackbar.LENGTH_LONG).show()
Snackbar.make(coordinator, message, Snackbar.LENGTH_LONG).show()
}
}

View file

@ -49,10 +49,10 @@ class AccountLoginFragment : AbstractPhoneFragment<AssistantAccountLoginFragment
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
ViewModelProvider(this)[SharedAssistantViewModel::class.java]
}
viewModel = ViewModelProvider(this, AccountLoginViewModelFactory(sharedViewModel.getAccountCreator())).get(AccountLoginViewModel::class.java)
viewModel = ViewModelProvider(this, AccountLoginViewModelFactory(sharedViewModel.getAccountCreator()))[AccountLoginViewModel::class.java]
binding.viewModel = viewModel
if (resources.getBoolean(R.bool.isTablet)) {

View file

@ -40,7 +40,7 @@ class EchoCancellerCalibrationFragment : GenericFragment<AssistantEchoCancellerC
binding.lifecycleOwner = viewLifecycleOwner
viewModel = ViewModelProvider(this).get(EchoCancellerCalibrationViewModel::class.java)
viewModel = ViewModelProvider(this)[EchoCancellerCalibrationViewModel::class.java]
binding.viewModel = viewModel
viewModel.echoCalibrationTerminated.observe(

View file

@ -43,10 +43,10 @@ class EmailAccountCreationFragment : GenericFragment<AssistantEmailAccountCreati
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
ViewModelProvider(this)[SharedAssistantViewModel::class.java]
}
viewModel = ViewModelProvider(this, EmailAccountCreationViewModelFactory(sharedViewModel.getAccountCreator())).get(EmailAccountCreationViewModel::class.java)
viewModel = ViewModelProvider(this, EmailAccountCreationViewModelFactory(sharedViewModel.getAccountCreator()))[EmailAccountCreationViewModel::class.java]
binding.viewModel = viewModel
viewModel.goToEmailValidationEvent.observe(

View file

@ -42,10 +42,10 @@ class EmailAccountValidationFragment : GenericFragment<AssistantEmailAccountVali
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
ViewModelProvider(this)[SharedAssistantViewModel::class.java]
}
viewModel = ViewModelProvider(this, EmailAccountValidationViewModelFactory(sharedViewModel.getAccountCreator())).get(EmailAccountValidationViewModel::class.java)
viewModel = ViewModelProvider(this, EmailAccountValidationViewModelFactory(sharedViewModel.getAccountCreator()))[EmailAccountValidationViewModel::class.java]
binding.viewModel = viewModel
viewModel.leaveAssistantEvent.observe(

View file

@ -47,10 +47,10 @@ class GenericAccountLoginFragment : GenericFragment<AssistantGenericAccountLogin
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
ViewModelProvider(this)[SharedAssistantViewModel::class.java]
}
viewModel = ViewModelProvider(this, GenericLoginViewModelFactory(sharedViewModel.getAccountCreator(true))).get(GenericLoginViewModel::class.java)
viewModel = ViewModelProvider(this, GenericLoginViewModelFactory(sharedViewModel.getAccountCreator(true)))[GenericLoginViewModel::class.java]
binding.viewModel = viewModel
viewModel.leaveAssistantEvent.observe(

View file

@ -42,10 +42,10 @@ class PhoneAccountCreationFragment : AbstractPhoneFragment<AssistantPhoneAccount
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
ViewModelProvider(this)[SharedAssistantViewModel::class.java]
}
viewModel = ViewModelProvider(this, PhoneAccountCreationViewModelFactory(sharedViewModel.getAccountCreator())).get(PhoneAccountCreationViewModel::class.java)
viewModel = ViewModelProvider(this, PhoneAccountCreationViewModelFactory(sharedViewModel.getAccountCreator()))[PhoneAccountCreationViewModel::class.java]
binding.viewModel = viewModel
binding.setInfoClickListener {

View file

@ -43,11 +43,11 @@ class PhoneAccountLinkingFragment : AbstractPhoneFragment<AssistantPhoneAccountL
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
ViewModelProvider(this)[SharedAssistantViewModel::class.java]
}
val accountCreator = sharedViewModel.getAccountCreator()
viewModel = ViewModelProvider(this, PhoneAccountLinkingViewModelFactory(accountCreator)).get(PhoneAccountLinkingViewModel::class.java)
viewModel = ViewModelProvider(this, PhoneAccountLinkingViewModelFactory(accountCreator))[PhoneAccountLinkingViewModel::class.java]
binding.viewModel = viewModel
val username = arguments?.getString("Username")

View file

@ -47,10 +47,10 @@ class PhoneAccountValidationFragment : GenericFragment<AssistantPhoneAccountVali
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
ViewModelProvider(this)[SharedAssistantViewModel::class.java]
}
viewModel = ViewModelProvider(this, PhoneAccountValidationViewModelFactory(sharedViewModel.getAccountCreator())).get(PhoneAccountValidationViewModel::class.java)
viewModel = ViewModelProvider(this, PhoneAccountValidationViewModelFactory(sharedViewModel.getAccountCreator()))[PhoneAccountValidationViewModel::class.java]
binding.viewModel = viewModel
viewModel.phoneNumber.value = arguments?.getString("PhoneNumber")

View file

@ -45,10 +45,10 @@ class QrCodeFragment : GenericFragment<AssistantQrCodeFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
ViewModelProvider(this)[SharedAssistantViewModel::class.java]
}
viewModel = ViewModelProvider(this).get(QrCodeViewModel::class.java)
viewModel = ViewModelProvider(this)[QrCodeViewModel::class.java]
binding.viewModel = viewModel
viewModel.qrCodeFoundEvent.observe(

View file

@ -44,10 +44,10 @@ class RemoteProvisioningFragment : GenericFragment<AssistantRemoteProvisioningFr
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
ViewModelProvider(this)[SharedAssistantViewModel::class.java]
}
viewModel = ViewModelProvider(this).get(RemoteProvisioningViewModel::class.java)
viewModel = ViewModelProvider(this)[RemoteProvisioningViewModel::class.java]
binding.viewModel = viewModel
binding.setQrCodeClickListener {

View file

@ -49,7 +49,7 @@ class WelcomeFragment : GenericFragment<AssistantWelcomeFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
viewModel = ViewModelProvider(this).get(WelcomeViewModel::class.java)
viewModel = ViewModelProvider(this)[WelcomeViewModel::class.java]
binding.viewModel = viewModel
binding.setCreateAccountClickListener {

View file

@ -30,7 +30,7 @@ class AccountLoginViewModelFactory(private val accountCreator: AccountCreator) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return AccountLoginViewModel(accountCreator) as T
}
}

View file

@ -34,7 +34,7 @@ class EmailAccountCreationViewModelFactory(private val accountCreator: AccountCr
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return EmailAccountCreationViewModel(accountCreator) as T
}
}

View file

@ -32,7 +32,7 @@ class EmailAccountValidationViewModelFactory(private val accountCreator: Account
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return EmailAccountValidationViewModel(accountCreator) as T
}
}

View file

@ -33,7 +33,7 @@ class GenericLoginViewModelFactory(private val accountCreator: AccountCreator) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return GenericLoginViewModel(accountCreator) as T
}
}

View file

@ -36,7 +36,7 @@ class PhoneAccountCreationViewModelFactory(private val accountCreator: AccountCr
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return PhoneAccountCreationViewModel(accountCreator) as T
}
}

View file

@ -30,7 +30,7 @@ class PhoneAccountLinkingViewModelFactory(private val accountCreator: AccountCre
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return PhoneAccountLinkingViewModel(accountCreator) as T
}
}

View file

@ -32,7 +32,7 @@ class PhoneAccountValidationViewModelFactory(private val accountCreator: Account
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return PhoneAccountValidationViewModel(accountCreator) as T
}
}

View file

@ -55,10 +55,10 @@ class CallActivity : ProximitySensorActivity() {
binding = DataBindingUtil.setContentView(this, R.layout.call_activity)
binding.lifecycleOwner = this
viewModel = ViewModelProvider(this).get(ControlsFadingViewModel::class.java)
viewModel = ViewModelProvider(this)[ControlsFadingViewModel::class.java]
binding.controlsFadingViewModel = viewModel
sharedViewModel = ViewModelProvider(this).get(SharedCallViewModel::class.java)
sharedViewModel = ViewModelProvider(this)[SharedCallViewModel::class.java]
sharedViewModel.toggleDrawerEvent.observe(
this,

View file

@ -76,7 +76,7 @@ class OutgoingCallActivity : ProximitySensorActivity() {
)[CallViewModel::class.java]
binding.viewModel = viewModel
controlsViewModel = ViewModelProvider(this).get(ControlsViewModel::class.java)
controlsViewModel = ViewModelProvider(this)[ControlsViewModel::class.java]
binding.controlsViewModel = controlsViewModel
viewModel.callEndedEvent.observe(

View file

@ -69,21 +69,21 @@ class ControlsFragment : GenericFragment<CallControlsFragmentBinding>() {
useMaterialSharedAxisXForwardAnimation = false
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedCallViewModel::class.java)
ViewModelProvider(this)[SharedCallViewModel::class.java]
}
callsViewModel = requireActivity().run {
ViewModelProvider(this).get(CallsViewModel::class.java)
ViewModelProvider(this)[CallsViewModel::class.java]
}
binding.viewModel = callsViewModel
controlsViewModel = requireActivity().run {
ViewModelProvider(this).get(ControlsViewModel::class.java)
ViewModelProvider(this)[ControlsViewModel::class.java]
}
binding.controlsViewModel = controlsViewModel
conferenceViewModel = requireActivity().run {
ViewModelProvider(this).get(ConferenceViewModel::class.java)
ViewModelProvider(this)[ConferenceViewModel::class.java]
}
binding.conferenceViewModel = conferenceViewModel

View file

@ -38,7 +38,7 @@ class StatisticsFragment : GenericFragment<CallStatisticsFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
useMaterialSharedAxisXForwardAnimation = false
viewModel = ViewModelProvider(this).get(StatisticsListViewModel::class.java)
viewModel = ViewModelProvider(this)[StatisticsListViewModel::class.java]
binding.viewModel = viewModel
}

View file

@ -48,11 +48,11 @@ class StatusFragment : GenericFragment<CallStatusFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
useMaterialSharedAxisXForwardAnimation = false
viewModel = ViewModelProvider(this).get(StatusViewModel::class.java)
viewModel = ViewModelProvider(this)[StatusViewModel::class.java]
binding.viewModel = viewModel
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedCallViewModel::class.java)
ViewModelProvider(this)[SharedCallViewModel::class.java]
}
binding.setStatsClickListener {

View file

@ -49,16 +49,16 @@ class VideoRenderingFragment : GenericFragment<CallVideoFragmentBinding>() {
binding.lifecycleOwner = this
controlsFadingViewModel = requireActivity().run {
ViewModelProvider(this).get(ControlsFadingViewModel::class.java)
ViewModelProvider(this)[ControlsFadingViewModel::class.java]
}
binding.controlsFadingViewModel = controlsFadingViewModel
callsViewModel = requireActivity().run {
ViewModelProvider(this).get(CallsViewModel::class.java)
ViewModelProvider(this)[CallsViewModel::class.java]
}
conferenceViewModel = requireActivity().run {
ViewModelProvider(this).get(ConferenceViewModel::class.java)
ViewModelProvider(this)[ConferenceViewModel::class.java]
}
binding.conferenceViewModel = conferenceViewModel

View file

@ -42,7 +42,7 @@ class CallViewModelFactory(private val call: Call) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return CallViewModel(call) as T
}
}

View file

@ -31,7 +31,7 @@ class IncomingCallViewModelFactory(private val call: Call) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return IncomingCallViewModel(call) as T
}
}

View file

@ -108,7 +108,7 @@ class ChatBubbleActivity : GenericActivity() {
)[ChatMessageSendingViewModel::class.java]
binding.chatSendingViewModel = chatSendingViewModel
val listSelectionViewModel = ViewModelProvider(this).get(ListTopBarViewModel::class.java)
val listSelectionViewModel = ViewModelProvider(this)[ListTopBarViewModel::class.java]
adapter = ChatMessagesListAdapter(listSelectionViewModel, this)
// SubmitList is done on a background thread
// We need this adapter data observer to know when to scroll

View file

@ -115,10 +115,10 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
binding = DataBindingUtil.setContentView(this, R.layout.main_activity)
binding.lifecycleOwner = this
sharedViewModel = ViewModelProvider(this).get(SharedMainViewModel::class.java)
sharedViewModel = ViewModelProvider(this)[SharedMainViewModel::class.java]
binding.viewModel = sharedViewModel
callOverlayViewModel = ViewModelProvider(this).get(CallOverlayViewModel::class.java)
callOverlayViewModel = ViewModelProvider(this)[CallOverlayViewModel::class.java]
binding.callOverlayViewModel = callOverlayViewModel
sharedViewModel.toggleDrawerEvent.observe(

View file

@ -38,7 +38,7 @@ class AboutFragment : SecureFragment<AboutFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
viewModel = ViewModelProvider(this).get(AboutViewModel::class.java)
viewModel = ViewModelProvider(this)[AboutViewModel::class.java]
binding.viewModel = viewModel
binding.setBackClickListener { goBack() }

View file

@ -54,14 +54,14 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
val createGroup = arguments?.getBoolean("createGroup") ?: false
viewModel = ViewModelProvider(this).get(ChatRoomCreationViewModel::class.java)
viewModel = ViewModelProvider(this)[ChatRoomCreationViewModel::class.java]
viewModel.createGroupChat.value = createGroup
viewModel.isEncrypted.value = sharedViewModel.createEncryptedChatRoom

View file

@ -113,7 +113,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
binding.sharedMainViewModel = sharedViewModel

View file

@ -43,7 +43,7 @@ class DevicesFragment : SecureFragment<ChatRoomDevicesFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
val chatRoom = sharedViewModel.selectedChatRoom.value

View file

@ -46,7 +46,7 @@ class EphemeralFragment : SecureFragment<ChatRoomEphemeralFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
val chatRoom = sharedViewModel.selectedChatRoom.value

View file

@ -57,7 +57,7 @@ class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
val chatRoom: ChatRoom? = sharedViewModel.selectedGroupChatRoom.value

View file

@ -50,7 +50,7 @@ class ImdnFragment : SecureFragment<ChatRoomImdnFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
val chatRoom = sharedViewModel.selectedChatRoom.value

View file

@ -98,13 +98,13 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
isSecure = true
binding.lifecycleOwner = viewLifecycleOwner
listViewModel = ViewModelProvider(this).get(ChatRoomsListViewModel::class.java)
listViewModel = ViewModelProvider(this)[ChatRoomsListViewModel::class.java]
binding.viewModel = listViewModel
/* Shared view model & sliding pane related */
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable }

View file

@ -48,7 +48,7 @@ class ChatMessageSendingViewModelFactory(private val chatRoom: ChatRoom) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return ChatMessageSendingViewModel(chatRoom) as T
}
}

View file

@ -36,7 +36,7 @@ class ChatMessagesListViewModelFactory(private val chatRoom: ChatRoom) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return ChatMessagesListViewModel(chatRoom) as T
}
}

View file

@ -40,7 +40,7 @@ class ChatRoomViewModelFactory(private val chatRoom: ChatRoom) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return ChatRoomViewModel(chatRoom) as T
}
}

View file

@ -31,7 +31,7 @@ class DevicesListViewModelFactory(private val chatRoom: ChatRoom) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return DevicesListViewModel(chatRoom) as T
}
}

View file

@ -32,7 +32,7 @@ class EphemeralViewModelFactory(private val chatRoom: ChatRoom) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return EphemeralViewModel(chatRoom) as T
}
}

View file

@ -36,7 +36,7 @@ class GroupInfoViewModelFactory(private val chatRoom: ChatRoom?) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return GroupInfoViewModel(chatRoom) as T
}
}

View file

@ -32,7 +32,7 @@ class ImdnViewModelFactory(private val chatMessage: ChatMessage) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return ImdnViewModel(chatMessage) as T
}
}

View file

@ -58,7 +58,7 @@ class RichEditText : AppCompatEditText {
Log.i("[Rich Edit Text] Received URI: $uri")
val activity = context as Activity
val sharedViewModel = activity.run {
ViewModelProvider(activity as ViewModelStoreOwner).get(SharedMainViewModel::class.java)
ViewModelProvider(activity as ViewModelStoreOwner)[SharedMainViewModel::class.java]
}
sharedViewModel.richContentUri.value = Event(uri)
}

View file

@ -61,7 +61,7 @@ class ContactEditorFragment : GenericFragment<ContactEditorFragmentBinding>(), S
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
viewModel = ViewModelProvider(

View file

@ -55,7 +55,7 @@ class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
binding.sharedMainViewModel = sharedViewModel

View file

@ -72,13 +72,13 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
binding.lifecycleOwner = viewLifecycleOwner
listViewModel = ViewModelProvider(this).get(ContactsListViewModel::class.java)
listViewModel = ViewModelProvider(this)[ContactsListViewModel::class.java]
binding.viewModel = listViewModel
/* Shared view model & sliding pane related */
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable }

View file

@ -40,7 +40,7 @@ class ContactEditorViewModelFactory(private val contact: Contact?) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return ContactEditorViewModel(contact) as T
}
}

View file

@ -43,7 +43,7 @@ class ContactViewModelFactory(private val contact: Contact) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return ContactViewModel(contact) as T
}
}

View file

@ -66,11 +66,11 @@ class DialerFragment : SecureFragment<DialerFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
viewModel = ViewModelProvider(this).get(DialerViewModel::class.java)
viewModel = ViewModelProvider(this)[DialerViewModel::class.java]
binding.viewModel = viewModel
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
useMaterialSharedAxisXForwardAnimation = false

View file

@ -20,20 +20,18 @@
package org.linphone.activities.main.files.adapters
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.RecyclerView
import org.linphone.R
import org.linphone.activities.main.files.viewmodels.PdfFileViewModel
import org.linphone.databinding.FilePdfViewerCellBinding
class PdfPagesListAdapter(private val pdfViewModel: PdfFileViewModel) : RecyclerView.Adapter<PdfPagesListAdapter.PdfPageViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PdfPageViewHolder {
val binding: FilePdfViewerCellBinding = DataBindingUtil.inflate(
LayoutInflater.from(parent.context),
val view = LayoutInflater.from(parent.context).inflate(
R.layout.file_pdf_viewer_cell, parent, false
)
return PdfPageViewHolder(binding)
return PdfPageViewHolder(view)
}
override fun getItemCount(): Int {
@ -44,11 +42,9 @@ class PdfPagesListAdapter(private val pdfViewModel: PdfFileViewModel) : Recycler
holder.bind(position)
}
inner class PdfPageViewHolder(private val binding: FilePdfViewerCellBinding) : RecyclerView.ViewHolder(binding.root) {
inner class PdfPageViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
fun bind(index: Int) {
with(binding) {
pdfViewModel.loadPdfPageInto(index, pdfImage)
}
pdfViewModel.loadPdfPageInto(index, view.findViewById(R.id.pdf_image))
}
}
}

View file

@ -36,7 +36,7 @@ abstract class GenericViewerFragment<T : ViewDataBinding> : SecureFragment<T>()
super.onViewCreated(view, savedInstanceState)
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
isSecure = arguments?.getBoolean("Secure") ?: false

View file

@ -31,7 +31,7 @@ class AudioFileViewModelFactory(private val content: Content) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return AudioFileViewModel(content) as T
}
}

View file

@ -27,7 +27,7 @@ class ImageFileViewModelFactory(private val content: Content) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return ImageFileViewModel(content) as T
}
}

View file

@ -35,7 +35,7 @@ class PdfFileViewModelFactory(private val content: Content) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return PdfFileViewModel(content) as T
}
}

View file

@ -36,7 +36,7 @@ class TextFileViewModelFactory(private val content: Content) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return TextFileViewModel(content) as T
}
}

View file

@ -27,7 +27,7 @@ class VideoFileViewModelFactory(private val content: Content) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return VideoFileViewModel(content) as T
}
}

View file

@ -53,7 +53,7 @@ abstract class MasterFragment<T : ViewDataBinding, U : SelectionListAdapter<*, *
super.onViewCreated(view, savedInstanceState)
// List selection
listSelectionViewModel = ViewModelProvider(this).get(ListTopBarViewModel::class.java)
listSelectionViewModel = ViewModelProvider(this)[ListTopBarViewModel::class.java]
listSelectionViewModel.isEditionEnabled.observe(
viewLifecycleOwner,

View file

@ -43,11 +43,11 @@ class StatusFragment : GenericFragment<StatusFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
useMaterialSharedAxisXForwardAnimation = false
viewModel = ViewModelProvider(this).get(StatusViewModel::class.java)
viewModel = ViewModelProvider(this)[StatusViewModel::class.java]
binding.viewModel = viewModel
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
sharedViewModel.accountRemoved.observe(

View file

@ -50,11 +50,11 @@ class TabsFragment : GenericFragment<TabsFragmentBinding>(), NavController.OnDes
useMaterialSharedAxisXForwardAnimation = false
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
viewModel = requireActivity().run {
ViewModelProvider(this).get(TabsViewModel::class.java)
ViewModelProvider(this)[TabsViewModel::class.java]
}
binding.viewModel = viewModel

View file

@ -50,7 +50,7 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
binding.sharedMainViewModel = sharedViewModel

View file

@ -89,13 +89,13 @@ class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, Call
binding.lifecycleOwner = viewLifecycleOwner
listViewModel = ViewModelProvider(this).get(CallLogsListViewModel::class.java)
listViewModel = ViewModelProvider(this)[CallLogsListViewModel::class.java]
binding.viewModel = listViewModel
/* Shared view model & sliding pane related */
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable }
@ -291,7 +291,7 @@ class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, Call
super.onResume()
val tabsViewModel = requireActivity().run {
ViewModelProvider(this).get(TabsViewModel::class.java)
ViewModelProvider(this)[TabsViewModel::class.java]
}
tabsViewModel.updateMissedCallCount()
}

View file

@ -38,7 +38,7 @@ class CallLogViewModelFactory(private val callLog: CallLog) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return CallLogViewModel(callLog) as T
}
}

View file

@ -51,7 +51,7 @@ class RecordingsFragment : MasterFragment<RecordingsFragmentBinding, RecordingsL
binding.lifecycleOwner = viewLifecycleOwner
viewModel = ViewModelProvider(this).get(RecordingsViewModel::class.java)
viewModel = ViewModelProvider(this)[RecordingsViewModel::class.java]
binding.viewModel = viewModel
_adapter = RecordingsListAdapter(listSelectionViewModel, viewLifecycleOwner)

View file

@ -52,9 +52,7 @@ class AccountSettingsFragment : GenericSettingFragment<SettingsAccountFragmentBi
}
try {
viewModel = ViewModelProvider(this, AccountSettingsViewModelFactory(identity)).get(
AccountSettingsViewModel::class.java
)
viewModel = ViewModelProvider(this, AccountSettingsViewModelFactory(identity))[AccountSettingsViewModel::class.java]
} catch (nsee: NoSuchElementException) {
Log.e("[Account Settings] Failed to find Account object, aborting!")
goBack()

View file

@ -49,7 +49,7 @@ class AdvancedSettingsFragment : GenericSettingFragment<SettingsAdvancedFragment
binding.lifecycleOwner = viewLifecycleOwner
binding.sharedMainViewModel = sharedViewModel
viewModel = ViewModelProvider(this).get(AdvancedSettingsViewModel::class.java)
viewModel = ViewModelProvider(this)[AdvancedSettingsViewModel::class.java]
binding.viewModel = viewModel
binding.setBackClickListener { goBack() }

View file

@ -48,7 +48,7 @@ class AudioSettingsFragment : GenericSettingFragment<SettingsAudioFragmentBindin
binding.lifecycleOwner = viewLifecycleOwner
binding.sharedMainViewModel = sharedViewModel
viewModel = ViewModelProvider(this).get(AudioSettingsViewModel::class.java)
viewModel = ViewModelProvider(this)[AudioSettingsViewModel::class.java]
binding.viewModel = viewModel
binding.setBackClickListener { goBack() }

View file

@ -51,7 +51,7 @@ class CallSettingsFragment : GenericSettingFragment<SettingsCallFragmentBinding>
binding.lifecycleOwner = viewLifecycleOwner
binding.sharedMainViewModel = sharedViewModel
viewModel = ViewModelProvider(this).get(CallSettingsViewModel::class.java)
viewModel = ViewModelProvider(this)[CallSettingsViewModel::class.java]
binding.viewModel = viewModel
binding.setBackClickListener { goBack() }

View file

@ -44,7 +44,7 @@ class ChatSettingsFragment : GenericSettingFragment<SettingsChatFragmentBinding>
binding.lifecycleOwner = viewLifecycleOwner
binding.sharedMainViewModel = sharedViewModel
viewModel = ViewModelProvider(this).get(ChatSettingsViewModel::class.java)
viewModel = ViewModelProvider(this)[ChatSettingsViewModel::class.java]
binding.viewModel = viewModel
binding.setBackClickListener { goBack() }

View file

@ -45,7 +45,7 @@ class ContactsSettingsFragment : GenericSettingFragment<SettingsContactsFragment
binding.lifecycleOwner = viewLifecycleOwner
binding.sharedMainViewModel = sharedViewModel
viewModel = ViewModelProvider(this).get(ContactsSettingsViewModel::class.java)
viewModel = ViewModelProvider(this)[ContactsSettingsViewModel::class.java]
binding.viewModel = viewModel
binding.setBackClickListener { goBack() }

View file

@ -31,7 +31,7 @@ abstract class GenericSettingFragment<T : ViewDataBinding> : GenericFragment<T>(
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false

View file

@ -39,7 +39,7 @@ class NetworkSettingsFragment : GenericSettingFragment<SettingsNetworkFragmentBi
binding.lifecycleOwner = viewLifecycleOwner
binding.sharedMainViewModel = sharedViewModel
viewModel = ViewModelProvider(this).get(NetworkSettingsViewModel::class.java)
viewModel = ViewModelProvider(this)[NetworkSettingsViewModel::class.java]
binding.viewModel = viewModel
binding.setBackClickListener { goBack() }

View file

@ -62,7 +62,7 @@ class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
/* Shared view model & sliding pane related */
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable }
@ -106,7 +106,7 @@ class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
/* End of shared view model & sliding pane related */
viewModel = ViewModelProvider(this).get(SettingsViewModel::class.java)
viewModel = ViewModelProvider(this)[SettingsViewModel::class.java]
binding.viewModel = viewModel
binding.setBackClickListener { goBack() }

View file

@ -39,7 +39,7 @@ class TunnelSettingsFragment : GenericSettingFragment<SettingsTunnelFragmentBind
binding.lifecycleOwner = viewLifecycleOwner
binding.sharedMainViewModel = sharedViewModel
viewModel = ViewModelProvider(this).get(TunnelSettingsViewModel::class.java)
viewModel = ViewModelProvider(this)[TunnelSettingsViewModel::class.java]
binding.viewModel = viewModel
binding.setBackClickListener { goBack() }

View file

@ -48,7 +48,7 @@ class VideoSettingsFragment : GenericSettingFragment<SettingsVideoFragmentBindin
binding.lifecycleOwner = viewLifecycleOwner
binding.sharedMainViewModel = sharedViewModel
viewModel = ViewModelProvider(this).get(VideoSettingsViewModel::class.java)
viewModel = ViewModelProvider(this)[VideoSettingsViewModel::class.java]
binding.viewModel = viewModel
binding.setBackClickListener { goBack() }

View file

@ -36,7 +36,7 @@ class AccountSettingsViewModelFactory(private val identity: String) :
ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
for (account in coreContext.core.accountList) {
if (account.params.identityAddress?.asStringUriOnly() == identity) {
return AccountSettingsViewModel(account) as T

View file

@ -59,11 +59,11 @@ class SideMenuFragment : GenericFragment<SideMenuFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner
viewModel = ViewModelProvider(this).get(SideMenuViewModel::class.java)
viewModel = ViewModelProvider(this)[SideMenuViewModel::class.java]
binding.viewModel = viewModel
sharedViewModel = requireActivity().run {
ViewModelProvider(this).get(SharedMainViewModel::class.java)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
sharedViewModel.accountRemoved.observe(

View file

@ -1,45 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true">
<RelativeLayout
<!-- For proper snack bar placement -->
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true">
android:layout_toRightOf="@id/tabs_fragment">
<!-- For proper snack bar placement -->
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinator"
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@id/tabs_fragment">
android:layout_height="match_parent">
<RelativeLayout
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/main_nav_graph"
tools:layout="@layout/dialer_fragment" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/main_nav_graph"
tools:layout="@layout/dialer_fragment" />
</RelativeLayout>
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/tabs_fragment"
android:name="org.linphone.activities.main.fragments.TabsFragment"
android:layout_width="@dimen/main_activity_tabs_fragment_size"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
tools:layout="@layout/tabs_fragment"/>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/tabs_fragment"
android:name="org.linphone.activities.main.fragments.TabsFragment"
android:layout_width="@dimen/main_activity_tabs_fragment_size"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
tools:layout="@layout/tabs_fragment"/>
</RelativeLayout>
</layout>
</RelativeLayout>

View file

@ -1,31 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent">
<data>
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinator"
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:background="?attr/backgroundColor">
<RelativeLayout
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/backgroundColor">
app:defaultNavHost="true"
app:navGraph="@navigation/assistant_nav_graph" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/assistant_nav_graph" />
</RelativeLayout>
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -1,20 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<data>
<import type="android.view.View"/>
</data>
<com.github.chrisbanes.photoview.PhotoView
android:id="@+id/pdf_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.github.chrisbanes.photoview.PhotoView
android:id="@+id/pdf_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" />
</RelativeLayout>
</layout>
</RelativeLayout>

View file

@ -1,45 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true">
<RelativeLayout
<!-- For proper snack bar placement -->
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true">
android:layout_above="@id/tabs_fragment">
<!-- For proper snack bar placement -->
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinator"
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/tabs_fragment">
android:layout_height="match_parent">
<RelativeLayout
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/main_nav_graph"
tools:layout="@layout/dialer_fragment" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/main_nav_graph"
tools:layout="@layout/dialer_fragment" />
</RelativeLayout>
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/tabs_fragment"
android:name="org.linphone.activities.main.fragments.TabsFragment"
android:layout_width="match_parent"
android:layout_height="@dimen/main_activity_tabs_fragment_size"
android:layout_alignParentBottom="true"
tools:layout="@layout/tabs_fragment"/>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/tabs_fragment"
android:name="org.linphone.activities.main.fragments.TabsFragment"
android:layout_width="match_parent"
android:layout_height="@dimen/main_activity_tabs_fragment_size"
android:layout_alignParentBottom="true"
tools:layout="@layout/tabs_fragment"/>
</RelativeLayout>
</layout>
</RelativeLayout>

View file

@ -13,7 +13,7 @@ buildscript {
} // for com.github.chrisbanes:PhotoView
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.2'
classpath 'com.android.tools.build:gradle:7.0.3'
classpath 'com.google.gms:google-services:4.3.10'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jlleitschuh.gradle:ktlint-gradle:10.1.0"