From e5ef9f63070c038c9cfbb8667ed463cadabf9ad7 Mon Sep 17 00:00:00 2001 From: "a.mochalov" Date: Mon, 14 Mar 2022 17:23:30 +0300 Subject: [PATCH] version 3.5.1 --- .../main/java/com/vk/sdk/api/NewApiRequest.kt | 7 +- core/src/main/AndroidManifest.xml | 27 ------- core/src/main/java/com/vk/api/sdk/VK.kt | 29 +------ .../java/com/vk/api/sdk/VKApiCallListener.kt | 28 +------ .../main/java/com/vk/api/sdk/VKApiCallback.kt | 27 ------- .../main/java/com/vk/api/sdk/VKApiConfig.kt | 78 +++++++++---------- .../java/com/vk/api/sdk/VKApiCredentials.kt | 27 ------- .../sdk/VKApiIllegalCredentialsListener.kt | 27 ------- .../com/vk/api/sdk/VKApiJSONResponseParser.kt | 17 ++++ .../main/java/com/vk/api/sdk/VKApiManager.kt | 44 +++-------- .../com/vk/api/sdk/VKApiProgressListener.kt | 27 ------- .../com/vk/api/sdk/VKApiResponseValidator.kt | 27 ------- .../com/vk/api/sdk/VKApiValidationHandler.kt | 51 +++++------- .../vk/api/sdk/VKDefaultValidationHandler.kt | 27 ------- core/src/main/java/com/vk/api/sdk/VKHost.kt | 26 +++++++ .../java/com/vk/api/sdk/VKHttpPostCall.kt | 27 ------- .../java/com/vk/api/sdk/VKKeyValueStorage.kt | 29 +------ .../main/java/com/vk/api/sdk/VKMethodCall.kt | 27 ------- .../java/com/vk/api/sdk/VKOkHttpProvider.kt | 27 ------- .../api/sdk/VKPreferencesKeyValueStorage.kt | 27 ------- .../main/java/com/vk/api/sdk/VKScheduler.kt | 27 ------- .../com/vk/api/sdk/VKTokenExpiredHandler.kt | 27 ------- core/src/main/java/com/vk/api/sdk/VkResult.kt | 27 ------- .../java/com/vk/api/sdk/auth/VKAccessToken.kt | 29 +------ .../com/vk/api/sdk/auth/VKAuthCallback.kt | 27 ------- .../java/com/vk/api/sdk/auth/VKAuthManager.kt | 27 ------- .../java/com/vk/api/sdk/auth/VKAuthParams.kt | 27 ------- .../java/com/vk/api/sdk/auth/VKAuthResult.kt | 27 ------- .../vk/api/sdk/auth/VKAuthResultContract.kt | 27 ------- .../vk/api/sdk/auth/VKAuthenticationResult.kt | 29 +------ .../main/java/com/vk/api/sdk/auth/VKScope.kt | 27 ------- .../vk/api/sdk/browser/BrowserDescriptor.java | 27 ------- .../vk/api/sdk/browser/BrowserMatcher.java | 29 +------ .../vk/api/sdk/browser/BrowserSelector.java | 27 ------- .../java/com/vk/api/sdk/browser/Browsers.java | 27 ------- .../vk/api/sdk/browser/DelimitedVersion.java | 27 ------- .../com/vk/api/sdk/browser/VersionRange.java | 27 ------- .../sdk/browser/VersionedBrowserMatcher.java | 28 ------- .../sdk/browser/WhiteListedBrowserHelper.java | 29 +------ .../sdk/chain/ApiMethodPriorityChainCall.kt | 27 ------- .../java/com/vk/api/sdk/chain/ChainArgs.kt | 27 ------- .../java/com/vk/api/sdk/chain/ChainCall.kt | 27 ------- .../com/vk/api/sdk/chain/HttpPostChainCall.kt | 40 ++-------- .../sdk/chain/InternalErrorRetryChainCall.kt | 27 ------- .../InvalidCredentialsObserverChainCall.kt | 27 ------- .../com/vk/api/sdk/chain/MethodChainCall.kt | 55 ++++--------- .../sdk/chain/RateLimitReachedChainCall.kt | 27 ------- .../com/vk/api/sdk/chain/RetryChainCall.kt | 27 ------- .../sdk/chain/TooManyRequestRetryChainCall.kt | 27 ------- .../sdk/chain/ValidationHandlerChainCall.kt | 45 ++++------- .../exceptions/IgnoredAccessTokenException.kt | 27 ------- .../exceptions/RateLimitReachedException.kt | 27 ------- .../com/vk/api/sdk/exceptions/VKApiCodes.kt | 28 +------ .../vk/api/sdk/exceptions/VKApiException.kt | 27 ------- .../sdk/exceptions/VKApiExecutionException.kt | 27 ------- .../VKApiIllegalResponseException.kt | 27 ------- .../vk/api/sdk/exceptions/VKAuthException.kt | 27 ------- .../VKInternalServerErrorException.kt | 27 ------- .../sdk/exceptions/VKLargeEntityException.kt | 27 ------- .../api/sdk/exceptions/VKLocalIOException.kt | 27 ------- .../com/vk/api/sdk/extensions/ContextExt.kt | 27 ------- .../vk/api/sdk/extensions/InputStreamExt.kt | 13 ++++ .../com/vk/api/sdk/internal/ApiCommand.kt | 27 ------- .../vk/api/sdk/internal/HttpMultipartEntry.kt | 27 ------- .../com/vk/api/sdk/internal/HttpStatus.kt | 27 ------- .../java/com/vk/api/sdk/internal/JsonUtils.kt | 27 ------- .../api/sdk/internal/QueryStringGenerator.kt | 27 ------- .../com/vk/api/sdk/internal/VKErrorUtils.kt | 44 ++--------- .../com/vk/api/sdk/internal/VKInitProvider.kt | 27 ------- .../com/vk/api/sdk/internal/Validation.kt | 27 ------- .../vk/api/sdk/listeners/ApiCallListener.kt | 11 +++ .../CompositeRequestEventListener.kt | 36 +++++++++ .../vk/api/sdk/okhttp/FileFullRequestBody.kt | 27 ------- .../vk/api/sdk/okhttp/LogLevelRequestTag.kt | 27 ------- .../vk/api/sdk/okhttp/LoggingInterceptor.kt | 27 ------- .../com/vk/api/sdk/okhttp/OkHttpExecutor.kt | 76 +++++++----------- .../vk/api/sdk/okhttp/OkHttpExecutorConfig.kt | 34 ++------ .../com/vk/api/sdk/okhttp/OkHttpMethodCall.kt | 27 ------- .../com/vk/api/sdk/okhttp/OkHttpPostCall.kt | 27 ------- .../vk/api/sdk/okhttp/ProgressRequestBody.kt | 27 ------- .../java/com/vk/api/sdk/okhttp/RequestTag.kt | 27 ------- .../vk/api/sdk/okhttp/UserAgentInterceptor.kt | 27 ------- .../vk/api/sdk/requests/VKBooleanRequest.kt | 29 +------ .../java/com/vk/api/sdk/requests/VKRequest.kt | 48 ++---------- .../response/DefaultJsonResponseConverter.kt | 26 +++++++ .../sdk/response/JsonResponseTypeConverter.kt | 30 +++++++ .../sdk/response/ResponseBodyJsonConverter.kt | 53 +++++++++++++ .../com/vk/api/sdk/ui/VKBaseAuthActivity.kt | 27 ------- .../com/vk/api/sdk/ui/VKCaptchaActivity.kt | 27 ------- .../vk/api/sdk/ui/VKConfirmationActivity.kt | 27 ------- .../vk/api/sdk/ui/VKWebViewAuthActivity.kt | 27 ------- .../main/java/com/vk/api/sdk/utils/ApiExt.kt | 38 ++------- .../api/sdk/utils/ApiMethodPriorityBackoff.kt | 27 ------- .../com/vk/api/sdk/utils/DefaultUserAgent.kt | 27 ------- .../vk/api/sdk/utils/ExponentialBackoff.kt | 27 ------- .../vk/api/sdk/utils/RateLimitTokenBackoff.kt | 29 +------ .../StartUpMethodPriorityBackoffBaseImpl.kt | 27 ------- .../vk/api/sdk/utils/ThreadLocalDelegate.kt | 29 +------ .../com/vk/api/sdk/utils/UserAgentProvider.kt | 27 ------- .../java/com/vk/api/sdk/utils/VKLoader.kt | 27 ------- .../com/vk/api/sdk/utils/VKUrlResolver.kt | 29 +------ .../main/java/com/vk/api/sdk/utils/VKUtils.kt | 39 +--------- .../vk/api/sdk/utils/VKValidationLocker.kt | 27 ------- core/src/main/res/values/strings.xml | 4 +- .../java/com/vk/api/sdk/ValidationLockTest.kt | 63 +++++++++++++++ .../vk/sdk/sample/requests/VKUsersCommand.kt | 8 +- .../sdk/sample/requests/VKWallPostCommand.kt | 26 +++---- .../app/src/main/res/values-ru/strings.xml | 1 - .../app/src/main/res/values-uz/strings.xml | 10 +++ samples/app/src/main/res/values/strings.xml | 1 + 110 files changed, 485 insertions(+), 2676 deletions(-) create mode 100644 core/src/main/java/com/vk/api/sdk/VKApiJSONResponseParser.kt create mode 100644 core/src/main/java/com/vk/api/sdk/VKHost.kt create mode 100644 core/src/main/java/com/vk/api/sdk/extensions/InputStreamExt.kt create mode 100644 core/src/main/java/com/vk/api/sdk/listeners/ApiCallListener.kt create mode 100644 core/src/main/java/com/vk/api/sdk/listeners/CompositeRequestEventListener.kt create mode 100644 core/src/main/java/com/vk/api/sdk/response/DefaultJsonResponseConverter.kt create mode 100644 core/src/main/java/com/vk/api/sdk/response/JsonResponseTypeConverter.kt create mode 100644 core/src/main/java/com/vk/api/sdk/response/ResponseBodyJsonConverter.kt create mode 100644 core/src/test/java/com/vk/api/sdk/ValidationLockTest.kt create mode 100644 samples/app/src/main/res/values-uz/strings.xml diff --git a/api/src/main/java/com/vk/sdk/api/NewApiRequest.kt b/api/src/main/java/com/vk/sdk/api/NewApiRequest.kt index c924ecb1ae..3bc2bda2fc 100644 --- a/api/src/main/java/com/vk/sdk/api/NewApiRequest.kt +++ b/api/src/main/java/com/vk/sdk/api/NewApiRequest.kt @@ -37,14 +37,15 @@ import kotlin.Int import kotlin.Long import kotlin.String import kotlin.collections.List +import org.json.JSONObject internal class NewApiRequest internal constructor( methodName: String, parser: ApiResponseParser ) : VKRequest(methodName, requestApiVersion = "5.131"), ApiResponseParser by parser { - override fun parse(response: String): T { - val responseJson = JsonParser.parseString(response).asJsonObject.get("response") - return parseResponse(responseJson) + override fun parse(responseJson: JSONObject): T { + val response = JsonParser.parseString(responseJson.toString()).asJsonObject.get("response") + return parseResponse(response) } fun addParam( diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml index a5a6aa6215..857c7974b5 100644 --- a/core/src/main/AndroidManifest.xml +++ b/core/src/main/AndroidManifest.xml @@ -1,30 +1,3 @@ - - - Retry + + Retry Please enter the code from the picture Please confirm Login error occurred diff --git a/core/src/test/java/com/vk/api/sdk/ValidationLockTest.kt b/core/src/test/java/com/vk/api/sdk/ValidationLockTest.kt new file mode 100644 index 0000000000..f17b052f4e --- /dev/null +++ b/core/src/test/java/com/vk/api/sdk/ValidationLockTest.kt @@ -0,0 +1,63 @@ +package com.vk.api.sdk + +import org.junit.Assert +import org.junit.Test +import java.util.concurrent.Callable +import java.util.concurrent.Executors +import java.util.concurrent.Future +import java.util.concurrent.TimeUnit +import java.util.concurrent.TimeoutException + + +class ValidationLockTest { + + private val executor = Executors.newFixedThreadPool(3) + + @Test + fun awaitNotAcquired() { + val validationLock = VKApiValidationHandler.ValidationLock() + val future: Future = executor.submit(Callable { + validationLock.await() + 1 + }) + Assert.assertEquals(1, future.get(1000, TimeUnit.MILLISECONDS)) + + } + + @Test + fun awaitAcquired() { + val validationLock = VKApiValidationHandler.ValidationLock() + validationLock.acquire() + val future: Future = executor.submit(Callable { + validationLock.await() + 1 + }) + val future2 = executor.submit(Callable { + future.get(1000, TimeUnit.MILLISECONDS) + }) + validationLock.release() + Assert.assertEquals(1, future2.get(1000, TimeUnit.MILLISECONDS)) + } + + @Test + fun awaitAcquiredNotReleased() { + val validationLock = VKApiValidationHandler.ValidationLock() + validationLock.acquire() + val future: Future = executor.submit(Callable { + validationLock.await() + 1 + }) + try { + future.get(100, TimeUnit.MILLISECONDS) + } catch (ex: Throwable) { + Assert.assertEquals(TimeoutException::class.java, ex::class.java) + } + } + + @Test + fun doubleAcquire() { + val validationLock = VKApiValidationHandler.ValidationLock() + Assert.assertTrue(validationLock.acquire()) + Assert.assertFalse(validationLock.acquire()) + } +} \ No newline at end of file diff --git a/samples/app/src/main/java/com/vk/sdk/sample/requests/VKUsersCommand.kt b/samples/app/src/main/java/com/vk/sdk/sample/requests/VKUsersCommand.kt index 0b1b0e22ed..3b88b2e580 100644 --- a/samples/app/src/main/java/com/vk/sdk/sample/requests/VKUsersCommand.kt +++ b/samples/app/src/main/java/com/vk/sdk/sample/requests/VKUsersCommand.kt @@ -24,8 +24,8 @@ package com.vk.sdk.sample.requests +import com.vk.api.sdk.VKApiJSONResponseParser import com.vk.api.sdk.VKApiManager -import com.vk.api.sdk.VKApiResponseParser import com.vk.api.sdk.VKMethodCall import com.vk.api.sdk.exceptions.VKApiIllegalResponseException import com.vk.api.sdk.internal.ApiCommand @@ -64,10 +64,10 @@ class VKUsersCommand(private val uids: IntArray = intArrayOf()): ApiCommand> { - override fun parse(response: String): List { + private class ResponseApiParser : VKApiJSONResponseParser> { + override fun parse(responseJson: JSONObject): List { try { - val ja = JSONObject(response).getJSONArray("response") + val ja = responseJson.getJSONArray("response") val r = ArrayList(ja.length()) for (i in 0 until ja.length()) { val user = VKUser.parse(ja.getJSONObject(i)) diff --git a/samples/app/src/main/java/com/vk/sdk/sample/requests/VKWallPostCommand.kt b/samples/app/src/main/java/com/vk/sdk/sample/requests/VKWallPostCommand.kt index 381bdc4b0a..65bfbc14a5 100644 --- a/samples/app/src/main/java/com/vk/sdk/sample/requests/VKWallPostCommand.kt +++ b/samples/app/src/main/java/com/vk/sdk/sample/requests/VKWallPostCommand.kt @@ -25,8 +25,8 @@ package com.vk.sdk.sample.requests import android.net.Uri +import com.vk.api.sdk.VKApiJSONResponseParser import com.vk.api.sdk.VKApiManager -import com.vk.api.sdk.VKApiResponseParser import com.vk.api.sdk.VKHttpPostCall import com.vk.api.sdk.VKMethodCall import com.vk.api.sdk.exceptions.VKApiIllegalResponseException @@ -101,20 +101,20 @@ class VKWallPostCommand(private val message: String? = null, const val RETRY_COUNT = 3 } - private class ResponseApiParser : VKApiResponseParser { - override fun parse(response: String): Int { + private class ResponseApiParser : VKApiJSONResponseParser { + override fun parse(responseJson: JSONObject): Int { try { - return JSONObject(response).getJSONObject("response").getInt("post_id") + return responseJson.getJSONObject("response").getInt("post_id") } catch (ex: JSONException) { throw VKApiIllegalResponseException(ex) } } } - private class ServerUploadInfoParser : VKApiResponseParser { - override fun parse(response: String): VKServerUploadInfo{ + private class ServerUploadInfoParser : VKApiJSONResponseParser { + override fun parse(responseJson: JSONObject): VKServerUploadInfo{ try { - val joResponse = JSONObject(response).getJSONObject("response") + val joResponse = responseJson.getJSONObject("response") return VKServerUploadInfo( uploadUrl = joResponse.getString("upload_url"), albumId = joResponse.getInt("album_id"), @@ -125,10 +125,10 @@ class VKWallPostCommand(private val message: String? = null, } } - private class FileUploadInfoParser: VKApiResponseParser { - override fun parse(response: String): VKFileUploadInfo{ + private class FileUploadInfoParser: VKApiJSONResponseParser { + override fun parse(responseJson: JSONObject): VKFileUploadInfo{ try { - val joResponse = JSONObject(response) + val joResponse = responseJson return VKFileUploadInfo( server = joResponse.getString("server"), photo = joResponse.getString("photo"), @@ -140,10 +140,10 @@ class VKWallPostCommand(private val message: String? = null, } } - private class SaveInfoParser: VKApiResponseParser { - override fun parse(response: String): VKSaveInfo { + private class SaveInfoParser: VKApiJSONResponseParser { + override fun parse(responseJson: JSONObject): VKSaveInfo { try { - val joResponse = JSONObject(response).getJSONArray("response").getJSONObject(0) + val joResponse = responseJson.getJSONArray("response").getJSONObject(0) return VKSaveInfo( id = joResponse.getInt("id"), albumId = joResponse.getInt("album_id"), diff --git a/samples/app/src/main/res/values-ru/strings.xml b/samples/app/src/main/res/values-ru/strings.xml index 08ef791f66..8b2c03c6ad 100644 --- a/samples/app/src/main/res/values-ru/strings.xml +++ b/samples/app/src/main/res/values-ru/strings.xml @@ -7,5 +7,4 @@ Запись опубликована Ошибка подключения Неизвестная ошибка, попробуйте позже - VK SDK sample diff --git a/samples/app/src/main/res/values-uz/strings.xml b/samples/app/src/main/res/values-uz/strings.xml new file mode 100644 index 0000000000..71feeee50d --- /dev/null +++ b/samples/app/src/main/res/values-uz/strings.xml @@ -0,0 +1,10 @@ + + + Войти + Выйти + Отправить на стену + Ваше сообщение + Запись опубликована + Bog\‘lanish xatosi + Noma\'lum xato, kechroq qayta urunib ko\‘ring + diff --git a/samples/app/src/main/res/values/strings.xml b/samples/app/src/main/res/values/strings.xml index 3e787738df..4972f64910 100644 --- a/samples/app/src/main/res/values/strings.xml +++ b/samples/app/src/main/res/values/strings.xml @@ -7,4 +7,5 @@ Запись опубликована Connection error Unknown error. Try again later. + VK SDK sample