Wear Watchface

Créez des applications pour les montres connectées Wear OS by Google.

Remarque : Le format de cadran est obligatoire pour que les cadrans puissent être installés sur les appareils sur lesquels Wear OS 5 est préinstallé à partir du 10 juillet 2024, et pour tous les nouveaux cadrans publiés sur Google Play à partir du 27 janvier 2025.

Pour en savoir plus sur les modifications visibles par les utilisateurs, consultez cet article du Centre d'aide.

Dernière mise à jour Version stable Version finale Version bêta Version alpha
18 septembre 2024 1.2.1 - - 1.3.0-alpha04

Déclarer des dépendances

Pour ajouter une dépendance sur Wear, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.

Ajoutez les dépendances correspondant aux artefacts dont vous avez besoin dans le fichier build.gradle de votre application ou de votre module :

Groovy

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"
}

Kotlin

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"
}

Pour en savoir plus sur les dépendances, consultez Ajouter des dépendances de compilation.

Commentaires

Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.

Signaler un nouveau problème

Pour en savoir plus, consultez les documents sur l'outil Issue Tracker.

Version 1.3

Version 1.3.0-alpha04

18 septembre 2024

Publication d'androidx.wear.watchface:watchface-*:1.3.0-alpha04. La version 1.3.0-alpha04 contient ces commits.

Nouvelles fonctionnalités

  • Ajout de la prise en charge du chargement paresseux des icônes dans UserStyleSettings et UserStyleOptions, ce qui améliore les performances de chargement des cadrans. (Iaf43d)
  • Ajout d'une option permettant de prendre une capture d'écran mise à jour chaque fois que la configuration système change (par exemple, si les paramètres régionaux ont changé) via le nouveau Watchface.setUpdateScreenshotOnConfigurationChange. Par défaut, ce paramètre est désactivé. (I765a1)

Correction de bugs

  • Suppression de la description manuelle de l'accès aux nouvelles API de la plate-forme, car cela se produit automatiquement via la modélisation d'API lorsque vous utilisez R8 avec AGP 7.3 ou version ultérieure (par exemple, R8 version 3.3) et pour tous les builds lorsque vous utilisez AGP 8.1 ou version ultérieure (par exemple, D8 version 8.1). Les clients qui n'utilisent pas AGP sont invités à passer à la version 8.1 de D8 ou ultérieure. Consultez cet article pour en savoir plus. (Ia60e0, b/345472586)

Version 1.3.0-alpha03

17 avril 2024

Publication d'androidx.wear.watchface:watchface-*:1.3.0-alpha03. La version 1.3.0-alpha03 contient ces commits.

Modifications apportées à l'API

  • Nous avons ajouté EditorSession#setOverrideComplications, qui définit temporairement le ComplicationData de l'instance de cadran sous-jacente lors de la modification. Si les complications changent rarement, cette méthode est plus efficace que de transmettre des forçages via EditorSession#renderWatchFaceToBitmap. (I19384)

Correction de bugs

  • Auparavant, selectComplicationDataForInstant appelait toApiComplicationData pour toutes les chronologies, ce qui signifiait que le test d'égalité de référence === échouait toujours. Cela signifie que les complications étaient rechargées à chaque frame, ce qui entraînait une décharge de la batterie. (717406)

Version 1.3.0-alpha02

3 avril 2024

Publication d'androidx.wear.watchface:watchface-*:1.3.0-alpha02. La version 1.3.0-alpha02 contient ces commits.

Nouvelles fonctionnalités

  • Nous utilisons désormais l'égalité de référence pour comparer "best" et selectedData, car l'opérateur d'égalité est coûteux. (446b00)

Modifications apportées à l'API

  • Nous avons ajouté une API dynamique sans remplacement pour GoalProgressComplicationData. (c33264)

Version 1.3.0-alpha01

7 février 2024

Publication d'androidx.wear.watchface:watchface-*:1.3.0-alpha01. Liste des commits de la version 1.3.0-alpha01

Nouvelles fonctionnalités

  • Les WatchFaceServices peuvent être initialisés simultanément et doivent donc être sans état. Pour ce faire, nous avons ajouté StatefulWatchFaceService, dans lequel un élément supplémentaire défini par l'utilisateur créé par createExtra() est transmis à tous les forçages appelés lors de l'initialisation.
  • GlesRenderer2 dispose désormais d'une surcharge de constructeur qui vous permet de spécifier une liste d'attributs à essayer à tour de rôle avec eglChooseConfig.

Modifications apportées à l'API

  • StatefulWatchFaceService prend désormais en charge un forçage de getComplicationSlotInflationFactory dans lequel l'extra défini par l'utilisateur créé par createExtra() est transmis. (I82d9f)
  • Certains cadrans doivent partager les données auxiliaires créées lors de createUserStyleSchema avec les autres méthodes d'initialisation. Comme il n'existait pas de meilleure alternative, les développeurs ont généralement rendu leur WatchFaceServices avec état. Cette pratique est dangereuse, car plusieurs instances peuvent être créées simultanément, ce qui peut entraîner des bugs. Pour résoudre ce problème, nous avons introduit StatefulWatchFaceService et StatefulWatchFaceRuntimeService, où un type défini par l'utilisateur est créé par createExtra() et transmis aux différentes méthodes de création en tant que paramètre. (If8a99)
  • Nous avons ajouté getUserStyleFlavors à InteractiveWatchFaceClient, qui intéresse principalement les OEM. (I0f5d8)
  • GlesRenderer2 dispose désormais d'une surcharge de constructeur qui vous permet de spécifier une liste d'attributs à essayer à tour de rôle avec eglChooseConfig. Cela vous permet, par exemple, d'essayer d'abord une configuration avec anticrénelage, puis de revenir à une configuration sans anticrénelage si nécessaire. (I1ba74)
  • À partir d'Android U, la prise en charge de SystemDataSources.DATA_SOURCE_HEART_RATE sera ajoutée à Wear OS. Cette complication n'est compatible qu'avec les complications SHORT_TEXT, mais il est recommandé que ComplicationSlot accepte également SMALL_IMAGE, car les OEM peuvent choisir de diffuser un raccourci vers leur application de santé au lieu de la valeur en temps réel. (I34223)
  • Nous avons ajouté METADATA_KEY_CONFIG_RESTORE_SUPPORTED, qui, à partir d'Android U, contrôle ce qui se passe lorsque le système est restauré à partir d'une sauvegarde pour la source de données de complication avec METADATA_KEY_DATA_SOURCE_CONFIG_ACTION. Par défaut, le système suppose que le service de source de données de complication prend en charge la sauvegarde de toutes les données de configuration. Si ce n'est pas le cas, il peut définir le paramètre de métadonnées METADATA_KEY_DATA_SOURCE_CONFIG_ACTION sur "false", ce qui marquera l'emplacement de la complication comme non configuré. (I6c505)

Version 1.2

Version 1.2.1

24 janvier 2024

Publication d'androidx.wear.watchface:watchface-*:1.2.1. Liste des commits de la version 1.2.1

Correction de bugs

  • Correction d'un plantage sur les Samsung Galaxy Watch 4, 5 et 6. (43f0b0)

Version 1.2.0

29 novembre 2023

Publication d'androidx.wear.watchface:watchface-*:1.2.0. Liste des commits de la version 1.2.0

Changements importants depuis la version 1.1.0

  • Nous avons ajouté la prise en charge de nouveaux types de complications disponibles à partir d'Android T :
    • GoalProgressComplicationData, qui est semblable à RangedValueComplicationData, à la différence qu'elle vise à atteindre un objectif où la valeur minimale est implicitement égale à zéro et la valeur peut être supérieure à targetValue.
    • WeightedElementsComplicationData, qui consiste en un tableau d'éléments (paires de couleurs et d'épaisseurs) ainsi que du texte/titre/image (facultatif). Ils peuvent s'afficher sous forme de graphique à secteurs, dans lequel les couleurs doivent être pertinentes compte tenu du contexte, car il n'y a généralement pas assez de place dans une complication pour afficher les libellés.
  • Nous avons ajouté la compatibilité facultative pour ColorRanges dans RangedValueComplicationData. Normalement, les complications doivent s'afficher dans les couleurs choisies pour le cadran, mais parfois, ComplicationDataSource est mieux placé pour définir les couleurs, par exemple lorsqu'elles ont une signification sémantique particulière. Par exemple, du rouge au bleu pour la température.
  • Presque tous les types de ComplicationData acceptent désormais SmallImages.
  • Nous avons ajouté ComplicationDisplayPolicyDO_NOT_SHOW_WHEN_DEVICE_LOCKED indique à un cadran compatible de ne pas afficher la complication quand l'appareil est verrouillé.
  • À partir d'Android T, les OEM peuvent déterminer si une demande de complication provient d'un cadran figurant dans la liste définie par les métadonnées android.support.wearable.complications.SAFE_WATCH_FACES dans le fichier manifeste de leur fournisseur par ComplicationRequest#isForSafeWatchFace. Le fournisseur aura besoin de l'autorisation com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE pour recevoir d'autres valeurs que TargetWatchFaceSafety.UNKNOWN.
  • UserStyleFlavors n'est plus une fonctionnalité expérimentale.

