Stop contacts loading process if core is being shutdown or is already destroyed
This commit is contained in:
parent
b8685c2dda
commit
4d7ce73422
1 changed files with 35 additions and 25 deletions
|
@ -40,6 +40,7 @@ import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.core.Factory
|
import org.linphone.core.Factory
|
||||||
import org.linphone.core.Friend
|
import org.linphone.core.Friend
|
||||||
|
import org.linphone.core.GlobalState
|
||||||
import org.linphone.core.tools.Log
|
import org.linphone.core.tools.Log
|
||||||
import org.linphone.utils.LinphoneUtils
|
import org.linphone.utils.LinphoneUtils
|
||||||
|
|
||||||
|
@ -88,6 +89,11 @@ class ContactLoader : LoaderManager.LoaderCallbacks<Cursor> {
|
||||||
val core = coreContext.core
|
val core = coreContext.core
|
||||||
val linphoneMime = loader.context.getString(R.string.linphone_address_mime_type)
|
val linphoneMime = loader.context.getString(R.string.linphone_address_mime_type)
|
||||||
|
|
||||||
|
if (core.globalState == GlobalState.Shutdown || core.globalState == GlobalState.Off) {
|
||||||
|
Log.w("[Contacts Loader] Core is being stopped or already destroyed, abort")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
coreContext.lifecycleScope.launch {
|
coreContext.lifecycleScope.launch {
|
||||||
val friends = HashMap<String, Friend>()
|
val friends = HashMap<String, Friend>()
|
||||||
|
|
||||||
|
@ -193,33 +199,37 @@ class ContactLoader : LoaderManager.LoaderCallbacks<Cursor> {
|
||||||
}
|
}
|
||||||
|
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
Log.i("[Contacts Loader] Friends created")
|
if (core.globalState == GlobalState.Shutdown || core.globalState == GlobalState.Off) {
|
||||||
val contactId = coreContext.contactsManager.contactIdToWatchFor
|
Log.w("[Contacts Loader] Core is being stopped or already destroyed, abort")
|
||||||
if (contactId.isNotEmpty()) {
|
} else {
|
||||||
val friend = friends[contactId]
|
Log.i("[Contacts Loader] Friends created")
|
||||||
Log.i("[Contacts Loader] Manager was asked to monitor contact id $contactId")
|
val contactId = coreContext.contactsManager.contactIdToWatchFor
|
||||||
if (friend != null) {
|
if (contactId.isNotEmpty()) {
|
||||||
Log.i("[Contacts Loader] Found new contact matching id $contactId, notifying listeners")
|
val friend = friends[contactId]
|
||||||
coreContext.contactsManager.notifyListeners(friend)
|
Log.i("[Contacts Loader] Manager was asked to monitor contact id $contactId")
|
||||||
|
if (friend != null) {
|
||||||
|
Log.i("[Contacts Loader] Found new contact matching id $contactId, notifying listeners")
|
||||||
|
coreContext.contactsManager.notifyListeners(friend)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val fl = core.defaultFriendList ?: core.createFriendList()
|
||||||
|
for (friend in fl.friends) {
|
||||||
|
fl.removeFriend(friend)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fl != core.defaultFriendList) core.addFriendList(fl)
|
||||||
|
|
||||||
|
val friendsList = friends.values
|
||||||
|
for (friend in friendsList) {
|
||||||
|
fl.addLocalFriend(friend)
|
||||||
|
}
|
||||||
|
|
||||||
|
fl.updateSubscriptions()
|
||||||
|
|
||||||
|
Log.i("[Contacts Loader] Friends added & subscription updated")
|
||||||
|
coreContext.contactsManager.fetchFinished()
|
||||||
}
|
}
|
||||||
|
|
||||||
val fl = core.defaultFriendList ?: core.createFriendList()
|
|
||||||
for (friend in fl.friends) {
|
|
||||||
fl.removeFriend(friend)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fl != core.defaultFriendList) core.addFriendList(fl)
|
|
||||||
|
|
||||||
val friendsList = friends.values
|
|
||||||
for (friend in friendsList) {
|
|
||||||
fl.addLocalFriend(friend)
|
|
||||||
}
|
|
||||||
|
|
||||||
fl.updateSubscriptions()
|
|
||||||
|
|
||||||
Log.i("[Contacts Loader] Friends added & subscription updated")
|
|
||||||
coreContext.contactsManager.fetchFinished()
|
|
||||||
}
|
}
|
||||||
} catch (sde: StaleDataException) {
|
} catch (sde: StaleDataException) {
|
||||||
Log.e("[Contacts Loader] State Data Exception: $sde")
|
Log.e("[Contacts Loader] State Data Exception: $sde")
|
||||||
|
|
Loading…
Reference in a new issue