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