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

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

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

Кроме того, начиная с начала 2025 года (конкретная дата будет объявлена ​​в четвертом квартале 2024 года) все новые циферблаты, публикуемые в Google Play, должны использовать формат циферблата.

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

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

Чтобы добавить зависимость от 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"
}

Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .

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

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

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

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

Версия 1.3

Версия 1.3.0-альфа03

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-альфа02

3 апреля 2024 г.

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

Новые возможности

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

Изменения API

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

Версия 1.3.0-альфа01

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() и передается различным методам создания в качестве параметра. ( Если8а99 )
  • Мы добавили getUserStyleFlavors в InteractiveWatchFaceClient , что представляет интерес в первую очередь для OEM-производителей. ( I0f5d8 )
  • GlesRenderer2 теперь имеет перегрузку конструктора, которая позволяет вам указать список атрибутов, которые нужно попробовать по очереди с помощью eglChooseConfig . Это, например, позволяет вам сначала попробовать конфигурацию со сглаживанием и при необходимости вернуться к конфигурации без него. ( I1ba74 )
  • Начиная с Android U, в WearOS будет добавлена ​​поддержка SystemDataSources.DATA_SOURCE_HEART_RATE . Это усложнение гарантированно поддерживает только усложнения SHORT_TEXT , но для ComplicationSlot рекомендуется также принимать SMALL_IMAGE , поскольку OEM-производители могут выбрать предоставление ярлыка для своего приложения для здоровья вместо текущего значения. ( 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 OEM-производители смогут определять, исходит ли запрос на усложнение от циферблата из списка, определенного метаданными 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-бета02

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

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

Новые возможности

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

Изменения API

  • Вернуть «Открыть новый источник данных о погодных осложнениях». ( I6f335 )

Версия 1.2.0-бета01

23 августа 2023 г.

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

Новые возможности

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

Изменения API

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

Версия 1.2.0-альфа09

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 . ( Если1c01 )
  • Добавьте AppDataKey для доступа к состоянию отправки приложения; Добавьте PlatformDataKey для доступа к данным платформы; Добавьте поддержку пространства имен в StateStore . ( I7985e )
  • Методы enable / disablePlatformSource были удалены из DynamicTypeEvaluator . Ответственность за обновления должна нести вызывающая сторона. ( I78c6d )
  • Разрешить ограничение размера связанных типов данных. ( Ie2966 )

Версия 1.2.0-альфа08

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 ).
  • Дополнительные исключения из перечисления valueOf ( I818fe )
  • Мы удалили renderWatchFaceToSurface в пользу createRemoteWatchFaceView , который построен на основе SurfaceControlViewHost и позволяет вызывающему объекту встроить представление с циферблата, которое отображается, когда клиент вызывает RemoteWatchFaceViewHost#renderWatchFace . ( Ib311d )
  • Мы добавили renderWatchFaceToSurface в InteractiveWatchFaceClient , HeadlessWatchFaceClient и EditorSession . Обычно это более производительно, чем рендеринг в растровое изображение. ( Иекад )
  • ObservableStateStore переименован в StateStore . ( Ieb0e2 )
  • Добавлен DynamicTypeEvaluator.Builder вместо аргументов конструктора, чтобы разрешить использование дополнительных аргументов, включая ObservableStateStore , который теперь по умолчанию имеет пустое хранилище. ( I6f832 )
  • Переработан порядок параметров в DynamicTypeEvaluator . ( Ic1ba4 )
  • К методам DynamicTypeEvaluator.bind добавлен Исполнитель. ( I346ab )
  • Мы добавили метод startEvaluation в BoundDynamicType чтобы запускать оценку после привязки динамического типа. ( я19908 )
  • Поставщики осложнений с привилегированными полномочиями 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-альфа07

22 февраля 2023 г.

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

Новые возможности

  • В Android T OEM-производители смогут определять, исходит ли запрос на усложнение от циферблата из списка, определенного метаданными 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 , чтобы клиент мог определить, должен ли он эмулировать поддержку или нет от имени старых циферблатов. ( я24c89 )
  • Мы решили, что 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-альфа06

25 января 2023 г.

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

Новые возможности

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

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

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

Версия 1.2.0-альфа05

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-альфа04

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 в код равенства и хеш-код. Убедитесь, что onRenderParametersChanged получает правильное значение isForScreenshot ( I04a41 ).
  • Исправлены утечки WatchFaceControlService из безголовых клиентов. ( е90е00 )

Версия 1.2.0-альфа03

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 действовало как корень gc и сохраняло активность редактора. ( 33ee06 )

Версия 1.2.0-альфа02

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

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

Новые возможности

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

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

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

Изменения API

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

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

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

