diff --git a/app/build.gradle b/app/build.gradle index a02367c1..bc714a21 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.hegocre.nextcloudpasswords" minSdk 24 targetSdk 34 - versionCode 17 - versionName "1.0.5" + versionCode 18 + versionName "1.0.6" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/java/com/hegocre/nextcloudpasswords/api/ApiController.kt b/app/src/main/java/com/hegocre/nextcloudpasswords/api/ApiController.kt index c0fd0820..cbaa148f 100644 --- a/app/src/main/java/com/hegocre/nextcloudpasswords/api/ApiController.kt +++ b/app/src/main/java/com/hegocre/nextcloudpasswords/api/ApiController.kt @@ -26,6 +26,7 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext /** * Class with methods used to interact with [the API](https://git.mdns.eu/nextcloud/passwords/-/wikis/Developers/Api) @@ -127,7 +128,7 @@ class ApiController private constructor(context: Context) { PWDv1ChallengeMasterKeyNeededException::class, PWDv1ChallengeMasterKeyInvalidException::class ) - suspend fun openSession(masterPassword: String?): Boolean { + suspend fun openSession(masterPassword: String?): Boolean = withContext(Dispatchers.Default) { decryptCSEv1Keychain( preferencesManager.getCSEv1Keychain(), masterPassword @@ -165,13 +166,13 @@ class ApiController private constructor(context: Context) { ) } } - return false + return@withContext false } val secret = if (secretResult is Result.Success) { secretResult.data } else { - return if (secretResult is Result.Error && secretResult.code == Error.API_NO_CSE) { + return@withContext if (secretResult is Result.Error && secretResult.code == Error.API_NO_CSE) { // No encryption, we need no session // Clear old keychain, if CSE was disabled preferencesManager.setCSEv1Keychain(null) @@ -201,7 +202,7 @@ class ApiController private constructor(context: Context) { ) } } - return false + return@withContext false } preferencesManager.setCSEv1Keychain(encryptedKeychainJson) @@ -215,7 +216,7 @@ class ApiController private constructor(context: Context) { sessionCode = newSessionCode _sessionOpen.emit(true) - return true + return@withContext true } /** diff --git a/app/src/main/java/com/hegocre/nextcloudpasswords/api/FoldersApi.kt b/app/src/main/java/com/hegocre/nextcloudpasswords/api/FoldersApi.kt index 760516a9..64ead07b 100644 --- a/app/src/main/java/com/hegocre/nextcloudpasswords/api/FoldersApi.kt +++ b/app/src/main/java/com/hegocre/nextcloudpasswords/api/FoldersApi.kt @@ -46,7 +46,7 @@ class FoldersApi private constructor(private var server: Server) { val code = apiResponse.code - val body = apiResponse.body?.string() + val body = withContext(Dispatchers.IO) { apiResponse.body?.string() } withContext(Dispatchers.IO) { apiResponse.close() } @@ -107,9 +107,7 @@ class FoldersApi private constructor(private var server: Server) { return Result.Error(Error.API_BAD_RESPONSE) } - withContext(Dispatchers.Default) { - Result.Success(Unit) - } + Result.Success(Unit) } catch (e: SocketTimeoutException) { if (BuildConfig.DEBUG) { e.printStackTrace() @@ -161,9 +159,7 @@ class FoldersApi private constructor(private var server: Server) { return Result.Error(Error.API_BAD_RESPONSE) } - withContext(Dispatchers.Default) { - Result.Success(Unit) - } + Result.Success(Unit) } catch (e: SocketTimeoutException) { if (BuildConfig.DEBUG) { e.printStackTrace() @@ -214,9 +210,7 @@ class FoldersApi private constructor(private var server: Server) { return Result.Error(Error.API_BAD_RESPONSE) } - withContext(Dispatchers.Default) { - Result.Success(Unit) - } + Result.Success(Unit) } catch (e: SocketTimeoutException) { if (BuildConfig.DEBUG) { e.printStackTrace() diff --git a/app/src/main/java/com/hegocre/nextcloudpasswords/api/PasswordsApi.kt b/app/src/main/java/com/hegocre/nextcloudpasswords/api/PasswordsApi.kt index 797c5385..96ce013f 100644 --- a/app/src/main/java/com/hegocre/nextcloudpasswords/api/PasswordsApi.kt +++ b/app/src/main/java/com/hegocre/nextcloudpasswords/api/PasswordsApi.kt @@ -45,7 +45,7 @@ class PasswordsApi private constructor(private var server: Server) { } val code = apiResponse.code - val body = apiResponse.body?.string() + val body = withContext(Dispatchers.IO) { apiResponse.body?.string() } withContext(Dispatchers.IO) { apiResponse.close() } @@ -108,9 +108,7 @@ class PasswordsApi private constructor(private var server: Server) { return Result.Error(Error.API_BAD_RESPONSE) } - withContext(Dispatchers.Default) { - Result.Success(Unit) - } + Result.Success(Unit) } catch (e: SocketTimeoutException) { if (BuildConfig.DEBUG) { e.printStackTrace() @@ -162,9 +160,7 @@ class PasswordsApi private constructor(private var server: Server) { return Result.Error(Error.API_BAD_RESPONSE) } - withContext(Dispatchers.Default) { - Result.Success(Unit) - } + Result.Success(Unit) } catch (e: SocketTimeoutException) { if (BuildConfig.DEBUG) { e.printStackTrace() @@ -215,9 +211,7 @@ class PasswordsApi private constructor(private var server: Server) { return Result.Error(Error.API_BAD_RESPONSE) } - withContext(Dispatchers.Default) { - Result.Success(Unit) - } + Result.Success(Unit) } catch (e: SocketTimeoutException) { if (BuildConfig.DEBUG) { e.printStackTrace() diff --git a/app/src/main/java/com/hegocre/nextcloudpasswords/api/ServiceApi.kt b/app/src/main/java/com/hegocre/nextcloudpasswords/api/ServiceApi.kt index fbba84f7..8137ae49 100644 --- a/app/src/main/java/com/hegocre/nextcloudpasswords/api/ServiceApi.kt +++ b/app/src/main/java/com/hegocre/nextcloudpasswords/api/ServiceApi.kt @@ -39,7 +39,7 @@ class ServiceApi private constructor(private val server: Server) { } val code = apiResponse.code - val body = apiResponse.body?.string() + val body = withContext(Dispatchers.IO) { apiResponse.body?.string() } withContext(Dispatchers.IO) { apiResponse.close() } diff --git a/app/src/main/java/com/hegocre/nextcloudpasswords/api/SessionApi.kt b/app/src/main/java/com/hegocre/nextcloudpasswords/api/SessionApi.kt index c3dbe20d..85d319b9 100644 --- a/app/src/main/java/com/hegocre/nextcloudpasswords/api/SessionApi.kt +++ b/app/src/main/java/com/hegocre/nextcloudpasswords/api/SessionApi.kt @@ -51,7 +51,7 @@ class SessionApi private constructor(private var server: Server) { } val code = apiResponse.code - val body = apiResponse.body?.string() + val body = withContext(Dispatchers.IO) { apiResponse.body?.string() } withContext(Dispatchers.IO) { apiResponse.close() @@ -100,7 +100,7 @@ class SessionApi private constructor(private var server: Server) { ) } - val body = apiResponse.body?.string() + val body = withContext(Dispatchers.IO) { apiResponse.body?.string() } val code = apiResponse.code val xSessionCode = apiResponse.header("x-api-session", null) diff --git a/app/src/main/java/com/hegocre/nextcloudpasswords/api/SettingsApi.kt b/app/src/main/java/com/hegocre/nextcloudpasswords/api/SettingsApi.kt index ba49c786..dc0e5157 100644 --- a/app/src/main/java/com/hegocre/nextcloudpasswords/api/SettingsApi.kt +++ b/app/src/main/java/com/hegocre/nextcloudpasswords/api/SettingsApi.kt @@ -31,7 +31,7 @@ class SettingsApi private constructor(private val server: Server) { } val code = apiResponse.code - val body = apiResponse.body?.string() + val body = withContext(Dispatchers.IO) { apiResponse.body?.string() } withContext(Dispatchers.IO) { apiResponse.close() diff --git a/app/src/main/java/com/hegocre/nextcloudpasswords/utils/OkHttpRequest.kt b/app/src/main/java/com/hegocre/nextcloudpasswords/utils/OkHttpRequest.kt index 001b459b..0978243d 100644 --- a/app/src/main/java/com/hegocre/nextcloudpasswords/utils/OkHttpRequest.kt +++ b/app/src/main/java/com/hegocre/nextcloudpasswords/utils/OkHttpRequest.kt @@ -191,8 +191,11 @@ class OkHttpRequest private constructor() { val JSON = "application/json; charset=utf-8".toMediaTypeOrNull() fun getInstance(): OkHttpRequest { - if (instance == null) instance = OkHttpRequest() - return instance as OkHttpRequest + synchronized(this) { + if (instance == null) instance = OkHttpRequest() + + return instance as OkHttpRequest + } } } } \ No newline at end of file