Паттерн Декоратор — специальный способ организации модулей в программе, который позволяет подставить какую-то новую функцию прямо в середину цепочки вызовов, тем самым чуть-чуть подкорректировав поведение.
Например, в реальном мире очки для чтения это декоратор. Вы ставите их между вашими глазами и текстом. Глобально взаимодействие ваших глаз и текста не меняется: отражённые световые лучи от страницы книги попадают в ваши зрачки, что с очками, что без них. Но очки располагаются посередине: они принимают лучи на вход и преломляют их, передавая дальше вам в глаза уже изменёнными.
Важной особенностью является тот факт, что очки можно снять. Они не требуют ни модификации вашего тела, ни модификации книги. Вообще никакие условия не нужны, кроме наличия самих очков. А если вы в линзах, то внешний наблюдатель может даже этого не знать.
Класс-декоратор должен быть спроектирован так, чтобы не требовать никаких изменений в объектах, с которыми он работает. Его можно отключить, чаще всего буквально закомментировав одну строку.
В примере ниже программа выведет текст "Привет, мир, в натуре.", и вот это дополнение в конце как раз дописано декоратором. Можно убрать или закомментировать подчёркнутую строчку, не трогая остальной код, для всех внешних вызовов сигнатуры останутся теми же самыми, но выводиться будет уже просто "Привет, мир".
В декораторы можно прятать логику, которую буквально навешивают поверх основной функции программы. Например, проверку прав на выполнение операции. Перевод на другой язык, логирование, поддержку обратной совместимости при обновлении и так далее.
#dev
🤖Вышла вторая Beta Android 16 QRP2
Осенний фича релиз Android 16 всё ближе и вышла следующая бета с новыми возможностями:
👉 Platform Stability - API больше меняться не будет и можно заливать в Google Play в Beta/Alpha каналы
👉 Специальный режим установки приложения через ADB, чтобы разработчики могли тестировать приложения с вводом системы верификации разработчиков:
adb shell pm set-developer-verification-result
👉 Новый сборщик мусора. ART теперь будет поставляться с Generational Concurrent Mark-Compact (CMC) Garbage Collector, которые фокусируется на сборке новых объектов, которые обычно и чистятся. Ожидается снижения потребления CPU ресурсов и потребление заряда батареи.
👉 Встроенные счетчик количества шагов в Health Connect. Приложения смогут получить эти данные, если у них есть разрешение READ_STEPS.
Чтобы проверить наличие API из Android 16 QRP2 надо вызвать новое API
if (Build.VERSION.SDK_INT_FULL >=
Build.VERSION_CODES_FULL.BAKLAVA_1) {
// Вызываем APIs из Android 16 QPR2
}
Релиз обновленной версии Android 16 ожидается в ноября 2025
#android16
🤯Google придумала новый способ давления на разработчиков
Теперь если в приложении не добавили тёмную тему, то пользователь сам принудительно сделает её включение через системные настройки. Это приведёт к инверсии цветов.
Наконец-то Google поняла что разработчики иногда забивают на тёмную тему, обязать их не получается (ну почему через Google Play не обязать?).
Видно так решила Google:
Будем форсировать фичи и пусть пользователи жалуются и занижают рейтинг приложения в магазине
Странно, что на рекламной графике использовали приложение FitBit, хотя в нем есть нативная темная тема, да и сам продукт принадлежит Google. В FitBit нет тёмной темы. Да и не удивился - худшее спортивное приложение, что я использовал 😞
#android16
🤖Вышла первая Beta второго квартального обновления Android 16
С релиза Android 16 Google перешла на новый цикл обновлений Android - раз в квартал. Нас ждут новые фичи и API для разработчиков
Чтобы проверить наличие SDK надо использовать новый способ проверки
// Проверяем версию API через новое API для проверки версии SDK
if (Build.VERSION.SDK_INT_FULL >= Build.VERSION_CODES_FULL.BAKLAVA_1)
Что нового:
👉 Принудительный перевод светлых приложений в темные. Делается инверсия цветов
👉 Система будет делать иконки приложений автоматически тематически (монохромная версия, покрашенная в цвета системы)
👉 Приложения смогут переопределить системный UI шаринга, чтобы оставаться интерактивными
👉 Добавили возможность реализации переноса данных между Android и iOS версий приложения
👉 PDF в Android SDK теперь поддерживает редактирование и аннотации. На основе этого API будет работать Jetpack PDF библиотека
👉 Display Topology API - новое API для получения информации при работе с несколькими экранами о их положении - границы и относительное размещение.
👉 Тайлы в быстрых настройках теперь должны относится к одной из стандартных категорий
👉 Больше возможностей для управления Haptic Feedback
👉 Много новых Media API (подробности отдельным постом)
👉 Улучшения управлением компаньон устройств (подробности отдельным постом)
👉 Улучшение безопасности и приватности (подробности отдельным постом)
👉 Улучшения API для разработчиков (подробности отдельным постом)
Релиз стабильной версии ожидается в 4 квартале (ориентировочно ноябрь 2025). Уже доступа первая Beta версия для Google Pixel. Подробнее про изменения читайте на сайте Android Developers
#android16
🤖Android 16 вышел официально!!!
Что нового
👉 Новый график релиза версий Android
👉 Обязательный Edge-to-edge
👉 Live Updates уведомления
👉 Все приложения принудительно растягиваются на больших экранах
👉 Лучшая производительность и время жизни батареи
Обзор всех изменений можно найти в канале по тегу #android16 (кликайте на сам тег)
🤖Вышла Android 16 Beta 4
Вышла последняя Beta версия Android 16. Никаких изменений в API для разработчиков нет, только доработки и улучшения в ОС.
Следующий релиз будет финальным. Ставлю на то, что это сделают анонс на Google I/O.
#android16
Local Network Protection (LNP) - Новая фича для будущего Android. Позволит пользователю контролировать какие приложения могут иметь доступ в локальную сеть. Появится новое Runtime Permission, но потом. Разработчики уже могут потестировать через вызовы shell команд
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
#android16
Фон под текстом для обеспечения лучшей контрастности и читаемости - новая фича Android 16. Пользователь сможет включать в настройках, а разработчики узнать о статусе через Accessibility API
#android16
🤖Появился новый Intent для съёмки Motion Photo
val intent = Intent(MediaStore.ACTION_MOTION_PHOTO_CAPTURE)
// или MediaStore.ACTION_MOTION_PHOTO_CAPTURE_SECURE
// Задаем куда сохранить
intent.putExtra(MediaStoreEXTRA_OUTPUT, uri)
// или Uri через ClidData
intent.setClipData(clipData)
context.startActivity(intent)
#android16
🤖Вышла вторая Beta Android 16
Вышла вторая из четырёх Beta версий Android 16. Улучшили работу с медиа, новые возможности Camera2 API, форсирование Edge-to-edge и другие. Как всегда расскажу отдельными постами про самые интересные фичи
#android16
Android 16 Beta 1: Предиктивный жест назад для трёхкнопочной навигации и приложения Обои и Стиль.
При использовании системной навигации с тремя кнопками теперь можно будет увидеть анимацию предиктивного жеста назад. Для этого необходимо зажать кнопку назад. При этом вы также можете отменить это действие просто переместив палец в другую часть экрана, но не отрывая палец от дисплея.
Также теперь поддержку предиктивного жеста назад получило системное приложение Обои и стиль.
#Android16
😎Google News | Ru
Notification Live Updates в Android 16
Добавили новый стиль уведомлений - ProgressStyle, который позволяет задать текущий прогресс, иконки для начала, конца и текущей позиции, добавлять разные сегменты и точки.
Подробности по новому типу уведомлений читайте тут
Рекомендуется интегрировать приложениям в сфере доставки и навигации. Пишите свои комментарии каким категориям приложений еще подойдет
#android16