Version 1.2.0-rc01

18 octobre 2023

Publication d'androidx.wear.watchface:watchface-*:1.2.0-rc01. Liste des commits de la version 1.2.0-rc01

Version 1.2.0-beta02

6 septembre 2023

Publication d'androidx.wear.watchface:watchface-*:1.2.0-beta02. Liste des commits de la version 1.2.0-beta02

Nouvelles fonctionnalités

  • SuspendingComplicationDataSourceService#onDestroy est désormais ouvert. Notez que la complication météo par défaut du système n'est plus disponible.

Modifications apportées à l'API

  • Annulez l'option "Fournir une nouvelle source de données pour les complications météo". (I6f335)

Version 1.2.0-beta01

23 août 2023

Publication d'androidx.wear.watchface:watchface-*:1.2.0-beta01. Liste des commits de la version 1.2.0-beta01

Nouvelles fonctionnalités

  • À partir d'Android T, Wear OS est désormais compatible avec une complication système météo par défaut.

Modifications apportées à l'API

  • Ajout d'un système par défaut de remplacement pour les complications météo. (Ia0994)
  • Ce correctif ajoute WatchFaceRuntimeService et WatchFaceControlClient.createWatchFaceRuntimeControlClient, ainsi que des wrappers guava. Ils permettent de prendre en charge les environnements d'exécution de cadran, qui sont un type spécial de cadran qui charge sa définition à partir d'un autre package. Actuellement, Wear OS n'est compatible qu'avec l'environnement d'exécution du format de cadran Android. (I2799f)
  • Ce correctif fait suite à aosp/2636578, où nous avons renommé les définitions d'entiers afin que tout code dépendant de WatchFaceType, CanvasType, TapType ou ComplicationsSlotBoundsType n'ait pas besoin d'être modifié. (I4098b)
  • Mise à jour des fichiers d'API pour annoter la suppression de la compatibilité. (I8e87a, b/287516207)
  • Ce correctif expose les constantes WatchFaceType dans WatchFaceTypes, les constantes CanvasType dans CanvasTypes, les constantes TapType dans TapTypes et les constantes ComplicationsSlotBoundsType dans ComplicationsSlotBoundsType. (I3b85a, b/288750666)
  • WatchFace.OverlayStyle est très peu utilisé et n'est pas bien pris en charge par les OEM. Nous allons donc le déprécier avec l'intention de le supprimer à une date ultérieure. (I7344a)

Version 1.2.0-alpha09

21 juin 2023

Publication d'androidx.wear.watchface:watchface-*:1.2.0-alpha09. Liste des commits de la version 1.2.0-alpha09

Nouvelles fonctionnalités

  • RangedValueComplicationData.Builder accepte désormais DynamicFloat, et un nouveau DynamicComplicationText est disponible en tant que sous-classe de ComplicationText. Les deux peuvent utiliser des expressions dynamiques ainsi que des liaisons de plate-forme mises à jour à 1 Hz sur les appareils Wear 4 compatibles.

Modifications apportées à l'API

  • Ajout de types dynamiques pour la distance, les calories et les étages gravis quotidiens. Les clés des sources d'état de la plate-forme se trouvent désormais sous PlatformHealthSources.Keys (Ib7637).
  • Implémentez PlatformDataProvider pour fournir la fréquence cardiaque et le nombre de pas quotidiens. L'interface SensorGateway est supprimée de l'API publique. (I55b84)
  • Rename StateEntryValue to DynamicDataValue, and update the state APIs to use the DynamicDataKey. (If1c01)
  • Ajout de AppDataKey pour accéder à l'état de l'application transmise ; ajout de PlatformDataKey pour accéder aux données de la plate-forme ; ajout de la prise en charge des espaces de noms dans StateStore. (I7985e)
  • Les méthodes enable/disablePlatformSource ont été supprimées de DynamicTypeEvaluator. L'appelant doit être responsable des mises à jour. (I78c6d)
  • Permet de limiter la taille des types de données liés. (Ie2966)

Version 1.2.0-alpha08

19 avril 2023

Publication d'androidx.wear.watchface:watchface-*:1.2.0-alpha08. Liste des commits de la version 1.2.0-alpha08.

Nouvelles fonctionnalités

  • À partir d'Android T, les fournisseurs de complications disposant du com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE privilégié peuvent enregistrer des métadonnées androidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES qui remplacent android.support.wearable.complications.SUPPORTED_TYPES pour les cadrans sécurisés. Cela signifie qu'un fournisseur de complications peut choisir de diffuser différents types de complications pour les cadrans approuvés et non approuvés.

Modifications apportées à l'API

  • Propagation de la classe @Deprecated vers la propriété (I882d1, b/271441831)
  • Modification du nom du paramètre de valeur pour Enum.valueOf (Ia9b89)
  • Davantage d'exceptions émises par l'énumération valueOf (I818fe)
  • Nous avons supprimé renderWatchFaceToSurface au profit de createRemoteWatchFaceView, qui est basé sur SurfaceControlViewHost et permet à l'appelant d'intégrer une vue à partir du cadran, qui est affichée lorsque le client appelle RemoteWatchFaceViewHost#renderWatchFace. (Ib311d)
  • Nous avons ajouté renderWatchFaceToSurface à InteractiveWatchFaceClient, HeadlessWatchFaceClient et EditorSession. En général, cette méthode est plus performante que le rendu dans un bitmap. (Ieacad)
  • ObservableStateStore a été renommé StateStore. (Ieb0e2)
  • Ajout de DynamicTypeEvaluator.Builder au lieu des arguments de constructeur pour autoriser davantage d'arguments facultatifs, y compris ObservableStateStore, qui est désormais défini par défaut sur un magasin vide. (I6f832)
  • Refactorisation de l'ordre des paramètres dans DynamicTypeEvaluator. (Ic1ba4)
  • L'exécuteur a été ajouté aux méthodes DynamicTypeEvaluator.bind. (I346ab)
  • Nous avons ajouté la méthode startEvaluation à BoundDynamicType pour déclencher l'évaluation une fois le type dynamique lié. (I19908)
  • Les fournisseurs de complications disposant de l'com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE privilégié peuvent enregistrer des métadonnées androidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES qui remplacent android.support.wearable.complications.SUPPORTED_TYPES pour les cadrans sécurisés. (Id1c73)
  • CustomValueUserStyleSettings2 a été renommé LargeCustomValueUserStyleSettings. (Ic17ac)

Correction de bugs

  • DynamicTypeValueReceiver#onPreUpdate a été supprimé. (I2dc35)

Version 1.2.0-alpha07

22 février 2023

Publication d'androidx.wear.watchface:watchface-*:1.2.0-alpha07. Liste des commits de la version 1.2.0-alpha07

Nouvelles fonctionnalités

  • À partir d'Android T, les OEM peuvent déterminer si une demande de complication provient d'un cadran figurant dans la liste définie par les métadonnées android.support.wearable.complications.SAFE_WATCH_FACES dans le fichier manifeste de leur fournisseur par ComplicationRequest#isForSafeWatchFace. Le fournisseur aura besoin de l'autorisation com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE pour recevoir d'autres fichiers que TargetWatchFaceSafety.UNKNOWN.

  • Également à partir d'Android T, CustomValueUserStyleSetting2 est disponible et peut contenir jusqu'à 12,5 Ko. La limite précédente de CustomValueUserStyleSetting était de 1 Ko. Malgré l'augmentation des limites de taille, nous encourageons les développeurs de cadrans à limiter la taille des données, car les paramètres sont envoyés via le Bluetooth lors de l'édition, et la bande passante Bluetooth est limitée.

