Надеть циферблат часов

Создавайте приложения для умных часов Wear OS от Google.

Примечание: Формат циферблата Watch Face Format необходим для установки циферблатов на устройства с предустановленной Wear OS 5 или более поздней версии, а также для всех новых циферблатов, опубликованных в Google Play.

Начиная с января 2026 года, формат Watch Face Format станет обязательным для установки циферблатов на все устройства Wear OS.

Подробнее об изменениях, затрагивающих пользовательский интерфейс, можно узнать в этой статье Справочного центра .

Последнее обновление Стабильный релиз Предварительная версия для выпуска Бета-версия Альфа-версия
17 декабря 2025 г. 1.2.1 - 1.3.0-beta01 -

Объявление зависимостей

Чтобы добавить зависимость от Wear, необходимо добавить репозиторий Google Maven в ваш проект. Для получения дополнительной информации ознакомьтесь с информацией в репозитории Google Maven .

Добавьте зависимости для необходимых артефактов в файл build.gradle вашего приложения или модуля:

классный

dependencies {
    // Use to implement wear watchfaces
    implementation "androidx.wear.watchface:watchface:1.2.1"

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.2.1"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.2.1"

    // Use to implement a watchface style and complication editor
    implementation "androidx.wear.watchface:watchface-editor:1.2.1"

    // Can use to render complications.
    // This library is optional and watchfaces may have custom implementation for rendering
    // complications.
    implementation "androidx.wear.watchface:watchface-complications-rendering:1.2.1"
}

Котлин

dependencies {
    // Use to implement wear watchfaces
    implementation("androidx.wear.watchface:watchface:1.2.1")

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.2.1"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.2.1"

    // Use to implement a watchface style and complication editor
    implementation("androidx.wear.watchface:watchface-editor:1.2.1")

    // Can use to render complications.
    // This library is optional and watchfaces may have custom implementation for rendering
    // complications.
    implementation "androidx.wear.watchface:watchface-complications-rendering:1.2.1"
}
,

классный

dependencies {
    // Use to implement wear watchfaces
    implementation "androidx.wear.watchface:watchface:1.2.1"

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.2.1"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.2.1"

    // Use to implement a watchface style and complication editor
    implementation "androidx.wear.watchface:watchface-editor:1.2.1"

    // Can use to render complications.
    // This library is optional and watchfaces may have custom implementation for rendering
    // complications.
    implementation "androidx.wear.watchface:watchface-complications-rendering:1.2.1"
}

Котлин

dependencies {
    // Use to implement wear watchfaces
    implementation("androidx.wear.watchface:watchface:1.2.1")

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.2.1"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.2.1"

    // Use to implement a watchface style and complication editor
    implementation("androidx.wear.watchface:watchface-editor:1.2.1")

    // Can use to render complications.
    // This library is optional and watchfaces may have custom implementation for rendering
    // complications.
    implementation "androidx.wear.watchface:watchface-complications-rendering:1.2.1"
}

Для получения дополнительной информации о зависимостях см. раздел «Добавление зависимостей сборки» .

Обратная связь

Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав кнопку со звездочкой.

Создать новую задачу

Для получения более подробной информации см. документацию по системе отслеживания ошибок .

Версия 1.3

Версия 1.3.0-beta01

17 декабря 2025 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.3.0-beta01 . Версия 1.3.0-beta01 содержит следующие коммиты .

Новые функции

  • Добавлена ​​поддержка статических данных предварительного просмотра виджетов, позволяющая поставщику виджетов указывать статические данные предварительного просмотра в своем манифесте. Подробнее см. androidx.wear.watchface.complications.data.parser.StaticPreviewDataParser .
  • В класс ComplicationTextFormatting добавлена ​​поддержка максимально краткого форматирования данных и времени, что полезно для виджетов, где пространство ограничено.

Изменения в API

  • Ранее экспериментальное свойство Renderer.watchfaceColors теперь является закрытым. Однако для этого свойства по-прежнему существуют публичные методы доступа. ( Ifdf60 , b/409363281 )

Исправлены ошибки

  • Для использования проектов, выпущенных с Kotlin 2.0, требуется KGP 2.0.0 или более поздняя версия. ( I48968 , b/407632515 )

Версия 1.3.0-alpha07

23 апреля 2025 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.3.0-alpha07 . Версия 1.3.0-alpha07 содержит следующие коммиты .

Новые функции

  • Возможность задавать схему UserStyle для циферблата часов существует уже некоторое время, а также можно задать ColorUserStyleSetting в формате XML.

Изменения в API

  • Для использования проектов, выпущенных с Kotlin 2.0, требуется KGP 2.0.0 или более поздняя версия. ( Idb6b5 )
  • Добавлен API Watch Face Push, который позволяет приложению Wear OS программно устанавливать циферблат на часы.

Исправлены ошибки

  • Пользователям, использующим версию 1.3.0-alpha06, рекомендуется обновиться, поскольку в следующей версии WearOS исправлена ​​ошибка, приводившая к сбою ComplicationDataSourceUpdateRequester .

Версия 1.3.0-alpha06

26 марта 2025 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.3.0-alpha06 . Версия 1.3.0-alpha06 содержит следующие коммиты .

Новые функции

  • API-интерфейсы циферблатов Wear Watchface (watchface, watchface-client, watchface-client-guava, watchface-complications-rendering, watchface-data, watchface-editor, watchface-editor-guava и watchface-style) устарели в пользу формата Wear Watchface Format и в конечном итоге будут удалены из AndroidX. API-интерфейсы виджетов не устарели и останутся. ( Ice960 )
  • Теперь API для виджетов могут напрямую взаимодействовать с WearSDK , что более эффективно благодаря меньшему количеству межпроцессных соединений.

Версия 1.3.0-alpha05

15 января 2025 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.3.0-alpha05 . Версия 1.3.0-alpha05 содержит следующие коммиты .

Новые функции

Обычно циферблаты позволяют пользователю выбирать цвета с помощью ListUserStyle . Хотя это и работает, это влечет за собой отправку значков по Bluetooth в сопутствующий редактор, что неэффективно, поэтому мы ввели ColorUserStyleSetting где полезная нагрузка представляет собой список из одного или нескольких цветов для каждого стиля, что имеет значительно более компактный формат передачи.

Мы добавили функцию, ориентированную на OEM-производителей, которая позволяет поставщикам виджетов добавлять дополнительные элементы в ComplicationData для использования с циферблатами OEM-производителей.

Изменения в API

  • Классы UserStyleSetting и UserStyleOption теперь имеют конструкторы, что является рекомендуемым способом их создания. ( Iacd03 )
  • Поддержка передачи дополнительных параметров в ComplicationData . Это предназначено для использования производителями оборудования, которые контролируют как поставщика дополнительных параметров, так и принимающий циферблат. Для установки дополнительного параметра требуется привилегированное разрешение com.google.android.wearable.permission.COMPLICATION_EXTRAS . ( I4e3b2 )
  • Обычно на циферблатах часов пользователь может выбирать цвета с помощью ListUserStyle , где для каждого ListOption отображается значок. Поскольку схемы UserStyle передаются по Bluetooth, важно минимизировать размер схемы, что может стать проблемой, если предлагается множество вариантов цветов из-за большого количества значков. Чтобы решить эту проблему, мы добавили ColorUserStyleSetting , где параметр содержит список цветов вместо значка, что значительно компактнее. ( Ib542e )
  • Для использования ColorUserStyleSetting и ColorOption требуется API 34. ( I8771d )

Исправлены ошибки

  • В этой библиотеке теперь используются аннотации JSpecify, определяющие наличие нулевого значения , которые относятся к использованию типов. Разработчикам Kotlin следует использовать следующий аргумент компилятора для обеспечения корректного использования: -Xjspecify-annotations=strict (это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin). ( Ifd363 , b/326456246 )

Версия 1.3.0-alpha04

18 сентября 2024 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.3.0-alpha04 . Версия 1.3.0-alpha04 содержит следующие коммиты .