Версия 1.2.0-альфа01

10 августа 2022 г.

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

Новые возможности

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

Изменения API

  • Экспериментальный класс BoundingArc теперь является неизменяемым. ( Если624а )
  • Небольшие осложнения могут быть сложными для устранения. Чтобы смягчить эту проблему, мы ввели поддержку полей, которые увеличивают область касания, не влияя на рендеринг. Если не указано иное (в коде или через XML), ComplciationSlots имеет поля нулевого размера. ( I14089 )
  • Изменена подпись getComplicationSlotInflationFactory(CurrentUserStyleRepository) для возврата ненулевого экземпляра фабрики. Раньше при возврате значения null возникала ошибка, так что это просто делает контракт API более понятным. ( I0fcc0 )
  • Мы добавили аргумент currentUserStyleRepository в метод WatchFaceService.getComplicationSlotInflationFactory , чтобы обеспечить совместимость с createComplicationSlotsManager . ( I2ddd2 )
  • UserStyleFlavors стали неэкспериментальной функцией. ( I69cdc )
  • Мы удалили экспериментальный ValueType из RangedValueComplicationData и вместо этого ввели экспериментальный DiscreteRangedValueComplicationData , который похож на RangedValueComplicationData , за исключением целочисленного диапазона и значения. Мы также представили экспериментальную GoalProgressComplicationData , которая похожа на RangedValueComplicationData , за исключением того, что она предназначена для продвижения к цели, где min неявно равно нулю, а значение может быть больше, чем targetValue . Обратите внимание, что для всех вариантов RangedValue должен быть указан хотя бы один из monoImage, 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 настоятельно рекомендуется выполнить обновление.

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

  • Инициализация циферблата является асинхронной, и если усложнение получено до того, как циферблат будет готов, оно помещается в список pendingInitialComplications и применяется позже. К сожалению, pendingInitialComplications был применен слишком рано, а это означало, что во время инициализации циферблата был период времени, когда осложнения все равно попадали в pendingInitialComplications и были проигнорированы. Теперь это исправлено. Кроме того, этот патч исправляет ошибку, из-за которой ComplicationRenderer ошибочно пытался асинхронно загрузить заполнители, что не удавалось, что приводило к тому, что графика компиляции никогда не обновлялась. Наконец, этот патч исправляет, надеюсь, теоретическую ошибку, при которой необходимо объединить несколько pendingInitialComplications . ( 0d03ba3 )

  • Устраните потенциальную взаимоблокировку в InteractiveInstanceManager , когда getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance удерживал блокировку дольше, чем необходимо. Обычно мы ожидаем, что engine.setUserStyle будет работать быстро, но если по какой-то причине это не так, мы можем получить тупик или ANR. Этот патч удаляет ненужную работу из блокировки, устраняя возможность возникновения взаимоблокировки. ( 5a2adca ).

  • Исправлено несколько проблем, из-за которых сохранялся WatchFaceService . WakeLock иногда может сохранять WatchFaceService , добавление вызова release() исправляет это. Также StateFlows может сохранять WatchFaceService , отменяя базовые исправления CoroutineScopes ( fd48138 ).

  • Добавьте таймауты в awaitDeferredWatchFace * и исправьте watchfaceOverlayStyle NullPointerException . В обычных обстоятельствах тайм-аут не должен превышаться, в том числе после новой установки и в сценариях DirectBoot с высокой загрузкой ЦП. Мы также исправили NPE, если getWatchfaceOverlayStyle вызывается после close() .( a4c3a5a ).

Версия 1.1.0

15 июня 2022 г.

Выпущен androidx.wear.watchface:watchface-*:1.1.0 . Версия 1.1.0 содержит эти коммиты.

Важные изменения с версии 1.0.0

Улучшенное редактирование:

  • Мы добавили поддержку иерархических схем, что позволяет создавать иерархию стилей с помощью пользовательского интерфейса редактора. Теперь вы можете указать отдельные значки для использования в редакторах циферблата и сопутствующих редакторах.
  • Существует добровольная поддержка нескольких экземпляров циферблата, каждый экземпляр имеет уникальный идентификатор, доступный на всех поверхностях API.
  • Теперь вы можете указать удобочитаемые имена для ComplicationSlots для использования в редакторах.
  • Экспериментальная поддержка стилей «ароматов», тщательно подобранный набор стилей, которые будут видны в сопутствующем редакторе.
  • При редактировании двух экземпляров циферблата загружаются экземпляры циферблата теперь могут совместно использовать ресурсы, экономя память.
  • При выборе осложнения в редакторе циферблата текущий поставщик теперь выбирается заранее.