Modifications apportées à l'API

  • Nous avons ajouté un paramètre facultatif eglContextAttribList à GlesRenderer et GlesRenderer2, qui vous permet de définir la EGL14.EGL_CONTEXT_CLIENT_VERSION transmise à EGL14.eglCreateContext. (I2a83e)
  • Nous avons migré les bibliothèques de cadrans vers androidx.core.util.Consumer au lieu de java.util.function.Consumer. (I273f5)
  • Davantage d'exceptions émises par les accesseurs de propriétés KT. (Iff9d9)
  • Nous avons ajouté InteractiveWatchFaceClient.isComplicationDisplayPolicySupported afin que le client puisse déterminer s'il doit émuler la prise en charge ou non pour d'anciens cadrans. (I24c89)
  • Nous avons décidé que isForSafeWatchFace doit être un IntDef à trois états. (Ief2f7)
  • Pour Android T, nous avons lancé ComplicationRequest.isForSafeWatchFace qui est destiné à l'usage des OEM et nécessite com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE. Pour les sources de données dans l'image système, la valeur est "true" si le cadran à l'origine de la requête figure dans la liste des cadrans sécurisés spécifiée par la source de données dans son fichier manifeste. (I0cbb6)
  • Pour Android T, nous avons ajouté CustomValueUserStyleSetting2 qui peut contenir jusqu'à 12,5 Ko. La limite précédente de CustomValueUserStyleSetting était de 1 Ko. (I0b100)

Version 1.2.0-alpha06

25 janvier 2023

Publication d'androidx.wear.watchface:watchface-*:1.2.0-alpha06. Liste des commits de la version 1.2.0-alpha06

Nouvelles fonctionnalités

  • Nous mettons tout en œuvre pour prendre en charge les liaisons de plate-forme de complication. Cette fonctionnalité n'est pas encore prête, mais cela ne saurait tarder.
  • Nous avons ajouté la prise en charge XML de ComplicationSlot avec les nouveaux types de complications, GOAL_PROGRESS et WEIGHTED_ELEMENTS.

Correction de bugs

  • Correction d'une faille qui entravait le bon fonctionnement de l'éditeur de cadran sur les appareils Samsung. (3b5987)
  • Correction d'un bug qui empêchait parfois les complications de s'afficher correctement lors du passage à un cadran à plusieurs favoris. (b38ece)
  • Correction d'un bug de sérialisation avec perOptionScreenReaderNames, qui provoque des plantages du cadran. (e9f466)

Version 1.2.0-alpha05

7 décembre 2022

Publication d'androidx.wear.watchface:watchface-*:1.2.0-alpha05. Liste des commits de la version 1.2.0-alpha05

Nouvelles fonctionnalités

  • Il y a quelque temps, nous avons proposé des UserStyleSettings hiérarchiques, et depuis Android T, il est désormais possible d'avoir plusieurs ComplicationSlotsUserStyleSetting dans une hiérarchie. Un seul ComplicationSlotsUserStyleSetting sera actif, en fonction des choix de style de l'utilisateur.

  • En ajoutant un champ screenReaderName, nous permettons aux lecteurs d'écran de mieux prendre en charge ListOption et ComplicationSlotsOption. Notez que ce champ sera ignoré par les éditeurs Compagnon sur les appareils équipés d'une version antérieure à Android T.

Modifications apportées à l'API

  • Nous avons ajouté un nouveau champ facultatif (screenReaderName) aux options ListOption et ComplicationSlotsOption pour les éditeurs. Il sera ignoré par les éditeurs Compagnon sur les appareils équipés d'une version antérieure à Android T. (I75326)
  • Depuis Android T, plusieurs ComplicationSlotsUserStyleSettings sont désormais pris en charge dans une hiérarchie de styles, à condition qu'un seul d'entre eux puisse être actif à la fois. Nous avons ajouté une fonction utilitaire findComplicationSlotsOptionForUserStyle à UserStyleSchema pour vous aider à trouver l'élément ComplicationSlotsOption actif, le cas échéant. (Ic2b06)
  • Des RangedValuesTypes ont été intégrés à l'objet associé de RangedValueComplicationData et renommés TYPE_UNDEFINED, TYPE_RATING, et un nouveau TYPE_PERCENTAGE a été ajouté. (I55d02)
  • Nous avons renommé le DynamicFloat expérimental en FloatExpression, et l'avons marqué comme @hide. (Idf4f1)
  • Ajout de l'annotation @JvmDefaultWithCompatibility. (I8f206)

Version 1.2.0-alpha04

9 novembre 2022

Publication d'androidx.wear.watchface:watchface-*:1.2.0-alpha04. Liste des commits de la version 1.2.0-alpha04

Nouvelles fonctionnalités

  • Pour Android T, nous avons ajouté deux nouveaux types de complications (GoalProgressComplicationData et WeightedElementsComplicationData).
  • GoalProgressComplicationData est semblable à RangedValueComplicationData. Toutefois, sa valeur peut dépasser la cible (tandis que pour RangedValueComplicationData, la valeur est limitée à la plage [min… max]), ce qui a des implications pour la conception visuelle, qui peuvent ne pas convenir à tous les cadrans.
  • GoalProgressComplicationData accepte les graphiques à secteurs et les répartitions similaires des données simples.
  • Nous avons ajouté une compatibilité facultative pour ColorRamps dans RangedValueComplicationData.
  • Pour Android T, nous avons ajouté ComplicationPersistencePolicy et setCachePolicy à ComplicationData, ce qui permet actuellement à un fournisseur de contrôler si une complication est conservée ou non (par exemple, si elle est mise en cache après un redémarrage). La plupart des complications n'auront pas besoin de définir le contrôle du cache, mais cela peut résoudre les cas de figure avec des données obsolètes pour certaines complications souvent mises à jour (par exemple, des complications de données de santé). Nous avons également ajouté ComplicationDisplayPolicyDO_NOT_SHOW_WHEN_DEVICE_LOCKED indique à un cadran compatible de ne pas afficher la complication quand l'appareil est verrouillé. (Ic9574)

Modifications apportées à l'API

  • GoalProgressComplicationData, WeightedElementsComplicationData et ColorRamp ne sont plus au stade expérimental. (Ica9e2)
  • ComplicationPersistencePolicy et ComplicationDisplayPolicy sont désormais correctement marquées comme API T. (I31d88)
  • Le constructeur obsolète ComplicationSlotOverlay contient maintenant DeprecationLevel.WARNING, ce qui permet de l'appeler à nouveau depuis Java. (Ib308c)
  • Nous avons corrigé certains problèmes de compatibilité Java concernant ComplicationRequestListener, CanvasComplication, ComplicationTapFilter et InteractiveWatchFaceClient en les annotant avec @JvmDefaultWithCompatibility (Id94fc).
  • Nous avons supprimé les ProtoLayoutComplicationData et ListComplicationData expérimentales. Le témoignage du développeur à ce sujet n'était pas clair. Nous espérons y revenir prochainement. (I9df05)
  • Nous avons de nouveau ajouté un ValueType à RangedValueComplicationData. WeightedElementsComplicationData accepte désormais une couleur d'arrière-plan. Nous avons retiré DiscreteRangedValueComplicationData, car sa fonctionnalité est un sous-ensemble de WeightedElementsComplicationData. (I6446c)

Correction de bugs

  • Inclut isForScreenShot dans les fonctions equals et le code de hachage. S'assure que onRenderParametersChanged obtient une valeur isForScreenshot correcte (I04a41).
  • Les problèmes de fuite de WatchFaceControlService provenant de clients headless ont été corrigés. (e90e00)

Version 1.2.0-alpha03

5 octobre 2022

Publication d'androidx.wear.watchface:watchface-*:1.2.0-alpha03. Liste des commits de la version 1.2.0-alpha03

Nouvelles fonctionnalités

  • Aucune nouvelle fonctionnalité, mais nous avons corrigé quelques bugs liés à l'éditeur de cadran.

Modifications apportées à l'API

  • Nous avons abandonné les UserStyleSchema.userStyleSettings, tandis que les rootUserStyleSettings ne sont plus au stade expérimental. (Ie96e3)
  • Nous avons retiré les rootUserStyleSettings du stade expérimental. (I8d6b3)
  • Nous avons marqué les WatchFaceColors comme étant au stade expérimental, car elles ne sont pas compatibles avec tous les systèmes. (I6d75d)
  • Nous avons placé les DisconnectReasons dans l'API publique pour qu'elles fonctionnent avec IntDef. (I791f8)

