diff --git a/CHANGES.md b/CHANGES.md index 26b06237d2..1448d53a07 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,9 +15,11 @@ Bugfix 🐛: - Fix FontSize issue (#1483, #1787) - Fix bad color for settings icon on Android < 24 (#1786) - Change user or room avatar: when selecting Gallery, I'm not proposed to crop the selected image (#1590) + - Loudspeaker is always used (#1685) - Fix uploads still don't work with room v6 (#1879) - Can't handle ongoing call events in background (#1992) - Crash / Attachment viewer: Cannot draw a recycled Bitmap #2034 + - Login with Matrix-Id | Autodiscovery fails if identity server is invalid and Homeserver ok (#2027) Translations 🗣: - diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/wellknown/WellknownResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/wellknown/WellknownResult.kt index a736a4f1be..ec2dfd214c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/wellknown/WellknownResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/wellknown/WellknownResult.kt @@ -45,7 +45,7 @@ sealed class WellknownResult { /** * Inform the user that auto-discovery failed due to invalid/empty data and PROMPT for the parameter. */ - object FailPrompt : WellknownResult() + data class FailPrompt(val homeServerUrl: String?, val wellKnown: WellKnown?) : WellknownResult() /** * Inform the user that auto-discovery did not return any usable URLs. Do not continue further with the current login process. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/GetWellknownTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/GetWellknownTask.kt index e20fe9a304..80ede5e884 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/GetWellknownTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/GetWellknownTask.kt @@ -97,7 +97,7 @@ internal class DefaultGetWellknownTask @Inject constructor( // Success val homeServerBaseUrl = wellKnown.homeServer?.baseURL if (homeServerBaseUrl.isNullOrBlank()) { - WellknownResult.FailPrompt + WellknownResult.FailPrompt(null, null) } else { if (homeServerBaseUrl.isValidUrl()) { // Check that HS is a real one @@ -120,11 +120,11 @@ internal class DefaultGetWellknownTask @Inject constructor( is Failure.OtherServerError -> { when (throwable.httpCode) { HttpsURLConnection.HTTP_NOT_FOUND -> WellknownResult.Ignore - else -> WellknownResult.FailPrompt + else -> WellknownResult.FailPrompt(null, null) } } is MalformedJsonException, is EOFException -> { - WellknownResult.FailPrompt + WellknownResult.FailPrompt(null, null) } else -> { throw throwable @@ -162,7 +162,7 @@ internal class DefaultGetWellknownTask @Inject constructor( // All is ok WellknownResult.Prompt(homeServerBaseUrl, identityServerBaseUrl, wellKnown) } else { - WellknownResult.FailError + WellknownResult.FailPrompt(homeServerBaseUrl, wellKnown) } } else { WellknownResult.FailError diff --git a/vector/src/main/java/im/vector/app/features/call/CallAudioManager.kt b/vector/src/main/java/im/vector/app/features/call/CallAudioManager.kt index fde562ee63..2a773c2f9b 100644 --- a/vector/src/main/java/im/vector/app/features/call/CallAudioManager.kt +++ b/vector/src/main/java/im/vector/app/features/call/CallAudioManager.kt @@ -125,7 +125,7 @@ class CallAudioManager( } else { // if a wired headset is plugged, sound will be directed to it // (can't really force earpiece when headset is plugged) - if (isBluetoothHeadsetOn()) { + if (isBluetoothHeadsetConnected(audioManager)) { Timber.v("##VOIP: AudioManager default to WIRELESS_HEADSET ") setCurrentSoundDevice(SoundDevice.WIRELESS_HEADSET) // try now in case already connected? @@ -246,7 +246,7 @@ class CallAudioManager( } private fun isHeadsetOn(): Boolean { - return isWiredHeadsetOn() || isBluetoothHeadsetOn() + return isWiredHeadsetOn() || (audioManager?.let { isBluetoothHeadsetConnected(it) } ?: false) } private fun isWiredHeadsetOn(): Boolean { diff --git a/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt b/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt index 93f8f7a45c..aed186bcd6 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt @@ -522,6 +522,13 @@ class LoginViewModel @AssistedInject constructor( when (data) { is WellknownResult.Prompt -> onWellknownSuccess(action, data, homeServerConnectionConfig) + is WellknownResult.FailPrompt -> + // Relax on IS discovery if home server is valid + if (data.homeServerUrl != null && data.wellKnown != null) { + onWellknownSuccess(action, WellknownResult.Prompt(data.homeServerUrl!!, null, data.wellKnown!!), homeServerConnectionConfig) + } else { + onWellKnownError() + } is WellknownResult.InvalidMatrixId -> { setState { copy( @@ -531,12 +538,7 @@ class LoginViewModel @AssistedInject constructor( _viewEvents.post(LoginViewEvents.Failure(Exception(stringProvider.getString(R.string.login_signin_matrix_id_error_invalid_matrix_id)))) } else -> { - setState { - copy( - asyncLoginAction = Uninitialized - ) - } - _viewEvents.post(LoginViewEvents.Failure(Exception(stringProvider.getString(R.string.autodiscover_well_known_error)))) + onWellKnownError() } }.exhaustive } @@ -547,6 +549,15 @@ class LoginViewModel @AssistedInject constructor( }) } + private fun onWellKnownError() { + setState { + copy( + asyncLoginAction = Uninitialized + ) + } + _viewEvents.post(LoginViewEvents.Failure(Exception(stringProvider.getString(R.string.autodiscover_well_known_error)))) + } + private fun onWellknownSuccess(action: LoginAction.LoginOrRegister, wellKnownPrompt: WellknownResult.Prompt, homeServerConnectionConfig: HomeServerConnectionConfig?) {