Современные смартфоны умеют снимать с HDR, 120 FPS и стабилизацией, но вот какая комбинация этих фич реально доступна — загадка. Например, стабилизация часто работает только при 1080p, а 60 FPS не всегда доступны в 4K.
С выходом Jetpack CameraX 1.5 появилось API GroupableFeature и новые параметры для SessionConfig, которые позволяют из кода проверить, какие функции камера может использовать одновременно.
// Пример проверки неподдерживаемых комбинаций
val unsupportedFeatures =
mutableSetOf<GroupableFeature>()
val appFeatureOptions =
setOf(HDR_HLG10, FPS_60, PREVIEW_STABILIZATION)
appFeatureOptions
.filterNot { it in currentFeatures }
.filter { featureOption ->
cameraInfo.isFeatureGroupSupported(
SessionConfig(
useCases = useCases,
requiredFeatureGroup =
currentFeatures + featureOption
)
)
}
.forEach { unsupportedFeatures.add(it) }
Так можно заранее отсеять неподдерживаемые сочетания — например, когда HDR и стабилизация не работают вместе при 60 FPS 🎥
Подробнее в статье (EN)
#android #camerax #Jetpack #androidjetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤11🔥4🤔3
Что важного в новой версии:
🎉 Новое API: setRemoteSessionTimeoutMillis() в Configuration.Builder — задаёт время жизни сессии RemoteWorkManager после последнего использования.
class App : Application(), Configuration.Provider {
override fun getWorkManagerConfiguration(): Configuration {
return Configuration.Builder()
// Сколько живёт RemoteWorkManager-сессия после последнего использования
.setRemoteSessionTimeoutMillis(TimeUnit.MINUTES.toMillis(5))
.build()
}
}🎉 Тестирование: TestDriver.stopRunningWorkWithReason(...) — можно останавливать выполняющуюся работу с указанием причины.
Зачем: удобно эмулировать внешние условия (остановку системой/приложением) и проверять, что код корректно реагирует на «принудительное завершение».
// Arrange
val request = OneTimeWorkRequestBuilder<MyWorker>().build()
WorkManager.getInstance(context).enqueue(request).result.get()
// Act
val testDriver = WorkManagerTestInitHelper.getTestDriver(context)!!
testDriver.stopRunningWorkWithReason(
request.id,
/* reason */ 0 // укажите код причины, например ваш тестовый/константу из проекта
)
// Assert — далее проверяете ожидаемое состояние
🛠 Также сделали исправление багов
#android #jetpack #workmanager #jetpackupdate #androidjetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤5🔥4
🔥 Jetpack CameraX теперь разрабатывается вместе с командой камеры Pixel
Вышла первая альфа-версия Jetpack CameraX 1.6.0
Главное изменение — переход на унифицированный высокопроизводительный стек камеры, тот самый, что используется в приложении камеры Pixel. Этот стек известен как CameraPipe — и теперь CameraX и Pixel Camera развиваются совместно.
Новый стек принесёт:
👉 более быструю и стабильную инициализацию камеры,
👉 консистентную обработку фреймов,
👉 и улучшенную совместимость между устройствами.
Повод задуматься для миграции на CameraX для тех, кто не решался это сделать
#android #jetpack #androidjetpack #camerax #camera
Вышла первая альфа-версия Jetpack CameraX 1.6.0
Главное изменение — переход на унифицированный высокопроизводительный стек камеры, тот самый, что используется в приложении камеры Pixel. Этот стек известен как CameraPipe — и теперь CameraX и Pixel Camera развиваются совместно.
Новый стек принесёт:
👉 более быструю и стабильную инициализацию камеры,
👉 консистентную обработку фреймов,
👉 и улучшенную совместимость между устройствами.
Повод задуматься для миграции на CameraX для тех, кто не решался это сделать
#android #jetpack #androidjetpack #camerax #camera
🔥45🤯9❤6👍3
Если коротко про изменения — Material3 Adaptive всё ближе к полноценному “Responsive Compose”. Теперь можно писать интерфейсы, которые одинаково естественно ведут себя на телефоне, планшете и десктопе.
Главное:
🪶 Levitate-стратегия для ThreePaneScaffold — превращает панель в плавающее окно (popup).
↔️ Reflow-стратегия для ThreePaneScaffold — позволяет при узком экране уводить одну панель под другую, сохраняя UX.
👉 PaneScaffoldScope.saveableStateHolder — сохраняет состояние между разными конфигурациями экрана.
👉 Modifier.preferredHeight() — теперь можно задать предпочтительную высоту панели.
📏 Новые WindowSizeClasses: API currentWindowAdaptiveInfo() теперь распознаёт Large и ExtraLarge окна — важный шаг к поддержке планшетов и десктопов.
👉 Drag-to-resize получил настройку пользовательского поведения и поддержку a11y (accessibility).
#compose #material3 #adaptive #android #jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤9🔥2
Отличия Android XR от visionOS от Apple заключается в том, что гарнитуры позволяют запускать обычные Android приложения, но чтобы улучшить опыт можно выполнить небольшую адаптацию с помощью Jetpack XR SDK.
На примере адаптации приложения Androidify (оно у меня не запустилось в эмулятор XR) как выполнять адаптацию. Полезно тем кто хочет попробовать это!
Надо будет попробовать это на FrameIO после реализации его MVP версии
#android #xr #jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍7🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Cahier "кай-е́" (тетрадь по-французски)
Что нашел из интересного в коде:
😮 Никакого дизайна (но всё на Compose). Адаптивный дизайн под разные размеры экрана
🔥 Пример редактора с рисованием с базовым функционалом
🤯 Для сериализации взяли GSON, а не KotlinX Serialization
#android #google #jetpack #opensource #пример
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22❤4👍2
В Jetpack CameraX 1.5 появилась фича high-speed capture - позволяет делать съемку с высокой частотой кадров. Также это может использоваться для съёмки slow-motion видео.
Не все устройства смогут снимать видео с высокой частотой кадров, а если и смогут, то это это будет разрешение FullHD или ниже. CameraX проверяет информацию на основе CamcorderProfile, который провалидирован с помощью Android Compatibility Test Suite (CTS) для каждого устройства.
Если вам интересно, то в статье найдете подробную инструкцию по реализации в коде.
#android #jetpack #камера #camerax
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤3🤯1
Saved State — это библиотека Jetpack, которая помогает сохранять и восстанавливать состояние при пересоздании, например из-за изменений конфигурации в Android или при выгрузке процесса системой. Поддерживает Kotlin Multiplatform
Вышел
androidx.savedstate:1.4.0, и в этом обновлении основное внимание уделено улучшению API. Ключевое изменение - добавлена нативная поддержка nullable типов в SavedStateRegistryOwner.saved, а также в функциях encodeToSavedState() и decodeFromSavedState() — теперь можно напрямую сохранять и восстанавливать null-значения без костылей.// Теперь это работает корректно без дополнительных проверок.
var name: String? by savedState(saved = "name", default = null)
#android #jetpack #kotlin #kmp #jetpackupdate #androidjetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥8❤1
Что нового:
🌙 Добавлен атрибут
isLightTheme для тем SplashScreen — можно корректно выбирать оформление под светлую/тёмную тему🖼 Иконка загрузки теперь корректно подтягивается через AppCompatResources (улучшена поддержка ресурсов и векторных изображений)
👉 Убрали ручное объявление обращения к новым API — теперь всё автоматически моделируется при сборке с AGP ≥ 7.3 и R8 ≥ 3.3
#android #jetpack #androidjetpack #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34🎉5❤4
Стал доступен первый стабильный релиз навигации, разработанной специально для Compose. Библиотека предоставляет больше гибкости и контроля разработчикам, позволяя реализовать различные подходы. Google выложила свои примеры реализации популярных задач в репозитории на
Nav3 имеет поддержку Compose Multiplatform, а также JetBrains выпустила версию артефактов
👉 Документация по библиотеке
Всем кто использует Jetpack Navigation 2 с Compose нааооятельно рекомендуется миграция.
🔨Руководство по миграции
Про возможности бибилотеки я рассказал в
#android #compose #kmp #cmp #jetpack #ui #nav3
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥56👍9🤔5❤3