Correction de bugs

  • Ferme toutes les ouvertures de l'éditeur de cadran si SysUI s'arrête. Si SysUI s'arrête et que l'éditeur de cadran ne se ferme pas, le cadran peut donc rester incohérent, car le système repose sur SysUI pour conserver tous les changements de style de l'utilisateur. (Ba762a)
  • Corrige une fuite de mémoire dans ComplicationDataSourceInfoRetriever, où une continuation de coroutine Kotlin jouait le rôle de racine gc et conservait l'activité de l'éditeur. (33ee06)

Version 1.2.0-alpha02

21 septembre 2022

Publication d'androidx.wear.watchface:watchface-*:1.2.0-alpha02. Liste des commits de la version 1.2.0-alpha02

Nouvelles fonctionnalités

  • Certains cadrans possèdent une configuration en dehors du UserStyle qui l'affecte visuellement (par exemple, vous pouvez sélectionner une photo d'arrière-plan). Nous avons ajouté Renderer.sendPreviewImageNeedsUpdateRequest, qui permet au cadran de demander une mise à jour de l'image d'aperçu. Notez que cela nécessite une mise à jour du système correspondant pour fonctionner.

  • Nous avons également ajouté une API permettant aux cadrans de montrer leurs couleurs au système, qui peut choisir sa palette de couleurs en fonction de cela. Remarque : Cela a été testé dans une version ultérieure du correctif.

  • Presque tous les types de ComplicationData acceptent désormais SmallImages.

Modifications apportées à l'API

  • Le gestionnaire de fonds d'écran peut parfois se dissocier d'un moteur et en créer un autre. Nous avons ajouté une définition int DisconnectReason et un ClientDisconnectListener étendu avec une nouvelle méthode qui inclut un DisconnectReason, ce qui permet à l'écouteur d'observer les dissociations du moteur. (I45cce)
  • Nous avons ajouté deux paramètres facultatifs (nameResourceId et screenReaderResourceId) au constructeur ComplicationSlotOverlay. (I157e8)
  • Nous avons ajouté un wrapper Guava pour la nouvelle surcharge de getOrCreateInteractiveWatchFaceClient avec un PreviewImageUpdateRequestedListener. (Ic31f0)
  • Nous avons ajouté Renderer.sendPreviewImageNeedsUpdateRequest, ce qui est utile pour les cadrans dont l'état est en dehors de UserStyleSchema qui affecte leur apparence (par exemple, un cadran avec une image de fond sélectionnable). Côté client, nous avons ajouté PreviewImageUpdateRequestedListener en tant que paramètre facultatif à getOrCreateInteractiveWatchFaceClient pour observer ces requêtes. (Iff44a)
  • Nous avons simplifié l'API pour exposer WatchFaceColors. Désormais, il existe une propriété simple appelée watchFaceColors sur le moteur de rendu, que le cadran peut définir. Cette propriété doit être mise à jour si nécessaire en cas de changement de style. Au lieu d'utiliser WallpaperManager pour observer les changements de couleur, nous avons ajouté OnWatchFaceColorsListener à InteractiveWatchFaceClient. (I490bc)
  • Nous avons ajouté une classe WatchFaceColors qui contient les trois couleurs de cadran les plus visibles, ainsi que les méthodes ouvertes watchfaceColors et notifyWatchFaceColorsChanged au moteur de rendu. Elles permettent au système d'obtenir les couleurs du cadran via WallpaperManager.getWallpaperColors. (I3d611)
  • ShortTextComplicationData, RangedValueComplicationData, NoPermissionComplicationData (ainsi que DiscreteRangedValueComplicationData, GoalProgressComplicationData et WeightedElementsComplicationData expérimentales) sont désormais compatibles avec SmallImages. Si un cadran choisit d'afficher une complication avec plusieurs couleurs, il peut désormais utiliser une SmallImage multicolore alors qu'il aurait dû auparavant utiliser une image monochrome. (I257df)
  • Refactorisez PreviewImageUpdateRequestedListener pour qu'il devienne à la place un Consumer<> (Ia875d).
  • Remplacez le type de SAM ("Single Abstract Method" pour "méthode abstraite unique") OnWatchfaceColorsListener par le type de SAM Java générique (Consumer) (I0C489.
  • Nous avons abandonné les anciennes méthodes getOrCreateInteractiveWatchFaceClient et listenableGetOrCreateInteractiveWatchFaceClient qui ne spécifient pas de PreviewImageUpdateRequestedListener. (Iec502)

Correction de bugs

  • Le compte de service (DisconnectReason.BINDER_DIED) a été renommé DisconnectReason.ENGINE_DIED. (I4eb0e)

Version 1.2.0-alpha01

10 août 2022

Publication d'androidx.wear.watchface:watchface-*:1.2.0-alpha01. Liste des commits de la version 1.2.0-alpha01

Nouvelles fonctionnalités

  • Nous avons ajouté la compatibilité expérimentale pour divers nouveaux formats de complications. C'est un domaine de développement actif. Ces nouveaux formats sont susceptibles d'être modifiés sans préavis, et le moteur de rendu n'est actuellement pas compatible avec CanvasComplicationDrawable.
  • Nous avons également ajouté des marges en option aux emplacements de complication pour qu'il soit plus simple d'appuyer sur de petites complications.

Modifications apportées à l'API

  • La classe expérimentale BoundingArc est désormais immuable. (If624a)
  • Il peut s'avérer difficile d'appuyer sur de petites complications. Pour limiter ce problème, nous avons ajouté la compatibilité des marges permettant d'augmenter la taille de la zone où appuyer sans affecter l'affichage. Sauf indication contraire (dans le code ou via XML), ComplciationSlots n'a aucune marge de taille personnalisée. (I14089)
  • La signature getComplicationSlotInflationFactory(CurrentUserStyleRepository) pour renvoyer une instance de fabrique non nulle a été modifiée. Le renvoi d'une valeur nulle, comme c'était le cas auparavant, était une erreur. Cette modification clarifie simplement le contrat d'API. (I0fcc0)
  • Nous avons ajouté un argument currentUserStyleRepository à la méthode WatchFaceService.getComplicationSlotInflationFactory pour être cohérent avec createComplicationSlotsManager. (I2ddd2)
  • UserStyleFlavors n'est plus une fonctionnalité expérimentale. (I69cdc)
  • Nous avons supprimé le ValueType expérimental de RangedValueComplicationData et introduit la DiscreteRangedValueComplicationData expérimentale, qui est semblable à la RangedValueComplicationData, à l'exception de la plage et de la valeur entières. Nous avons également introduit une GoalProgressComplicationData expérimentale, qui est semblable à la RangedValueComplicationData, à la différence qu'elle vise à atteindre un objectif où la valeur minimale est implicitement égale à zéro et la valeur peut être supérieure à targetValue. Remarque : Pour toutes les variantes RangedValue, vous devez indiquer au moins une image, un texte ou un titre monochromes. (I9590c)
  • Nous avons supprimé boundsWithMargins de ComplicationSlotState, car aucun logiciel système n'est adapté à son utilisation. (I42e26)
  • Nous avons ajouté la compatibilité expérimentale pour WeightedElementsComplicationData, qui consiste en un tableau d'éléments (paires de couleurs et d'épaisseurs) ainsi que du texte/titre/image (facultatif). Ils peuvent s'afficher sous forme de graphique à secteurs, dans lequel les couleurs doivent être pertinentes compte tenu du contexte, car il n'y a généralement pas assez de place dans une complication pour afficher les libellés. (I87eea)
  • Le ColorRamps expérimental (facultatif) utilisé par RangedValueComplicationData et GoalProgressComplicationData vous permet désormais de spécifier une séquence de sept couleurs maximum et un indicateur précisant si les couleurs doivent être interpolées de façon fluide ou si des pas de couleur unis de taille égale doivent être affichés. (I9f5bf)
  • RangedValueComplicationData.drawSegmented a été remplacé par valueType, qui est un entier avec un ValueType IntDef correspondant qui fournit une signification sémantique à la valeur sous forme de plage et peut être utilisé par le moteur de rendu de complication pour influencer le style. (I0616b)
  • Nous avons ajouté la compatibilité expérimentale pour passer de ColorRanges à RangedValueComplicationData (facultatif). Normalement, les complications doivent s'afficher dans les couleurs choisies pour le cadran, mais parfois, ComplicationDataSource est mieux placé pour définir les couleurs, par exemple lorsqu'elles ont une signification sémantique particulière. Par exemple, du rouge au bleu pour la température. (I5153a)
  • Nous avons ajouté un indice drawSegmented expérimental à RangedValueComplicationData. Cela permet aux moteurs de rendu de tracer l'indicateur de valeur sous forme de plage avec des segments, où 1 segment = 1 unité. (I7d7c1)

