diff --git a/app/src/main/java/org/linphone/activities/assistant/viewmodels/AccountLoginViewModel.kt b/app/src/main/java/org/linphone/activities/assistant/viewmodels/AccountLoginViewModel.kt index 807ed80cc..8bca89dbb 100644 --- a/app/src/main/java/org/linphone/activities/assistant/viewmodels/AccountLoginViewModel.kt +++ b/app/src/main/java/org/linphone/activities/assistant/viewmodels/AccountLoginViewModel.kt @@ -161,10 +161,19 @@ class AccountLoginViewModel(accountCreator: AccountCreator) : AbstractPhoneViewM fun removeInvalidProxyConfig() { val account = accountToCheck account ?: return + + val core = coreContext.core val authInfo = account.findAuthInfo() - if (authInfo != null) coreContext.core.removeAuthInfo(authInfo) - coreContext.core.removeAccount(account) + if (authInfo != null) core.removeAuthInfo(authInfo) + core.removeAccount(account) accountToCheck = null + + // Make sure there is a valid default account + val accounts = core.accountList + if (accounts.isNotEmpty() && core.defaultAccount == null) { + core.defaultAccount = accounts.first() + core.refreshRegisters() + } } fun continueEvenIfInvalidCredentials() { diff --git a/app/src/main/java/org/linphone/activities/assistant/viewmodels/GenericLoginViewModel.kt b/app/src/main/java/org/linphone/activities/assistant/viewmodels/GenericLoginViewModel.kt index 0a6c75014..153db0671 100644 --- a/app/src/main/java/org/linphone/activities/assistant/viewmodels/GenericLoginViewModel.kt +++ b/app/src/main/java/org/linphone/activities/assistant/viewmodels/GenericLoginViewModel.kt @@ -108,10 +108,19 @@ class GenericLoginViewModel(private val accountCreator: AccountCreator) : ViewMo fun removeInvalidProxyConfig() { val account = accountToCheck account ?: return + + val core = coreContext.core val authInfo = account.findAuthInfo() - if (authInfo != null) coreContext.core.removeAuthInfo(authInfo) - coreContext.core.removeAccount(account) + if (authInfo != null) core.removeAuthInfo(authInfo) + core.removeAccount(account) accountToCheck = null + + // Make sure there is a valid default account + val accounts = core.accountList + if (accounts.isNotEmpty() && core.defaultAccount == null) { + core.defaultAccount = accounts.first() + core.refreshRegisters() + } } fun continueEvenIfInvalidCredentials() { diff --git a/app/src/main/java/org/linphone/activities/main/MainActivity.kt b/app/src/main/java/org/linphone/activities/main/MainActivity.kt index c145e8a73..88049ae79 100644 --- a/app/src/main/java/org/linphone/activities/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/activities/main/MainActivity.kt @@ -35,6 +35,7 @@ import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.core.view.doOnAttach import androidx.databinding.DataBindingUtil import androidx.fragment.app.FragmentContainerView +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.navigation.NavController @@ -59,6 +60,9 @@ import org.linphone.activities.navigateToDialer import org.linphone.compatibility.Compatibility import org.linphone.contact.ContactsUpdatedListenerStub import org.linphone.core.AuthInfo +import org.linphone.core.AuthMethod +import org.linphone.core.Core +import org.linphone.core.CoreListenerStub import org.linphone.core.CorePreferences import org.linphone.core.tools.Log import org.linphone.databinding.MainActivityBinding @@ -109,6 +113,19 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin private var shouldTabsBeVisibleDependingOnDestination = true private var shouldTabsBeVisibleDueToOrientationAndKeyboard = true + private val authenticationRequestedEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + + private val coreListener: CoreListenerStub = object : CoreListenerStub() { + override fun onAuthenticationRequested(core: Core, authInfo: AuthInfo, method: AuthMethod) { + Log.w( + "[Main Activity] Authentication requested for account [${authInfo.username}@${authInfo.domain}] with realm [${authInfo.realm}] using method [$method]" + ) + authenticationRequestedEvent.value = Event(authInfo) + } + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -144,7 +161,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin } } - coreContext.authenticationRequestedEvent.observe( + authenticationRequestedEvent.observe( this ) { it.consume { authInfo -> @@ -183,9 +200,11 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin override fun onResume() { super.onResume() coreContext.contactsManager.addListener(listener) + coreContext.core.addListener(coreListener) } override fun onPause() { + coreContext.core.removeListener(coreListener) coreContext.contactsManager.removeListener(listener) super.onPause() } diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index 007c619b3..00d1fc259 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -117,10 +117,6 @@ class CoreContext( MutableLiveData>() } - val authenticationRequestedEvent: MutableLiveData> by lazy { - MutableLiveData>() - } - val coroutineScope = CoroutineScope(Dispatchers.Main + SupervisorJob()) private val loggingService = Factory.instance().loggingService @@ -169,13 +165,6 @@ class CoreContext( } } - override fun onAuthenticationRequested(core: Core, authInfo: AuthInfo, method: AuthMethod) { - Log.w( - "[Context] Authentication requested for account [${authInfo.username}@${authInfo.domain}] with realm [${authInfo.realm}] using method [$method]" - ) - authenticationRequestedEvent.value = Event(authInfo) - } - override fun onPushNotificationReceived(core: Core, payload: String?) { Log.i("[Context] Push notification received: $payload") }