Skip to content

Commit

Permalink
Merge branch 'release/2.2.1' into 'master'
Browse files Browse the repository at this point in the history
Merge VKSDK Release 2.2.1 into master #skip_co

See merge request vk-ecosystem/vk-id-sdk/android-sdk!665
  • Loading branch information
Klimchuk Daniil committed Oct 14, 2024
2 parents 858831d + ff6500b commit c903a83
Show file tree
Hide file tree
Showing 194 changed files with 5,119 additions and 3,909 deletions.
32 changes: 19 additions & 13 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
> **Note**\
> Описание основных изменений в релизах VK ID SDK. Наш SDK следует [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## 2.2.1 (14.10.2024)

### Fixed
- Исправили анимацию нажатия на One Tap. Ранее нажатия на кнопку могли отображаться не очень чётко, поэтому доработана анимация Ripple Effect. Теперь касание пользователя видно более явно.

## 2.2.0 (27.08.2024)

### Changed
Expand All @@ -13,31 +18,32 @@
### Added
- Добавлен плагин плейсхолдеров как альтернативный способ инициализации SDK. Он позволяет инциализировать плейсхолдеры в одном месте, если у вас несколько application-модулей. Подробнее читайте в [документации](https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/connection/start-integration/android/install).

## 2.1.0
## 2.1.0 (07-08-2024)

### Added
- Добавлена возможность выбрать текст кнопки One Tap, который увидит пользователь. Это позволяет адаптировать кнопку для разных сценариев — например, для получения услуги отобразить текст «Записаться c VK ID» . Подробнее о настройке текста в кнопке читайте в [документации]https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/connection/elements/onetap-button/onetap-android).
- Добавлена возможность выбрать текст кнопки One Tap, который увидит пользователь. Это позволяет адаптировать кнопку для разных сценариев — например, для получения услуги отобразить текст «Записаться c VK ID» . Подробнее о настройке текста в кнопке читайте в [документации](https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/connection/elements/onetap-button/onetap-android).

## 2.0.1
## 2.0.1 (16-07-2024)

### Added
- В поле data колбека onAuthCode добавлено поле deviceId со значением, которое нужно передавать в запрос получения токена при генерации параметров PKCE на стороне Backend вашего сервиса.
- В параметр `data` коллбэка `onAuthCode` добавлено поле `deviceId` со значением, которое нужно передавать в запрос получения токена при генерации параметров PKCE на стороне Backend вашего сервиса. Подробнее читайте в [документации](https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/connection/start-integration/auth-flow-android).

### Fixed
- Исправлена адаптивность кнопки OneTap. Раньше кнопка превращалась в иконку раньше, чем заканчивалось свободное меcто. Так же не работал Modifier.fillMaxWidth().
- Ранее кнопка One Tap могла сужаться в иконку прежде, чем заканчивалось свободное меcто. Также не работал `Modifier.fillMaxWidth()`. Исправлено. Теперь адаптивность кнопки работает корректно.

## 2.0.0
В этой версии становится стабильной поддержка OAuth2.1 и авторизации 3в1 (через VK, OK и Mail).
Сделано много изменений публичного интерфеса и он ломает обратную совместимость.
Миграция описана в [статье](https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id-2/connection/android/migration-on-oauth-2.1)
## 2.0.0 (25-06-2024)