Correction de bugs

  • Nous avons ajouté la possibilité de définir ComplicationSlotBounds par rapport à un système de coordonnées d'écran prédéfini. (I0985d)

Version 1.1

Version 1.1.1

10 août 2022

Publication d'androidx.wear.watchface:watchface-*:1.1.1. Liste des commits de la version 1.1.1

  • Il s'agit d'une version corrective des bugs, et nous recommandons vivement aux utilisateurs de la version 1.1.0 de la mettre à niveau.

Correction de bugs

  • L'initialisation du cadran est asynchrone. Si une complication est reçue avant qu'il ne soit prêt, elle est ajoutée à la liste pendingInitialComplications et appliquée ultérieurement. Malheureusement, pendingInitialComplications a été appliqué trop tôt, ce qui a entraîné un délai d'initialisation du cadran pendant lequel les complications pouvaient encore apparaître sur pendingInitialComplications et être ignorées. Ce problème a été résolu. De plus, ce correctif corrige un bug : ComplicationRenderer tentait par erreur de charger les espaces réservés de manière asynchrone. Le graphique de compilation n'était donc jamais mis à jour. Enfin, ce correctif corrige un bug théorique qui causait la fusion de plusieurs pendingInitialComplications. (0d03ba3)

  • Résoudre l'interblocage potentiel dans InteractiveInstanceManager, où getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance maintenait le verrouillage plus longtemps que nécessaire. En règle générale, engine.setUserStyle devrait être rapide, mais si ce n'est pas le cas, nous pourrions nous retrouver avec un interblocage/ANR. Ce correctif permet d'éliminer le travail inutile du verrouillage et donc le risque d'un interblocage. (5a2adca)

  • Corrige plusieurs problèmes qui retenaient WatchFaceService. WakeLock peut parfois retenir le WatchFaceService. L'ajout d'un appel release() corrige ce problème. En outre, StateFlows peut retenir WatchFaceService. L'annulation des CoroutineScopes sous-jacentes corrige ce problème. (fd48138)

  • Ajout de délais d'inactivité à awaitDeferredWatchFace* et correction de la NullPointerException de watchfaceOverlayStyle. Dans des circonstances normales, cette opération ne doit pas expirer, même après une nouvelle installation et des scénarios DirectBoot dans lesquels la charge du processeur est élevée. Nous avons également corrigé un NPE si getWatchfaceOverlayStyle est appelé après close(). (a4c3a5a)

Version 1.1.0

15 juin 2022

Publication d'androidx.wear.watchface:watchface-*:1.1.0. Liste des commits de la version 1.1.0

Modifications importantes depuis la version 1.0.0

Amélioration des modifications :

  • Nous avons ajouté la compatibilité avec les schémas hiérarchiques, qui permettent de définir une hiérarchie de styles par les interfaces utilisateur de l'éditeur. Vous pouvez désormais indiquer des icônes distinctes pour les cadrans et les éditeurs Compagnon.
  • Une compatibilité à activer avec plusieurs instances d'un cadran existe, et chaque instance possède un identifiant unique disponible sur toutes les surfaces de l'API.
  • Vous pouvez désormais indiquer des noms lisibles pour ComplicationSlots afin de les utiliser dans les éditeurs.
  • Compatibilité expérimentale permettant de personnaliser les "saveurs", à savoir une sélection de styles visibles depuis l'éditeur Compagnon.
  • Lorsque deux instances du cadran ont été modifiées, elles peuvent partager des ressources et économiser de la mémoire.
  • Lorsque vous choisissez une complication dans l'éditeur du cadran, le fournisseur actuel est présélectionné.

Complications améliorées :

  • Vous pouvez à présent préciser le ComplicationType pour les sources de données principale et secondaire, ce qui permet aux développeurs d'être plus flexibles pour une utilisation prête à l'emploi.
  • Nous avons ajouté ComplicationDataTimeline, qui fournit une séquence de données temporelles à afficher sur le cadran et pouvant être mise en cache et mise à jour automatiquement. Par exemple, les prévisions météo du jour à différents moments ou plusieurs événements d'agenda à venir.
  • Le ComponentName du fournisseur de complication fait partie de ComplicationData.
  • Les complications sont désormais mises en cache, ce qui permet de basculer plus facilement entre les cadrans.

Autres modifications :

  • UserStyleSchema et ComplicationSlots peuvent désormais être définis en XML. Cela simplifie la construction du cadran et permet d'accélérer les requêtes de métadonnées depuis le système.
  • Les cadrans peuvent désormais influencer les couleurs utilisées pour afficher la superposition du système.

Version 1.1.0-rc01

18 mai 2022

Publication d'androidx.wear.watchface:watchface-*:1.1.0-rc01. Liste des commits de la version 1.1.0-rc01

Nouvelles fonctionnalités

  • Nous avons modifié la facilité d'utilisation de la compatibilité XML du cadran afin de faciliter la spécification de ComplicationSlotBounds et de prendre en charge les références. Le test avec la complication d'arête BoundingArc se poursuit pour arriver jusqu'à drawHighlight, même si son utilisation n'est pas recommandée à ce moment.

Modifications apportées à l'API

  • Nous avons ajouté une surcharge expérimentale de drawHighlight, qui accepte un paramètre BoundingArc. (I705f8)
  • Le XML du cadran est désormais compatible avec les références de ressources. Il vous permet d'utiliser les mêmes constantes en XML et dans votre code. (I3ef61)
  • Vous pouvez désormais définir ComplicationSlotBounds dans les formulaires center_x, center_y, size_x et size_y. Vous pouvez maintenant aussi utiliser différentes unités (par exemple, dp) à l'aide de références de ressources. (Iace98)

Correction de bugs

  • Corrige runBlockingWithTracing, qui exécutait des tâches dans le mauvais contexte. (4f595fe)
  • Rend BaseEditorSession.close synchrone. Le problème avec BaseEditorSession.close asynchrone est que nous publions ComplicationDataSourceInfoRetriever trop tard, ce qui provoque l'affichage d'un spam d'avertissement dans logcat. Cette action était probablement sans conséquence, mais le spam logcat, gênant, est à éviter. (35a5308)

Version 1.1.0-beta02

11 mai 2022

Publication d'androidx.wear.watchface:watchface-*:1.1.0-beta02. Liste des commits de la version 1.1.0-beta02

Nouvelles fonctionnalités

  • Nous avons ajouté la compatibilité expérimentale pour les nouveaux types de ComplicationData, ils ne sont pas encore prêts à être utilisés, mais cela ne devrait tarder.

Modifications apportées à l'API

  • Nous avons ajouté BoundingArc, une classe expérimentale qui décrit la géométrie d'un emplacement de la complication d'arête. Elle a été ajoutée à ComplicationSlot et arrive jusqu'à ComplicationSlotState et WatchFaceMetadataClient. (I61a40)
  • Nous avons ajouté la possibilité d'hériter des paramètres dans le fichier XML de UserStyleSetting. Il vous permet de réduire le niveau de verbosité et de partager un paramètre entre des cadrans. (Ief841)
  • Nous avons ajouté deux nouveaux types expérimentaux de ComplicationData : ListComplicationData et ProtoLayoutComplicationData. Pour le moment, aucune compatibilité d'affichage n'existe avec ces types, et Wear OS ne les reconnaît actuellement pas s'ils sont ajoutés à un fichier manifeste ComplicationDataSource's. (I1811c)

Correction de bugs

  • Corrige la sérialisation du type TimeLineEntry. Nous n'avons pas sérialisé le type TimeLineEntry, ce qui signifie que l'on pourrait croire, à tort, que le TimeLineEntries de type NoData mis en cache dispose du type de la complication parente menant à des NPE lorsque des champs obligatoires inexistants ont été consultés. (55ffdf5)
  • Corrige un bug provoquant l'abandon des champs de chronologie par setComplicationData (fb392f5)
  • Corrige un bug qui entraînait, à de rares occasions, un NPE provoqué par runBlockingWithTracing (12ca62e)
  • Corrige un bug qui entraînait parfois une exception ClassNotFoundException: android.support.wearable.complications.ComplicationText lors d'une complication. (217942d9)
  • Corrige un bug dans GlesRenderer.backgroundThreadInitInternal, qui n'appelait onBackgroundThreadGlContextCreated que si EGL14.eglCreateContext était appelé. Corrige un autre bug qui provoquait un glitch visuel dans la capture d'écran causé par verticalFlip (c674ad2)
  • Corrige la vérification de la version XML de WatchFaceService, qui se chargeait depuis un mauvais package. (dfa06f3)
  • Le format de communication d'espace réservé utilise désormais un bundle interne. Nous ne voulons pas que les espaces réservés brisent les cadrans existants susceptibles d'utiliser les données cachées internes a.s.w.c.ComplicationData. Auparavant, le format de communication des données NoDataComplication stockait l'espace réservé dans les champs habituels (ce qui posait problème, car les anciens cadrans affichaient la chaîne d'espace réservé alors que ce n'était pas prévu). À la place, nous utilisons désormais un bundle interne pour isoler complètement ce champ. (d5e7bd2)