Улучшенные осложнения:

  • Теперь вы можете указать ComplicationType для первичного и вторичного источников данных, что дает разработчикам больше гибкости при работе с готовой версией.
  • Мы добавили ComplicationDataTimeline , который обеспечивает последовательность данных с ограничением по времени, которые должны быть доставлены на циферблат, которые можно кэшировать и автоматически обновлять. Например, прогноз погоды на сегодня в разное время или несколько предстоящих событий календаря.
  • ComponentName поставщика осложнений является частью ComplicationData .
  • Осложнения теперь кэшируются, что обеспечивает удобство переключения между циферблатами.

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

  • UserStyleSchema и ComplicationSlots теперь можно определить в XML. Это упрощает создание циферблата и позволяет быстрее запрашивать метаданные из системы.
  • Циферблаты теперь могут влиять на цвета, используемые для рендеринга системного наложения.

Версия 1.1.0-rc01

18 мая 2022 г.

Выпущен androidx.wear.watchface:watchface-*:1.1.0-rc01 . Версия 1.1.0-rc01 содержит эти коммиты.

Новые возможности

  • Мы внесли некоторые изменения в удобство использования для поддержки XML циферблата, упрощая указание ComplicationSlotBounds и вспомогательных ссылок. Эксперименты с усложнением ребер BoundingArc продолжаются, переходя к drawHighlight , хотя на данный момент его использование не рекомендуется.

Изменения API

  • Мы добавили экспериментальную перегрузку drawHighlight , которая принимает параметр BoundingArc . ( I705f8 )
  • XML циферблата теперь поддерживает ссылки на ресурсы. Это позволяет вам использовать одни и те же константы как в XML, так и в вашем коде. ( I3ef61 )
  • Мы добавили возможность определять ComplicationSlotBounds в форме center_x , center_y , size_x , size_y . Теперь также можно использовать разные единицы измерения (например, dp), используя ссылки на ресурсы. ( Iace98 )

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

  • Исправлена ​​ошибка runBlockingWithTracing , из-за которой задачи выполнялись в неправильном контексте. ( 4f595fe ).
  • Сделайте BaseEditorSession.close синхронным. Проблема с BaseEditorSession.close Клоуз асинхронна заключается в том, что мы выпускаем ComplicationDataSourceInfoRetriever слишком поздно, что приводит к предупреждению спама в LogCat. Это было, вероятно, безвредно, но спам Logcat отвлекает и следует избегать. ( 35A5308 )

Версия 1.1.0-бета02

11 мая 2022 г.

androidx.wear.watchface:watchface-*:1.1.0-beta02 выпускается. Версия 1.1.0-beta02 содержит эти коммиты.

Новые возможности

  • Мы добавили экспериментальную поддержку для новых типов ComplicationData , они еще не готовы к использованию, но смотрите это пространство.

API меняется

  • Мы добавили BoundingArc , экспериментальный класс, который описывает геометрию слота с осложнением края. Это было добавлено к ComplicationSlot и складывалось WatchFaceMetadataClient ComplicationSlotState . ( I61a40 )
  • Мы добавили возможность наследовать настройки в UserStyleSetting XML. Это позволяет уменьшить многословие и разделить настройку между сторожевыми площадками. ( IEF841 )
  • Мы добавили ProtoLayoutComplicationData новых экспериментальных типа ComplicationData ListComplicationData В настоящее время нет никакой поддержки рендеринга для любого из этих типов, и WoroS в настоящее время не распознает эти типы, если добавлено в манифест ComplicationDataSource's . ( I1811c )

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

  • Исправлена ​​сериализация типа TimeLineEntry . Мы не сериализовали тип TimeLineEntry , который означал, что кэшированные TimeLineEntries типа Nodata были бы неправильно интерпретированы как наличие типа родительского осложнения, ведущего к NPE, когда доступ к не существующим полям. ( 55ffdf5 )
  • Исправить ошибку, где setComplicationData сбросил поля временной шкалы ( FB392F5 )
  • Исправляет ошибку, в которой очень время отредка runBlockingWithTracing приведет к NPE ( 12CA62E )
  • Исправляет ошибку, в которой мы иногда получаем ClassNotFoundException: android.support.wearable.complications.ComplicationText при получении осложнения. ( 217942d9 )
  • Исправляет ошибку в GlesRenderer.backgroundThreadInitInternal , где она называлась только onBackgroundThreadGlContextCreated , если был вызван EGL14.eglCreateContext . Исправляет еще одну ошибку, в которой был визуальный сбой на скриншоте, вызванном verticalFlip . ( C674AD2 )
  • Исправить проверку версии xml WatchFaceService , он загружался из неправильного пакета. ( DFA06F3 )
  • Формат заполнителя теперь использует внутренний пакет. Мы не хотим, чтобы заполнители разбивали существующие часовые места, которые могут использовать скрытую внутреннюю AswccomplicationData. Ранее формат провода данных NoDataComplication , хранящихся за заполнителем в обычных полях (проблематично, потому что старые лиц с часами будут делать строку заполнителя, которая не предназначена), вместо этого мы теперь используем внутренний пакет для полного изолята. ( D5E7BD2 ).

