Skip to content

Commit

Permalink
version 2.2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Oleg Smirnov committed Nov 15, 2019
1 parent 72bede5 commit 6faddf9
Show file tree
Hide file tree
Showing 20 changed files with 111 additions and 89 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ You can add next maven dependency in your project:

You may also need to add the following to your `project/build.gradle` file.

`implementation 'com.vk:androidsdk:2.1.1`
`implementation 'com.vk:androidsdk:2.2.0`

For example, your `app/build.gradle` script will contains such dependencies:
```
Expand Down
24 changes: 12 additions & 12 deletions dependencies.gradle
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
ext.sdkVersions = [
code : '12',
name : '2.1.1',
code : '14',
name : '2.2.0',

minSdk : 16,
targetSdk : 26,
targetSdk : 28,
compileSdk : '28',
buildTools : '27.0.3',
buildTools : '28.0.3',

kotlin : '1.3.10',
supportLibs : '27.1.1',
okHttp : '3.11.0',
kotlin : '1.3.41',
androidX : '1.0.0',
okHttp : '3.12.1',

picasso : '2.71828',

androidGradlePlugin : '3.2.1',
androidGradlePlugin : '3.5.0',
]

ext.sdkLibraries = [
Expand All @@ -25,10 +25,10 @@ ext.sdkLibraries = [
]

ext.sdkLibrariesSupport = [
supportV4 : "com.android.support:support-v4:$sdkVersions.supportLibs",
support : "com.android.support:support-v13:$sdkVersions.supportLibs",
appCompat : "com.android.support:appcompat-v7:$sdkVersions.supportLibs",
recyclerView : "com.android.support:recyclerview-v7:$sdkVersions.supportLibs",
appCompat : "androidx.appcompat:appcompat:$sdkVersions.androidX",
recyclerView : "androidx.recyclerview:recyclerview:$sdkVersions.androidX",
supportV4 : "androidx.legacy:legacy-support-v4:$sdkVersions.androidX",
support : "androidx.legacy:legacy-support-v13:$sdkVersions.androidX",
]

ext.sdkGradlePlugins = [
Expand Down
13 changes: 6 additions & 7 deletions samples/app/src/main/java/com/vk/sdk/sample/UserActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,12 @@ import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.*
import androidx.recyclerview.widget.RecyclerView
import com.squareup.picasso.Picasso
import com.vk.api.sdk.VK
import com.vk.api.sdk.VKApiCallback
Expand Down Expand Up @@ -85,7 +84,7 @@ class UserActivity: Activity() {
}
}
}
override fun fail(error: VKApiExecutionException) {
override fun fail(error: Exception) {
Log.e(TAG, error.toString())
}
})
Expand All @@ -98,15 +97,15 @@ class UserActivity: Activity() {
showFriends(result)
}
}
override fun fail(error: VKApiExecutionException) {
override fun fail(error: Exception) {
Log.e(TAG, error.toString())
}
})
}

private fun showFriends(friends: List<VKUser>) {
val recyclerView = findViewById<RecyclerView>(R.id.friendsRV)
recyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
recyclerView.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)

val adapter = FriendsAdapter()
adapter.setData(friends)
Expand Down Expand Up @@ -143,13 +142,13 @@ class UserActivity: Activity() {
Toast.makeText(this@UserActivity, R.string.wall_ok, Toast.LENGTH_SHORT).show()
}

override fun fail(error: VKApiExecutionException) {
override fun fail(error: Exception) {
Log.e(TAG, error.toString())
}
})
}

inner class FriendsAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
inner class FriendsAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val friends: MutableList<VKUser> = arrayListOf()

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int)
Expand Down
2 changes: 1 addition & 1 deletion samples/app/src/main/res/layout/activity_user.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
android:layout_gravity="center"
android:background="@android:color/white"
android:textColor="@color/colorPrimary" />
<android.support.v7.widget.RecyclerView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/friendsRV"
android:layout_width="match_parent"
android:layout_height="150dp"
Expand Down
14 changes: 11 additions & 3 deletions vk-sdk-core/src/main/java/com/vk/api/sdk/VK.kt
Original file line number Diff line number Diff line change
Expand Up @@ -175,10 +175,10 @@ object VK {
VKScheduler.runOnMainThread(Runnable {
callback?.success(result)
})
} catch (e: VKApiExecutionException) {
} catch (e: Exception) {
VKScheduler.runOnMainThread(Runnable {
if (e.isInvalidCredentialsError) {
VK.handleTokenExpired()
if (e is VKApiExecutionException && e.isInvalidCredentialsError) {
handleTokenExpired()
}
callback?.fail(e)
})
Expand Down Expand Up @@ -206,6 +206,14 @@ object VK {
}
}

/**
* This method returns Application ID provided in the Manifest.
*/
@JvmStatic
fun getAppId(context: Context): Int {
return authManager.getAppId(context)
}

@JvmStatic
fun clearAccessToken(context: Context) {
authManager.getPreferences(context).edit().clear().apply()
Expand Down
4 changes: 1 addition & 3 deletions vk-sdk-core/src/main/java/com/vk/api/sdk/VKApiCallback.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,11 @@

package com.vk.api.sdk

import com.vk.api.sdk.exceptions.VKApiExecutionException

/**
* Callback for vk api requests
* Get response here from VK.execute
*/
interface VKApiCallback<in T> {
fun success(result: T)
fun fail(error: VKApiExecutionException)
fun fail(error: Exception)
}
11 changes: 0 additions & 11 deletions vk-sdk-core/src/main/java/com/vk/api/sdk/VKApiManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -65,17 +65,6 @@ open class VKApiManager(val config: VKApiConfig) {
return executeWithExceptionAdjust(cc)
}

fun <T> execute(call: OauthHttpUrlPostCall, parser: VKApiResponseParser<T>? = null): T {
var cc: ChainCall<T> = OAuthHttpUrlChainCall(this, executor, call, parser)
if (call.retryCountOnBackendError != 0) {
cc = InternalErrorRetryChainCall(this, call.retryCountOnBackendError, cc)
}
if (call.retryCountOnBackendError != 0) {
cc = ValidationHandlerChainCall(this, call.retryCountOnBackendError, cc)
}
return executeWithExceptionAdjust(cc)
}

protected open fun <T> wrapCall(call: VKMethodCall, chainCall: ChainCall<T>): ChainCall<T> {
var cc: ChainCall<T> = if (call.skipValidation) {
chainCall
Expand Down
7 changes: 6 additions & 1 deletion vk-sdk-core/src/main/java/com/vk/api/sdk/VKMethodCall.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ open class VKMethodCall {
private set
var args: MutableMap<String,String> = LinkedHashMap()
private set
var retryCount: Int = Int.MAX_VALUE
var retryCount: Int = DEFAULT_RETRY_COUNT
private set
var skipValidation: Boolean = false
private set
Expand All @@ -48,6 +48,7 @@ open class VKMethodCall {
open fun version(version: String) = apply { this.version = version }
open fun args(args: Map<String,String>) = apply { this.args.putAll(args) }
open fun args(key: String, value: String) = apply { this.args[key] = value }
open fun args(key: String, value: Boolean) = apply { this.args[key] = if (value) "1" else "0" }
open fun args(key: String, value: Any) = apply { this.args[key] = value.toString() }
open fun retryCount(count: Int) = apply { this.retryCount = count }
open fun skipValidation(skip: Boolean) = apply { this.skipValidation = skip }
Expand All @@ -70,4 +71,8 @@ open class VKMethodCall {
this.retryCount = b.retryCount
this.skipValidation = b.skipValidation
}

companion object {
private const val DEFAULT_RETRY_COUNT = 4
}
}
10 changes: 6 additions & 4 deletions vk-sdk-core/src/main/java/com/vk/api/sdk/VKScheduler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.vk.api.sdk

import android.os.Handler
import android.os.Looper
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import java.util.concurrent.atomic.AtomicInteger

Expand All @@ -19,10 +20,11 @@ internal object VKScheduler {
* Intended to perform network requests: makes new thread every time if cached threads are busy
* or reuse idle thread.
*/
@JvmField
val networkExecutor = Executors.newFixedThreadPool(NETWORK_THREADS_COUNT) { runnable ->
Thread(runnable, "vk-network-thread-${counter.getAndIncrement()}")
}!!
val networkExecutor: ExecutorService by lazy {
Executors.newFixedThreadPool(NETWORK_THREADS_COUNT) { runnable ->
Thread(runnable, "vk-api-network-thread-${counter.getAndIncrement()}")
}
}

@JvmOverloads
@JvmStatic
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ class VKAccessToken(params: Map<String, String?>) {
return null
}
val vkTokenBundle = bundle.getBundle(VK_ACCESS_TOKEN_KEY) ?: return null
val tokenParams = HashMap<String, String>()
val tokenParams = HashMap<String, String?>()
for (key in vkTokenBundle.keySet()) {
tokenParams[key] = vkTokenBundle.getString(key)
}
Expand All @@ -119,7 +119,7 @@ class VKAccessToken(params: Map<String, String?>) {
if (preferences == null) {
return null
}
val tokenParams = HashMap<String, String>()
val tokenParams = HashMap<String, String?>()
for (key in preferences.all.keys) {
tokenParams[key] = preferences.getString(key, "")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ import java.util.*

internal class VKAuthManager {
fun login(activity: Activity, scopes: Collection<VKScope>) {
val params = VKAuthParams(getAppId(activity), scopes)
val params = VKAuthParams(getAppId(activity), scope = scopes)
if (VKUtils.isAppInstalled(activity, VK_APP_PACKAGE_ID) && VKUtils.isIntentAvailable(activity, VK_APP_AUTH_ACTION)) {
startAuthActivity(activity, params)
} else {
Expand All @@ -57,10 +57,15 @@ internal class VKAuthManager {
}

fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?, callback: VKAuthCallback, context: Context): Boolean {
if (requestCode != VK_APP_AUTH_CODE || data == null) {
if (requestCode != VK_APP_AUTH_CODE) {
return false
}

if (data == null) {
callback.onLoginFailed(VKAuthCallback.AUTH_CANCELED)
return true
}

val result = processResult(data)
if (resultCode != Activity.RESULT_OK || result == null || result.isError) {
callback.onLoginFailed(VKAuthCallback.AUTH_CANCELED)
Expand Down
11 changes: 9 additions & 2 deletions vk-sdk-core/src/main/java/com/vk/api/sdk/auth/VKAuthParams.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ package com.vk.api.sdk.auth
import android.os.Bundle
import java.util.HashSet

class VKAuthParams @JvmOverloads constructor(val appId: Int, scope: Collection<VKScope> = emptySet()) {
class VKAuthParams @JvmOverloads constructor(val appId: Int, val redirectUrl: String = DEFAULT_REDIRECT_URL, scope: Collection<VKScope> = emptySet()) {
private val scope: Set<VKScope>

init {
Expand All @@ -41,6 +41,7 @@ class VKAuthParams @JvmOverloads constructor(val appId: Int, scope: Collection<V
val bundle = Bundle()
bundle.putInt(VK_APP_ID_KEY, appId)
bundle.putStringArrayList(VK_APP_SCOPE_KEY, ArrayList(scope.map { it.name }))
bundle.putString(VK_APP_REDIRECT_URL_KEY, redirectUrl)
return bundle
}

Expand All @@ -49,6 +50,7 @@ class VKAuthParams @JvmOverloads constructor(val appId: Int, scope: Collection<V
bundle.putInt(VK_EXTRA_CLIENT_ID, appId)
bundle.putBoolean(VK_EXTRA_REVOKE, true)
bundle.putString(VK_EXTRA_SCOPE, scope.joinToString(","))
bundle.putString(VK_EXTRA_REDIRECT_URL, redirectUrl)
return bundle
}

Expand All @@ -57,19 +59,24 @@ class VKAuthParams @JvmOverloads constructor(val appId: Int, scope: Collection<V
companion object {
private const val VK_APP_ID_KEY = "vk_app_id"
private const val VK_APP_SCOPE_KEY = "vk_app_scope"
private const val VK_APP_REDIRECT_URL_KEY = "vk_app_redirect_url"

private const val VK_EXTRA_CLIENT_ID = "client_id"
private const val VK_EXTRA_REVOKE = "revoke"
private const val VK_EXTRA_SCOPE = "scope"
private const val VK_EXTRA_REDIRECT_URL = "redirect_url"

const val DEFAULT_REDIRECT_URL = "https://oauth.vk.com/blank.html"

fun fromBundle(bundle: Bundle?): VKAuthParams? {
if (bundle == null) {
return null
}
val appId = bundle.getInt(VK_APP_ID_KEY)
val scope: Collection<VKScope> = bundle.getStringArrayList(VK_APP_SCOPE_KEY)?.map { VKScope.valueOf(it) } ?: emptySet()
val redirectUrl = bundle.getString(VK_APP_REDIRECT_URL_KEY, DEFAULT_REDIRECT_URL)

return VKAuthParams(appId, scope)
return VKAuthParams(appId, redirectUrl, scope)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ package com.vk.api.sdk.exceptions

object VKApiCodes {
const val CODE_COMPOSITE_EXECUTE_ERROR = Int.MIN_VALUE
const val CODE_IO_ERROR = -1
const val CODE_UNKNOWN_ERROR = 1
const val CODE_APP_DISABLED = 2
const val CODE_UNKNOWN_METHOD = 3
Expand Down Expand Up @@ -83,6 +84,7 @@ object VKApiCodes {
const val CODE_CHAT_INVITE_MAKE_LINK_DENIED = 919
const val CODE_MSG_DELETE_FOR_ALL_FAILED = 924
const val CODE_CHAT_NOT_ADMIN = 925
const val CODE_CHAT_MR_ALREADY_SEND = 939

const val CODE_TOO_MANY_CONTACTS_TO_SYNC = 937

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import android.os.Bundle
import org.json.JSONObject

/**
* See [http://vk.com/dev/errors](http://vk.com/dev/errors)
* See [https://vk.com/dev/errors](https://vk.com/dev/errors)
*/
open class VKApiExecutionException
@JvmOverloads constructor(
Expand Down
10 changes: 10 additions & 0 deletions vk-sdk-core/src/main/java/com/vk/api/sdk/internal/JsonUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,21 @@ package com.vk.api.sdk.internal

import android.util.JsonReader
import android.util.JsonToken
import android.util.MalformedJsonException
import java.io.Reader
import java.io.StringReader

object JsonUtils {

fun containsElement(jsonString: String, name: String): Boolean {
try {
return containsElementImpl(jsonString, name)
} catch (ex: MalformedJsonException) {
throw MalformedJsonException("${ex.message}. Json: '$jsonString'")
}
}

private fun containsElementImpl(jsonString: String, name: String): Boolean {
if (jsonString.isEmpty()) {
return false
}
Expand All @@ -29,4 +38,5 @@ object JsonUtils {
}
return false
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
******************************************************************************/
package com.vk.api.sdk.okhttp

import android.support.v4.util.ArrayMap
import com.vk.api.sdk.utils.log.Logger
import androidx.collection.ArrayMap
import com.vk.api.sdk.utils.getValue
import com.vk.api.sdk.utils.log.Logger
import com.vk.api.sdk.utils.threadLocal
import okhttp3.Interceptor
import okhttp3.Response
Expand Down
Loading

0 comments on commit 6faddf9

Please sign in to comment.