Added leak canary + started fixing leaks

This commit is contained in:
Sylvain Berfini 2020-08-28 16:52:50 +02:00
parent ae98121140
commit ebda69e739
50 changed files with 209 additions and 598 deletions

View file

@ -156,7 +156,7 @@ dependencies {
implementation 'androidx.core:core-ktx:1.3.1'
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
@ -169,6 +169,7 @@ dependencies {
}
implementation 'org.linphone:linphone-sdk-android:4.5+'
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4'
}
if (firebaseEnabled()) {

View file

@ -0,0 +1,49 @@
/*
* Copyright (c) 2010-2020 Belledonne Communications SARL.
*
* This file is part of linphone-android
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.linphone.activities
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.fragment.app.Fragment
abstract class GenericFragment<T : ViewDataBinding> : Fragment() {
private var _binding: T? = null
protected val binding get() = _binding!!
abstract fun getLayoutId(): Int
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = DataBindingUtil.inflate<T>(inflater, getLayoutId(), container, false)
return _binding!!.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View file

@ -22,15 +22,16 @@ package org.linphone.activities.assistant.fragments
import android.Manifest
import android.content.pm.PackageManager
import androidx.fragment.app.Fragment
import androidx.databinding.ViewDataBinding
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.assistant.viewmodels.AbstractPhoneViewModel
import org.linphone.core.tools.Log
import org.linphone.utils.PermissionHelper
import org.linphone.utils.PhoneNumberUtils
abstract class AbstractPhoneFragment : Fragment() {
abstract class AbstractPhoneFragment<T : ViewDataBinding> : GenericFragment<T>() {
abstract val viewModel: AbstractPhoneViewModel
override fun onRequestPermissionsResult(

View file

@ -23,9 +23,6 @@ import android.app.Dialog
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext
@ -37,19 +34,11 @@ import org.linphone.activities.main.viewmodels.DialogViewModel
import org.linphone.databinding.AssistantAccountLoginFragmentBinding
import org.linphone.utils.DialogUtils
class AccountLoginFragment : AbstractPhoneFragment() {
private lateinit var binding: AssistantAccountLoginFragmentBinding
class AccountLoginFragment : AbstractPhoneFragment<AssistantAccountLoginFragmentBinding>() {
override lateinit var viewModel: AccountLoginViewModel
private lateinit var sharedViewModel: SharedAssistantViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AssistantAccountLoginFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.assistant_account_login_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -30,7 +30,8 @@ import org.linphone.core.DialPlan
import org.linphone.databinding.AssistantCountryPickerFragmentBinding
class CountryPickerFragment(private val listener: CountryPickedListener) : DialogFragment() {
private lateinit var binding: AssistantCountryPickerFragmentBinding
private var _binding: AssistantCountryPickerFragmentBinding? = null
private val binding get() = _binding!!
private lateinit var adapter: CountryPickerAdapter
override fun onCreate(savedInstanceState: Bundle?) {
@ -38,12 +39,17 @@ class CountryPickerFragment(private val listener: CountryPickedListener) : Dialo
setStyle(STYLE_NO_TITLE, R.style.assistant_country_dialog_style)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AssistantCountryPickerFragmentBinding.inflate(inflater, container, false)
_binding = AssistantCountryPickerFragmentBinding.inflate(inflater, container, false)
adapter = CountryPickerAdapter()
binding.countryList.adapter = adapter

View file

@ -21,28 +21,18 @@ package org.linphone.activities.assistant.fragments
import android.content.pm.PackageManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.assistant.viewmodels.EchoCancellerCalibrationViewModel
import org.linphone.core.tools.Log
import org.linphone.databinding.AssistantEchoCancellerCalibrationFragmentBinding
import org.linphone.utils.PermissionHelper
class EchoCancellerCalibrationFragment : Fragment() {
private lateinit var binding: AssistantEchoCancellerCalibrationFragmentBinding
class EchoCancellerCalibrationFragment : GenericFragment<AssistantEchoCancellerCalibrationFragmentBinding>() {
private lateinit var viewModel: EchoCancellerCalibrationViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AssistantEchoCancellerCalibrationFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.assistant_echo_canceller_calibration_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,31 +20,20 @@
package org.linphone.activities.assistant.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.assistant.viewmodels.EmailAccountCreationViewModel
import org.linphone.activities.assistant.viewmodels.EmailAccountCreationViewModelFactory
import org.linphone.activities.assistant.viewmodels.SharedAssistantViewModel
import org.linphone.databinding.AssistantEmailAccountCreationFragmentBinding
class EmailAccountCreationFragment : Fragment() {
private lateinit var binding: AssistantEmailAccountCreationFragmentBinding
class EmailAccountCreationFragment : GenericFragment<AssistantEmailAccountCreationFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel
private lateinit var viewModel: EmailAccountCreationViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AssistantEmailAccountCreationFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.assistant_email_account_creation_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,29 +20,18 @@
package org.linphone.activities.assistant.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.assistant.viewmodels.*
import org.linphone.databinding.AssistantEmailAccountValidationFragmentBinding
class EmailAccountValidationFragment : Fragment() {
private lateinit var binding: AssistantEmailAccountValidationFragmentBinding
class EmailAccountValidationFragment : GenericFragment<AssistantEmailAccountValidationFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel
private lateinit var viewModel: EmailAccountValidationViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AssistantEmailAccountValidationFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.assistant_email_account_validation_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -21,14 +21,11 @@ package org.linphone.activities.assistant.fragments
import android.app.Dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.assistant.viewmodels.GenericLoginViewModel
import org.linphone.activities.assistant.viewmodels.GenericLoginViewModelFactory
import org.linphone.activities.assistant.viewmodels.SharedAssistantViewModel
@ -36,19 +33,11 @@ import org.linphone.activities.main.viewmodels.DialogViewModel
import org.linphone.databinding.AssistantGenericAccountLoginFragmentBinding
import org.linphone.utils.DialogUtils
class GenericAccountLoginFragment : Fragment() {
private lateinit var binding: AssistantGenericAccountLoginFragmentBinding
class GenericAccountLoginFragment : GenericFragment<AssistantGenericAccountLoginFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel
private lateinit var viewModel: GenericLoginViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AssistantGenericAccountLoginFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.assistant_generic_account_login_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,9 +20,6 @@
package org.linphone.activities.assistant.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
@ -31,19 +28,11 @@ import org.linphone.activities.assistant.viewmodels.PhoneAccountCreationViewMode
import org.linphone.activities.assistant.viewmodels.SharedAssistantViewModel
import org.linphone.databinding.AssistantPhoneAccountCreationFragmentBinding
class PhoneAccountCreationFragment : AbstractPhoneFragment() {
private lateinit var binding: AssistantPhoneAccountCreationFragmentBinding
class PhoneAccountCreationFragment : AbstractPhoneFragment<AssistantPhoneAccountCreationFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel
override lateinit var viewModel: PhoneAccountCreationViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AssistantPhoneAccountCreationFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.assistant_phone_account_creation_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,9 +20,6 @@
package org.linphone.activities.assistant.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication
@ -31,19 +28,11 @@ import org.linphone.activities.assistant.viewmodels.*
import org.linphone.core.tools.Log
import org.linphone.databinding.AssistantPhoneAccountLinkingFragmentBinding
class PhoneAccountLinkingFragment : AbstractPhoneFragment() {
private lateinit var binding: AssistantPhoneAccountLinkingFragmentBinding
class PhoneAccountLinkingFragment : AbstractPhoneFragment<AssistantPhoneAccountLinkingFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel
override lateinit var viewModel: PhoneAccountLinkingViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AssistantPhoneAccountLinkingFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.assistant_phone_account_linking_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -22,32 +22,21 @@ package org.linphone.activities.assistant.fragments
import android.content.ClipboardManager
import android.content.Context.CLIPBOARD_SERVICE
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.assistant.viewmodels.PhoneAccountValidationViewModel
import org.linphone.activities.assistant.viewmodels.PhoneAccountValidationViewModelFactory
import org.linphone.activities.assistant.viewmodels.SharedAssistantViewModel
import org.linphone.databinding.AssistantPhoneAccountValidationFragmentBinding
class PhoneAccountValidationFragment : Fragment() {
private lateinit var binding: AssistantPhoneAccountValidationFragmentBinding
class PhoneAccountValidationFragment : GenericFragment<AssistantPhoneAccountValidationFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel
private lateinit var viewModel: PhoneAccountValidationViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AssistantPhoneAccountValidationFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.assistant_phone_account_validation_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -21,32 +21,22 @@ package org.linphone.activities.assistant.fragments
import android.content.pm.PackageManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.assistant.viewmodels.QrCodeViewModel
import org.linphone.activities.assistant.viewmodels.SharedAssistantViewModel
import org.linphone.core.tools.Log
import org.linphone.databinding.AssistantQrCodeFragmentBinding
import org.linphone.utils.PermissionHelper
class QrCodeFragment : Fragment() {
private lateinit var binding: AssistantQrCodeFragmentBinding
class QrCodeFragment : GenericFragment<AssistantQrCodeFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel
private lateinit var viewModel: QrCodeViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AssistantQrCodeFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.assistant_qr_code_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,32 +20,21 @@
package org.linphone.activities.assistant.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.assistant.AssistantActivity
import org.linphone.activities.assistant.viewmodels.RemoteProvisioningViewModel
import org.linphone.activities.assistant.viewmodels.SharedAssistantViewModel
import org.linphone.databinding.AssistantRemoteProvisioningFragmentBinding
class RemoteProvisioningFragment : Fragment() {
private lateinit var binding: AssistantRemoteProvisioningFragmentBinding
class RemoteProvisioningFragment : GenericFragment<AssistantRemoteProvisioningFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel
private lateinit var viewModel: RemoteProvisioningViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AssistantRemoteProvisioningFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.assistant_remote_provisioning_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,24 +20,13 @@
package org.linphone.activities.assistant.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.databinding.AssistantTopBarFragmentBinding
class TopBarFragment : Fragment() {
private lateinit var binding: AssistantTopBarFragmentBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AssistantTopBarFragmentBinding.inflate(inflater, container, false)
return binding.root
}
class TopBarFragment : GenericFragment<AssistantTopBarFragmentBinding>() {
override fun getLayoutId(): Int = R.layout.assistant_top_bar_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,28 +20,17 @@
package org.linphone.activities.assistant.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.assistant.viewmodels.WelcomeViewModel
import org.linphone.databinding.AssistantWelcomeFragmentBinding
class WelcomeFragment : Fragment() {
private lateinit var binding: AssistantWelcomeFragmentBinding
class WelcomeFragment : GenericFragment<AssistantWelcomeFragmentBinding>() {
private lateinit var viewModel: WelcomeViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AssistantWelcomeFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.assistant_welcome_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -23,12 +23,9 @@ import android.app.Dialog
import android.content.Intent
import android.os.Bundle
import android.os.SystemClock
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.call.viewmodels.CallsViewModel
import org.linphone.activities.call.viewmodels.ControlsViewModel
import org.linphone.activities.call.viewmodels.SharedCallViewModel
@ -40,22 +37,14 @@ import org.linphone.utils.AppUtils
import org.linphone.utils.DialogUtils
import org.linphone.utils.Event
class ControlsFragment : Fragment() {
private lateinit var binding: CallControlsFragmentBinding
class ControlsFragment : GenericFragment<CallControlsFragmentBinding>() {
private lateinit var callsViewModel: CallsViewModel
private lateinit var controlsViewModel: ControlsViewModel
private lateinit var sharedViewModel: SharedCallViewModel
private var dialog: Dialog? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = CallControlsFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.call_controls_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,26 +20,16 @@
package org.linphone.activities.call.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.call.viewmodels.StatisticsListViewModel
import org.linphone.databinding.CallStatisticsFragmentBinding
class StatisticsFragment : Fragment() {
private lateinit var binding: CallStatisticsFragmentBinding
class StatisticsFragment : GenericFragment<CallStatisticsFragmentBinding>() {
private lateinit var viewModel: StatisticsListViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = CallStatisticsFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.call_statistics_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -21,13 +21,10 @@ package org.linphone.activities.call.fragments
import android.app.Dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import java.util.*
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.call.viewmodels.SharedCallViewModel
import org.linphone.activities.call.viewmodels.StatusViewModel
import org.linphone.activities.main.viewmodels.DialogViewModel
@ -37,20 +34,12 @@ import org.linphone.databinding.CallStatusFragmentBinding
import org.linphone.utils.DialogUtils
import org.linphone.utils.Event
class StatusFragment : Fragment() {
private lateinit var binding: CallStatusFragmentBinding
class StatusFragment : GenericFragment<CallStatusFragmentBinding>() {
private lateinit var viewModel: StatusViewModel
private lateinit var sharedViewModel: SharedCallViewModel
private var zrtpDialog: Dialog? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = CallStatusFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.call_status_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -22,29 +22,18 @@ package org.linphone.activities.main.about
import android.content.*
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.MainActivity
import org.linphone.databinding.AboutFragmentBinding
import org.linphone.utils.AppUtils
class AboutFragment : Fragment() {
private lateinit var binding: AboutFragmentBinding
class AboutFragment : GenericFragment<AboutFragmentBinding>() {
private lateinit var viewModel: AboutViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = AboutFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.about_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,15 +20,13 @@
package org.linphone.activities.main.chat.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.chat.adapters.ChatRoomCreationContactsAdapter
import org.linphone.activities.main.chat.viewmodels.ChatRoomCreationViewModel
@ -36,20 +34,12 @@ import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.Address
import org.linphone.databinding.ChatRoomCreationFragmentBinding
class ChatRoomCreationFragment : Fragment() {
private lateinit var binding: ChatRoomCreationFragmentBinding
class ChatRoomCreationFragment : GenericFragment<ChatRoomCreationFragmentBinding>() {
private lateinit var viewModel: ChatRoomCreationViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private lateinit var adapter: ChatRoomCreationContactsAdapter
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = ChatRoomCreationFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.chat_room_creation_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -56,8 +56,7 @@ import org.linphone.databinding.ChatRoomDetailFragmentBinding
import org.linphone.utils.*
import org.linphone.utils.Event
class DetailChatRoomFragment : MasterFragment() {
private lateinit var binding: ChatRoomDetailFragmentBinding
class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding>() {
private lateinit var viewModel: ChatRoomViewModel
private lateinit var chatSendingViewModel: ChatMessageSendingViewModel
private lateinit var listViewModel: ChatMessagesListViewModel
@ -65,13 +64,8 @@ class DetailChatRoomFragment : MasterFragment() {
private lateinit var sharedViewModel: SharedMainViewModel
private var chatRoomAddress: String? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = ChatRoomDetailFragmentBinding.inflate(inflater, container, false)
return binding.root
override fun getLayoutId(): Int {
return R.layout.chat_room_detail_fragment
}
override fun onActivityCreated(savedInstanceState: Bundle?) {

View file

@ -20,30 +20,20 @@
package org.linphone.activities.main.chat.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.chat.viewmodels.DevicesListViewModel
import org.linphone.activities.main.chat.viewmodels.DevicesListViewModelFactory
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.databinding.ChatRoomDevicesFragmentBinding
class DevicesFragment : Fragment() {
private lateinit var binding: ChatRoomDevicesFragmentBinding
class DevicesFragment : GenericFragment<ChatRoomDevicesFragmentBinding>() {
private lateinit var listViewModel: DevicesListViewModel
private lateinit var sharedViewModel: SharedMainViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = ChatRoomDevicesFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.chat_room_devices_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,29 +20,21 @@
package org.linphone.activities.main.chat.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.chat.viewmodels.EphemeralViewModel
import org.linphone.activities.main.chat.viewmodels.EphemeralViewModelFactory
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.databinding.ChatRoomEphemeralFragmentBinding
class EphemeralFragment : Fragment() {
private lateinit var binding: ChatRoomEphemeralFragmentBinding
class EphemeralFragment : GenericFragment<ChatRoomEphemeralFragmentBinding>() {
private lateinit var viewModel: EphemeralViewModel
private lateinit var sharedViewModel: SharedMainViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = ChatRoomEphemeralFragmentBinding.inflate(inflater, container, false)
return binding.root
override fun getLayoutId(): Int {
return R.layout.chat_room_ephemeral_fragment
}
override fun onActivityCreated(savedInstanceState: Bundle?) {

View file

@ -21,15 +21,12 @@ package org.linphone.activities.main.chat.fragments
import android.app.Dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.chat.GroupChatRoomMember
import org.linphone.activities.main.chat.adapters.GroupInfoParticipantsAdapter
@ -43,21 +40,13 @@ import org.linphone.core.ChatRoomCapabilities
import org.linphone.databinding.ChatRoomGroupInfoFragmentBinding
import org.linphone.utils.DialogUtils
class GroupInfoFragment : Fragment() {
private lateinit var binding: ChatRoomGroupInfoFragmentBinding
class GroupInfoFragment : GenericFragment<ChatRoomGroupInfoFragmentBinding>() {
private lateinit var viewModel: GroupInfoViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private lateinit var adapter: GroupInfoParticipantsAdapter
private var meAdminStatusChangedDialog: Dialog? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = ChatRoomGroupInfoFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.chat_room_group_info_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,15 +20,12 @@
package org.linphone.activities.main.chat.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.chat.adapters.ImdnAdapter
import org.linphone.activities.main.chat.viewmodels.ImdnViewModel
import org.linphone.activities.main.chat.viewmodels.ImdnViewModelFactory
@ -37,19 +34,13 @@ import org.linphone.core.tools.Log
import org.linphone.databinding.ChatRoomImdnFragmentBinding
import org.linphone.utils.RecyclerViewHeaderDecoration
class ImdnFragment : Fragment() {
private lateinit var binding: ChatRoomImdnFragmentBinding
class ImdnFragment : GenericFragment<ChatRoomImdnFragmentBinding>() {
private lateinit var viewModel: ImdnViewModel
private lateinit var adapter: ImdnAdapter
private lateinit var sharedViewModel: SharedMainViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = ChatRoomImdnFragmentBinding.inflate(inflater, container, false)
return binding.root
override fun getLayoutId(): Int {
return R.layout.chat_room_imdn_fragment
}
override fun onActivityCreated(savedInstanceState: Bundle?) {

View file

@ -21,9 +21,6 @@ package org.linphone.activities.main.chat.fragments
import android.app.Dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
@ -46,21 +43,13 @@ import org.linphone.core.tools.Log
import org.linphone.databinding.ChatRoomMasterFragmentBinding
import org.linphone.utils.*
class MasterChatRoomsFragment : MasterFragment() {
class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding>() {
override val dialogConfirmationMessageBeforeRemoval = R.plurals.chat_room_delete_dialog
private lateinit var binding: ChatRoomMasterFragmentBinding
private lateinit var listViewModel: ChatRoomsListViewModel
private lateinit var adapter: ChatRoomsListAdapter
private lateinit var sharedViewModel: SharedMainViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = ChatRoomMasterFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.chat_room_master_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -26,10 +26,6 @@ import android.net.Uri
import android.os.Bundle
import android.os.Parcelable
import android.provider.MediaStore
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
@ -37,6 +33,7 @@ import java.io.File
import kotlinx.coroutines.launch
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.contact.viewmodels.*
import org.linphone.activities.main.navigateToContact
@ -48,20 +45,12 @@ import org.linphone.utils.FileUtils
import org.linphone.utils.ImageUtils
import org.linphone.utils.PermissionHelper
class ContactEditorFragment : Fragment(), SyncAccountPickerFragment.SyncAccountPickedListener {
private lateinit var binding: ContactEditorFragmentBinding
class ContactEditorFragment : GenericFragment<ContactEditorFragmentBinding>(), SyncAccountPickerFragment.SyncAccountPickedListener {
private lateinit var viewModel: ContactEditorViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private var temporaryPicturePath: File? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = ContactEditorFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.contact_editor_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -23,14 +23,12 @@ import android.app.Dialog
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.contact.viewmodels.ContactViewModel
import org.linphone.activities.main.contact.viewmodels.ContactViewModelFactory
@ -40,19 +38,11 @@ import org.linphone.core.tools.Log
import org.linphone.databinding.ContactDetailFragmentBinding
import org.linphone.utils.DialogUtils
class DetailContactFragment : Fragment() {
private lateinit var binding: ContactDetailFragmentBinding
class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
private lateinit var viewModel: ContactViewModel
private lateinit var sharedViewModel: SharedMainViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = ContactDetailFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.contact_detail_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -22,9 +22,6 @@ package org.linphone.activities.main.contact.fragments
import android.app.Dialog
import android.content.pm.PackageManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
@ -47,9 +44,8 @@ import org.linphone.core.tools.Log
import org.linphone.databinding.ContactMasterFragmentBinding
import org.linphone.utils.*
class MasterContactsFragment : MasterFragment() {
class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding>() {
override val dialogConfirmationMessageBeforeRemoval = R.plurals.contact_delete_dialog
private lateinit var binding: ContactMasterFragmentBinding
private lateinit var listViewModel: ContactsListViewModel
private lateinit var adapter: ContactsListAdapter
private lateinit var sharedViewModel: SharedMainViewModel
@ -57,14 +53,7 @@ class MasterContactsFragment : MasterFragment() {
private var sipUriToAdd: String? = null
private var editOnClick: Boolean = false
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = ContactMasterFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.contact_master_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -28,7 +28,8 @@ import org.linphone.core.tools.Log
import org.linphone.databinding.ContactSyncAccountPickerFragmentBinding
class SyncAccountPickerFragment(private val listener: SyncAccountPickedListener) : DialogFragment() {
private lateinit var binding: ContactSyncAccountPickerFragmentBinding
private var _binding: ContactSyncAccountPickerFragmentBinding? = null
private val binding get() = _binding!!
private lateinit var adapter: SyncAccountAdapter
override fun onCreate(savedInstanceState: Bundle?) {
@ -36,12 +37,17 @@ class SyncAccountPickerFragment(private val listener: SyncAccountPickedListener)
setStyle(STYLE_NO_TITLE, R.style.assistant_country_dialog_style)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = ContactSyncAccountPickerFragmentBinding.inflate(inflater, container, false)
_binding = ContactSyncAccountPickerFragmentBinding.inflate(inflater, container, false)
adapter = SyncAccountAdapter()
binding.accountsList.adapter = adapter

View file

@ -26,10 +26,6 @@ import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import com.google.android.material.dialog.MaterialAlertDialogBuilder
@ -37,6 +33,7 @@ import org.linphone.BuildConfig
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.dialer.viewmodels.DialerViewModel
import org.linphone.activities.main.viewmodels.DialogViewModel
@ -46,21 +43,13 @@ import org.linphone.databinding.DialerFragmentBinding
import org.linphone.utils.AppUtils
import org.linphone.utils.DialogUtils
class DialerFragment : Fragment() {
private lateinit var binding: DialerFragmentBinding
class DialerFragment : GenericFragment<DialerFragmentBinding>() {
private lateinit var viewModel: DialerViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private var uploadLogsInitiatedByUs = false
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = DialerFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.dialer_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,27 +20,17 @@
package org.linphone.activities.main.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.viewmodels.ListTopBarViewModel
import org.linphone.databinding.ListEditTopBarFragmentBinding
import org.linphone.utils.Event
class ListTopBarFragment : Fragment() {
private lateinit var binding: ListEditTopBarFragmentBinding
class ListTopBarFragment : GenericFragment<ListEditTopBarFragmentBinding>() {
private lateinit var viewModel: ListTopBarViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = ListEditTopBarFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.list_edit_top_bar_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -21,9 +21,10 @@ package org.linphone.activities.main.fragments
import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.databinding.ViewDataBinding
import androidx.lifecycle.ViewModelProvider
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.viewmodels.DialogViewModel
import org.linphone.activities.main.viewmodels.ListTopBarViewModel
import org.linphone.utils.AppUtils
@ -33,7 +34,7 @@ import org.linphone.utils.DialogUtils
* This fragment can be inherited by all fragments that will display a list
* where items can be selected for removal through the ListTopBarFragment
*/
abstract class MasterFragment : Fragment() {
abstract class MasterFragment<T : ViewDataBinding> : GenericFragment<T>() {
protected lateinit var listSelectionViewModel: ListTopBarViewModel
protected open val dialogConfirmationMessageBeforeRemoval: Int = R.plurals.dialog_default_delete

View file

@ -20,31 +20,21 @@
package org.linphone.activities.main.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.main.viewmodels.StatusViewModel
import org.linphone.core.tools.Log
import org.linphone.databinding.StatusFragmentBinding
import org.linphone.utils.Event
class StatusFragment : Fragment() {
private lateinit var binding: StatusFragmentBinding
class StatusFragment : GenericFragment<StatusFragmentBinding>() {
private lateinit var viewModel: StatusViewModel
private lateinit var sharedViewModel: SharedMainViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = StatusFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.status_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,28 +20,17 @@
package org.linphone.activities.main.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.viewmodels.TabsViewModel
import org.linphone.databinding.TabsFragmentBinding
class TabsFragment : Fragment() {
private lateinit var binding: TabsFragmentBinding
class TabsFragment : GenericFragment<TabsFragmentBinding>() {
private lateinit var viewModel: TabsViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = TabsFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.tabs_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,14 +20,12 @@
package org.linphone.activities.main.history.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.history.viewmodels.CallLogViewModel
import org.linphone.activities.main.history.viewmodels.CallLogViewModelFactory
@ -39,19 +37,11 @@ import org.linphone.contact.NativeContact
import org.linphone.core.tools.Log
import org.linphone.databinding.HistoryDetailFragmentBinding
class DetailCallLogFragment : Fragment() {
private lateinit var binding: HistoryDetailFragmentBinding
class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
private lateinit var viewModel: CallLogViewModel
private lateinit var sharedViewModel: SharedMainViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = HistoryDetailFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.history_detail_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -21,9 +21,6 @@ package org.linphone.activities.main.history.fragments
import android.app.Dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
@ -45,21 +42,13 @@ import org.linphone.core.tools.Log
import org.linphone.databinding.HistoryMasterFragmentBinding
import org.linphone.utils.*
class MasterCallLogsFragment : MasterFragment() {
class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding>() {
override val dialogConfirmationMessageBeforeRemoval = R.plurals.history_delete_dialog
private lateinit var binding: HistoryMasterFragmentBinding
private lateinit var listViewModel: CallLogsListViewModel
private lateinit var adapter: CallLogsListAdapter
private lateinit var sharedViewModel: SharedMainViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = HistoryMasterFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.history_master_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,10 +20,7 @@
package org.linphone.activities.main.recordings.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
@ -36,22 +33,14 @@ import org.linphone.activities.main.recordings.viewmodels.RecordingsViewModel
import org.linphone.databinding.RecordingsFragmentBinding
import org.linphone.utils.RecyclerViewHeaderDecoration
class RecordingsFragment : MasterFragment() {
private lateinit var binding: RecordingsFragmentBinding
class RecordingsFragment : MasterFragment<RecordingsFragmentBinding>() {
private lateinit var viewModel: RecordingsViewModel
private lateinit var adapter: RecordingsListAdapter
private var videoX: Float = 0f
private var videoY: Float = 0f
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = RecordingsFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.recordings_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,32 +20,22 @@
package org.linphone.activities.main.settings.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModel
import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModelFactory
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsAccountFragmentBinding
class AccountSettingsFragment : Fragment() {
private lateinit var binding: SettingsAccountFragmentBinding
class AccountSettingsFragment : GenericFragment<SettingsAccountFragmentBinding>() {
private lateinit var sharedViewModel: SharedMainViewModel
private lateinit var viewModel: AccountSettingsViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = SettingsAccountFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.settings_account_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -24,34 +24,24 @@ import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.provider.Settings
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericActivity
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.viewmodels.AdvancedSettingsViewModel
import org.linphone.core.tools.Log
import org.linphone.core.tools.compatibility.DeviceUtils
import org.linphone.databinding.SettingsAdvancedFragmentBinding
import org.linphone.utils.PowerManagerUtils
class AdvancedSettingsFragment : Fragment() {
private lateinit var binding: SettingsAdvancedFragmentBinding
class AdvancedSettingsFragment : GenericFragment<SettingsAdvancedFragmentBinding>() {
private lateinit var viewModel: AdvancedSettingsViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = SettingsAdvancedFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.settings_advanced_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -23,33 +23,24 @@ import android.content.pm.PackageManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.BR
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.SettingListenerStub
import org.linphone.activities.main.settings.viewmodels.AudioSettingsViewModel
import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsAudioFragmentBinding
import org.linphone.utils.PermissionHelper
class AudioSettingsFragment : Fragment() {
private lateinit var binding: SettingsAudioFragmentBinding
class AudioSettingsFragment : GenericFragment<SettingsAudioFragmentBinding>() {
private lateinit var viewModel: AudioSettingsViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = SettingsAudioFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.settings_audio_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -24,30 +24,20 @@ import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.viewmodels.CallSettingsViewModel
import org.linphone.compatibility.Compatibility
import org.linphone.databinding.SettingsCallFragmentBinding
import org.linphone.mediastream.Version
class CallSettingsFragment : Fragment() {
private lateinit var binding: SettingsCallFragmentBinding
class CallSettingsFragment : GenericFragment<SettingsCallFragmentBinding>() {
private lateinit var viewModel: CallSettingsViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = SettingsCallFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.settings_call_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -23,30 +23,20 @@ import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.viewmodels.ChatSettingsViewModel
import org.linphone.compatibility.Compatibility
import org.linphone.databinding.SettingsChatFragmentBinding
import org.linphone.mediastream.Version
class ChatSettingsFragment : Fragment() {
private lateinit var binding: SettingsChatFragmentBinding
class ChatSettingsFragment : GenericFragment<SettingsChatFragmentBinding>() {
private lateinit var viewModel: ChatSettingsViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = SettingsChatFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.settings_chat_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -21,33 +21,23 @@ package org.linphone.activities.main.settings.fragments
import android.content.pm.PackageManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.viewmodels.ContactsSettingsViewModel
import org.linphone.compatibility.Compatibility
import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsContactsFragmentBinding
import org.linphone.utils.PermissionHelper
class ContactsSettingsFragment : Fragment() {
private lateinit var binding: SettingsContactsFragmentBinding
class ContactsSettingsFragment : GenericFragment<SettingsContactsFragmentBinding>() {
private lateinit var viewModel: ContactsSettingsViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = SettingsContactsFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.settings_contacts_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,28 +20,18 @@
package org.linphone.activities.main.settings.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.viewmodels.NetworkSettingsViewModel
import org.linphone.databinding.SettingsNetworkFragmentBinding
class NetworkSettingsFragment : Fragment() {
private lateinit var binding: SettingsNetworkFragmentBinding
class NetworkSettingsFragment : GenericFragment<SettingsNetworkFragmentBinding>() {
private lateinit var viewModel: NetworkSettingsViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = SettingsNetworkFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.settings_network_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,12 +20,10 @@
package org.linphone.activities.main.settings.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.*
import org.linphone.activities.main.navigateToAccountSettings
import org.linphone.activities.main.navigateToAudioSettings
@ -36,19 +34,11 @@ import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsFragmentBinding
class SettingsFragment : Fragment() {
private lateinit var binding: SettingsFragmentBinding
class SettingsFragment : GenericFragment<SettingsFragmentBinding>() {
private lateinit var sharedViewModel: SharedMainViewModel
private lateinit var viewModel: SettingsViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = SettingsFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.settings_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -20,28 +20,18 @@
package org.linphone.activities.main.settings.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.viewmodels.TunnelSettingsViewModel
import org.linphone.databinding.SettingsTunnelFragmentBinding
class TunnelSettingsFragment : Fragment() {
private lateinit var binding: SettingsTunnelFragmentBinding
class TunnelSettingsFragment : GenericFragment<SettingsTunnelFragmentBinding>() {
private lateinit var viewModel: TunnelSettingsViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = SettingsTunnelFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.settings_tunnel_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -23,33 +23,24 @@ import android.content.pm.PackageManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.BR
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.SettingListenerStub
import org.linphone.activities.main.settings.viewmodels.VideoSettingsViewModel
import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsVideoFragmentBinding
import org.linphone.utils.PermissionHelper
class VideoSettingsFragment : Fragment() {
private lateinit var binding: SettingsVideoFragmentBinding
class VideoSettingsFragment : GenericFragment<SettingsVideoFragmentBinding>() {
private lateinit var viewModel: VideoSettingsViewModel
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = SettingsVideoFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.settings_video_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)

View file

@ -25,10 +25,6 @@ import android.net.Uri
import android.os.Bundle
import android.os.Parcelable
import android.provider.MediaStore
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
@ -36,6 +32,7 @@ import java.io.File
import kotlinx.coroutines.launch
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.assistant.AssistantActivity
import org.linphone.activities.main.navigateToAccountSettings
import org.linphone.activities.main.settings.SettingListenerStub
@ -48,20 +45,12 @@ import org.linphone.utils.FileUtils
import org.linphone.utils.ImageUtils
import org.linphone.utils.PermissionHelper
class SideMenuFragment : Fragment() {
private lateinit var binding: SideMenuFragmentBinding
class SideMenuFragment : GenericFragment<SideMenuFragmentBinding>() {
private lateinit var viewModel: SideMenuViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private var temporaryPicturePath: File? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = SideMenuFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun getLayoutId(): Int = R.layout.side_menu_fragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)