Версия 1.1.0-бета01

20 апреля 2022 г.

androidx.wear.watchface:watchface-*:1.1.0-beta01 выпускается. Версия 1.1.0-beta01 содержит эти коммиты.

API меняется

  • Теперь методы WatchFaceMetadataClient ( getUserStyleSchema , getComplicationSlotMetadataMap , getUserStyleFlavors ) и HeadlessWatchFaceClient.getUserStyleFlavors бросают без контроля RuntimeException вместо WatchFaceException . ( I0718a )
  • WatchFaceMetadataClient.WatchFaceException был выведен из класса, чтобы позволить его повторно использовать. ( I4e869 )

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

  • WatchFaceMetadataClient больше не будет разбиться , когда отправляют частичные ComplicationSlotBounds .

Версия 1.1.0-Alpha05

6 апреля 2022 г.

androidx.wear.watchface:watchface-*:1.1.0-alpha05 выпускается. Версия 1.1.0-Alpha05 содержит эти коммиты.

Новые возможности

  • Теперь вы можете сказать, какой источник данных послал ComplicationData осмотрев ComplicationData.dataSource , некоторые часы могут использовать это для настройки дисплея осложнений. ( I44a73 )

API меняется

  • Renderer.CanvasRenderer и Renderer.GlesRenderer были SharedAssets Renderer.GlesRenderer2 пользу Renderer.CanvasRenderer2 Для Java Interop мы представили ListenableCanvasRenderer2 и ListenableGlesRenderer2 . ( I31ffa )
  • Добавлено @WatchFaceFlavorsExperimental способность определять ароматы - предварительно сконфигурированный список стилизированных часов ( I04DD0 )
  • Renderer.sharedAssets в настоящее время является Stateflow, и мы удалили неиспользованный Renderer.SharedAssetsFactory ( i12ac5 )
  • UserStyleSchema.userStyleSettings больше не устарел ( IBA7E3 )
  • Мы добавили HeadlessWatchFaceClient.getUserStyleSchemaDigestHash , который позволяет HeadlessWatchFaceClient избегать относительно низких накладных расходов прохождения схемы по AIDL перед вычислением хэша дигеста. ( I33597 )
  • Мы добавили isUserStyleSchemaStatic в WatchFaceMetadataClient , что является правдой, если и только тогда, на что можно полагаться UserStyleSchema , чтобы не измениться, если не обновляется APK для часов. ( I45a3f )
  • Мы добавили getDigestHash в UserStyleSchema , который вычисляет хэш схемы. Это может быть использовано для эффективного определения, изменилась ли UserStyleSchema . ( I2063d )
  • METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIGURATION_SUPPORTED переименован в METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIG_SUPPORTED ( i9ba5d )
  • UserStyleSetting.OnWatchEditorData была переименована в UserStyleSetting.WatchFaceEditorData . ( If3afb )

Версия 1.1.0-Alpha04

9 марта 2022 г.

androidx.wear.watchface:watchface-*:1.1.0-alpha04 выпускается. Версия 1.1.0-Alpha04 содержит эти коммиты.

API меняется

  • NoDataComplication ComplicationData ComplicationText.PLACEHOLDER MonochromaticImage.PLACEHOLDER SmallImage.PLACEHOLDER PhotoImage.PLACEHOLDER В контексте NoDataComplicationData заполнителя. Если выбраны эти заполнители, предполагается отображаться с серыми коробками/дугами. ( I6285d )
  • Мы добавили ComplicationData.getNextChangeInstant , который сообщает вам следующий момент после эталонного момента, в котором может измениться любое поле осложнений. Это используется внутренне для планирования кадров для обновлений осложнений. Например, если лицо часов обычно обновляет один раз в минуту, установление осложнения Stop Watch приведет к обновлению его обновления один раз в секунду. ( I7ceb2 )
  • EditorSession.watchFaceId теперь может использоваться на всех уровнях API. Кроме того, его значение теперь всегда будет соответствовать WatchState.watchFaceInstanceId . ( I323b9 )
  • API getPendingIntentForTouchEvent больше не является необходимым, поскольку основная проблема была исправлена ​​в рамках, поэтому все связанные API были удалены. Часы не нужно делать что -то особенное для PendingIntents , даже если кнопка «Домой» недавно была нажата. ( I1f2e8 )
  • Мы добавили RendererParameters.isForScreenShot , что будет правдой, если рендерин для снимка экрана. Некоторые смотрят лица с анимацией, чтобы знать это, чтобы внести коррективы, чтобы обеспечить наилучшие результаты. ( I96d99 )
  • Мы добавили WatchFaceExceptionReason в WatchFaceException чтобы дать некоторый контекст тому, что пошло не так. ( I01d15 )
  • ComplicationDataSourceService.onImmediateComplicationRequest был удален, вместо этого было добавлено, ComplicationRequest.immediateResponseRequired для сигнала добавлено, что поставщик должен быстро реагировать (в идеале реагировать на <100 мс). Примечание. Эта функциональность охраняется за привилегированным com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE разрешение. ( IE6B23 )
  • Обновленная нулясь в Core и AppCompat в соответствии с тирамису DP2 ( I0CB7 )

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

  • Теперь приложение Watchface срабатывает исключение, если проверка схемы не удается ( IA400F )