Новые функции

  • Добавлена ​​поддержка отложенной загрузки значков в UserStyleSettings и UserStyleOptions , что повышает производительность при загрузке циферблатов. ( Iaf43d )
  • Добавлена ​​опция для создания обновленного скриншота при каждом изменении конфигурации системы (например, при изменении локали) с помощью новой функции Watchface.setUpdateScreenshotOnConfigurationChange . По умолчанию эта настройка отключена. ( I765a1 )

Исправлены ошибки

  • Удалено ручное описание доступа к новым API платформы, поскольку это происходит автоматически посредством моделирования API при использовании R8 с AGP 7.3 или более поздней версии (например, R8 версии 3.3) и для всех сборок при использовании AGP 8.1 или более поздней версии (например, D8 версии 8.1). Клиентам, не использующим AGP, рекомендуется обновиться до D8 версии 8.1 или более поздней. Подробнее см. в этой статье . ( Ia60e0 , b/345472586 )

Версия 1.3.0-alpha03

17 апреля 2024 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.3.0-alpha03 . Версия 1.3.0-alpha03 содержит следующие коммиты .

Изменения в API

  • Мы добавили EditorSession#setOverrideComplications , который временно устанавливает ComplicationData базового экземпляра циферблата во время редактирования. Если виджеты меняются нечасто, это эффективнее, чем передавать переопределения через EditorSession#renderWatchFaceToBitmap . ( I19384 )

Исправлены ошибки

  • Ранее selectComplicationDataForInstant вызывал toApiComplicationData для всех временных шкал, что означало, что последующая проверка равенства ссылок === всегда завершалась неудачей. Это означало, что виджеты перезагружались каждый кадр, что приводило к разрядке батареи. ( 717406 )

Версия 1.3.0-alpha02

3 апреля 2024 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.3.0-alpha02 . Версия 1.3.0-alpha02 содержит следующие коммиты .

Новые функции

  • Теперь мы используем равенство ссылок для сравнения best и selectedData поскольку оператор равенства является ресурсоемким. ( 446b00 )

Изменения в API

  • Мы добавили динамический API без резервного варианта для GoalProgressComplicationData . ( c33264 )

Версия 1.3.0-alpha01

7 февраля 2024 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.3.0-alpha01 . Версия 1.3.0-alpha01 содержит следующие коммиты.

Новые функции

  • WatchFaceServices можно инициализировать одновременно, поэтому они должны быть без состояния. Для поддержки этого мы добавили StatefulWatchFaceService в котором определяемый пользователем дополнительный объект, созданный с помощью createExtra() передается во все переопределения, вызываемые во время инициализации.
  • GlesRenderer2 теперь есть перегрузка конструктора, которая позволяет указать список атрибутов для последовательной проверки с помощью eglChooseConfig .

Изменения в API

  • Теперь StatefulWatchFaceService поддерживает переопределение метода getComplicationSlotInflationFactory в который передаются определяемые пользователем дополнительные данные, созданные методом createExtra() . ( I82d9f )
  • Некоторые циферблаты нуждаются в совместном использовании вспомогательных данных, созданных во время createUserStyleSchema , с другими методами инициализации. Поскольку лучшей альтернативы не было, разработчики обычно делали свои WatchFaceServices состоятельными. Это опасно, поскольку можно одновременно создавать несколько экземпляров, что может привести к ошибкам. Для решения этой проблемы мы ввели StatefulWatchFaceService и StatefulWatchFaceRuntimeService , где определяемый пользователем тип создается методом createExtra() и передается в различные методы создания в качестве параметра. ( If8a99 )
  • Мы добавили getUserStyleFlavors в InteractiveWatchFaceClient , что представляет интерес прежде всего для производителей оборудования. ( I0f5d8 )
  • GlesRenderer2 теперь есть перегрузка конструктора, которая позволяет указать список атрибутов для последовательной проверки с помощью eglChooseConfig . Это, например, позволяет сначала попробовать конфигурацию с сглаживанием, а затем, при необходимости, вернуться к конфигурации без него. ( I1ba74 )
  • Начиная с Android U, в WearOS будет добавлена ​​поддержка SystemDataSources.DATA_SOURCE_HEART_RATE . Гарантируется поддержка только SHORT_TEXT для этого виджета, но рекомендуется, чтобы ComplicationSlot также принимал SMALL_IMAGE поскольку производители могут предпочесть использовать ярлык для своего приложения «Здоровье» вместо текущего значения. ( I34223 )
  • Мы добавили METADATA_KEY_CONFIG_RESTORE_SUPPORTED который, начиная с Android U, управляет тем, что происходит при восстановлении системы из резервной копии источника данных для виджета с METADATA_KEY_DATA_SOURCE_CONFIG_ACTION . По умолчанию система предполагает, что служба источника данных виджета поддерживает резервное копирование любых конфигурационных данных, но если это не так, она может добавить параметр метаданных METADATA_KEY_DATA_SOURCE_CONFIG_ACTION в значение false, что пометит слот виджета как не настроенный. ( I6c505 )

Версия 1.2

Версия 1.2.1

24 января 2024 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.1 . Версия 1.2.1 содержит следующие коммиты.

Исправлены ошибки

  • Исправлена ​​ошибка, приводившая к сбою на Samsung Galaxy Watch 4, 5 и 6. ( 43f0b0 )

Версия 1.2.0

29 ноября 2023 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.0 . Версия 1.2.0 содержит следующие коммиты.

Важные изменения по сравнению с версией 1.1.0

  • Мы добавили поддержку новых типов виджетов, доступных для использования начиная с Android T:
    • GoalProgressComplicationData похож на RangedValueComplicationData за исключением того, что он предназначен для отслеживания прогресса в достижении цели, где min по умолчанию равен нулю, а значение может быть больше targetValue .
    • WeightedElementsComplicationData — это массив элементов (пары веса и цвета), а также необязательный текст/заголовок/изображение. Они могут отображаться в виде круговой диаграммы, где цвета должны быть значимыми в контексте, поскольку обычно в описании нет места для отображения подписей.
  • Мы добавили поддержку необязательных ColorRanges в RangedValueComplicationData . Обычно виджеты отображаются цветами, выбранными циферблатом, но иногда ComplicationDataSource лучше использовать для установки цветов, например, когда они имеют определенное семантическое значение. Например, красный — синий для отображения температуры.
  • Теперь почти все типы ComplicationData поддерживают SmallImages .
  • Мы добавили ComplicationDisplayPolicy , в котором DO_NOT_SHOW_WHEN_DEVICE_LOCKED указывает совместимому циферблату не отображать виджет, когда устройство заблокировано.
  • Начиная с Android T, производители устройств смогут определять, исходит ли запрос на добавление виджета от циферблата из списка, определенного метаданными android.support.wearable.complications.SAFE_WATCH_FACES в манифесте поставщика, с помощью ComplicationRequest#isForSafeWatchFace . Поставщику потребуется разрешение com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE , чтобы получить что-либо, кроме TargetWatchFaceSafety.UNKNOWN.
  • Функция UserStyleFlavors перестала быть экспериментальной.

Версия 1.2.0-rc01

18 октября 2023 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.0-rc01 . Версия 1.2.0-rc01 содержит следующие коммиты.

Версия 1.2.0-beta02

6 сентября 2023 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.0-beta02 . Версия 1.2.0-beta02 содержит следующие коммиты.

Новые функции

  • SuspendingComplicationDataSourceService#onDestroy теперь открыта. Обратите внимание, что поддержка системного отображения погоды по умолчанию была удалена.

Изменения в API

  • Отменить "Предоставить новый источник данных для анализа погодных условий". ( I6f335 )

Версия 1.2.0-beta01

23 августа 2023 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.0-beta01 . Версия 1.2.0-beta01 содержит следующие коммиты.

Новые функции

  • Начиная с Android T, WearOS теперь будет поддерживать стандартное отображение погоды в качестве виджета системы.