Version 1.1.0-beta01

20 avril 2022

Publication d'androidx.wear.watchface:watchface-*:1.1.0-beta01. Liste des commits de la version 1.1.0-beta01

Modifications apportées à l'API

  • Désormais, les méthodes WatchFaceMetadataClient (getUserStyleSchema, getComplicationSlotMetadataMap, getUserStyleFlavors) et HeadlessWatchFaceClient.getUserStyleFlavors lèvent une exception RuntimeException au lieu de WatchFaceException. (I0718a)
  • WatchFaceMetadataClient.WatchFaceException a été retirée de la classe pour pouvoir être réutilisée. (I4e869)

Correction de bugs

  • WatchFaceMetadataClient ne plantera plus si une partie de ComplicationSlotBounds a été envoyée. (Iaafd)

Version 1.1.0-alpha05

6 avril 2022

Publication d'androidx.wear.watchface:watchface-*:1.1.0-alpha05. Liste des commits de la version 1.1.0-alpha05

Nouvelles fonctionnalités

  • Vous pouvez maintenant savoir quelle source de données a envoyé des ComplicationData en inspectant ComplicationData.dataSource. Certains cadrans peuvent utiliser cette information pour personnaliser l'affichage des complications. (I44a73)

Modifications apportées à l'API

  • Renderer.CanvasRenderer et Renderer.GlesRenderer ont été abandonnés au profit de Renderer.CanvasRenderer2 et Renderer.GlesRenderer2, qui prennent en charge SharedAssets, transmis aux méthodes d'affichage. Pour l'interopérabilité Java, nous avons introduit ListenableCanvasRenderer2 et ListenableGlesRenderer2. (I31ffa)
  • Ajout de la fonctionnalité @WatchFaceFlavorsExperimental pour définir des "saveurs", à savoir une liste préconfigurée de cadrans personnalisés (I04dd0)
  • Renderer.sharedAssets est désormais un StateFlow et nous avons supprimé le Renderer.SharedAssetsFactory inutilisé (I12ac5)
  • UserStyleSchema.userStyleSettings n'est plus obsolète (Iba7e3)
  • Ajout de HeadlessWatchFaceClient.getUserStyleSchemaDigestHash, qui permet à un HeadlessWatchFaceClient d'éviter les frais généraux relativement faibles liés à la transmission du schéma sur AIDL avant le calcul du hachage condensé. (I33597)
  • Ajout de isUserStyleSchemaStatic à WatchFaceMetadataClient, qui est vrai si et seulement si le UserStyleSchema peut être utilisé pour s'assurer de ne pas changer, sauf si l'APK du cadran est mis à jour. (I45a3f)
  • Ajout de getDigestHash à UserStyleSchema, qui calcule un hachage condensé du schéma. Cela permet de déterminer efficacement si le UserStyleSchema a changé. (I2063d)
  • METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIGURATION_SUPPORTED renommé en METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIG_SUPPORTED (I9ba5d)
  • UserStyleSetting.OnWatchEditorData a été renommé UserStyleSetting.WatchFaceEditorData. Il contient des données utilisées uniquement par l'éditeur du cadran. (If3afb)

Version 1.1.0-alpha04

9 mars 2022

Publication d'androidx.wear.watchface:watchface-*:1.1.0-alpha04. Liste des commits de la version 1.1.0-alpha04

Modifications apportées à l'API

  • Il est possible que la dernière version de ComplicationData ne soit pas toujours disponible (par exemple, des données ComplicationData mises en cache arrivées à expiration). Nous avons donc étendu NoDataComplication avec un espace réservé ComplicationData facultatif et avons ajouté ComplicationText.PLACEHOLDER, MonochromaticImage.PLACEHOLDER, SmallImage.PLACEHOLDER, PhotoImage.PLACEHOLDER, qui ne peuvent être utilisés que dans le contexte d'un espace réservé NoDataComplicationData. Si cette option est sélectionnée, ces espaces réservés suggérés sont affichés avec des cases/arcs gris. (I6285d)
  • Nous avons ajouté ComplicationData.getNextChangeInstant, qui vous indique l'instantané immédiat après l'instantané de référence, où tout champ de la complication peut changer. Cette information est utilisée en interne pour planifier les images des mises à jour de la complication. Par exemple, si un cadran est mis à jour une fois par minute, la complication du chronomètre l'actualise une fois par seconde. (I7ceb2)
  • EditorSession.watchFaceId peut désormais être utilisé à tous les niveaux d'API. De plus, sa valeur sera toujours cohérente avec WatchState.watchFaceInstanceId. (I323b9)
  • L'API getPendingIntentForTouchEvent n'est plus nécessaire, car le problème sous-jacent a été résolu dans le framework. Toutes les API associées ont donc été supprimées. Aucune action des cadrans n'est requise pour déclencher PendingIntents, même si l'utilisateur a récemment appuyé sur le bouton d'accueil. (I1f2e8)
  • Ajout de RendererParameters.isForScreenShot, qui est vrai si l'affichage est destiné à une capture d'écran. Certains cadrans avec animations doivent en être informés pour effectuer des ajustements et obtenir des résultats optimaux. (I96d99)
  • Ajout de WatchFaceExceptionReason à WatchFaceException pour vous donner plus d'informations sur le problème. (I01d15)
  • ComplicationDataSourceService.onImmediateComplicationRequest a été supprimé. À la place, ComplicationRequest.immediateResponseRequired a été ajouté pour indiquer au fournisseur qu'il doit répondre rapidement (idéalement, en moins de 100 ms). Notez que cette fonctionnalité est protégée par l'autorisation privilégiée com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE. (Ie6b23)
  • Mise à jour de la possibilité de valeur nulle dans core et appcompat pour assurer la correspondance avec Tiramisu DP2 (I0cbb7).

Correction de bugs

  • L'application du cadran se bloque désormais, sauf en cas d'échec de la validation du schéma (Ia400f).

Version 1.1.0-alpha03

9 février 2022

Publication d'androidx.wear.watchface:watchface-*:1.1.0-alpha03. Liste des commits de la version 1.1.0-alpha03