Версия 1.1.0-Alpha03

9 февраля 2022 г.

androidx.wear.watchface:watchface-*:1.1.0-alpha03 выпускается. Версия 1.1.0-Alpha03 содержит эти коммиты.

API меняется

  • Мы добавили экспериментальную поддержку для иерархических схем стиля. Мы добавили новое свойство в androidx.wear.watchface.style.UserStyleSetting.Option , ChildSettings, которые изначально используются только в ListOption . Это позволяет описать иерархию стилей для использования редактором UIS, базовый пользовательский тип не изменился и до сих пор остается Map<String, ByteArray> . ( IAF6F4 )
  • Мы добавили WatchFace.OverlayStyle , который позволяет сторожевой поверхности настраивать рендеринг наложения состояния системы. ( 18520d )
  • Мы представили clearWithBackgroundTintBeforeRenderingHighlightLayer Новый необязательный параметр конструктора для CanvasRenderer (по умолчанию неверно), если установить True, то холст будет очищен с помощью фонового цвета оттенка. ( IE01E5 )
  • Добавлено androidx.watchface.complications.datasource.DEFAULT_CONFIGURATION_SUPPORTED Metadata, что позволяет источникам осложнений данных указать, что они могут обеспечить значение по умолчанию без какой -либо конфигурации ( ICC0D4 )
  • Это часто при редактировании часового лица, чтобы быть как интерактивным, так и безголовым экземпляром. Чтобы помочь сохранить память, мы ввели Renderer.SharedAssets , который позволяет рендерингу с лицами по обмену обменными данными (например, текстурами и шейдерами) между экземплярами. GlesRenderer.setEglConfig и GlesRenderer.setEglDisplay устарели, для этого никогда не было предназначено для установки, и это привело бы к неопределенному поведению. ( I0d9e7 )
  • Мы добавили setNameResourceId & setScreenReaderNameResourceId (какие эталонные строковые ресурсы) к ComplicationSlot.Builder androidx.wear.watchface.client.ComplicationSlotState Это позволяет системе извлекать имена сложностей для использования в редакторах и считывателях экрана. ( If6c6a )
  • WatchfaceMetadataClient.getUserStyleSchema и getComplicationSlotMetadataMap теперь бросают WatchFaceException вместо RemoteException . ( I86f11 )
  • onSynchronousComplicationRequest и связанные с ним функции в ComplicationDataSourceService были переименованы в onImmediateComplicationRequest и т. Д. ( I87BA0 )
  • Наблюдая за редакторами лица гораздо меньше экрана, чем редакторы компаньонов, поэтому имеет смысл поддерживать различные значки для Entry Face Editors. Этот патч добавляет OnWatchEditorData (в настоящее время содержит только значок) ко всем пользователям и при необходимости их классов опций. ( IF1886 )
  • Мы добавили @JvmOverloads в конструктор прослушиваемого glesrenderer для лучшего java interop. ( I2974a )

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

  • Конструктор ListenableGlesRenderer теперь правильно обозначен как @Throws(GlesException::class) , и теперь можно расширить этот класс в Java. ( IAC6D0 )
  • Исправляет ошибку с помощью PhotoImageComplicationData Tapaction неправильно обрабатывается ( I1CC30 )

Версия 1.1.0-Alpha02

12 января 2022 г.

androidx.wear.watchface:watchface-*:1.1.0-alpha02 выпускается. Версия 1.1.0-Alpha02 содержит эти коммиты.

Новые возможности

  • Чтобы помочь отладке и тестированию, ComplicationData и соответствующие подклассы теперь имеют переоцененные методы хешкода, равные и товарные, облегчающие их работу.

