diff --git a/app/build.gradle b/app/build.gradle index 03d288376d461dadc661f1708c5ef78379063bb5..5c806d3485d9a989a1ec482be9d6efd74471f509 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -253,7 +253,7 @@ dependencies { implementation "commons-httpclient:commons-httpclient:3.1@jar" // remove after entire switch to lib v2 implementation 'org.apache.jackrabbit:jackrabbit-webdav:2.13.5' // remove after entire switch to lib v2 implementation 'com.google.code.gson:gson:2.10.1' - implementation("foundation.e:Nextcloud-Android-Library:2.0.1-u2.17-release") { + implementation("foundation.e:Nextcloud-Android-Library:2.0.2-u2.17-release") { exclude group: 'foundation.e.dav4jvm', module: 'dav4jvm' exclude group: 'com.gitlab.bitfireAT', module: 'dav4jvm' exclude group: 'org.ogce', module: 'xpp3' // unused in Android and brings wrong Junit version diff --git a/app/src/main/kotlin/at/bitfire/davdroid/settings/AccountSettings.kt b/app/src/main/kotlin/at/bitfire/davdroid/settings/AccountSettings.kt index c027c872c4696682a045e761d5f7a7fbbb2fae95..f94002a384b936ccb3e2655edab2aecbf7d82ca0 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/settings/AccountSettings.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/settings/AccountSettings.kt @@ -158,7 +158,7 @@ class AccountSettings( } } - if (!cookies.isNullOrEmpty()) { + if (!cookies.isNullOrBlank()) { bundle.putString(COOKIE_KEY, cookies) } @@ -265,7 +265,7 @@ class AccountSettings( // authentication settings fun credentials(): Credentials { - return if (accountManager.getUserData(account, KEY_AUTH_STATE).isNullOrEmpty()) { + return if (accountManager.getUserData(account, KEY_AUTH_STATE).isNullOrBlank()) { Credentials( accountManager.getUserData(account, KEY_USERNAME), accountManager.getPassword(account), diff --git a/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/AccountUtils.kt b/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/AccountUtils.kt index 17dfd311e5622ab0e76e997851ed96c36cb2f9d4..50fb93e15b25f02eebcfb27075b339cf48844116 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/AccountUtils.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/AccountUtils.kt @@ -186,8 +186,8 @@ object AccountUtils { fun isLoggedInWithMurenaSso(context: Context, account: Account): Boolean { val accountManager = AccountManager.get(context) - val hasAuthStateData = accountManager.getUserData(account, AccountSettings.KEY_AUTH_STATE) != null - val isPasswordNull = accountManager.getPassword(account).isNullOrEmpty() + val hasAuthStateData = !accountManager.getUserData(account, AccountSettings.KEY_AUTH_STATE).isNullOrBlank() + val isPasswordNull = accountManager.getPassword(account).isNullOrBlank() return isPasswordNull && hasAuthStateData } diff --git a/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/ContactsSyncManager.kt b/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/ContactsSyncManager.kt index 33982fd447e3e29e816f49c68be968c8aa8ad3f6..56fff7b1dcc6f6955b5822067a3453b7bf705c8b 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/ContactsSyncManager.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/ContactsSyncManager.kt @@ -409,7 +409,7 @@ class ContactsSyncManager( .get() .url(httpUrl) - if (!accessToken.isNullOrEmpty()) { + if (!accessToken.isNullOrBlank()) { requestBuilder.header("Authorization", "Bearer $accessToken") } diff --git a/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/DefaultAccountAuthenticatorService.kt b/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/DefaultAccountAuthenticatorService.kt index 16adca03594c599a969c3e46ec26cd7ab4df36f9..cf75304e50f399fdadf2020e1e408a044aa909bf 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/DefaultAccountAuthenticatorService.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/syncadapter/DefaultAccountAuthenticatorService.kt @@ -182,6 +182,9 @@ abstract class DefaultAccountAuthenticatorService : Service(), OnAccountsUpdateL ): Bundle? { val accountManager = AccountManager.get(context) val authStateString = accountManager.getUserData(account, AccountSettings.KEY_AUTH_STATE) ?: return null + if (authStateString.isBlank()) { + return null + } val authState = AuthState.jsonDeserialize(authStateString) diff --git a/app/src/main/kotlin/at/bitfire/davdroid/ui/ShowUrlActivity.kt b/app/src/main/kotlin/at/bitfire/davdroid/ui/ShowUrlActivity.kt index 728393835512ed3014c609464f50352b5b056bfb..1e7632601e1ee48f18fe614172e8637ae4012151 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/ui/ShowUrlActivity.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/ui/ShowUrlActivity.kt @@ -33,7 +33,7 @@ class ShowUrlActivity : AppCompatActivity() { val url = intent.getStringExtra(URL) - if (url.isNullOrEmpty()) { + if (url.isNullOrBlank()) { finish() return } diff --git a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/AccountDetailsFragment.kt b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/AccountDetailsFragment.kt index 9a92e7699eb2ec44f940ab0cbc223c8d1170a46e..395c2d0cb123c311e382470d42bab7a5e164e669 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/AccountDetailsFragment.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/AccountDetailsFragment.kt @@ -226,7 +226,7 @@ class AccountDetailsFragment : Fragment() { private fun handlePostMurenaSsoMigrationOperations() { val authState = requireActivity().intent.getStringExtra(LoginActivity.AUTH_STATE) - val isMigratedToMurenaSso = !authState.isNullOrEmpty() + val isMigratedToMurenaSso = !authState.isNullOrBlank() if (isMigratedToMurenaSso) { stopMurenaSsoMigrationService() @@ -378,13 +378,15 @@ class AccountDetailsFragment : Fragment() { } } - if (!credentials?.authState?.accessToken.isNullOrEmpty()) { - accountManager.setAuthToken(account, Constants.AUTH_TOKEN_TYPE, credentials?.authState?.accessToken) + if (credentials?.authState != null && !credentials?.authState?.accessToken.isNullOrBlank()) { + accountManager.setAuthToken(account, Constants.AUTH_TOKEN_TYPE, + credentials?.authState?.accessToken + ) } var pass: String? = null - if (!credentials?.password.isNullOrEmpty()) { + if (!credentials?.password.isNullOrBlank()) { pass = credentials?.password } diff --git a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/DefaultLoginCredentialsFragment.kt b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/DefaultLoginCredentialsFragment.kt index b76cebe6cba66ba2eb8dd4c8794a8a211992cc8b..5b65b4ec9051318ccf5a307027398324cd48a247 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/DefaultLoginCredentialsFragment.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/DefaultLoginCredentialsFragment.kt @@ -113,7 +113,7 @@ class DefaultLoginCredentialsFragment : Fragment() { fun validatePassword(): String? { model.passwordError.value = null val password = model.password.value - if (password.isNullOrEmpty()) { + if (password.isNullOrBlank()) { valid = false model.passwordError.value = getString(R.string.login_password_required) } @@ -149,7 +149,7 @@ class DefaultLoginCredentialsFragment : Fragment() { model.usernameError.value = null val username = model.username.value - if (username.isNullOrEmpty()) { + if (username.isNullOrBlank()) { valid = false model.usernameError.value = getString(R.string.login_user_name_required) } @@ -177,7 +177,7 @@ class DefaultLoginCredentialsFragment : Fragment() { val password = model.password.value if (model.loginUseUsernamePassword.value == true) { - if (username.isNullOrEmpty()) { + if (username.isNullOrBlank()) { valid = false model.usernameError.value = getString(R.string.login_user_name_required) } diff --git a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/EeloAuthenticatorFragment.kt b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/EeloAuthenticatorFragment.kt index 50d1b90e2d2f6079dae2693743f7b22c231c99fa..56c1d817eb02afc1f91427c264beb549b5b4310d 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/EeloAuthenticatorFragment.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/EeloAuthenticatorFragment.kt @@ -192,7 +192,7 @@ class EeloAuthenticatorFragment : Fragment() { private fun computeDomain(username: CharSequence?) : String { var domain = "https://${Constants.EELO_SYNC_HOST}" - if (!username.isNullOrEmpty() && username.toString().contains("@")) { + if (!username.isNullOrBlank() && username.toString().contains("@")) { var dns = username.toString().substringAfter("@") if (dns == Constants.E_SYNC_URL) { dns = Constants.EELO_SYNC_HOST diff --git a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/OpenIdAuthenticationViewModel.kt b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/OpenIdAuthenticationViewModel.kt index f777a8d805919302b1940b0e8164318cbfa33988..bb2d794e4ae02e4558d75732ce61ce04740462eb 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/OpenIdAuthenticationViewModel.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/OpenIdAuthenticationViewModel.kt @@ -84,6 +84,10 @@ class OpenIdAuthenticationViewModel(application: Application) : AndroidViewModel intent.getStringExtra(LoginActivity.AUTH_STATE) ?: return OpenIdAuthStateSetupState.SET_UP_FAILED + if (authStateString.isBlank()) { + return OpenIdAuthStateSetupState.SET_UP_FAILED + } + authState = AuthState.jsonDeserialize(authStateString) if (authState == null) { diff --git a/app/src/main/kotlin/at/bitfire/davdroid/webdav/CredentialsStore.kt b/app/src/main/kotlin/at/bitfire/davdroid/webdav/CredentialsStore.kt index 6f98426d25346993b01540a50464b105094c0935..4082ba897bd24deab547ffad6b2ad3b8c5210b0a 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/webdav/CredentialsStore.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/webdav/CredentialsStore.kt @@ -44,7 +44,7 @@ class CredentialsStore(context: Context) { return null val authStateString = prefs.getString(keyName(mountId, AUTH_STATE), null) - val authState = if (authStateString != null) AuthState.jsonDeserialize(authStateString) else null + val authState = if (!authStateString.isNullOrBlank()) AuthState.jsonDeserialize(authStateString) else null return Credentials( prefs.getString(keyName(mountId, USER_NAME), null), diff --git a/app/src/main/kotlin/at/bitfire/davdroid/webdav/DavDocumentsProvider.kt b/app/src/main/kotlin/at/bitfire/davdroid/webdav/DavDocumentsProvider.kt index f2cc9ece2b65430daa38c82ae5959718f23d6e3f..42ec613a37531c7f66ab4dd1210908a835729c30 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/webdav/DavDocumentsProvider.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/webdav/DavDocumentsProvider.kt @@ -463,8 +463,6 @@ class DavDocumentsProvider: DocumentsProvider() { } val fileInfo = headResponseCache.get(doc) { - val accessToken = credentialsStore.getCredentials(doc.mountId)?.authState?.accessToken - val deferredFileInfo = executor.submit(HeadInfoDownloader(client, url)) signal?.setOnCancelListener { deferredFileInfo.cancel(true) @@ -481,8 +479,6 @@ class DavDocumentsProvider: DocumentsProvider() { (fileInfo.eTag != null || fileInfo.lastModified != null) && // we need a method to determine whether the document has changed during access fileInfo.supportsPartial != false // WebDAV server must support random access ) { - val accessToken = credentialsStore.getCredentials(doc.mountId)?.authState?.accessToken - val accessor = RandomAccessCallback.Wrapper(ourContext, client, url, doc.mimeType, fileInfo, signal) storageManager.openProxyFileDescriptor(modeFlags, accessor, accessor.workerHandler) } else {