Изменения в API

  • Добавить резервный вариант системы прогнозирования погоды по умолчанию для сложных ситуаций. ( Ia0994 )
  • Этот патч добавляет WatchFaceRuntimeService и WatchFaceControlClient.createWatchFaceRuntimeControlClient , а также обертки Guava. Они добавляют поддержку сред выполнения для циферблатов, которые представляют собой особый тип циферблатов, загружающих свое определение из другого пакета. В настоящее время WearOS поддерживает только среду выполнения для формата циферблатов Android . ( I2799f )
  • Этот патч является продолжением aosp/2636578, где мы переименовываем определения целочисленных типов, поэтому любой код, зависящий от WatchFaceType , CanvasType , TapType или ComplicationsSlotBoundsType , не требует изменений. ( I4098b )
  • Обновлены API-файлы для аннотирования подавления совместимости. ( I8e87a , b/287516207 )
  • Этот патч делает доступными константы WatchFaceType в WatchFaceTypes , константы CanvasType в CanvasTypes , константы TapType в TapTypes и константы ComplicationsSlotBoundsType в ComplicationsSlotBoundsType . ( I3b85a , b/288750666 )
  • WatchFace.OverlayStyle используется очень редко и плохо поддерживается производителями оборудования, поэтому мы прекращаем её поддержку с намерением удалить её позже. ( I7344a )

Версия 1.2.0-alpha09

21 июня 2023 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.0-alpha09 . Версия 1.2.0-alpha09 содержит следующие коммиты.

Новые функции

  • RangedValueComplicationData.Builder теперь принимает DynamicFloat , а также доступен новый класс DynamicComplicationText в качестве подкласса ComplicationText . Оба класса могут использовать динамические выражения, а также привязки к платформе, обновляемые с частотой 1 Гц на поддерживаемых устройствах Wear 4.

Изменения в API

  • Добавлены динамические типы для ежедневного расстояния, ежедневного количества калорий и ежедневного количества пройденных этажей. Ключи для источников информации о здоровье платформы теперь находятся в файле PlatformHealthSources.Keys ( Ib7637 ).
  • Реализуйте PlatformDataProvider для предоставления данных о частоте сердечных сокращений и количестве шагов за день. Интерфейс SensorGateway удален из публичного API. ( I55b84 )
  • Переименуйте StateEntryValue в DynamicDataValue и обновите API состояния, чтобы использовать DynamicDataKey . ( If1c01 )
  • Добавить AppDataKey для доступа к состоянию, полученному в результате отправки приложения; добавить PlatformDataKey для доступа к данным платформы; добавить поддержку пространств имен в StateStore . ( I7985e )
  • Методы enable / disablePlatformSource были удалены из DynamicTypeEvaluator . Ответственность за обновления должна лежать на вызывающей стороне. ( I78c6d )
  • Разрешить ограничение размера связанных типов данных. ( IE2966 )

Версия 1.2.0-alpha08

19 апреля 2023 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.0-alpha08 . Версия 1.2.0-alpha08 содержит следующие коммиты.

Новые функции

  • Начиная с Android T, поставщики виджетов с привилегированным разрешением com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE могут регистрировать метаданные androidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES , которые переопределяют android.support.wearable.complications.SUPPORTED_TYPES для безопасных циферблатов. Это означает, что поставщик виджетов может выбирать, какие типы данных предоставлять для доверенных и недоверенных циферблатов.