Modifications apportées à l'API

  • Nous avons ajouté la compatibilité expérimentale pour les schémas de style hiérarchique. Nous avons ajouté une nouvelle propriété à androidx.wear.watchface.style.UserStyleSetting.Option (childSettings), qui n'est initialement utilisée que par ListOption. Elle permet de décrire une hiérarchie de styles pour les interfaces utilisateur d'éditeur, le UserStyle sous-jacent reste inchangé et reste un Map<String, ByteArray>. (Iaf6f4)
  • Ajout de WatchFace.OverlayStyle, qui permet au cadran de configurer l'affichage de la superposition d'état du système. (I8520d)
  • Nous avons ajouté clearWithBackgroundTintBeforeRenderingHighlightLayer, un nouveau paramètre de constructeur facultatif pour CanvasRenderer et dont la valeur par défaut est "false". S'il est défini sur "true", le canevas sera effacé avec la couleur de l'arrière-plan. (Ie01e5)
  • Ajout d'une clé de métadonnées androidx.watchface.complications.datasource.DEFAULT_CONFIGURATION_SUPPORTED, qui permet aux sources de données de complication d'indiquer qu'elles peuvent fournir une valeur par défaut sans aucune configuration (Icc0d4)
  • Il est courant de modifier un cadran pour qu'il soit à la fois interactif et dépourvu d'interface graphique. Pour vous aider à économiser de la mémoire, nous avons lancé Renderer.SharedAssets, qui permet au moteur de rendu du cadran de partager des données immuables (textures et nuanceurs, par exemple) entre les instances. GlesRenderer.setEglConfig et GlesRenderer.setEglDisplay sont obsolètes. Ils n'étaient pas destinés à être définissables, ce qui aurait conduit à une réaction inattendue. (I0d9e7)
  • Nous avons ajouté setNameResourceId et setScreenReaderNameResourceId (qui font référence aux ressources de chaîne) à ComplicationSlot.Builder et aux getters correspondants dans androidx.wear.watchface.client.ComplicationSlotState. Cela permet au système d'extraire les noms des ComplicationSlots pour les utiliser dans les éditeurs et les lecteurs d'écran. (If6c6a)
  • WatchfaceMetadataClient.getUserStyleSchema et getComplicationSlotMetadataMap génèrent désormais une WatchFaceException au lieu de RemoteException. (I86f11)
  • onSynchronousComplicationRequest et les fonctions associées dans ComplicationDataSourceService ont été renommés onImmediateComplicationRequest, etc. (I87ba0)
  • L'espace sur l'écran des éditeurs de cadran est nettement inférieur à celui des éditeurs Compagnon. Il est donc logique de prendre en charge des icônes différentes pour les éditeurs de cadran. Ce correctif ajoute OnWatchEditorData (ne contenant actuellement qu'une icône) à tous les UserStyleSettings et, le cas échéant, à leurs classes d'options. (If1886)
  • Nous avons ajouté @JvmOverloads au constructeur de ListenableGlesRenderer pour améliorer l'interopérabilité Java. (I2974a)

Correction de bugs

  • Le constructeur de ListenableGlesRenderer est désormais correctement marqué comme @Throws(GlesException::class), et il est maintenant possible d'étendre cette classe en Java. (Iac6d0)
  • Corrige le bug qui empêchait la bonne exécution de la tapAction de PhotoImageComplicationData (I1cc30)

Version 1.1.0-alpha02

12 janvier 2022

Publication d'androidx.wear.watchface:watchface-*:1.1.0-alpha02. Liste des commits de la version 1.1.0-alpha02

Nouvelles fonctionnalités

  • Pour faciliter le débogage et les tests, ComplicationData et les sous-classes associées disposent maintenant de méthodes de code de hachage forcé, d'égalisation et "toString" qui facilitent leur utilisation.

Modifications apportées à l'API

  • Les méthodes WatchfaceMetadataClient génèrent à nouveau l'erreur RemoteExceptions le cas échéant, ce qui permet au code client de détecter plus facilement les erreurs sur le cadran. (I78785)
  • ComplicationData et les sous-classes disposent désormais de code de hachage, d'égalisation et de toString. (I24bc6)

Version 1.1.0-alpha01

15 décembre 2021

Publication d'androidx.wear.watchface:watchface-*:1.1.0-alpha01. Liste des commits de la version 1.1.0-alpha01

Nouvelles fonctionnalités

  • UserStyleSchema et ComplicationSlots peuvent désormais être définis en XML. Cela simplifie la construction du cadran. De plus, les requêtes WatchFaceMetadataClient sont plus rapides, car elles n'ont pas besoin de s'associer au service pour obtenir les métadonnées. WatchFaceMetadataClient et ListenableWatchFaceMetadataClient ne sont plus au stade expérimental et feront partie de l'API stable. Le système pourra éventuellement prendre en charge plusieurs instances d'un cadran, chacune ayant des options de style différentes définies par l'utilisateur. Ces éléments seront visibles dans l'outil de sélection du cadran. Pour activer cette fonctionnalité, un cadran doit inclure la balise de métadonnées suivante dans son fichier manifeste.

        <meta-data
            android:name="androidx.wear.watchface.MULTIPLE_INSTANCES_ALLOWED"
            android:value="true" />
    
  • Certains cadrans ont un état qui n'est pas capturé dans la UserStyle. Pour prendre en charge ce paramètre et plusieurs instances, l'identifiant d'instance du cadran est désormais disponible via WatchState.watchFaceInstanceId.

  • Les ComplicationData sont désormais mis en cache pour que les complications s'affichent dès leur chargement. Parfois, ComplicationData est mis en cache en mémoire par le système, et parfois, il est sérialisé par les bibliothèques de cadrans. Lors de la sérialisation, toute tapAction associée sera perdue. Si cela se produit, ComplicationData.tapActionLostDueToSerialization renvoie true, et le cadran de la montre doit afficher la complication différemment (par exemple, elle est grisée ou semi-transparente) pour indiquer qu'il est impossible d'appuyer sur l'écran. Le système enverra les ComplicationData mises à jour avec une tapAction dès que possible.

  • Certains ComplicationData ne doivent pas être mis en cache pendant une longue période. Pour l'éviter, nous avons ajouté une fonction plus générale, ComplicationDataTimeline. Elle peut être utilisée pour fournir une séquence de ComplicationData temporels à diffuser sur le cadran, qui peut être mise en cache et mise à jour automatiquement. Par exemple, les prévisions météo du jour à différents moments ou plusieurs événements d'agenda à venir. ComplicationRequestListener a été étendu avec une nouvelle méthode onComplicationDataTimeline que vous pouvez utiliser pour renvoyer ces données.

  • DefaultComplicationDataSourcePolicy a été étendu pour que vous puissiez préciser le ComplicationType pour les sources de données principale et secondaire.

  • Une compatibilité pour les fournisseurs de complications synchrones a été ajoutée pour mettre à jour la complication plus fréquemment que d'habitude, jusqu'à une fois par seconde lorsque le cadran est visible et non ambiant. Remarque : Les fournisseurs de complications synchrones peuvent être limités dans leur usage en raison de problèmes de pression sur la mémoire.

  • Il est probable que les modifications apportées à PendingIntentTapListener soient annulées, car nous avons résolu le problème sous-jacent (il est impossible pour le cadran de lancer des activités pendant cinq secondes après avoir appuyé sur le bouton d'accueil) dans le framework.

Modifications apportées à l'API

  • ComplicationData.isCached a été remplacé par tapActionLostDueToSerialization, ce qui est plus utile pour déterminer si l'emplacement de la complication doit être affiché différemment pour indiquer qu'il n'est pas possible d'appuyer dessus. (I6de2f)
  • Ajout de ComplicationDataTimeline à wear-complication-data-source. Elle peut être utilisée pour fournir une séquence de ComplicationData temporels à diffuser sur le cadran, qui peut être mise en cache et mise à jour automatiquement. Par exemple, les prévisions météo du jour à différents moments ou plusieurs événements d'agenda à venir. ComplicationRequestListener a été étendu avec une nouvelle méthode onComplicationDataTimeline que vous pouvez utiliser pour renvoyer ces données. Il existe un nouveau wrapper Kotlin, SuspendingTimelineComplicationDataSourceService, pour suspendre les services de source de données. (Idecdc)
  • Ajout de PendingIntentTapListener et de WatchFaceControlClient.getPendingIntentForTouchEvent. Ces paramètres peuvent aider les montres qui doivent lancer des intents en réponse à des gestes pour contourner un problème où le framework bloque le lancement de nouvelles activités pendant cinq secondes après avoir appuyé sur le bouton d'accueil. (I98074)
  • Introduction d'un cache ComplicationData par cadran. L'objectif est de permettre au cadran d'afficher les dernières valeurs connues pour les données de complication lors du chargement, jusqu'à ce que le système ait eu le temps de les mettre à jour. Une nouvelle méthode d'API WatchFaceControlClient.hasComplicationCache est destinée aux OEM. Elle peut influencer la stratégie du système qui consiste à envoyer des complications à un cadran. De plus, ComplicationData possède une propriété isCached, et il est recommandé d'afficher les complications mises en cache différemment, car tapAction ne peut pas être mise en cache et sera null dans une complication mise en cache. (I404b0)
  • L'identifiant d'instance du cadran est désormais disponible via WatchState.watchFaceInstanceId. La plupart des cadrans n'ont pas besoin d'utiliser cette fonctionnalité. Toutefois, si un état de cadran n'est pas stocké dans le schéma, il s'agit de la clé pour identifier l'instance du cadran. Pour vous aider, vous pouvez désormais fournir un identifiant lorsque vous appelez WatchFaceControlClient.createHeadlessWatchFaceClient. (I1ff98)
  • DefaultComplicationDataSourcePolicy étendue avec la possibilité de définir le ComplicationTypes par défaut pour les fournisseurs principal et secondaire et pour le fournisseur de système de remplacement. ComplicationSlot.defaultDataSourceType est désormais obsolète. (If0ce3)
  • ComplicationSlot.configExtras est désormais modifiable et peut être mis à jour avant d'appeler EditorSession.openComplicationDataSourceChooser(). (I6f852)
  • Ajout de WatchFace.setComplicationDeniedDialogIntent et de setComplicationRationaleDialogIntent. Ces intents sont lancés pour afficher une boîte de dialogue logique avant de demander des autorisations de complication, ainsi qu'une autre boîte de dialogue expliquant que l'autorisation de complication est nécessaire si vous essayez de modifier une complication lorsque des autorisations ont été refusées (le sélecteur de fournisseur ne s'ouvre pas, la boîte de dialogue est donc nécessaire). (I3a29c)
  • UserStyleSchema et ComplicationSlots peuvent désormais être définis en XML. Cela simplifie la construction du cadran et accélère les requêtes WatchFaceMetadataClient, qui n'ont plus besoin de se lier au service pour obtenir les métadonnées. (I85bfa)
  • Ajout de InteractiveWatchFaceClient.supportsPendingIntentForTouchEvent pour permettre à un client de déterminer si un cadran est compatible avec getPendingIntentForTouchEvent. (I0b917)
  • WatchFaceMetadataClient et ListenableWatchFaceMetadataClient ne sont plus au stade expérimental. Ils permettent d'obtenir efficacement des métadonnées sur le cadran, lorsque cela est possible sans ouvrir de classeur sur le cadran. (Ibb827)
  • Une compatibilité pour les fournisseurs de complications synchrones a été ajoutée pour mettre à jour la complication plus fréquemment que d'habitude, jusqu'à une fois par seconde lorsque le cadran est visible et non ambiant. Pour l'utiliser, le fournisseur doit inclure une nouvelle balise androidx.wear.watchface.complications.data.source.SYNCHRONOUS_UPDATE_PERIOD_SECONDS de métadonnées dans son fichier manifeste et ignorer onSynchronousComplicationRequest. Selon la nature de la source de données, il peut également être nécessaire d'ignorer onStartSynchronousComplicationRequests et onStopInteractiveComplicationRequests pour recevoir des notifications lorsque la complication passe en mode interactif. (I8fe9d)

Version 1.0

Version 1.0.1

9 février 2022

Publication d'androidx.wear.watchface:watchface-*:1.0.1. Liste des commits de la version 1.0.1

Correction de bugs

  • Corrige le bug qui empêchait la bonne exécution de la tapAction de PhotoImageComplicationData (I1cc30)

Version 1.0.0

1er décembre 2021

Publication d'androidx.wear.watchface:watchface-*:1.0.0. Liste des commits de la version 1.0.0

Principales fonctionnalités de la version 1.0.0

Le package androidx.wear.watchface est la nouvelle bibliothèque recommandée pour le développement de cadrans Wear OS. Elle contient un certain nombre de nouvelles fonctionnalités par rapport à l'ancienne bibliothèque Support d'accessoires connectés.

  • Le style utilisateur (par exemple, pour changer la palette de couleurs, le style des aiguilles de la montre, l'apparence des repères horaires, etc.) est directement compatible avec la bibliothèque (voir androidx.wear.watchface.style). Il est désormais beaucoup plus simple de développer un éditeur de cadran avec androidx.wear.watchface.editor. Vous pouvez modifier le cadran de l'application système associée sans avoir à écrire de code supplémentaire.
  • Bonnes pratiques intégrées. La bibliothèque génère automatiquement des libellés de contenu de lecteur d'écran pour les complications (vous pouvez également en ajouter). La fréquence d'images diminue automatiquement lorsque la batterie est faible et ne se recharge pas, pour améliorer l'autonomie de la batterie.
  • Il faut moins de code pour développer un cadran, en particulier pour les complications dont une bonne partie du code récurrent se produit dans la bibliothèque.

Correction de bugs

  • Corrige EditorSession.userStyle.compareAndSet (I6f676)
  • Corrige le très léger décalage au niveau du cadran (Iffb97)
  • Gérer InteractiveWatchFaceImpl.onDestroy sur le thread d'interface utilisateur (I83340)
  • Corrige plusieurs problèmes liés à des broadcast receivers (I7d25f)

Version 1.0.0-rc01

3 novembre 2021

Publication d'androidx.wear.watchface:watchface-*:1.0.0-rc01. Liste des commits de la version 1.0.0-rc01

Correction de bugs

  • Corrige le fichier dump() (appelé par adb shell dumpsys), qui a été brisé lors des migrations de flux. (087cf9e)

  • Assurez-vous que les writeDirectBootPrefs sont correctement commandées. Les writeDirectBootPrefs doivent toujours s'exécuter après initStyleAndComplications, sans quoi il y a un risque de retard d'initialisation du thread d'interface utilisateur. (37650ac)

  • Assurez-vous que Renderer.onDestroy est appelé. Si le moteur de rendu a été créé, mais que l'initialisation de WF n'est pas terminée et qu'Engine.onDestroy est appelé, il est nécessaire d'appeler Renderer.onDestroy. (f9952dc)

  • Optimisation/Correctif : isBatteryLowAndNotCharging. Ce correctif avance la configuration initiale de isBatteryLowAndNotCharging, qui peut donc être effectué en parallèle de createWatchFace. De plus, nous écoutons désormais ACTION_POWER_DISCONNECTED. (ddffd80

  • InteractiveWatchFaceClientImpl.isConnectionAlive passe en valeur "false" après fermeture (ab9774e)

Version 1.0.0-beta01

27 octobre 2021

Publication d'androidx.wear.watchface:watchface-*:1.0.0-beta01. Liste des commits de la version 1.0.0-beta01

Version 1.0.0-alpha24

13 octobre 2021

Publication d'androidx.wear.watchface:watchface-*:1.0.0-alpha24. Liste des commits de la version 1.0.0-alpha24

Modifications apportées à l'API

  • Les classes du package androidx.wear.watchface.complications ont été déplacées dans un nouveau projet wear:watchface:watchface-complications. Notez que vous ne pouvez pas inclure cette bibliothèque ni toute version alpha antérieure de wear:watchface:watchface-complications-data, car des erreurs se produiront en cas de classes en double. (I97195)
  • Renderer.dump a été renommé Renderer.onDump et a été annoté avec @UiThread. (I44845)
  • InteractiveWatchFaceClient.addWatchFaceReadyListener a été renommé addOnWatchFaceReadyListener, et removeWatchFaceReadyListener a été renommé removeOnWatchFaceReadyListener. (I48fea)
  • getComplicationsPreviewData et getComplicationsDataSourceInfo d'EditorSession ne sont plus des fonctions de suspension, mais des propriétés StateFlow<> dont la valeur initiale est nulle. Dans ListenableEditorSession, getListenableComplicationPreviewData et getListenableComplicationsProviderInfo ont été supprimés en faveur des nouveaux objets StateFlow<> de la classe de base. Si vous devez écouter les modifications du code Java, utilisez androidx.lifecycle.FlowLiveDataConversions.asLiveData pour convertir en LiveData<>. (Ic5483)

Version 1.0.0-alpha23

29 septembre 2021

Publication d'androidx.wear.watchface:watchface-*:1.0.0-alpha23. Liste des commits de la version 1.0.0-alpha23

Nouvelles fonctionnalités

La bibliothèque de cadrans est désormais un groupe de bibliothèques unique. Les bibliothèques ont donc été déplacées. Mettez vos importations Gradle à jour comme suit :

Ancien Nouveau
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

Modifications apportées à l'API

  • Migrez les bibliothèques de cadran et de complications androidx.wear distinctes dans le groupe de bibliothèques androidx.wear.watchface. (b25f3c0)
  • Ajout d'EditorRequest.canWatchFaceSupportHeadlessEditing pour indiquer à un client si un éditeur de cadran est compatible avec la modification sans interface graphique. Notez qu'il y aura de faux négatifs, car la compatibilité a été ajoutée dans asop/1756809, mais elle renvoie la valeur correcte pour tous les futurs cadrans. (ca55590)
  • Le moteur de rendu dispose désormais d'une méthode dump() qui peut être ignorée pour ajouter des données personnalisées aux informations générées par le service d'activité WatchFaceService d'adb dumpsys shell. (95235f9)
  • InteractiveWatchFaceClient.addWatchFaceReadyListener indique désormais l'exécuteur en premier. (563ac2f)
  • StateFlowCompatHelper a été supprimé. Utilisez asLiveData (androidx.lifecycle.asLiveData) à la place. (bd35d3)
  • CurrentUserStyleRepository.userStyle n'est plus modifiable. (I44889)
  • WatchFaceReadyListener a été renommé OnWatchFaceReadyListener. (Ic12a9)

Correction de bugs

  • InteractiveInstanceManager.deleteInstance pour appeler onDestroy. Cela est nécessaire pour s'assurer qu'InteractiveWatchFaceImpl récupère la mémoire. (fce4af8, b/199485839)