API меняется

  • WatchfaceMetadataClient Методы еще раз бросают RemoteExceptions , где это уместно, облегчая для клиента код, чтобы улавливать ошибки с часового лица. ( I78785 )
  • ComplicationData и подклассные классы теперь имеют хэшкод, равные и тослинг. ( I24bc6 )

Версия 1.1.0-Alpha01

15 декабря 2021 г.

androidx.wear.watchface:watchface-*:1.1.0-alpha01 выпускается. Версия 1.1.0-Alpha01 содержит эти коммиты.

Новые возможности

  • UserStyleSchema и ComplicationSlots теперь могут быть определены в XML. Это упрощает строительство лица. Кроме того, запросы WatchFaceMetadataClient быстрее, потому что ему не нужно связывать службу, чтобы получить метаданные. WatchFaceMetadataClient и ListenableWatchFaceMetadataClient больше не экспериментальны и станут частью стабильного API. Система сможет необязательно поддерживать несколько экземпляров часового лица, каждая из которых с различными пользовательскими параметрами. Они будут видны в сборщике лица. Чтобы выбрать это, часы должны включать в себя следующую мета -данных в его манифесте.

        <meta-data
            android:name="androidx.wear.watchface.MULTIPLE_INSTANCES_ALLOWED"
            android:value="true" />
    
  • Некоторые часы имеют состояние, которое не отражено в UserStyle , для поддержки этого и нескольких случаев, идентификатор экземпляра лица Watch Face теперь доступен через WatchState.watchFaceInstanceId .

  • ComplicationData , в настоящее время кэшируется, чтобы осложнения были отображаются сразу после загрузки. Иногда ComplicationData кэшируется в памяти системой, а иногда он сериализуется библиотеками лиц. Когда сериализуется какое true либо связанное сопутствующее плату, если это произойдет, ComplicationData.tapActionLostDueToSerialization . Система отправит обновленное ComplicationData с помощью tapAction как можно скорее.

  • Некоторые ComplicationData не следует кэшировать в течение длительного времени, чтобы поддержать это, мы добавили более общее ComplicationDataTimeline функции. Это может быть использовано для обеспечения последовательности ComplicationData , затрачиваемого по времени, для доставки на лицо часов, которую можно автоматически кэшировать и обновлять. Например, сегодняшний прогноз погоды в разное время или несколько предстоящих календарных мероприятий. ComplicationRequestListener был расширен с помощью нового метода onComplicationDataTimeline , который вы можете использовать для возврата этих данных.

  • DefaultComplicationDataSourcePolicy был расширен, поэтому вы можете указать ComplicationType для первичных и вторичных источников данных.

  • Мы добавили поддержку поставщиков синхронных осложнений, где осложнение обновляется с более высокой частотой, чем обычно, до одного раза в секунду, когда видно и не амбиционное лицо. Примечание. Поставщики синхронных осложнений могут иметь ограниченное использование из -за проблем с давлением памяти.

  • Изменения PendingIntentTapListener вероятно, будут возвращены, потому что мы решили основную проблему (часы невозможно запустить мероприятия в течение 5 секунд после нажатия кнопки «Домой») в фреймворке.