Изменения в API

  • Передача аннотации ` @Deprecated класса на свойство ( I882d1 , b/271441831 )
  • Имя параметра значения для Enum.valueOf изменилось ( Ia9b89 )
  • Дополнительные исключения, выброшенные из enum valueOf ( I818fe )
  • Мы заменили renderWatchFaceToSurface на createRemoteWatchFaceView , который построен на основе SurfaceControlViewHost и позволяет вызывающей стороне встраивать представление с циферблата часов, которое отображается, когда клиент вызывает RemoteWatchFaceViewHost#renderWatchFace . ( Ib311d )
  • Мы добавили renderWatchFaceToSurface в InteractiveWatchFaceClient , HeadlessWatchFaceClient и EditorSession . Как правило, это обеспечивает более высокую производительность, чем рендеринг в растровое изображение. ( Ieacad )
  • ObservableStateStore был переименован в StateStore . ( Ieb0e2 )
  • Добавлен DynamicTypeEvaluator.Builder вместо аргументов конструктора, что позволяет использовать больше необязательных аргументов, включая ObservableStateStore , который теперь по умолчанию принимает пустое значение. ( I6f832 )
  • Изменен порядок параметров в DynamicTypeEvaluator . ( Ic1ba4 )
  • В методы DynamicTypeEvaluator.bind добавлен исполнитель. ( I346ab )
  • Мы добавили метод startEvaluation к классу BoundDynamicType , чтобы запускать вычисление после привязки динамического типа. ( I19908 )
  • Поставщики виджетов с привилегированным разрешением com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE могут зарегистрировать метаданные androidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES , которые переопределяют android.support.wearable.complications.SUPPORTED_TYPES для безопасных циферблатов. ( Id1c73 )
  • Мы переименовали CustomValueUserStyleSettings2 в LargeCustomValueUserStyleSettings . ( Ic17ac )

Исправлены ошибки

  • DynamicTypeValueReceiver#onPreUpdate был удален. ( I2dc35 )

Версия 1.2.0-alpha07

22 февраля 2023 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.0-alpha07 . Версия 1.2.0-alpha07 содержит следующие коммиты.

Новые функции

  • Начиная с Android T, производители устройств смогут определять, исходит ли запрос на добавление виджета от циферблата из списка, определенного метаданными android.support.wearable.complications.SAFE_WATCH_FACES в манифесте поставщика, с помощью ComplicationRequest#isForSafeWatchFace . Поставщику потребуется разрешение com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE , чтобы получить что-либо, кроме TargetWatchFaceSafety.UNKNOWN .

  • Также в Android T доступна функция CustomValueUserStyleSetting2 , которая может вмещать до 12,5 КБ данных. Предыдущий лимит для CustomValueUserStyleSetting составлял 1 КБ. Несмотря на увеличение лимитов размера, разработчикам циферблатов рекомендуется сохранять небольшой объем данных, поскольку настройки передаются по Bluetooth во время редактирования, а пропускная способность Bluetooth ограничена.

Изменения в API

  • Мы добавили необязательный параметр eglContextAttribList в GlesRenderer и GlesRenderer2 , который позволяет установить значение EGL14.EGL_CONTEXT_CLIENT_VERSION , передаваемое в EGL14.eglCreateContext . ( I2a83e )
  • Мы перенесли библиотеки для создания циферблатов часов в androidx.core.util.Consumer вместо java.util.function.Consumer . ( I273f5 )
  • Дополнительные исключения, возникающие при доступе к свойствам KT ( Iff9d9 )
  • Мы добавили InteractiveWatchFaceClient.isComplicationDisplayPolicySupported , чтобы клиент мог определить, нужно ли ему эмулировать поддержку старых циферблатов. ( I24c89 )
  • Мы решили, что isForSafeWatchFace должен быть трехсостоятельным IntDef ( Ief2f7 ).
  • Для Android T мы ввели ComplicationRequest.isForSafeWatchFace , предназначенный для использования OEM-производителями, и он требует разрешения com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE . Для источников данных в образе системы это вернет true, если запрашиваемый циферблат находится в списке безопасных циферблатов, указанных источником данных в его манифесте. ( I0cbb6 )
  • Для Android T мы добавили CustomValueUserStyleSetting2 , который может вмещать до 12,5 КБ. Предыдущий лимит для CustomValueUserStyleSetting составлял 1 КБ. ( I0b100 )

Версия 1.2.0-alpha06

25 января 2023 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.0-alpha06 . Версия 1.2.0-alpha06 содержит следующие коммиты.

Новые функции

  • Работа над добавлением поддержки привязок платформы для виджетов продолжается, пока это не готово к использованию, но следите за обновлениями!
  • Мы добавили поддержку XML ComplicationSlot для новых типов осложнений: GOAL_PROGRESS и WEIGHTED_ELEMENTS.

Исправлены ошибки

  • Исправлена ​​ошибка, из-за которой редактор циферблатов некорректно загружался на устройства Samsung. ( 3b5987 )
  • Исправлена ​​ошибка, из-за которой иногда виджеты отображались некорректно при переключении между циферблатами с несколькими избранными. ( b38ece )
  • Исправлена ​​ошибка сериализации с perOptionScreenReaderNames, которая приводила к сбоям в работе циферблатов. ( e9f466 )

Версия 1.2.0-alpha05

7 декабря 2022 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.0-alpha05 . Версия 1.2.0-alpha05 содержит следующие коммиты.

Новые функции

  • Некоторое время назад мы добавили поддержку иерархических UserStyleSettings , и начиная с Android T теперь можно иметь более одной ComplicationSlotsUserStyleSetting в иерархии. В зависимости от выбранных пользователем настроек стиля будет активна только одна настройка стиля ComplicationSlotsUserStyleSetting .

  • Мы улучшаем поддержку программ чтения с экрана для ListOption и ComplicationSlotsOption , добавляя поле screenReaderName Обратите внимание, что до Android T это поле игнорировалось вспомогательными редакторами.

Изменения в API

  • Мы добавили новое необязательное поле screenReaderName в ListOption и ComplicationSlotsOption для использования редакторами — оно будет игнорироваться вспомогательными редакторами на устройствах до Android T ( I75326 ).
  • Начиная с Android T, теперь поддерживается несколько ComplicationSlotsUserStyleSettings в иерархии стилей, при условии, что одновременно может быть активен не более одного из них. Мы добавили вспомогательную функцию findComplicationSlotsOptionForUserStyle в UserStyleSchema , которая поможет найти активный ComplicationSlotsOption если таковой имеется. ( Ic2b06 )
  • RangedValuesTypes были добавлены в сопутствующий объект RangedValueComplicationData и переименованы в TYPE_UNDEFINED , TYPE_RATING , а также добавлен новый TYPE_PERCENTAGE . ( I55d02 )
  • Мы переименовали экспериментальный объект DynamicFloat в FloatExpression и пометили его как @hide . ( Idf4f1 )
  • Добавление аннотации @JvmDefaultWithCompatibility ( I8f206 )

Версия 1.2.0-alpha04

9 ноября 2022 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.0-alpha04 . Версия 1.2.0-alpha04 содержит следующие коммиты.

Новые функции

  • Для Android T мы добавили поддержку двух новых типов виджетов: GoalProgressComplicationData и WeightedElementsComplicationData .
  • GoalProgressComplicationData похож на RangedValueComplicationData , но его значение может выходить за пределы целевого значения (для RangedValueComplicationData значение ограничено диапазоном [мин..макс.]), что имеет последствия для визуального дизайна и может не подойти для всех циферблатов.
  • GoalProgressComplicationData добавляет поддержку круговых диаграмм и аналогичных детализации простых данных.
  • Мы добавили опциональную поддержку ColorRamps для RangedValueComplicationData .
  • Для Android T мы добавили ComplicationPersistencePolicy и setCachePolicy в ComplicationData , что в настоящее время позволяет поставщику контролировать, сохраняется ли оглавление или нет (т.е. кэшируется ли оно после перезагрузки). Большинству оглавлений не потребуется устанавливать управление кэшированием, но это может исправить частные случаи с устаревшими данными для некоторых оглавлений, которые часто обновляются (например, оглавления с данными о здоровье). Мы также добавили ComplicationDisplayPolicy где DO_NOT_SHOW_WHEN_DEVICE_LOCKED указывает совместимому циферблату не отображать оглавление, когда устройство заблокировано. ( Ic9574 )

Изменения в API

  • GoalProgressComplicationData , WeightedElementsComplicationData и ColorRamp больше не являются экспериментальными. ( Ica9e2 )
  • ComplicationPersistencePolicy и ComplicationDisplayPolicy теперь корректно помечены как T API. ( I31d88 )
  • Устаревший конструктор ComplicationSlotOverlay теперь имеет DeprecationLevel.WARNING , позволяющий снова вызывать его из Java. ( Ib308c )
  • Мы исправили некоторые проблемы совместимости с Java для ComplicationRequestListener , CanvasComplication , ComplicationTapFilter и InteractiveWatchFaceClient , аннотировав их с помощью @JvmDefaultWithCompatibility ( Id94fc ).
  • Мы удалили экспериментальные ProtoLayoutComplicationData и ListComplicationData . Описание их предназначения для разработчиков было неясным, мы надеемся вернуться к этому вопросу в будущем. ( I9df05 )
  • Мы вернули ValueType в RangedValueComplicationData . WeightedElementsComplicationData теперь поддерживает цвет фона. Мы удалили DiscreteRangedValueComplicationData поскольку его функциональность является подмножеством WeightedElementsComplicationData . ( I6446c )

Исправлены ошибки

  • Включите isForScreenShot в код equals и hash. Убедитесь, что onRenderParametersChanged получает корректное значение isForScreenshot ( I04a41 ).
  • Исправлены утечки памяти WatchFaceControlService из безголовых клиентов. ( e90e00 )

Версия 1.2.0-alpha03

5 октября 2022 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.0-alpha03 . Версия 1.2.0-alpha03 содержит следующие коммиты.

Новые функции

  • Новых функций нет, но мы исправили несколько ошибок в редакторе циферблатов.

Изменения в API

  • Устаревший класс UserStyleSchema.userStyleSettings , поскольку rootUserStyleSettings становятся неэкспериментальными ( IE96E3 )
  • Переместить rootUserStyleSettings из экспериментальной папки ( I8d6b3 )
  • Мы пометили WatchFaceColors как экспериментальную функцию, поскольку она поддерживается не всеми системами ( I6d75d ).
  • Добавьте DisconnectReasons в публичный API, чтобы он работал с IntDef . ( I791f8 )

Исправлены ошибки

  • Закройте все открытые редакторы на часах, если SysUI завершает работу. Если SysUI завершает работу, а редактор циферблата на часах не закрывается, циферблат может остаться в несогласованном состоянии, поскольку система полагается на SysUI для сохранения любых изменений стиля пользователя. ( ba762a)
  • Исправлена ​​утечка памяти в ComplicationDataSourceInfoRetriever , где продолжение сопрограммы Kotlin выступало в качестве корневого элемента сборщика мусора и сохраняло активность редактора. ( 33ee06 )

Версия 1.2.0-alpha02

21 сентября 2022 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.0-alpha02 . Версия 1.2.0-alpha02 содержит следующие коммиты.

Новые функции

  • Некоторые циферблаты имеют настройки, не связанные с UserStyle , которые влияют на их визуальное отображение (например, выбор фонового изображения). Мы добавили Renderer.sendPreviewImageNeedsUpdateRequest , который позволяет циферблату запрашивать обновленное изображение предварительного просмотра. Обратите внимание, что для работы этой функции требуется соответствующее обновление системы.

  • Мы также добавили API для отображения цветов циферблатов в системе, которая может выбирать цветовую палитру на основе этих данных. Обратите внимание , что эта функция будет экспериментальной и появится в последующем обновлении.

  • Практически все типы ComplicationData теперь поддерживают SmallImages .

Изменения в API

  • Менеджер обоев иногда может отключаться от движка и создавать другой. Мы добавили целочисленный метод DisconnectReason и расширили ClientDisconnectListener новым методом, который включает DisconnectReason , позволяя слушателю отслеживать отключения движка. ( I45cce )
  • Добавлены два необязательных параметра nameResourceId и screenReaderResourceId в конструктор ComplicationSlotOverlay ( I157e8 ).
  • Мы добавили обертку Guava для новой перегрузки метода getOrCreateInteractiveWatchFaceClient с обработчиком PreviewImageUpdateRequestedListener . ( Ic31f0 )
  • Мы добавили Renderer.sendPreviewImageNeedsUpdateRequest , что полезно для циферблатов, имеющих состояние вне UserStyleSchema , влияющее на их внешний вид (например, циферблат с выбираемым фоновым изображением). На стороне клиента мы добавили PreviewImageUpdateRequestedListener в качестве необязательного параметра для getOrCreateInteractiveWatchFaceClient , чтобы отслеживать эти запросы. ( Iff44a )
  • Мы упростили API для отображения WatchFaceColors . Теперь есть простое свойство watchFaceColors в Renderer, которое может устанавливать циферблат часов; его следует обновлять по мере необходимости в ответ на любые изменения стиля. Вместо использования WallpaperManager для отслеживания изменений цвета мы добавили OnWatchFaceColorsListener в InteractiveWatchFaceClient . ( I490bc )
  • Мы добавили класс WatchFaceColors , который хранит три наиболее часто используемых цвета циферблата, а также добавили открытые методы watchfaceColors и notifyWatchFaceColorsChanged в класс Renderer, которые позволяют системе получать цвета циферблата через WallpaperManager.getWallpaperColors . ( I3d611 )
  • Теперь ShortTextComplicationData , RangedValueComplicationData , NoPermissionComplicationData (а также экспериментальные DiscreteRangedValueComplicationData , GoalProgressComplicationData и WeightedElementsComplicationData ) поддерживают SmallImages . Если циферблат выбирает отображение виджета с несколькими цветами, теперь у него есть возможность использовать многоцветное SmallImage тогда как ранее ему приходилось использовать монохромное изображение. ( I257df )
  • Преобразовать PreviewImageUpdateRequestedListener в Consumer<> ( Ia875d )
  • Замените пользовательский тип Single Abstract Method (SAM) OnWatchfaceColorsListener на универсальный тип Java SAM (Consumer) ( I0c489 )
  • Мы объявили устаревшими старые методы getOrCreateInteractiveWatchFaceClient и listenableGetOrCreateInteractiveWatchFaceClient , которые не указывают PreviewImageUpdateRequestedListener . ( Iec502 )

Исправлены ошибки

  • DisconnectReason.BINDER_DIED был переименован в DisconnectReason.ENGINE_DIED . ( I4eb0e )

Версия 1.2.0-alpha01

10 августа 2022 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.2.0-alpha01 . Версия 1.2.0-alpha01 содержит следующие коммиты.

Новые функции

  • Мы добавили экспериментальную поддержку различных новых форматов виджетов. Эта область находится в стадии активной разработки; эти новые форматы могут быть изменены без предварительного уведомления, и в настоящее время CanvasComplicationDrawable не поддерживает рендеринг.
  • Мы также добавили необязательные поля к слотам для виджетов, что упрощает нажатие на небольшие виджеты.

Изменения в API

  • Экспериментальный класс BoundingArc теперь является неизменяемым. ( If624a )
  • Небольшие сложные элементы могут быть сложны для нажатия. Чтобы упростить эту задачу, мы добавили поддержку полей, которые увеличивают область, доступную для нажатия, без влияния на отрисовку. Если не указано иное (в коде или XML), поля ComplciationSlots имеют нулевой размер. ( I14089 )
  • Изменена сигнатура функции getComplicationSlotInflationFactory(CurrentUserStyleRepository) для возврата ненулевого экземпляра фабрики. Ранее возврат null приводил к ошибке, поэтому это просто делает контракт API более понятным. ( I0fcc0 )
  • Мы добавили аргумент currentUserStyleRepository в метод WatchFaceService.getComplicationSlotInflationFactory , чтобы обеспечить согласованность с createComplicationSlotsManager . ( I2ddd2 )
  • Функция UserStyleFlavors перестала быть экспериментальной. ( I69cdc )
  • Мы удалили экспериментальный ValueType из RangedValueComplicationData и вместо него ввели экспериментальный DiscreteRangedValueComplicationData , который похож на RangedValueComplicationData за исключением диапазона и значения целых чисел. Мы также ввели экспериментальный GoalProgressComplicationData , который похож на RangedValueComplicationData за исключением того, что он предназначен для отслеживания прогресса в достижении цели, где min неявно равен нулю, а значение может быть больше targetValue . Обратите внимание, что для всех вариантов RangedValue необходимо указать хотя бы один из параметров monochromeImage, text или title. ( I9590c )
  • Мы удалили boundsWithMargins из ComplicationSlotState , потому что системное программное обеспечение не имеет для него применения. ( I42e26 )
  • Мы добавили экспериментальную поддержку WeightedElementsComplicationData , которая представляет собой массив элементов (пары веса и цвета) вместе с необязательным текстом/заголовком/изображением. Они могут отображаться в виде круговой диаграммы, где цвета должны быть значимыми в контексте, поскольку обычно в описании нет места для отображения подписей. ( I87eea )
  • Экспериментальные ColorRamps опционально используемые RangedValueComplicationData и GoalProgressComplicationData теперь позволяют задавать последовательность до семи цветов и флаг, указывающий, должны ли цвета плавно переходить друг в друга или же должны отображаться сплошные цветовые шаги одинакового размера. ( I9f5bf )
  • RangedValueComplicationData.drawSegmented изменено на valueType которое представляет собой целое число с соответствующим ValueType IntDef , придающим семантическое значение диапазону и которое может использоваться средством отрисовки виджета для влияния на стиль. ( I0616b )
  • Мы добавили экспериментальную поддержку необязательных ColorRanges в RangedValueComplicationData . Обычно виджеты отображаются цветами, выбранными циферблатом, но иногда ComplicationDataSource лучше использовать для установки цветов, например, когда они имеют определенное семантическое значение. Например, от красного к синему для температуры. ( I5153a )
  • Мы добавили экспериментальную подсказку drawSegmented в RangedValueComplicationData . Она указывает рендерерам рисовать индикатор диапазона значений сегментами, где 1 сегмент = 1 единица. ( I7d7c1 )

Исправлены ошибки

  • Мы добавили возможность задавать границы ComplicationSlotBounds относительно предопределенной системы координат экрана. ( I0985d )

Версия 1.1

Версия 1.1.1

10 августа 2022 г.

Выпущена версия androidx.wear.watchface:watchface-*:1.1.1 . Версия 1.1.1 содержит следующие коммиты.

  • Это релиз с исправлениями ошибок, и пользователям версии 1.1.0 настоятельно рекомендуется обновиться до этой.

Исправлены ошибки

  • Watch face initialization is asynchronous and if a complication is received before the watch face is ready it gets put on the pendingInitialComplications list and is applied later. Unfortunately pendingInitialComplications was applied too soon which meant there was a window of time during watch face initialization where complications would still get put on pendingInitialComplications and be ignored. This has now been fixed. In addition This patch fixes a bug where ComplicationRenderer was wrongly trying to load placeholders asynchronously, which failed leading to the compilation graphic never updating. Finally this patch fixes a hopefully theoretical bug where multiple pendingInitialComplications need to be merged. ( 0d03ba3 )

  • Fix potential deadlock in InteractiveInstanceManager where getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance was holding the lock longer than necessary. Usually we'd expect engine.setUserStyle to be quick but if for some reason it's not then we could end up with a deadlock/ANR. This patch moves unnecessary work out of the lock, removing the potential for a deadlock.( 5a2adca )

  • Fix several issues that retained WatchFaceService . The WakeLock can sometimes retain the WatchFaceService , adding a release() call fixes this. Also the StateFlows can retain WatchFaceService , canceling the underlying CoroutineScopes fixes that.( fd48138 )

  • Add timeouts to awaitDeferredWatchFace * and fix watchfaceOverlayStyle NullPointerException . In normal circumstances this shouldn't timeout including after fresh install and DirectBoot scenarios where the CPU load is high. We've also fixed a NPE if getWatchfaceOverlayStyle is called after close() .( a4c3a5a )

Версия 1.1.0

15 июня 2022 г.

androidx.wear.watchface:watchface-*:1.1.0 is released. Version 1.1.0 contains these commits.

Important changes since 1.0.0

Improved Editing:

  • We added support for hierarchical schemas, which allows a hierarchy of styles to be scribed by editor UIs. You can now specify separate icons for use by on watch face and companion editors.
  • There is opt-in support for multiple instances of a watch face, each instance has a unique ID available across all API surfaces.
  • You can now specify human readable names for ComplicationSlots for use in editors.
  • Experimental support for styling “flavors”, a curated selection of styles which will be visible from the companion editor.
  • When editing two instances of the watchface are loaded, it's now possible for watchface instances to share resources, saving memory
  • When picking a complication in the on watch face editor, the current provider is now preselected.

Improved Complications:

  • You can now specify the ComplicationType for the primary and secondary data sources, giving developers more flexibility for the out of box experience.
  • We added ComplicationDataTimeline which provides a sequence of time-gated data to be delivered to the watch face which can be cached and updated automatically. For example, today's weather forecast at various times or multiple upcoming calendar events.
  • The ComponentName of the complication provider is part of the ComplicationData .
  • Complications are now cached which provides a better experience when switching between watch faces.

Другие изменения:

  • The UserStyleSchema and ComplicationSlots can now be defined in XML. This simplifies watch face construction and allows for faster metadata queries from the system.
  • Watch faces can now influence the colors used for rendering the system overlay.

Version 1.1.0-rc01

18 мая 2022 г.

androidx.wear.watchface:watchface-*:1.1.0-rc01 is released. Version 1.1.0-rc01 contains these commits.

Новые функции

  • We've made some usability tweaks to watchface XML support, making it easier to specify ComplicationSlotBounds and supporting references. Experimentation with edge complication BoundingArc continues, plumbing it through to drawHighlight although it's not recommended for use at that time.

Изменения в API

  • We've added an experimental overload of drawHighlight which accepts a BoundingArc parameter. ( I705f8 )
  • Watch face XML now supports resource references. It lets you use the same constants both in XML and your code. ( I3ef61 )
  • We've added the ability to define ComplicationSlotBounds in center_x , center_y , size_x , size_y form. Now it is also possible to use different units (ie dp) using resource references. ( Iace98 )

Исправлены ошибки

  • Fix runBlockingWithTracing which was running tasks on the wrong context.( 4f595fe )
  • Make BaseEditorSession.close synchronous. The problem with BaseEditorSession.close being asynchronous is that we release the ComplicationDataSourceInfoRetriever too late leading to warning spam in logcat. This was probably harmless but logcat spam is distracting and should be avoided.( 35a5308 )

Version 1.1.0-beta02

11 мая 2022 г.

androidx.wear.watchface:watchface-*:1.1.0-beta02 is released. Version 1.1.0-beta02 contains these commits.

Новые функции

  • We've added experimental support for new ComplicationData types, these are not yet ready for use but watch this space.

Изменения в API

  • We've added BoundingArc , an experimental class that describes the geometry of an edge complication slot. This has been added to ComplicationSlot and plumbed through to ComplicationSlotState and WatchFaceMetadataClient . ( I61a40 )
  • We've added the ability to inherit settings in UserStyleSetting XML. It lets you reduce verbosity and share a setting between watchfaces. ( Ief841 )
  • We have added two new experimental types of ComplicationData : ListComplicationData & ProtoLayoutComplicationData . Currently there's no rendering support for either of these types and WearOS doesn't currently recognize these types if added to a ComplicationDataSource's manifest. ( I1811c )

Исправлены ошибки

  • Fix serialization of TimeLineEntry type. We were not serializing the TimeLineEntry type which meant cached TimeLineEntries of type NoData would be incorrectly interpreted as having the parent complication's type leading to NPEs when non-existent required fields were accessed. ( 55ffdf5 )
  • Fix a bug where setComplicationData dropped timeline fields( fb392f5 )
  • Fixes a bug where very occasionally runBlockingWithTracing would lead to an NPE( 12ca62e )
  • Fixes a bug where we sometimes get ClassNotFoundException: android.support.wearable.complications.ComplicationText when receiving a complication.( 217942d9 )
  • Fixes a bug in GlesRenderer.backgroundThreadInitInternal where it was only calling onBackgroundThreadGlContextCreated if EGL14.eglCreateContext was called. Fixes another bug where there was a visual glitch in the screenshot caused by verticalFlip .( c674ad2 )
  • Fix WatchFaceService XML version check, it was loading from the wrong package.( dfa06f3 )
  • Placeholder wire format now uses an inner bundle. We don't want placeholders to break existing watchfaces which might use the hidden inner aswcComplicationData. Previously the wire format of a NoDataComplication data stored the placeholder in the usual fields (problematic because old watch faces would render the placeholder string which isn't intended), instead we now use an inner bundle to fully isolate this.( d5e7bd2 )

Version 1.1.0-beta01

20 апреля 2022 г.

androidx.wear.watchface:watchface-*:1.1.0-beta01 is released. Version 1.1.0-beta01 contains these commits.

Изменения в API

  • Now WatchFaceMetadataClient methods ( getUserStyleSchema , getComplicationSlotMetadataMap , getUserStyleFlavors ) and HeadlessWatchFaceClient.getUserStyleFlavors throw unchecked RuntimeException instead of WatchFaceException . ( I0718a )
  • WatchFaceMetadataClient.WatchFaceException has been moved out of the class to allow it to be reused. ( I4e869 )

Исправлены ошибки

  • WatchFaceMetadataClient will no longer crash when sent partial ComplicationSlotBounds .( Iaafd )

Version 1.1.0-alpha05

April 6, 2022

androidx.wear.watchface:watchface-*:1.1.0-alpha05 is released. Version 1.1.0-alpha05 contains these commits.

Новые функции

  • You can now tell which data source sent a ComplicationData by inspecting ComplicationData.dataSource , some watch faces may use this to customize complication display. ( I44a73 )

Изменения в API

  • Renderer.CanvasRenderer and Renderer.GlesRenderer have been deprecated in favor of Renderer.CanvasRenderer2 and Renderer.GlesRenderer2 which support SharedAssets which are passed to the render methods. For java interop we've introduced ListenableCanvasRenderer2 and ListenableGlesRenderer2 . ( I31ffa )
  • Added @WatchFaceFlavorsExperimental ability to define flavors - preconfigured list of styled watchfaces ( I04dd0 )
  • Renderer.sharedAssets is now a StateFlow and we've removed the unused Renderer.SharedAssetsFactory ( I12ac5 )
  • UserStyleSchema.userStyleSettings is not deprecated anymore ( Iba7e3 )
  • We've added HeadlessWatchFaceClient.getUserStyleSchemaDigestHash which allows a HeadlessWatchFaceClient to avoid the relatively low overhead of passing the schema over AIDL before computing the digest hash. ( I33597 )
  • We've added isUserStyleSchemaStatic to WatchFaceMetadataClient which is true if and only if the UserStyleSchema can be relied on not to change unless the watch face APK is updated. ( I45a3f )
  • We have added getDigestHash to UserStyleSchema which computes a digest hash of the schema. This can be used to efficiently determine if the UserStyleSchema has changed. ( I2063d )
  • METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIGURATION_SUPPORTED renamed to METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIG_SUPPORTED ( I9ba5d )
  • UserStyleSetting.OnWatchEditorData has been renamed to UserStyleSetting.WatchFaceEditorData , it contains data that's used purely by the on watch face editor. ( If3afb )

Version 1.1.0-alpha04

March 9, 2022

androidx.wear.watchface:watchface-*:1.1.0-alpha04 is released. Version 1.1.0-alpha04 contains these commits.

Изменения в API

  • Up to date ComplicationData may not always be available (eg expired cached ComplicationData) so we've extended NoDataComplication with an optional placeholder ComplicationData and added ComplicationText.PLACEHOLDER , MonochromaticImage.PLACEHOLDER , SmallImage.PLACEHOLDER , PhotoImage.PLACEHOLDER which are only allowed to be used inside the context of a NoDataComplicationData placeholder. If selected these placeholders are suggested to be rendered with gray boxes/arcs. ( I6285d )
  • We've added ComplicationData.getNextChangeInstant which tells you the next Instant after the reference Instant at which any field of the complication may change. This is used internally to schedule frames for complication updates. Eg if a watch face normally updates once per minute, setting the stop watch complication will cause it to update once per second. ( I7ceb2 )
  • EditorSession.watchFaceId can now be used on all API levels. In addition its value will now always be consistent with WatchState.watchFaceInstanceId . ( I323b9 )
  • The getPendingIntentForTouchEvent API is no longer necessary since the underlying issue has been fixed in the framework, so all the related APIs have been removed. Watchfaces do not need to do anything special for PendingIntents to fire, even if the home button has recently been pressed. ( I1f2e8 )
  • We've added RendererParameters.isForScreenShot which will be true if the render is for a screen shot. Some watch faces with animations need to know this in order to make adjustments to ensure the best results. ( I96d99 )
  • We've added WatchFaceExceptionReason to WatchFaceException to give some context to what went wrong. ( I01d15 )
  • ComplicationDataSourceService.onImmediateComplicationRequest has been removed, instead ComplicationRequest.immediateResponseRequired has been added to signal that the provider needs to respond quickly (ideally responding in < 100ms). Note this functionality is guarded behind the privileged com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE permission. ( Ie6b23 )
  • Updated nullability in core and appcompat to match Tiramisu DP2 ( I0cbb7 )

Исправлены ошибки

  • Now watchface app crashes with an exception if the schema validation fails ( Ia400f )

Version 1.1.0-alpha03

9 февраля 2022 г.

androidx.wear.watchface:watchface-*:1.1.0-alpha03 is released. Version 1.1.0-alpha03 contains these commits.

Изменения в API

  • We've added experimental support for hierarchical style schemas. We've added a new property to androidx.wear.watchface.style.UserStyleSetting.Option , childSettings which is initially only used by ListOption . This allows a hierarchy of styles to be described for use by Editor UIs, the underlying UserStyle is unchanged and is still a Map<String, ByteArray> . ( Iaf6f4 )
  • We've added WatchFace.OverlayStyle which allows the watch face to configure the rendering of the system status overlay. ( I8520d )
  • We've introduced clearWithBackgroundTintBeforeRenderingHighlightLayer a new optional constructor parameter for CanvasRenderer (default is false), if set to true then the canvas will be cleared with the background tint color. ( Ie01e5 )
  • Added androidx.watchface.complications.datasource.DEFAULT_CONFIGURATION_SUPPORTED metadata key which allows complication data sources to indicate they can provide a default value without any configuration ( Icc0d4 )
  • It's common when editing a watch face for there to be both an interactive and a headless instance. To help save memory we've introduced Renderer.SharedAssets which allows a watch face renderer to share immutable data (eg textures and shaders) between instances. GlesRenderer.setEglConfig and GlesRenderer.setEglDisplay are deprecated, it was never intended for these to be settable, and doing so would have led to undefined behavior. ( I0d9e7 )
  • We've added setNameResourceId & setScreenReaderNameResourceId (which reference string resources) to ComplicationSlot.Builder and corresponding getters in androidx.wear.watchface.client.ComplicationSlotState . This allows the system to fetch the names of ComplicationSlots for use in editors and screen readers. ( If6c6a )
  • WatchfaceMetadataClient.getUserStyleSchema and getComplicationSlotMetadataMap now throw WatchFaceException instead of RemoteException . ( I86f11 )
  • onSynchronousComplicationRequest and related functions in ComplicationDataSourceService have been renamed to onImmediateComplicationRequest etc... ( I87ba0 )
  • Watch face editors have much less screen real estate than companion editors, therefore it makes sense to support different icons for on watch face editors. This patch adds OnWatchEditorData (currently containing just an icon) to all UserStyleSettings and where appropriate their Option classes. ( If1886 )
  • We've added @JvmOverloads to ListenableGlesRenderer's constructor for better java interop. ( I2974a )

Исправлены ошибки

  • ListenableGlesRenderer 's constructor is now correctly marked as @Throws(GlesException::class) , and it is now possible to extend this class in java. ( Iac6d0 )
  • Fixes bug with PhotoImageComplicationData tapAction not being correctly handled ( I1cc30 )

Version 1.1.0-alpha02

12 января 2022 г.

androidx.wear.watchface:watchface-*:1.1.0-alpha02 is released. Version 1.1.0-alpha02 contains these commits.

Новые функции

  • To aid debugging and testing, ComplicationData and related subclasses now have overridden hashcode, equals and toString methods making them easier to work with.

Изменения в API

  • WatchfaceMetadataClient methods once again throw RemoteExceptions where appropriate, making it easier for client code to catch errors from the watch face. ( I78785 )
  • ComplicationData and sub classes now have hashcode, equals and toString. ( I24bc6 )

Version 1.1.0-alpha01

15 декабря 2021 г.

androidx.wear.watchface:watchface-*:1.1.0-alpha01 is released. Version 1.1.0-alpha01 contains these commits.

Новые функции

  • The UserStyleSchema and ComplicationSlots can now be defined in XML. This simplifies watch face construction. In addition, WatchFaceMetadataClient queries are faster because it doesn't need to bind to the service to get the metadata. The WatchFaceMetadataClient and ListenableWatchFaceMetadataClient are no longer experimental and will become part of the stable api. The system will be able to optionally support multiple instances of a watch face, each with distinct user defined styling options. These will be visible in the watch face picker. To opt into this a watch face must include the following meta data tag in its manifest.

        <meta-data
            android:name="androidx.wear.watchface.MULTIPLE_INSTANCES_ALLOWED"
            android:value="true" />
    
  • Some watch faces have state that's not captured in the UserStyle , to support this and multiple instances, the watch face's instance ID is now available via WatchState.watchFaceInstanceId .

  • ComplicationData is now being cached to allow complications to be displayed immediately upon loading. Sometimes ComplicationData is cached in memory by the system and sometimes it is serialized by the watch face libraries. When serialized any associated tapAction will be lost, if this happens ComplicationData.tapActionLostDueToSerialization will return true and the watch face should render the complication differently (eg grayed out or semi-transparent) to signal that it can't be tapped. The system will send updated ComplicationData with a tapAction as soon as possible.

  • Some ComplicationData shouldn't be cached for a long time, to support this we've added a more general feature ComplicationDataTimeline . This can be used to provide a sequence of time-gated ComplicationData to be delivered to the watch face which can be cached and updated automatically. For example, today's weather forecast at various times or multiple upcoming calendar events. ComplicationRequestListener has been extended with a new method onComplicationDataTimeline which you can use to return this data.

  • DefaultComplicationDataSourcePolicy has been extended so you can specify the ComplicationType for the primary and secondary data sources.

  • We've added support for synchronous complication providers where the complication is updated at a higher frequency than normal, up to once per second when the watch face is visible and non-ambient. Note: synchronous complication providers may have limited usage due to memory pressure concerns.

  • The PendingIntentTapListener changes are likely to be reverted because we solved the underlying problem (it's not possible for the watch face to launch activities for 5 seconds after pressing the home button) in the framework instead.

Изменения в API

  • ComplicationData.isCached has been changed to tapActionLostDueToSerialization which is more useful when determining if the complication slot should be rendered differently to signal that it can't be tapped. ( I6de2f )
  • Added ComplicationDataTimeline to wear-complication-data-source . This can be used to provide a sequence of time-gated ComplicationData to be delivered to the watch face which can be cached and updated automatically. For example, today's weather forecast at various times or multiple upcoming calendar events. ComplicationRequestListener has been extended with a new method onComplicationDataTimeline which you can use to return this data. There's a new kotlin wrapper SuspendingTimelineComplicationDataSourceService for suspending data source services. ( Idecdc )
  • Added PendingIntentTapListener and WatchFaceControlClient.getPendingIntentForTouchEvent . This can help watch faces that need to launch intents in response to taps to work around a problem where the framework blocks launching new activities for 5 seconds after pressing the home button. ( I98074 )
  • Introduced a per-watchface ComplicationData cache. The purpose of this is to allow the watch face to display last known complication data values upon loading until the system has had a chance to update them. There is a new API method WatchFaceControlClient.hasComplicationCache intended for OEMs. This may influence the system's strategy for sending complications to a watch face. In addition, ComplicationData has an isCached property and it is recommended that cached complications are rendered differently because the tapAction can not be cached and will be null in a cached complication. ( I404b0 )
  • The watch face's instance ID is now available via WatchState.watchFaceInstanceId . Most watch faces won't need to use this, but if there's a per-watch face state that's not stored in the Schema then this is the key to use to identify the watch face instance. To help support this you can now provide an ID when calling WatchFaceControlClient.createHeadlessWatchFaceClient . ( I1ff98 )
  • Extended DefaultComplicationDataSourcePolicy with the ability to set the default ComplicationTypes for the primary, secondary provider and for the fallback system provider. ComplicationSlot.defaultDataSourceType is now deprecated. ( If0ce3 )
  • ComplicationSlot.configExtras is now mutable and can be updated before calling EditorSession.openComplicationDataSourceChooser() . ( I6f852 )
  • Added WatchFace.setComplicationDeniedDialogIntent and setComplicationRationaleDialogIntent . These intents are launched to to show a rationale dialog before requesting complication permissions, and another dialog explaining that complication permission is needed when trying to edit a complication when permissions have been denied (the provider chooser will fail to open so the dialog is needed). ( I3a29c )
  • The UserStyleSchema and ComplicationSlots can now be defined in XML. This simplifies watch face construction and makes WatchFaceMetadataClient queries faster as they do not need to bind to the service to get the metadata. ( I85bfa )
  • Added InteractiveWatchFaceClient.supportsPendingIntentForTouchEvent so a client can determine if a watch face supports getPendingIntentForTouchEvent . ( I0b917 )
  • WatchFaceMetadataClient and ListenableWatchFaceMetadataClient are no longer experimental. They can be used to efficiently obtain watch face metadata, where possible without opening a binder to the watch face. ( Ibb827 )
  • Added support for synchronous complication providers where the complication is updated at a higher frequency than normal, up to once per second when the watch face is visible and non-ambient. To use this the provider must include a new androidx.wear.watchface.complications.data.source.SYNCHRONOUS_UPDATE_PERIOD_SECONDS metadata tag in its manifest and override onSynchronousComplicationRequest . Depending on the nature of the data source, it may also need to override onStartSynchronousComplicationRequests and onStopInteractiveComplicationRequests to get notifications of when the complication enters and exits interactive mode. ( I8fe9d )

Версия 1.0

Версия 1.0.1

9 февраля 2022 г.

androidx.wear.watchface:watchface-*:1.0.1 is released. Version 1.0.1 contains these commits.

Исправлены ошибки

  • Fixes bug with PhotoImageComplicationData tapAction not being correctly handled ( I1cc30 )

Версия 1.0.0

1 декабря 2021 г.

androidx.wear.watchface:watchface-*:1.0.0 is released. Version 1.0.0 contains these commits.

Major Features of 1.0.0

The androidx.wear.watchface package is the new recommended library for developing WearOS watch faces. It has a number of new features over the old Wearable Support Library.

  • User styling (eg to change the color palette, the style of the watch hands, the look of the hour marks etc) is directly supported by the library (see androidx.wear.watchface.style ). It's now much easier to develop an on watch face editor using androidx.wear.watchface.editor and your watch face can be edited from the system companion app without you needing to write any extra code.
  • Best practices baked in. The library automatically generated screen reader content labels for complications (you can also add your own ones), and the framerate automatically drops when the battery is low and not charging to improve battery life.
  • Less code is needed to develop a watch face, especially for complications where a lot of the boilerplate has moved into the library.

Исправлены ошибки

  • Fix EditorSession.userStyle.compareAndSet ( I6f676 )
  • Fix very short watch face delays ( Iffb97 )
  • Dispatch InteractiveWatchFaceImpl.onDestroy on the UI thread ( I83340 )
  • Fix several problems with broadcast receivers ( I7d25f )

Version 1.0.0-rc01

3 ноября 2021 г.

androidx.wear.watchface:watchface-*:1.0.0-rc01 is released. Version 1.0.0-rc01 contains these commits.

Исправлены ошибки

  • Fix dump() (called by adb shell dumpsys) which got broken by flow migrations. ( 087cf9e )

  • Ensure proper ordering of writeDirectBootPrefs. We want writeDirectBootPrefs to always run after initStyleAndComplications or we risk delaying UI thread init.( 37650ac )

  • Ensure Renderer.onDestroy is called. In the scenario where the renderer has been created but WF init has not completed and Engine.onDestroy is called, we need to call Renderer.onDestroy. ( f9952dc )

  • Optimization/fix to isBatteryLowAndNotCharging. This patch moves the initial setup of isBatteryLowAndNotCharging earlier which means it can be done in parallel with createWatchFace. In addition we now listen to ACTION_POWER_DISCONNECTED. ( ddffd80

  • InteractiveWatchFaceClientImpl.isConnectionAlive to be false after close ( ab9774e )

Версия 1.0.0-beta01

27 октября 2021 г.

androidx.wear.watchface:watchface-*:1.0.0-beta01 is released. Version 1.0.0-beta01 contains these commits.

Version 1.0.0-alpha24

October 13, 2021

androidx.wear.watchface:watchface-*:1.0.0-alpha24 is released. Version 1.0.0-alpha24 contains these commits.

Изменения в API

  • Classes in package androidx.wear.watchface.complications have been moved into a new wear:watchface:watchface-complications project. Note this means you can't include this library as well as any previous alpha version of wear:watchface:watchface-complications-data because you'll get errors about duplicate classes. ( I97195 )
  • Renderer.dump has been renamed to Renderer.onDump and has been annotated with @UiThread. ( I44845 )
  • InteractiveWatchFaceClient.addWatchFaceReadyListener has been renamed to addOnWatchFaceReadyListener and removeWatchFaceReadyListener has been renamed to removeOnWatchFaceReadyListener . ( I48fea )
  • EditorSession getComplicationsPreviewData and getComplicationsDataSourceInfo are no longer suspend functions, instead they are StateFlow<> properties whose value is initially null. In ListenableEditorSession getListenableComplicationPreviewData and getListenableComplicationsProviderInfo have been removed in favor of the new StateFlow<> objects from the base class. If you need to listen to changes in java code, consider using androidx.lifecycle.FlowLiveDataConversions.asLiveData to convert to LiveData<> . ( Ic5483 )

Version 1.0.0-alpha23

29 сентября 2021 г.

androidx.wear.watchface:watchface-*:1.0.0-alpha23 is released. Version 1.0.0-alpha23 contains these commits.

Новые функции

The watchface library is now a single library group, and as a result the libraries have moved and you will need to update your gradle imports as follows:

Старый Новый
androidx.wear:wear-complications-data androidx.wear.watchface:watchface-complications-data
androidx.wear:wear-complications-data-source androidx.wear.watchface:watchface-complications-data-source
androidx.wear:wear-watchface androidx.wear.watchface:watchface
androidx.wear:wear-watchface-complications-rendering androidx.wear.watchface:watchface-complications-rendering
androidx.wear:wear-watchface-client androidx.wear.watchface:watchface-client
androidx.wear:wear-watchface-client-guava androidx.wear.watchface:watchface-client-guava
androidx.wear:wear-watchface-data androidx.wear.watchface:watchface-data
androidx.wear:wear-watchface-editor androidx.wear.watchface:watchface-editor
androidx.wear:wear-watchface-editor-guava androidx.wear.watchface:watchface-editor-guava
androidx.wear:wear-watchface-guava androidx.wear.watchface:watchface-guava
androidx.wear:wear-watchface-style androidx.wear.watchface:watchface-style

Изменения в API

  • Migrate the separate androidx.wear Watchface and complications libraries into androidx.wear.watchface library group. ( b25f3c0 )
  • Added EditorRequest.canWatchFaceSupportHeadlessEditing to let a client know if a watchface editor supports headless editing. Note there will be some false negatives with this because support was added in asop/1756809 however it will return the correct value for all future watchfaces. ( ca55590 )
  • Renderer now has a dump() method which can be overridden to add custom data to the information generated by ABD shell dumpsys activity service WatchFaceService. ( 95235f9 )
  • InteractiveWatchFaceClient.addWatchFaceReadyListener now specifies the executor first. ( 563ac2f )
  • StateFlowCompatHelper has been removed. asLiveData (androidx.lifecycle.asLiveData) should be used instead. ( bd35d3 )
  • CurrentUserStyleRepository.userStyle is no longer mutable. ( I44889 )
  • WatchFaceReadyListener has been renamed to OnWatchFaceReadyListener. ( Ic12a9 )

Исправлены ошибки

  • InteractiveInstanceManager.deleteInstance to call onDestroy This is needed to ensure InteractiveWatchFaceImpl gets garbage collected.( fce4af8 , b/199485839 )