### Added
- Добавлена возможность отключить быструю авторизацию параметром fastAuthEnabled в OneTap и OneTapBottomSheet.
Подробности смотрите в статьях [Кнопка One Tap](https://id.vk.com/about/business/go/docs/en/vkid/latest/vk-id-2/connection/android/onetap) и [Шторка авторизации](https://id.vk.com/about/business/go/docs/en/vkid/latest/vk-id-2/connection/android/floating-onetap) в разделе "Отключение быстрой авторизации".
- Поддержка совместной работы с vk-android-sdk "из коробки" в модуле vk-sdk-support. [Статья с документацией](https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id-2/connection/android/migration-on-oauth-2.1#Sovmestnoe-ispolzovanie-s-VK-ANDROID-SDK)
- [VK ID](https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/intro/plan) теперь поддерживает авторизацию по протоколу [OAuth 2.1](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-10). За счет работы авторизации на передовом стандарте обеспечивается высокая защита пользовательских данных.
- Для пользователя добавлена возможность входа через аккаунты «Одноклассников» и Mail.ru. Для отображения кнопок входа через эти сервисы интегрируйте [виджет 3 в 1](https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/intro/main#Vidzhet-3-v-1) — блок с кнопками будет располагаться на окне авторизации вашего сервиса — или подключите [дополнительные OAuth](https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/intro/main#Podklyuchenie-dopolnitelnyh-OAuth) — для показа кнопок на окне авторизации VK ID.
- Добавлена возможность отключить быструю авторизацию c помощью параметра `fastAuthEnabled` в OneTap и OneTapBottomSheet. Подробнее читайте в статьях про кнопку [One Tap](https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/connection/elements/onetap-button/onetap-android#Otklyuchenie-bystroj-avtorizacii) и [шторку авторизации](https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/connection/elements/onetap-drawer/floating-onetap-android#Otklyuchenie-bystroj-avtorizacii).
- Поддержана совместная работа с vk-android-sdk «из коробки» в модуле vk-sdk-support. Подробнее читайте в [документации](https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/connection/start-integration/android/joint-use-with-vksdk).

### Breaking changes
- Произошли изменения в публичном интерфейсе, связанные с поддержкой авторизации с OAuth 2.1. Для перехода с SDK предыдущей версии и поддержки этих изменений воспользуйтесь [инструкцией](https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/connection/migration/android/migration-on-oauth-2.1).

### Fixed
- Исправлена опечатка в названии maven репозитория. Часть урла изменена с "andorid" на "android". Поддерживаются оба варианта
- Исправлена опечатка в названии maven-репозитория. Часть url изменена с «andorid» на «android». Поддерживаются оба варианта.

## 2.0.0-alpha04

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,4 +166,4 @@ VKID.instance.refreshToken(

### Contributing Guide
В [руководстве](CONTRIBUTING.md) вы можете подробно ознакомиться с процессом разработки и узнать, как предлагать улучшения и исправления, а ещё — как добавлять и тестировать свои изменения в VK ID SDK.
Также рекомендуем ознакомиться с общими [правилами оформления кода](CODE_STYLE.md) в проекте.
Также рекомендуем ознакомиться с общими [правилами оформления кода](CODE_STYLE.md) в проекте и [списком технических команд](TECHNICAL_COMMANDS.md).
28 changes: 28 additions & 0 deletions TECHNICAL_COMMANDS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Technical commands

Во время разработки проекта используются несколько технических команд. Ознакомьтесь с ними, если вы планируете контрибьютить в наше SDK.

- `./gradlew detekt`
Запускает detekt на проекте и выводит список ошибок
- `./gradlew lint`
Запускает android lint в рамках SDK и выводит список ошибок
- `./gradlew testDebugUnitTest`
Запускает unit тесты
- `./gradlew connectedAndroidTest`
Запускает ui тесты
- `./gradlew apiDump`
Обновляет файлы .api и отображает в них актуальное состояние SDK. Нужно запускать перед тем, как открывать пр в репозиторий
- `./gradlew apiCheck`
Проверяет, что публичное апи SDK соотвествует тому, что отображено в .api файлах
- `./gradlew updateDebugScreenshotTest`
Обновлет скриншоты. Обязательно запустите перед созданием пра
- `./gradlew validateDebugScreenshotTest`
Запускает проверку screenshot тестов
- `./scripts/git/validate_git_history TARGET_BRANCH SOURCE_BRANCH`
Проверяет названия веток и историю коммитов на соответсвтие нашему формату. Нужно запускать перед открытием пра
- `./gradlew :build-logic:dokka-skip:publishToMavenLocal & ./gradlew dokkaHtmlMultiModule`
Запускает генерацию документации. Обязательно запускать перед открытием пра
- `./gradlew generateBaselineProfiles`
Обновляет baseline prfofile-ы. Перед открытием пра нужно его запустить
- `./scripts/renovate/renovate.sh`
Обновляет зависимости renovate-ом, требует запущенного докера
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ internal fun Project.configureAndroidCompose() {
with(extensions.getByType<KotlinAndroidProjectExtension>()) {
compilerOptions {
// Force implicit visibility modifiers to avoid mistakes like exposing internal api
freeCompilerArgs.set(buildComposeMetricsParameters())
freeCompilerArgs.addAll(buildComposeMetricsParameters())
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fun Project.configureStrictMode() {
with(extensions.getByType<KotlinAndroidProjectExtension>()) {
compilerOptions {
// Force implicit visibility modifiers to avoid mistakes like exposing internal api
freeCompilerArgs.set(listOf("-Xexplicit-api=strict"))
freeCompilerArgs.add("-Xexplicit-api=strict")
}
}
}
114 changes: 114 additions & 0 deletions build-logic/detekt/config/detekt-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,117 @@ style:
UnusedPrivateMember:
active: true
ignoreAnnotated: ["Preview"]

Compose:
ComposableAnnotationNaming:
active: true
ComposableNaming:
active: true
# -- You can optionally disable the checks in this rule for regex matches against the composable name (e.g. molecule presenters)
# allowedComposableFunctionNames: .*Presenter,.*MoleculePresenter
ComposableParamOrder:
active: false
# -- You can optionally have a list of types to be treated as lambdas (e.g. typedefs or fun interfaces not picked up automatically)
# treatAsLambda: MyLambdaType
CompositionLocalAllowlist:
active: true
# -- You can optionally define a list of CompositionLocals that are allowed here
# allowedCompositionLocals: LocalSomething,LocalSomethingElse
CompositionLocalNaming:
active: true
ContentEmitterReturningValues:
active: true
# -- You can optionally add your own composables here
# contentEmitters: MyComposable,MyOtherComposable
ContentTrailingLambda:
active: true
# -- You can optionally have a list of types to be treated as lambdas (e.g. typedefs or fun interfaces not picked up automatically)
# treatAsLambda: MyLambdaType
# -- You can optionally have a list of types to be treated as composable lambdas (e.g. typedefs or fun interfaces not picked up automatically).
# -- The difference with treatAsLambda is that those need `@Composable` MyLambdaType in the definition, while these won't.
# treatAsComposableLambda: MyComposableLambdaType
DefaultsVisibility:
active: true
LambdaParameterInRestartableEffect:
active: true
# -- You can optionally have a list of types to be treated as lambdas (e.g. typedefs or fun interfaces not picked up automatically)
# treatAsLambda: MyLambdaType
Material2:
active: false # Opt-in, disabled by default. Turn on if you want to disallow Material 2 usages.
# -- You can optionally allow parts of it, if you are in the middle of a migration.
# allowedFromM2: icons.Icons,TopAppBar
ModifierClickableOrder:
active: true
# -- You can optionally add your own Modifier types
# customModifiers: BananaModifier,PotatoModifier
ModifierComposable:
active: true
# -- You can optionally add your own Modifier types
# customModifiers: BananaModifier,PotatoModifier
ModifierComposed:
active: true
# -- You can optionally add your own Modifier types
# customModifiers: BananaModifier,PotatoModifier
ModifierMissing:
active: false
# -- You can optionally control the visibility of which composables to check for here
# -- Possible values are: `only_public`, `public_and_internal` and `all` (default is `only_public`)
# checkModifiersForVisibility: only_public
# -- You can optionally add your own Modifier types
# customModifiers: BananaModifier,PotatoModifier
# -- You can suppress this check in functions annotated with these annotations
# ignoreAnnotated: ['Potato', 'Banana']
ModifierNaming:
active: true
# -- You can optionally add your own Modifier types
# customModifiers: BananaModifier,PotatoModifier
ModifierNotUsedAtRoot:
active: true
# -- You can optionally add your own composables here
# contentEmitters: MyComposable,MyOtherComposable
# -- You can optionally add your own Modifier types
# customModifiers: BananaModifier,PotatoModifier
ModifierReused:
active: true
# -- You can optionally add your own Modifier types
# customModifiers: BananaModifier,PotatoModifier
ModifierWithoutDefault:
active: false
MultipleEmitters:
active: true
# -- You can optionally add your own composables here that will count as content emitters
# contentEmitters: MyComposable,MyOtherComposable
# -- You can add composables here that you don't want to count as content emitters (e.g. custom dialogs or modals)
# contentEmittersDenylist: MyNonEmitterComposable
MutableParams:
active: true
MutableStateAutoboxing:
active: true
MutableStateParam:
active: true
ParameterNaming:
active: false
# -- You can optionally have a list of types to be treated as lambdas (e.g. typedefs or fun interfaces not picked up automatically)
# treatAsLambda: MyLambdaType
PreviewAnnotationNaming:
active: true
PreviewPublic:
active: true
RememberMissing:
active: true
RememberContentMissing:
active: true
UnstableCollections:
active: false # Opt-in, disabled by default. Turn on if you want to enforce this (e.g. you have strong skipping disabled)
ViewModelForwarding:
active: true
# -- You can optionally use this rule on things other than types ending in "ViewModel" or "Presenter" (which are the defaults). You can add your own via a regex here:
# allowedStateHolderNames: .*ViewModel,.*Presenter
# -- You can optionally add an allowlist for Composable names that won't be affected by this rule
# allowedForwarding: .*Content,.*FancyStuff
# -- You can optionally add an allowlist for ViewModel/StateHolder names that won't be affected by this rule
# allowedForwardingOfTypes: PotatoViewModel,(Apple|Banana)ViewModel,.*FancyViewModel
ViewModelInjection:
active: true
# -- You can optionally add your own ViewModel factories here
# viewModelFactories: hiltViewModel,potatoViewModel
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ internal fun Project.configureDetekt(isCompose: Boolean) {
val libs = this@configureDetekt.extensions.getByType<VersionCatalogsExtension>().named("libs")
addProvider("detektPlugins", provider { libs.findLibrary("detekt-formatting").get().get() })
addProvider("detektPlugins", provider { libs.findLibrary("detekt-libraries").get().get() })
if (isCompose) addProvider("detektPlugins", provider { libs.findLibrary("detekt-compose").get().get() })
if (findProject(":detekt-rules") != null) {
add("detekt", project(":detekt-rules"))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,22 @@ internal object Git {
val currentCommitHash get() = execute("git rev-parse --verify HEAD").first()

fun getRootCommitHash(sourceBranch: String, targetBranch: String): String {
runCatching { execute("git fetch origin $sourceBranch:$sourceBranch") }
runCatching { execute("git fetch origin $targetBranch:$targetBranch") }
executeGitFetch(sourceBranch)
executeGitFetch(targetBranch)
val mergeBase = execute("git merge-base $sourceBranch $targetBranch").first()
return execute("git rev-list --no-merges -n 1 $mergeBase").first()
}

private fun executeGitFetch(branch: String) {
try {
execute("git fetch origin $branch:$branch")
} catch (@Suppress("TooGenericExceptionCaught") t: Throwable) {
if (
t.message?.contains("refusing to fetch into branch") == false &&
t.message?.contains("[rejected]") == false
) {
throw t
}
}
}
}
Loading

0 comments on commit c903a83

Please sign in to comment.