API меняется

  • ComplicationData.isCached был изменен на tapActionLostDueToSerialization , которая более полезна при определении того, следует ли по -разному отображаться слот осложнений, чтобы сигнализировать о том, что его нельзя нажать. ( I6de2f )
  • wear-complication-data-source ComplicationDataTimeline Это может быть использовано для обеспечения последовательности ComplicationData , затрачиваемого по времени, для доставки на лицо часов, которую можно автоматически кэшировать и обновлять. Например, сегодняшний прогноз погоды в разное время или несколько предстоящих календарных мероприятий. ComplicationRequestListener был расширен с помощью нового метода onComplicationDataTimeline , который вы можете использовать для возврата этих данных. Есть новая обертка Kotlin SuspendingTimelineComplicationDataSourceService для приостановки услуг источника данных. ( IDECDC )
  • Добавлены PendingIntentTapListener и WatchFaceControlClient.getPendingIntentForTouchEvent . Это может помочь наблюдать за лицами, которые необходимо запустить намерения в ответ на Taps, чтобы обойти проблему, когда фреймворки блокируют новые действия в течение 5 секунд после нажатия кнопки «Домой». ( I98074 )
  • Введен кэш ComplicationData на просмотр. Цель этого состоит в том, чтобы позволить часовой поверхности отображать последние известные значения данных осложнений при загрузке до тех пор, пока у системы не будет возможности их обновить. Существует новый метод API WatchFaceControlClient.hasComplicationCache , предназначенный для OEM -производителей. Это может повлиять на стратегию системы посылать осложнения на лицо. Кроме того, ComplicationData обладает isCached свойством, и рекомендуется, чтобы кэшированные осложнения были представлены по -разному, потому что tapAction не может быть кэширована и будет null в кэшированном осложнении. ( I404b0 )
  • Идентификатор экземпляра часового лица теперь доступен через WatchState.watchFaceInstanceId . Большинству часов для часов не нужно использовать это, но если есть состояние лица, которое не хранится в схеме, то это ключ для идентификации экземпляра лица. Чтобы поддержать это, теперь вы можете предоставить идентификатор при вызове WatchFaceControlClient.createHeadlessWatchFaceClient . ( I1ff98 )
  • Расширенная DefaultComplicationDataSourcePolicy с возможностью установить ComplicationTypes по умолчанию для первичного, вторичного поставщика и поставщика запасной системы. ComplicationSlot.defaultDataSourceType . ( If0ce3 )
  • ComplicationSlot.configExtras EditorSession.openComplicationDataSourceChooser() ( I6f852 )
  • Добавлен WatchFace.setComplicationDeniedDialogIntent и setComplicationRationaleDialogIntent . Эти намерения запускаются, чтобы показать диалог обоснования, прежде чем запросить разрешения на осложнения, и еще один диалог, объясняющий, что разрешение на осложнение необходимо при попытке отредактировать осложнение, когда были отказаны в разрешениях (выбор поставщика не может открыться, поэтому диалог необходим). ( I3a29c )
  • UserStyleSchema и ComplicationSlots теперь могут быть определены в XML. Это упрощает строительство лица и делает запросы WatchFaceMetadataClient быстрее, поскольку им не нужно связывать службу, чтобы получить метаданные. ( I85BFA )
  • Добавлен InteractiveWatchFaceClient.supportsPendingIntentForTouchEvent , чтобы клиент мог определить, поддерживает ли часы getPendingIntentForTouchEvent . ( I0b917 )
  • WatchFaceMetadataClient и ListenableWatchFaceMetadataClient больше не экспериментальны. Они могут быть использованы для эффективного получения метаданных лица, где это возможно, не открывая переплет на лицо. ( IBB827 )
  • Добавлена ​​поддержка поставщиков синхронных осложнений, где осложнение обновляется на более высокой частоте, чем обычно, до одного раза в секунду, когда лицо часового лица видно и не амбициозно. Чтобы использовать это, поставщик должен включить новый androidx.wear.watchface.complications.data.source.SYNCHRONOUS_UPDATE_PERIOD_SECONDS Metadata Metadata в его манифесте и переоценивает onSynchronousComplicationRequest . В зависимости от характера источника данных, ему также может потребоваться переопределить onStartSynchronousComplicationRequests и onStopInteractiveComplicationRequests чтобы получить уведомления о том, когда осложнение входит и выходит из интерактивного режима. ( I8fe9d )

Версия 1.0

Версия 1.0.1

9 февраля 2022 г.

androidx.wear.watchface:watchface-*:1.0.1 выпускается. Версия 1.0.1 содержит эти коммиты.

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

  • Исправляет ошибку с помощью PhotoImageComplicationData Tapaction неправильно обрабатывается ( I1CC30 )

Версия 1.0.0

1 декабря 2021 г.

androidx.wear.watchface:watchface-*:1.0.0 выпускается. Версия 1.0.0 содержит эти коммиты.

Основные особенности 1.0.0

Пакет androidx.wear.watchface - это новая рекомендуемая библиотека для разработки лиц Wearos Watch. Он имеет ряд новых функций над старой носимой библиотекой поддержки.

  • Стиль пользователя (например, чтобы изменить цветовую палитру, стиль рук часов, внешний вид часовых отметок и т. Д.) Прямо поддерживается библиотекой (см. androidx.wear.watchface.style ). Теперь гораздо проще разработать редактор ON Watch Face с использованием Androidx.wear.watchface.editor, и ваше лицо для часов можно отредактировать из приложения Companion System без необходимости написать дополнительный код.
  • Лучшие практики запекаются. Библиотека автоматически сгенерировала метки контента считывателя экрана для осложнений (вы также можете добавить свои собственные), и кадрирование автоматически падает, когда батарея низкая и не заряжается для улучшения времени батареи.
  • Для разработки часового лица требуется меньше кода, особенно для осложнений, когда большая часть шаблона перешла в библиотеку.

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

  • Fix EditorSession.userStyle.compareAndSet ( i6f676 )
  • Исправьте очень короткие задержки для лица ( IFFB97 )
  • Dispatch InteractiveWatchFaceImpl.onDestroy в потоке пользовательского интерфейса ( I83340 )
  • Исправьте несколько проблем с приемниками вещания ( i7d25f )

