Fixed a few leaks identified by LeakCanary

This commit is contained in:
Sylvain Berfini 2021-07-15 17:50:30 +02:00
parent 4297a4e557
commit 03e4415b5c
7 changed files with 36 additions and 10 deletions

View file

@ -151,6 +151,13 @@ class CallActivity : ProximitySensorActivity() {
super.onPause()
}
override fun onDestroy() {
coreContext.core.nativeVideoWindowId = null
coreContext.core.nativePreviewWindowId = null
super.onDestroy()
}
override fun onUserLeaveHint() {
super.onUserLeaveHint()

View file

@ -122,10 +122,14 @@ class OutgoingCallActivity : ProximitySensorActivity() {
override fun onStart() {
super.onStart()
initNumpadLayout()
}
override fun onStop() {
numpadAnimator.end()
super.onStop()
}
override fun onResume() {
super.onResume()

View file

@ -183,10 +183,14 @@ class ControlsFragment : GenericFragment<CallControlsFragmentBinding>() {
override fun onStart() {
super.onStart()
initNumpadLayout()
}
override fun onStop() {
numpadAnimator.end()
super.onStop()
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,

View file

@ -233,6 +233,9 @@ class ControlsViewModel : ViewModel() {
}
override fun onCleared() {
if (corePreferences.enableAnimations) bounceAnimator.end()
optionsMenuAnimator.end()
audioRoutesMenuAnimator.end()
coreContext.core.removeListener(listener)
super.onCleared()
}

View file

@ -395,6 +395,7 @@ class AccountSettingsViewModel(val account: Account) : GenericSettingsViewModel(
}
fun destroy() {
accountsSettingsListener = object : SettingListenerStub() {}
account.removeListener(listener)
}

View file

@ -43,12 +43,6 @@ class SideMenuViewModel : ViewModel() {
lateinit var accountsSettingsListener: SettingListenerStub
private var accountClickListener = object : SettingListenerStub() {
override fun onAccountClicked(identity: String) {
accountsSettingsListener.onAccountClicked(identity)
}
}
private val listener: CoreListenerStub = object : CoreListenerStub() {
override fun onAccountRegistrationStateChanged(
core: Core,
@ -71,18 +65,26 @@ class SideMenuViewModel : ViewModel() {
}
override fun onCleared() {
defaultAccountViewModel.value?.destroy()
accounts.value.orEmpty().forEach(AccountSettingsViewModel::destroy)
coreContext.core.removeListener(listener)
super.onCleared()
}
fun updateAccountsList() {
defaultAccountFound.value = false // Do not assume a default account will still be found
accounts.value.orEmpty().forEach(AccountSettingsViewModel::destroy)
val list = arrayListOf<AccountSettingsViewModel>()
if (coreContext.core.accountList.isNotEmpty()) {
val defaultAccount = coreContext.core.defaultAccount
if (defaultAccount != null) {
val defaultViewModel = AccountSettingsViewModel(defaultAccount)
defaultViewModel.accountsSettingsListener = accountClickListener
defaultViewModel.accountsSettingsListener = object : SettingListenerStub() {
override fun onAccountClicked(identity: String) {
accountsSettingsListener.onAccountClicked(identity)
}
}
defaultAccountViewModel.value = defaultViewModel
defaultAccountFound.value = true
}
@ -90,7 +92,11 @@ class SideMenuViewModel : ViewModel() {
for (account in coreContext.core.accountList) {
if (account != coreContext.core.defaultAccount) {
val viewModel = AccountSettingsViewModel(account)
viewModel.accountsSettingsListener = accountClickListener
viewModel.accountsSettingsListener = object : SettingListenerStub() {
override fun onAccountClicked(identity: String) {
accountsSettingsListener.onAccountClicked(identity)
}
}
list.add(viewModel)
}
}

View file

@ -101,6 +101,7 @@ class TabsViewModel : ViewModel() {
}
override fun onCleared() {
if (corePreferences.enableAnimations) bounceAnimator.end()
coreContext.core.removeListener(listener)
super.onCleared()
}