Версия 1.0.0-RC01

3 ноября 2021 г.

androidx.wear.watchface:watchface-*:1.0.0-rc01 выпускается. Версия 1.0.0-RC01 содержит эти коммиты.

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

  • Fix Dump () (называется ADB Shell Dampsys), которые были разбиты миграциями потока. ( 087cf9e )

  • Убедитесь, что надлежащий заказ wriedirectbootprefs. Мы хотим, чтобы wriTedirectbootprefs всегда работали после initstylaindcomplications или мы рискуем задержать поток пользовательского интерфейса ( 37650AC )

  • Убедитесь, что renderer.ondestroy называется. В сценарии, в котором был создан рендерера, но WF init не завершен и двигатель. ( F9952DC )

  • Оптимизация/исправление на iSbatterylowandNot зарядку. Этот патч перемещает первоначальную настройку IsbatterylowandNoTcaring ранее, что означает, что его можно сделать параллельно с CreateWatchface. Кроме того, теперь мы слушаем action_power_disconnected. ( DDFFD80

  • InteractiveWatchfaceClientImpl.isconnectionalive быть ложным после закрытия ( AB9774E )

Версия 1.0.0-бета01

27 октября 2021 г.

androidx.wear.watchface:watchface-*:1.0.0-beta01 выпускается. Версия 1.0.0-BETA01 содержит эти коммиты.

Версия 1.0.0-Alpha24

13 октября 2021 г.

androidx.wear.watchface:watchface-*:1.0.0-alpha24 выпускается. Версия 1.0.0-Alpha24 содержит эти коммиты.

API меняется

  • Занятия в пакете androidx.wear.watchface.complications были перемещены в новый wear:watchface:watchface-complications . Примечание это означает, что вы не можете включить эту библиотеку, а также любую предыдущую альфа-версию wear:watchface:watchface-complications-data потому что вы получите ошибки в дублирующих классах. ( I97195 )
  • Renderer.dump был переименован в рендерер. Andump и был аннотирован с @uithread. ( I44845 )
  • InteractiveWatchFaceClient.addWatchFaceReadyListener был переименован в addOnWatchFaceReadyListener , и removeWatchFaceReadyListener был переименован, чтобы removeOnWatchFaceReadyListener . ( I48fea )
  • Editorsessession getComplicationsPreviewData и getComplicationsDataSourceInfo больше не приостанавливают функции, вместо этого они являются свойствами StateFlow<> , значение которого изначально является нулевым. В прослушивании getListenableComplicationPreviewData и getListenableComplicationsProviderInfo были удалены в пользу новых объектов StateFlow<> из базового класса. Если вам нужно прослушать изменения в коде Java, рассмотрите возможность использования androidx.lifecycle.FlowLiveDataConversions.asLiveData для преобразования в LiveData<> . ( IC5483 )

Версия 1.0.0-Alpha23

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

androidx.wear.watchface:watchface-*:1.0.0-alpha23 выпускается. Версия 1.0.0-Alpha23 содержит эти коммиты.

Новые возможности

Библиотека Watchface теперь является отдельной библиотечной группой, и в результате библиотеки переместились, и вам нужно будет обновить свой импорт Gradle следующим образом:

Старый Новый
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 меняется

  • Перенесите отдельные androidx.wear Watchface и осложнений в группу библиотеки androidx.wear.watchface . ( B25F3C0 )
  • Добавлен EditorRequest.CanWatchfacesUpporTheadlessEditing, чтобы клиент знал, поддерживает ли редактор Watchface редактирование без головы. Обратите внимание, что с этим будут некоторые ложные негативы, потому что поддержка была добавлена ​​в ASOP/1756809, однако она вернет правильное значение для всех будущих часов. ( CA55590 )
  • У Renderer теперь есть метод дампа (), который может быть переопределен, чтобы добавить пользовательские данные в информацию, генерируемую ABD Shell Dampsys Service Service Service Service. ( 95235F9 )
  • InteractiveWatchfaceclient.AddwatchfaCeReadeDyListener теперь сначала указывает исполнителя. ( 563AC2F )
  • StateFlowCompathelper был удален. Asilivedata (androidx.lifecycle.aslivedata) следует использовать вместо этого. ( BD35D3 )
  • CurrentUserStyLeRePository.UsersTyle больше не изменяется. ( I44889 )
  • WatchfacereadyListener был переименован в OnwatchfacereadyListener. ( IC12A9 )

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

  • InteractiveInstanceManager.DeleteInstance для вызова Ondestroy Это необходимо для обеспечения того, чтобы InteractiveWatchfaceImpl собрал мусор. ( FCE4AF8 , B/199485839 )