Wear Watchface
Nota: El Formato de Caras de Relojes es obligatorio para que las caras de reloj se instalen en dispositivos con Wear OS 5 o versiones posteriores preinstaladas y para todas las caras de reloj nuevas que se publiquen en Google Play.
A partir de enero de 2026, el Formato de Caras de Relojes será obligatorio para que las caras de reloj se instalen en todos los dispositivos Wear OS.
Obtén más información sobre los cambios para los usuarios en este artículo del Centro de ayuda.
| Actualización más reciente | Versión estable | Versión potencial | Versión beta | Versión alfa |
|---|---|---|---|---|
| 23 de abril de 2025 | 1.2.1 | - | - | 1.3.0-alpha07 |
Cómo declarar dependencias
Para agregar una dependencia en Wear, debes agregar el repositorio de Maven de Google a tu proyecto. Consulta el repositorio de Maven de Google para obtener más información.
Agrega las dependencias de los artefactos que necesites en el archivo build.gradle de tu app o módulo:
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" }
Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.
Comentarios
Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Versión 1.3
Versión 1.3.0-alpha07
23 de abril de 2025
Lanzamiento de androidx.wear.watchface:watchface-*:1.3.0-alpha07. La versión 1.3.0-alpha07 contiene estas confirmaciones.
Nuevas funciones
- Hace tiempo que se puede definir el esquema UserStyle de una cara de reloj y
ColorUserStyleSettingen XML.
Cambios en la API
- Los proyectos lanzados con Kotlin 2.0 requieren KGP 2.0.0 o una versión posterior para su consumo. (Idb6b5).
- Se agregó la API de Push de Caras de Relojes, que permite que una app para Wear OS instale una cara de reloj en un reloj de manera programática.
Correcciones de errores
- Se recomienda que los proveedores de complicaciones que usan la versión 1.3.0-alpha06 realicen la actualización porque se corrigió un error de falla con
ComplicationDataSourceUpdateRequesteren la próxima versión de WearOS.
Versión 1.3.0-alpha06
26 de marzo de 2025
Lanzamiento de androidx.wear.watchface:watchface-*:1.3.0-alpha06. La versión 1.3.0-alpha06 contiene estas confirmaciones.
Nuevas funciones
- Las APIs de caras de reloj para Wear (watchface, watchface-client, watchface-client-guava, watchface-complications-rendering, watchface-data, watchface-editor, watchface-editor-guava y watchface-style) dejaron de estar disponibles a favor del Formato de Caras de Relojes para Wear y, con el tiempo, se quitarán de AndroidX. Las APIs de complicación no dejarán de estar disponibles y permanecerán. (Ice960).
- Las APIs de complicación ahora pueden comunicarse directamente con
WearSDK, lo que es más eficiente debido a que hay menos saltos de IPC.
Versión 1.3.0-alpha05
15 de enero de 2025
Lanzamiento de androidx.wear.watchface:watchface-*:1.3.0-alpha05. La versión 1.3.0-alpha05 contiene estas confirmaciones.
Nuevas funciones
Por lo general, las caras de reloj permiten que el usuario seleccione colores con un ListUserStyle. Si bien esto funciona, implica enviar los íconos a través de Bluetooth al editor complementario, lo que no es eficiente, por lo que presentamos ColorUserStyleSetting, en el que la carga útil es una lista de uno o más colores por estilo que tiene un formato de cable mucho más compacto.
Agregamos una función orientada a OEM que permite que los proveedores de complicaciones de OEM agreguen elementos adicionales a ComplicationData para que los usen las caras de reloj de OEM.
Cambios en la API
- Las clases
UserStyleSettingyUserStyleOptionahora tienen compiladores, que es la forma recomendada de construirlas. (Iacd03). - Compatibilidad para pasar elementos adicionales en
ComplicationData. Los OEMs pueden usar esta función para controlar el proveedor de complicaciones y la cara de reloj receptora. Para configurar un elemento adicional, se requiere el permisocom.google.android.wearable.permission.COMPLICATION_EXTRAScon privilegios. (I4e3b2). - Por lo general, las caras de reloj permiten que el usuario seleccione colores con un
ListUserStyle, con un ícono para cadaListOption. Dado que los esquemasUserStylese envían a través de Bluetooth, es importante mantener el tamaño del esquema bajo, lo que puede ser un problema si se proporcionan muchas docenas de opciones de color debido a todos esos íconos. Para ayudar con esto, agregamosColorUserStyleSetting, en el que la opción contiene una lista de colores en lugar de un ícono, lo que es mucho más compacto. (Ib542e). ColorUserStyleSettingyColorOptionrequieren el nivel de API 34 para su uso. (I8771d)
Correcciones de errores
- Esta biblioteca ahora usa anotaciones de nulidad de JSpecify, que son de tipo de uso. Los desarrolladores de Kotlin deben usar el siguiente argumento del compilador para aplicar el uso correcto:
-Xjspecify-annotations=strict(este es el valor predeterminado a partir de la versión 2.1.0 del compilador de Kotlin). (Ifd363, b/326456246).
Versión 1.3.0-alpha04
18 de septiembre de 2024
Lanzamiento de androidx.wear.watchface:watchface-*:1.3.0-alpha04. La versión 1.3.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
- Se agregó compatibilidad con la carga diferida de íconos en
UserStyleSettingsyUserStyleOptions, lo que mejora el rendimiento de la carga de caras de reloj. (Iaf43d). - Se agregó una opción para que se tome una captura de pantalla actualizada cada vez que cambie la configuración del sistema (p.ej., si cambió la configuración regional) a través de la nueva
Watchface.setUpdateScreenshotOnConfigurationChange. Este parámetro de configuración está desactivado de forma predeterminada. (I765a1)
Correcciones de errores
- Se quitó el esquema manual de acceso a las nuevas APIs de la plataforma, ya que esto se realiza automáticamente a través del modelado de API cuando se usa R8 con AGP 7.3 o versiones posteriores (p.ej., R8 versión 3.3) y para todas las compilaciones cuando se usa AGP 8.1 o versiones posteriores (p.ej., D8 versión 8.1). Se recomienda a los clientes que no usen AGP que actualicen a la versión 8.1 de D8 o una posterior. Consulta este artículo para obtener más detalles. (Ia60e0, b/345472586).
Versión 1.3.0-alpha03
17 de abril de 2024
Lanzamiento de androidx.wear.watchface:watchface-*:1.3.0-alpha03. La versión 1.3.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Se agregó
EditorSession#setOverrideComplications, que establece temporalmente elComplicationDatade la instancia subyacente de la cara de reloj durante la edición. Si las complicaciones cambian con poca frecuencia, esto es más eficiente que pasar anulaciones a través deEditorSession#renderWatchFaceToBitmap. (I19384).
Correcciones de errores
- Anteriormente,
selectComplicationDataForInstantllamaba atoApiComplicationDatapara cualquier cronograma, lo que significa que la prueba de igualdad de referencia === posterior siempre fallaba. Esto significaba que las complicaciones se volvían a cargar en cada fotograma, lo que provocaba un consumo excesivo de batería. (717406)
Versión 1.3.0-alpha02
3 de abril de 2024
Lanzamiento de androidx.wear.watchface:watchface-*:1.3.0-alpha02. La versión 1.3.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
- Ahora usamos la igualdad de referencia para comparar mejor y
selectedDataporque el operador igual es costoso. (446b00).
Cambios en la API
- Agregamos una API dinámica sin resguardo para
GoalProgressComplicationData. (c33264).
Versión 1.3.0-alpha01
7 de febrero de 2024
Lanzamiento de androidx.wear.watchface:watchface-*:1.3.0-alpha01. La versión 1.3.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
WatchFaceServicesse puede inicializar de forma simultánea y, por lo tanto, debe ser sin estado. Para admitir esto, agregamosStatefulWatchFaceService, en el que se pasa un elemento adicional definido por el usuario creado porcreateExtra()a todas las anulaciones a las que se llama durante la inicialización.GlesRenderer2ahora tiene una sobrecarga de constructor que te permite especificar una lista de atributos para probar a su vez coneglChooseConfig.
Cambios en la API
StatefulWatchFaceServiceahora admite una anulación degetComplicationSlotInflationFactoryen la que se pasa el elemento adicional definido por el usuario que creacreateExtra(). (I82d9f).- Algunas caras de reloj deben compartir los datos auxiliares creados durante
createUserStyleSchemacon los otros métodos de inicialización. Como no había una alternativa mejor, los desarrolladores solían hacer que suWatchFaceServicestuviera estado. Esto es peligroso porque se pueden crear varias instancias de forma simultánea, lo que puede generar errores. Para resolver este problema, presentamosStatefulWatchFaceServiceyStatefulWatchFaceRuntimeService, en los quecreateExtra()crea un tipo definido por el usuario y lo pasa a los diversos métodos de creación como parámetro. (If8a99). - Se agregó
getUserStyleFlavorsaInteractiveWatchFaceClient, que es de interés principalmente para los OEM. (I0f5d8). GlesRenderer2ahora tiene una sobrecarga de constructor que te permite especificar una lista de atributos para probar a su vez coneglChooseConfig. Esto, por ejemplo, te permite probar primero una configuración con antialiasing y, si es necesario, recurrir a una sin él. (I1ba74).- A partir de Android U, se agregará compatibilidad con
SystemDataSources.DATA_SOURCE_HEART_RATEa WearOS. Se garantiza que esta complicación solo admita complicacionesSHORT_TEXT, pero se recomienda queComplicationSlottambién acepteSMALL_IMAGE, ya que los OEMs pueden optar por publicar un atajo a su app de salud en lugar del valor en vivo. (I34223). - Agregamos
METADATA_KEY_CONFIG_RESTORE_SUPPORTED, que, a partir de Android U, controla lo que sucede cuando el sistema se restablece desde una copia de seguridad para la fuente de datos de complicación conMETADATA_KEY_DATA_SOURCE_CONFIG_ACTION. De forma predeterminada, el sistema supone que el servicio de fuente de datos de complicación admite la copia de seguridad de cualquier dato de configuración, pero si no es así, puede agregar el parámetro de configuración de metadatosMETADATA_KEY_DATA_SOURCE_CONFIG_ACTIONa falso, lo que marcará el espacio de complicación como no configurado. (I6c505).
Versión 1.2
Versión 1.2.1
24 de enero de 2024
Lanzamiento de androidx.wear.watchface:watchface-*:1.2.1. La versión 1.2.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una falla en el Samsung Galaxy Watch 4, 5 y 6. (43f0b0).
Versión 1.2.0
29 de noviembre de 2023
Lanzamiento de androidx.wear.watchface:watchface-*:1.2.0. La versión 1.2.0 contiene estas confirmaciones.
Cambios importantes desde la versión 1.1.0
- Agregamos compatibilidad con algunos tipos de complicaciones nuevos que están disponibles para usarse a partir de Android T:
GoalProgressComplicationData, que es similar aRangedValueComplicationData, excepto porque es para el progreso hacia un objetivo en el que el valor mínimo implícito es cero y puede ser mayor quetargetValue.WeightedElementsComplicationData, que consiste en un array de elementos (pares de peso y color) junto con texto, imágenes y títulos opcionales. Estos se pueden mostrar como un gráfico circular en el que los colores deben ser significativos según el contexto, ya que, por lo general, no hay espacio en una complicación para procesar las etiquetas
- Agregamos compatibilidad con
ColorRangesopcional enRangedValueComplicationData. Por lo general, las complicaciones se renderizan con los colores de la cara de reloj que elija el usuario, pero a veces,ComplicationDataSourcese coloca mejor para establecer los colores; p. ej., cuando tienen un significado semántico particular. P. ej., de rojo a azul para la temperatura - Casi todos los tipos de
ComplicationDataahora admitenSmallImages. - Agregamos
ComplicationDisplayPolicy, en la queDO_NOT_SHOW_WHEN_DEVICE_LOCKEDindica a una cara de reloj compatible que no muestre la complicación cuando el dispositivo está bloqueado. - A partir de Android T, los OEM podrán determinar si una solicitud de complicación proviene de una cara de reloj en la lista definida por los metadatos
android.support.wearable.complications.SAFE_WATCH_FACESen el manifiesto de su proveedor medianteComplicationRequest#isForSafeWatchFace. El proveedor necesitará el permisocom.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACEpara recibir cualquier otro elemento que no sea TargetWatchFaceSafety.UNKNOWN. UserStyleFlavorsse convirtió en una función no experimental.
Versión 1.2.0-rc01
18 de octubre de 2023
Lanzamiento de androidx.wear.watchface:watchface-*:1.2.0-rc01. La versión 1.2.0-rc01 contiene estas confirmaciones.
Versión 1.2.0-beta02
6 de septiembre de 2023
Lanzamiento de androidx.wear.watchface:watchface-*:1.2.0-beta02. La versión 1.2.0-beta02 contiene estas confirmaciones.
Nuevas funciones
SuspendingComplicationDataSourceService#onDestroyya está abierto. Ten en cuenta que se quitó la compatibilidad con una complicación del clima predeterminada del sistema.
Cambios en la API
- Revierte la opción "Expón una nueva fuente de datos para las complicaciones del clima". (I6f335).
Versión 1.2.0-beta01
23 de agosto de 2023
Lanzamiento de androidx.wear.watchface:watchface-*:1.2.0-beta01. La versión 1.2.0-beta01 contiene estas confirmaciones.
Nuevas funciones
- A partir de Android T, WearOS ahora admitirá una complicación predeterminada del sistema meteorológico.
Cambios en la API
- Se agregó el resguardo del sistema predeterminado del clima para las complicaciones. (Ia0994)
- Este parche agrega
WatchFaceRuntimeServiceyWatchFaceControlClient.createWatchFaceRuntimeControlClientjunto con wrappers de Guava. Estos agregan compatibilidad con los tiempos de ejecución de caras de reloj, que son un tipo especial de cara de reloj que carga su definición desde otro paquete. Actualmente, WearOS solo admite el entorno de ejecución del Formato de Caras de Relojes de Android. (I2799f). - Este parche es un seguimiento de aosp/2636578, en el que cambiamos el nombre de las definiciones de int para que no sea necesario cambiar ningún código que dependa de
WatchFaceType,CanvasType,TapTypeoComplicationsSlotBoundsType. (I4098b) - Se actualizaron los archivos de la API para anotar la supresión de compatibilidad. (I8e87a, b/287516207).
- Este parche expone constantes
WatchFaceTypeenWatchFaceTypes, constantesCanvasTypeenCanvasTypes, constantesTapTypeenTapTypesy constantesComplicationsSlotBoundsTypeenComplicationsSlotBoundsType. (I3b85a, b/288750666). WatchFace.OverlayStyletiene un uso muy bajo y no es compatible con los OEM, por lo que lo desvalorizaremos con la intención de quitarlo más adelante. (I7344a)
Versión 1.2.0-alpha09
21 de junio de 2023
Lanzamiento de androidx.wear.watchface:watchface-*:1.2.0-alpha09. La versión 1.2.0-alpha09 contiene estas confirmaciones.
Nuevas funciones
RangedValueComplicationData.Builderahora aceptaDynamicFloat, y hay un nuevoDynamicComplicationTextdisponible como subclase deComplicationText, que pueden usar expresiones dinámicas, así como vinculaciones de plataforma que se actualizan a 1 Hz en dispositivos Wear 4 compatibles.
Cambios en la API
- Se agregaron tipos dinámicos para la distancia diaria, las calorías diarias y las plantas diarias. Las claves de las fuentes de estado de la plataforma ahora se encuentran en
PlatformHealthSources.Keys(Ib7637). - Implementa
PlatformDataProviderpara proporcionar la frecuencia cardíaca y los pasos diarios. Se quitó la interfazSensorGatewayde la API pública. (I55b84). - Cambia el nombre de
StateEntryValueaDynamicDataValuey actualiza las APIs de estado para usarDynamicDataKey. (If1c01). - Se agregó
AppDataKeypara acceder al estado enviado de la app. Se agregóPlatformDataKeypara acceder a los datos de la plataforma. Se agregó compatibilidad con espacios de nombres enStateStore. (I7985e) - Se quitaron los métodos
enable/disablePlatformSourcedeDynamicTypeEvaluator. El llamador debe ser responsable de las actualizaciones. (I78c6d) - Permite limitar el tamaño de los tipos de datos vinculados. (Ie2966).
Versión 1.2.0-alpha08
19 de abril de 2023
Lanzamiento de androidx.wear.watchface:watchface-*:1.2.0-alpha08. La versión 1.2.0-alpha08 contiene estas confirmaciones.
Nuevas funciones
- A partir de Android T, los proveedores de complicaciones con el
com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACEcon privilegios pueden registrar metadatosandroidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPESque anulanandroid.support.wearable.complications.SUPPORTED_TYPESpara caras de reloj seguras. Esto significa que un proveedor de complicaciones puede elegir publicar diferentes tipos de complicaciones en caras de reloj de confianza o no.
Cambios en la API
- Propagación de la clase
@Deprecateda la propiedad (I882d1, b/271441831). - Se cambió el nombre del parámetro de valor para
Enum.valueOf(Ia9b89). - Se agregaron más excepciones arrojadas de enum valueOf (I818fe).
- Quitamos
renderWatchFaceToSurfaceen favor decreateRemoteWatchFaceView, que se compila en SurfaceControlViewHost y permite que el emisor incorpore una vista de la cara de reloj, que se renderiza cuando el cliente llama aRemoteWatchFaceViewHost#renderWatchFace. (Ib311d). - Se agregó
renderWatchFaceToSurfaceaInteractiveWatchFaceClient,HeadlessWatchFaceClientyEditorSession. Por lo general, esto tendrá un mejor rendimiento que la renderización en un mapa de bits. (Ieacad). - Se cambió el nombre de
ObservableStateStoreaStateStore. (Ieb0e2). - Se agregó
DynamicTypeEvaluator.Builderen lugar de argumentos de constructor para permitir más argumentos opcionales, incluidoObservableStateStore, que ahora se establece de forma predeterminada en una tienda vacía. (I6f832). - Se refactorizó el orden de los parámetros en
DynamicTypeEvaluator. (Ic1ba4). - Se agregó el ejecutor a los métodos
DynamicTypeEvaluator.bind. (I346ab). - Se agregó el método
startEvaluationaBoundDynamicTypepara activar la evaluación después de que se vincula el tipo dinámico. (I19908). - Los proveedores de complicaciones con el
com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACEcon privilegios pueden registrar metadatosandroidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPESque anulanandroid.support.wearable.complications.SUPPORTED_TYPESpara caras de reloj seguras. (Id1c73). - Se cambió el nombre de
CustomValueUserStyleSettings2aLargeCustomValueUserStyleSettings. (Ic17ac)
Correcciones de errores
- Se quitó
DynamicTypeValueReceiver#onPreUpdate. (I2dc35).
Versión 1.2.0-alpha07
22 de febrero de 2023
Lanzamiento de androidx.wear.watchface:watchface-*:1.2.0-alpha07. La versión 1.2.0-alpha07 contiene estas confirmaciones.
Nuevas funciones
A partir de Android T, los OEM podrán determinar si una solicitud de complicación proviene de una cara de reloj en la lista definida por los metadatos
android.support.wearable.complications.SAFE_WATCH_FACESen el manifiesto de su proveedor medianteComplicationRequest#isForSafeWatchFace. El proveedor necesitará el permisocom.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACEpara recibir cualquier otro elemento que no seaTargetWatchFaceSafety.UNKNOWN.También está disponible desde Android T
CustomValueUserStyleSetting2, que puede almacenar hasta 12.5 KB. El límite anterior deCustomValueUserStyleSettingera de 1 KB. A pesar del aumento en el límite de tamaño, se recomienda que los desarrolladores de caras de reloj no se excedan en el uso de datos, ya que la configuración se envía mediante Bluetooth durante la edición y el ancho de banda de Bluetooth es limitado.
Cambios en la API
- Agregamos un parámetro opcional
eglContextAttribListaGlesRendereryGlesRenderer2, que te permite establecer laEGL14.EGL_CONTEXT_CLIENT_VERSIONque se pasa aEGL14.eglCreateContext(I2a83e). - Migramos las bibliotecas de caras de reloj a
androidx.core.util.Consumeren lugar dejava.util.function.Consumer(I273f5). - Se agregaron más excepciones arrojadas por descriptores de acceso de propiedades de KT (Iff9d9).
- Agregamos
InteractiveWatchFaceClient.isComplicationDisplayPolicySupportedpara que el cliente pueda determinar si debe emular la compatibilidad o no en nombre de las caras de reloj anteriores (I24c89). - Decidimos que
isForSafeWatchFacedebe ser unIntDefde tres estados (Ief2f7). - Para Android T, presentamos
ComplicationRequest.isForSafeWatchFace, que está destinado al uso de OEM y requierecom.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE. Para las fuentes de datos de la imagen del sistema, se mostrará un valor verdadero si la cara de reloj que lo solicita se encuentra dentro de la lista de caras seguras que especifica la fuente de datos en su manifiesto (I0cbb6). - Para Android T, agregamos
CustomValueUserStyleSetting2, que puede almacenar hasta 12.5 KB. El límite anterior deCustomValueUserStyleSettingera de 1 KB (I0b100).
Versión 1.2.0-alpha06
25 de enero de 2023
Se lanzó androidx.wear.watchface:watchface-*:1.2.0-alpha06. La versión 1.2.0-alpha06 contiene estas confirmaciones.
Nuevas funciones
- Se está trabajando para agregar compatibilidad con la vinculación de plataformas de complicaciones. Esto aún no está listo para que lo uses, pero lo estará pronto.
- Se agregó compatibilidad con XML
ComplicationSlotpara los nuevos tipos de complicación, GOAL_PROGRESS y WEIGHTED_ELEMENTS.
Correcciones de errores
- Se corrigió una fuga en la que el editor de caras de reloj no se lanzaba correctamente en dispositivos Samsung (3b5987).
- Se corrigió un error por el que, a veces, las complicaciones no se mostraban correctamente cuando se cambiaba de cara de reloj con varios favoritos (b38ece).
- Se corrigió un error de serialización con perOptionScreenReaderNames que provocaba fallas en la cara de reloj (e9f466).
Versión 1.2.0-alpha05
7 de diciembre de 2022
Lanzamiento de androidx.wear.watchface:watchface-*:1.2.0-alpha05. La versión 1.2.0-alpha05 contiene estas confirmaciones.
Nuevas funciones
Hace un tiempo, agregamos compatibilidad con la jerarquía
UserStyleSettingsy, desde Android T, ahora es posible tener más de unaComplicationSlotsUserStyleSettingen una jerarquía. Solo se activará unaComplicationSlotsUserStyleSetting, según las selecciones de estilo del usuario.Agregamos un campo
screenReaderNamepara mejorar la compatibilidad con el lector de pantalla paraListOptionyComplicationSlotsOption. Ten en cuenta que, en las versiones anteriores a Android T, los editores complementarios ignorarán este campo.
Cambios en la API
- Agregamos un nuevo campo opcional
screenReaderNameaListOptionyComplicationSlotsOptionpara que lo usen los editores. Los editores complementarios lo ignorarán en dispositivos con versiones anteriores a Android T (I75326). - A partir de Android T, se admitirán varias
ComplicationSlotsUserStyleSettingsen una jerarquía de estilo, siempre y cuando no esté activa más de una de ellas a la vez. Se agregó una función de utilidadfindComplicationSlotsOptionForUserStyleaUserStyleSchemapara ayudar a encontrar laComplicationSlotsOptionactiva, si corresponde (Ic2b06). - Se incluyeron
RangedValuesTypesen el objeto complementario deRangedValueComplicationDatay se les cambió el nombre aTYPE_UNDEFINED,TYPE_RATING; y también se agregó un nuevoTYPE_PERCENTAGE(I55d02). - Cambiamos el nombre de
DynamicFloatexperimental aFloatExpressiony lo marcamos como@hide(Idf4f1). - Se agregó la anotación
@JvmDefaultWithCompatibility(I8f206).
Versión 1.2.0-alpha04
9 de noviembre de 2022
Lanzamiento de androidx.wear.watchface:watchface-*:1.2.0-alpha04. La versión 1.2.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
- Para Android T, agregamos compatibilidad con dos nuevos tipos de complicación:
GoalProgressComplicationDatayWeightedElementsComplicationData. GoalProgressComplicationDataes similar aRangedValueComplicationData, pero su valor puede superar el objetivo (en el caso deRangedValueComplicationData, el valor se restringe al rango [mín.-máx.]), lo que tiene implicaciones en el diseño visual que podrían no adaptarse a todos los fondos de pantalla.GoalProgressComplicationDataagrega compatibilidad con gráficos circulares y desgloses similares de datos simples.- Agregamos asistencia opcional para
ColorRampsenRangedValueComplicationData. - En el caso de Android T, agregamos
ComplicationPersistencePolicyysetCachePolicyaComplicationData, que actualmente permite que un proveedor controle si una complicación persiste o no (es decir, si se almacenó en caché después del reinicio). La mayoría de las complicaciones no necesitan establecer el control de caché, pero al hacerlo se pueden corregir casos límite con datos inactivos para algunas complicaciones que se actualizan con frecuencia (p. ej., complicaciones de datos de salud). También agregamosComplicationDisplayPolicy, en la queDO_NOT_SHOW_WHEN_DEVICE_LOCKEDindica a una cara de reloj compatible que no muestre la complicación cuando el dispositivo está bloqueado (Ic9574).
Cambios en la API
GoalProgressComplicationData,WeightedElementsComplicationDatayColorRampdejaron de ser experimentales (Ica9e2).ComplicationPersistencePolicyyComplicationDisplayPolicyahora están marcados correctamente como APIs de T (I31d88).- El constructor obsoleto
ComplicationSlotOverlayahora tieneDeprecationLevel.WARNING, lo que permite que se vuelva a llamar desde Java (Ib308c). - Se corrigieron algunos problemas de compatibilidad de Java con
ComplicationRequestListener,CanvasComplication,ComplicationTapFilteryInteractiveWatchFaceClientagregándoles la anotación@JvmDefaultWithCompatibility(Id94fc). - Se quitaron los elementos experimentales
ProtoLayoutComplicationDatayListComplicationData. La justificación de los desarrolladores para estos no fue clara. Esperamos volver a revisarla en el futuro (I9df05). - Se agregó un
ValueTypeaRangedValueComplicationData.WeightedElementsComplicationDataahora admite un color de fondo. Se quitóDiscreteRangedValueComplicationDataporque su funcionalidad es un subconjunto deWeightedElementsComplicationData(I6446c).
Correcciones de errores
- Incluye
isForScreenShoten el código de equals y hash. Asegúrate de queonRenderParametersChangedobtenga un valor deisForScreenshotcorrecto (I04a41). - Se corrigieron las filtraciones de
WatchFaceControlServicede clientes sin interfaz gráfica (e90e00).
Versión 1.2.0-alpha03
5 de octubre de 2022
Lanzamiento de androidx.wear.watchface:watchface-*:1.2.0-alpha03. La versión 1.2.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- No hay funciones nuevas, pero corregimos algunos errores del editor de caras de reloj.
Cambios en la API
UserStyleSchema.userStyleSettingsdejó de estar disponible, ya querootUserStyleSettingsse vuelve no experimental (Ie96e3).rootUserStyleSettingsdejó de ser experimental (I8d6b3).- Se marcó
WatchFaceColorscomo experimental porque no es compatible con todos los sistemas (I6d75d). - Se expuso
DisconnectReasonsen la API pública para que funcione conIntDef(I791f8).
Correcciones de errores
- Se cierra cualquier editor abierto en el reloj si
SysUIdeja de funcionar. SiSysUIdeja de funcionar y el editor de caras de reloj no se cierra, la cara de reloj podría quedar en un estado inconsistente porque el sistema se basa enSysUIpara conservar cualquier cambio de estilo del usuario (ba762a). - Se corrigió una fuga de memoria en
ComplicationDataSourceInfoRetriever, en la que una continuación de corrutina de Kotlin funcionaba como raíz de recolección de elementos no usados (GC) y retenía la actividad del editor (33ee06).
Versión 1.2.0-alpha02
21 de septiembre de 2022
Lanzamiento de androidx.wear.watchface:watchface-*:1.2.0-alpha02. La versión 1.2.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
Algunas caras de reloj tienen una configuración fuera de
UserStyleque las afecta visualmente (por ejemplo, al seleccionar una foto de fondo). AgregamosRenderer.sendPreviewImageNeedsUpdateRequest, que permite que la cara de reloj solicite una imagen de vista previa actualizada. Ten en cuenta que esto requiere una actualización del sistema correspondiente para funcionar.También agregamos una API para que las caras de reloj expongan sus colores al sistema, que puede elegir su paleta de colores en función de esto. Ten en cuenta que esto se hizo experimental en un parche de seguimiento.
Casi todos los tipos de
ComplicationDataahora admitenSmallImages.
Cambios de APIs
- El administrador de fondos de pantalla a veces puede desconectarse de un motor y hacer otro. Agregamos un
DisconnectReasonint def y extendimosClientDisconnectListenercon un método nuevo que incluye unDisconnectReason, lo que permite que el objeto de escucha detecte desconexiones del motor (I45cce). - Se agregaron dos parámetros opcionales
nameResourceIdyscreenReaderResourceIdal constructorComplicationSlotOverlay(I157e8). - Agregamos un wrapper de guava para la nueva sobrecarga de
getOrCreateInteractiveWatchFaceClientcon unPreviewImageUpdateRequestedListener(Ic31f0). - Agregamos
Renderer.sendPreviewImageNeedsUpdateRequest, que es útil para las caras de reloj que tienen un estado fuera deUserStyleSchemaque afecta su apariencia (por ejemplo, una cara de reloj con una imagen de fondo seleccionable). En el cliente, agregamosPreviewImageUpdateRequestedListenercomo parámetro opcional paragetOrCreateInteractiveWatchFaceClienta fin de observar estas solicitudes (Iff44a). - Simplificamos la API para exponer
WatchFaceColors. Ahora hay una propiedad simple llamadawatchFaceColorsen el Procesador que la cara de reloj puede configurar. Esta debería actualizarse según sea necesario en respuesta a cualquier cambio de estilo. En lugar de usarWallpaperManagerpara observar los cambios de color, agregamosOnWatchFaceColorsListeneraInteractiveWatchFaceClient(I490bc). - Agregamos una clase
WatchFaceColorsque contiene los tres colores más destacados de la cara de reloj y agregamos los métodos abiertoswatchfaceColorsynotifyWatchFaceColorsChangedal procesador, que permiten que el sistema obtenga los colores de la cara de reloj medianteWallpaperManager.getWallpaperColors(I3d611). ShortTextComplicationData,RangedValueComplicationData,NoPermissionComplicationData(y losDiscreteRangedValueComplicationData,GoalProgressComplicationDatayWeightedElementsComplicationDataexperimentales) ahora son compatibles conSmallImages. Si una cara de reloj elige renderizar una complicación con varios colores, ahora tiene la opción de usar unSmallImagemulticolor, donde antes tenía que usar una imagen monocromática (I257df).- Se refactorizó
PreviewImageUpdateRequestedListenerpara que seaConsumer<>(Ia875d). - Reemplaza el Método único abstracto (SAM) personalizado
OnWatchfaceColorsListenerpor el tipo genérico de SAM de Java (Consumidor) (I0c489). - Dimos de baja los viejos métodos
getOrCreateInteractiveWatchFaceClientylistenableGetOrCreateInteractiveWatchFaceClientque no especifican unPreviewImageUpdateRequestedListener(Iec502).
Correcciones de errores
- Se cambió el nombre de
DisconnectReason.BINDER_DIEDporDisconnectReason.ENGINE_DIED(I4eb0e).
Versión 1.2.0-alpha01
10 de agosto de 2022
Lanzamiento de androidx.wear.watchface:watchface-*:1.2.0-alpha01. La versión 1.2.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- Agregamos compatibilidad experimental con diversos formatos de complicación nuevos. Esta es un área de desarrollo activo; estos formatos nuevos están sujetos a cambios sin previo aviso y, por el momento, no se admite el procesador de
CanvasComplicationDrawable. - También agregamos márgenes opcionales a las ranuras de complicaciones que facilitan el acceso a complicaciones pequeñas.
Cambios en la API
- La clase experimental
BoundingArcahora es inmutable (If624a). - Las complicaciones pequeñas pueden ser difíciles de presionar. A fin de mitigar este problema, agregamos compatibilidad con los márgenes que aumentan el área táctil sin afectar el procesamiento. A menos que se especifique (ya sea en código o a través de XML), los
ComplciationSlotstienen márgenes de tamaño cero (I14089). - Se cambió la firma
getComplicationSlotInflationFactory(CurrentUserStyleRepository)para mostrar una instancia de fábrica no nula. Antes, era un error mostrar un valor nulo, por lo que esto solo hace que el contrato de la API sea más claro (I0fcc0). - Se agregó un argumento
currentUserStyleRepositoryal métodoWatchFaceService.getComplicationSlotInflationFactorypara que sea coherente concreateComplicationSlotsManager(I2ddd2). - Los elementos
UserStyleFlavorsse convirtieron en una función no experimental (I69cdc). - Quitamos el
ValueTypeexperimental deRangedValueComplicationDatay, en su lugar, presentamos elDiscreteRangedValueComplicationDataexperimental, que es similar aRangedValueComplicationData, excepto por el rango y el valor de número entero. También introdujimos elGoalProgressComplicationDataexperimental, que es similar aRangedValueComplicationData, excepto porque es para el progreso hacia un objetivo en el que el valor mínimo implícito es cero y puede ser mayor quetargetValue. Ten en cuenta que, para todas las variantes deRangedValue, debe especificarse, al menos, una de las siguientes opciones: monochromeImage, text o title (I9590c). - Se quitó
boundsWithMarginsdeComplicationSlotStateporque el software del sistema no tiene un caso de uso (I42e26). - Se agregó compatibilidad experimental para
WeightedElementsComplicationData, que consiste en un arreglo de elementos (pares de peso y color) junto con texto, imágenes y títulos opcionales. Estos se pueden mostrar como un gráfico circular en el que los colores deben ser significativos según el contexto, ya que, por lo general, no hay espacio en una complicación para procesar las etiquetas (I87eea). - El
ColorRampsexperimental que usanRangedValueComplicationDatayGoalProgressComplicationData(opcional) ahora te permite especificar una secuencia de hasta siete colores y una marca que indica si los colores se deben interpolar sin problemas o si se deben realizar pasos de color sólido del mismo tamaño (I9f5bf). - Se cambió
RangedValueComplicationData.drawSegmentedavalueType, que es un número entero con unValueType IntDefcorrespondiente que proporciona un significado semántico al valor de intervalo y que el procesador de complicaciones puede usar para influir en el estilo (I0616b). - Se agregó compatibilidad experimental con los
ColorRangesopcionales paraRangedValueComplicationData. Por lo general, las complicaciones se renderizan con los colores de la cara de reloj que elija el usuario, pero a veces,ComplicationDataSourcese coloca mejor para establecer los colores; p. ej., cuando tienen un significado semántico particular. P. ej., de rojo a azul para la temperatura (I5153a). - Agregamos una sugerencia experimental de
drawSegmentedaRangedValueComplicationData. Esto indica a los procesadores que dibujen el indicador de valor de intervalo con segmentos, en el que 1 segmento = 1 unidad (I7d7c1).
Correcciones de errores
- Se agregó la capacidad de definir
ComplicationSlotBoundsen relación con un sistema de coordenadas de pantalla predefinido (I0985d).
Versión 1.1
Versión 1.1.1
10 de agosto de 2022
Lanzamiento de androidx.wear.watchface:watchface-*:1.1.1. La versión 1.1.1 contiene estas confirmaciones.
- Esta es una versión con correcciones de errores, y se recomienda que los usuarios de la versión 1.1.0 realicen la actualización.
Correcciones de errores
La inicialización de la cara de reloj es asíncrona. Si se recibe una complicación antes de que esta esté lista, se agregará a la lista
pendingInitialComplicationsy se aplicará más tarde. Lamentablemente,pendingInitialComplicationsse aplicó demasiado pronto, lo que significa que hubo un período durante la inicialización de la cara de reloj en el que las complicaciones aún se colocaban enpendingInitialComplicationsy se ignoraban. Ya se solucionó este problema. Además, este parche corrige un error por el queComplicationRendererintentaba cargar marcadores de posición de forma asíncrona, lo que provocaba que el gráfico de compilación nunca se actualizara. Por último, este parche corrige un error teórico por el que se debían combinar variospendingInitialComplications(0d03ba3).Corregimos el interbloqueo potencial en
InteractiveInstanceManager, por el quegetExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstanceretenía el bloqueo más tiempo del necesario. Por lo general, se espera queengine.setUserStylesea rápido, pero si por alguna razón no es así, se genera un interbloqueo o un error de ANR. Este parche quita el trabajo innecesario del bloqueo y quita la posibilidad de un interbloqueo (5a2adca).Se corrigieron varios problemas que retenían
WatchFaceService. A veces, WakeLock puede retener elWatchFaceService. Para solucionar ese problema, puedes agregar una llamadarelease(). Además,StateFlowspuede retenerWatchFaceServicey cancelar las correcciones subyacentes deCoroutineScopes(fd48138).Agrega tiempos de espera a
awaitDeferredWatchFace* y corrigewatchfaceOverlayStyleNullPointerException. En circunstancias normales, esto no debería agotar el tiempo de espera, incluso después de una instalación nueva y de situacionesDirectBooten las que la carga de la CPU es alta. También se corrigió una NPE si se llamaba agetWatchfaceOverlayStyledespués declose()(a4c3a5a).
Versión 1.1.0
15 de junio de 2022
Lanzamiento deandroidx.wear.watchface:watchface-*:1.1.0. La versión 1.1.0 contiene estas confirmaciones.
Cambios importantes desde 1.0.0
Edición mejorada:
- Agregamos compatibilidad con esquemas jerárquicos, que permiten que las IU de editores escriban una jerarquía de estilos. Ahora puedes especificar íconos separados para usar en la cara de reloj y los editores complementarios.
- Hay compatibilidad opcional con varias instancias de una cara de reloj, cada instancia tiene un ID único disponible en todas las plataformas de API.
- Ahora puedes especificar nombres legibles para
ComplicationSlotsa fin de usarlos en editores. - Compatibilidad experimental con "variantes" de estilos, una selección de estilos que aparecerán en el editor complementario.
- Cuando se cargan dos instancias de la cara de reloj, será posible que las instancias compartan recursos y ahorren memoria.
- Cuando se selecciona una complicación en el editor de caras de reloj, ahora se preselecciona el proveedor actual.
Complicaciones mejoradas:
- Ahora puedes especificar el
ComplicationTypepara las fuentes de datos principales y secundarias, lo que les brinda a los desarrolladores más flexibilidad para la experiencia lista para usar. - Agregamos
ComplicationDataTimeline, que proporciona una secuencia de datos con restricciones de tiempo para que se entreguen a la cara del reloj y se puedan almacenar en caché y actualizar automáticamente. Por ejemplo, el pronóstico del tiempo del día en distintos horarios o varios eventos futuros del calendario. - El
ComponentNamedel proveedor de complicaciones es parte deComplicationData. - Las complicaciones ahora se almacenan en caché, lo que brinda una mejor experiencia cuando se alterna entre caras de reloj.
Otros cambios:
UserStyleSchemayComplicationSlotsahora se pueden definir en XML. Esto simplifica la construcción de la cara de reloj y permite consultas más rápidas de metadatos desde el sistema.- Las caras de reloj ahora pueden influir en los colores que se usan para renderizar la superposición del sistema.
Versión 1.1.0-rc01
18 de mayo de 2022
Se lanzó androidx.wear.watchface:watchface-*:1.1.0-rc01. La versión 1.1.0-rc01 contiene estas confirmaciones.
Nuevas funciones
- Se realizaron algunos ajustes de usabilidad a la compatibilidad con XML de caras de reloj para que sea más fácil especificar
ComplicationSlotBoundsy referencias compatibles. La experimentación con la complicación perimetralBoundingArccontinúa y se la proporciona mediantedrawHighlight, aunque no se recomienda usarla en ese momento.
Cambios en la API
- Se agregó una sobrecarga experimental de
drawHighlightque acepta un parámetroBoundingArc(I705f8). - El XML de la cara de reloj ahora admite referencias de recursos. Te permite usar las mismas constantes en XML y en tu código (I3ef61).
- Se agregó la capacidad de definir
ComplicationSlotBoundsencenter_x,center_y,size_xysize_y. Ahora también es posible usar diferentes unidades (es decir, dp) con referencias de recursos (Iace98).
Correcciones de errores
- Se corrigió
runBlockingWithTracing, que ejecutaba tareas en el contexto incorrecto (4f595fe). - Ahora,
BaseEditorSession.closees síncrono. El problema con queBaseEditorSession.closesea asíncrono es queComplicationDataSourceInfoRetrieverse libera demasiado tarde, lo que provoca una advertencia de spam en logcat. Probablemente sea inofensivo, pero el spam de logcat puede distraer a los usuarios y se debe evitar (35a5308).
Versión 1.1.0-beta02
11 de mayo de 2022
Se lanzó androidx.wear.watchface:watchface-*:1.1.0-beta02. La versión 1.1.0-beta02 contiene estas confirmaciones.
Nuevas funciones
- Se agregó compatibilidad experimental con los nuevos tipos de
ComplicationData. Estos todavía no están listos para usarse, pero pronto habrá más novedades.
Cambios en la API
- Se agregó
BoundingArc, una clase experimental que describe la geometría de una ranura de espacio para complicación. Se agregó aComplicationSloty se conectó aComplicationSlotStateyWatchFaceMetadataClient(I61a40). - Se agregó la capacidad de heredar parámetros de configuración en el archivo XML
UserStyleSetting. Te permite reducir la verbosidad y compartir un parámetro entre caras de reloj (Ief841). - Se agregaron dos tipos experimentales nuevos de
ComplicationData:ListComplicationDatayProtoLayoutComplicationData. Actualmente, no se admite esta función en ninguno de estos tipos. Por el momento, Wear OS no los reconoce si se agregan a un manifiestoComplicationDataSource's(I1811c).
Correcciones de errores
- Se corrigió la serialización del tipo
TimeLineEntry. No serializamos el tipoTimeLineEntry, lo que significa que el elementoTimeLineEntriesde la caché almacenado del tipo NoData se interpretaría de forma incorrecta como si el tipo de complicación superior generara NPE cuando se accediera a campos obligatorios inexistentes (55ffdf5). - Se corrigió un error por el que
setComplicationDatadescartaba campos de cronograma (fb392f5). - Se corrigió un error por el que, con frecuencia,
runBlockingWithTracingprovocaba un elemento NPE (12ca62e). - Se corrigió un error por el que a veces se obtenía
ClassNotFoundException: android.support.wearable.complications.ComplicationTextcuando se recibía una complicación (217942d9). - Se corrigió un error en
GlesRenderer.backgroundThreadInitInternalque solo llamaba aonBackgroundThreadGlContextCreatedsi se llamaba aEGL14.eglCreateContext. Se solucionó otro error en el que se producía una falla visual en la captura de pantalla provocada porverticalFlip(c674ad2). - Se corrigió la comprobación de la versión XML de
WatchFaceService; se estaba cargando desde el paquete incorrecto (dfa06f3). - El formato de cable del marcador de posición ahora usa un paquete interno. No queremos que los marcadores de posición rompan las caras de reloj existentes que puedan utilizar el a.s.w.c.ComplicationData interno oculto. Antes, el formato de conexión de los datos de
NoDataComplicationalmacenaba el marcador de posición en los campos habituales (lo que era un problema, porque las caras de reloj anteriores renderizaban la string de marcador de posición que no era lo previsto). En su lugar, ahora usamos un paquete interno para aislar por completo esto (d5e7bd2).
Versión 1.1.0-beta01
20 de abril de 2022
Se lanzó androidx.wear.watchface:watchface-*:1.1.0-beta01. La versión 1.1.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Ahora los métodos
WatchFaceMetadataClient(getUserStyleSchema,getComplicationSlotMetadataMap,getUserStyleFlavors) yHeadlessWatchFaceClient.getUserStyleFlavorsarrojan una excepción RuntimeException sin verificar en lugar deWatchFaceException. (I0718a) WatchFaceMetadataClient.WatchFaceExceptionse quitó de la clase para permitir que se vuelva a usar. (I4e869)
Correcciones de errores
WatchFaceMetadataClientya no fallará cuando se envíe una versión parcial deComplicationSlotBounds.(Iaafd)
Versión 1.1.0-alpha05
6 de abril de 2022
Se lanzó androidx.wear.watchface:watchface-*:1.1.0-alpha05. La versión 1.1.0-alpha05 contiene estas confirmaciones.
Nuevas funciones
- Ahora puedes saber qué fuente de datos envió un
ComplicationDatasi inspeccionasComplicationData.dataSource. Algunas caras de reloj pueden usar esto para personalizar la visualización de complicaciones. (I44a73)
Cambios en la API
Renderer.CanvasRendereryRenderer.GlesRendererdejaron de estar disponibles y se los reemplazó porRenderer.CanvasRenderer2yRenderer.GlesRenderer2, que admitenSharedAssetsy se pasan a los métodos de renderización. Para la interoperabilidad de Java, presentamosListenableCanvasRenderer2yListenableGlesRenderer2. (I31ffa)- Se agregó la capacidad
@WatchFaceFlavorsExperimentalpara definir variantes: lista preconfigurada de caras de reloj con estilo. (I04dd0) Renderer.sharedAssetsahora es un StateFlow y quitamos elRenderer.SharedAssetsFactoryque no se usa. (I12ac5)UserStyleSchema.userStyleSettingsya no es obsoleto. (Iba7e3)- Agregamos
HeadlessWatchFaceClient.getUserStyleSchemaDigestHash, que permite que unHeadlessWatchFaceClientevite la sobrecarga relativamente baja de pasar el esquema por AIDL antes de calcular el hash de resumen. (I33597) - Se agregó
isUserStyleSchemaStaticaWatchFaceMetadataClient, que es verdadero si solo se puede confiar en que no se modificará elUserStyleSchema, a menos que se actualice el APK de la cara de reloj. (I45a3f) - Agregamos
getDigestHashaUserStyleSchema, que calcula un hash de resumen del esquema. Se puede usar para determinar de manera eficiente si cambió elUserStyleSchema. (I2063d) - Se cambió el nombre de
METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIGURATION_SUPPORTEDporMETADATA_KEY_DATA_SOURCE_DEFAULT_CONFIG_SUPPORTED. (I9ba5d) - Se cambió el nombre de
UserStyleSetting.OnWatchEditorDataporUserStyleSetting.WatchFaceEditorData, que contiene datos que solo usa el editor de caras de reloj. (If3afb)
Versión 1.1.0-alpha04
9 de marzo de 2022
Lanzamiento de androidx.wear.watchface:watchface-*:1.1.0-alpha04. La versión 1.1.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Es posible que
ComplicationDataactualizado no siempre esté disponible (p. ej., ComplicationData vencido almacenado en caché), por lo que extendimosNoDataComplicationcon ComplicationData de marcador de posición opcional y agregamosComplicationText.PLACEHOLDER,MonochromaticImage.PLACEHOLDER,SmallImage.PLACEHOLDERyPhotoImage.PLACEHOLDER, que solo se pueden usar dentro del contexto de un marcador de posiciónNoDataComplicationData. Si seleccionas esta opción, se sugiere que estos marcadores de posición se rendericen con cuadros o arcos grises (I6285d). - Agregamos
ComplicationData.getNextChangeInstant, que te indica el próximo Instant después de Instant de referencia en el que puede cambiar cualquier campo de la complicación. Se usa de forma interna a fin de programar fotogramas para actualizaciones de complicaciones. Por ejemplo, si una cara de reloj se actualiza, por lo general, una vez por minuto, configurar la complicación de cronómetro causará que se actualice una vez por segundo (I7ceb2). - Ahora se puede usar
EditorSession.watchFaceIden todos los niveles de API. Además, su valor ahora siempre será coherente conWatchState.watchFaceInstanceId(I323b9). - La API de
getPendingIntentForTouchEventya no es necesaria, ya que el problema subyacente se corrigió en el framework, por lo que se quitaron todas las API relacionadas. Las caras de reloj no necesitan realizar ninguna acción especial para que se activePendingIntents, incluso si se acaba de presionar el botón de inicio (I1f2e8). - Se agregó
RendererParameters.isForScreenShot, que será verdadero si la renderización es para una captura de pantalla. Algunas caras de reloj con animaciones deben saber esto para realizar ajustes a fin de garantizar los mejores resultados (I96d99). - Se agregó
WatchFaceExceptionReasonaWatchFaceExceptionpara proporcionar contexto sobre el problema (I01d15). - Se quitó
ComplicationDataSourceService.onImmediateComplicationRequest; en su lugar, se agregóComplicationRequest.immediateResponseRequiredpara indicar que el proveedor debe responder con rapidez (lo ideal sería responder en menos de 100 ms). Ten en cuenta que esta funcionalidad está protegida con el permisocom.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATEprivilegiado (Ie6b23). - Se actualizó la nulabilidad en core y appcompat para que coincida con Tiramisu DP2 (I0cbb7).
Correcciones de errores
- Ahora la app de la cara de reloj falla con una excepción si se produce un error en la validación del esquema (Ia400f).
Versión 1.1.0-alpha03
9 de febrero de 2022
Lanzamiento de androidx.wear.watchface:watchface-*:1.1.0-alpha03. La versión 1.1.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Se agregó la compatibilidad experimental con los esquemas de estilo jerárquico. Agregamos una nueva propiedad a
androidx.wear.watchface.style.UserStyleSetting.Option, childSettings que inicialmente solo usaListOption. De esta manera, se puede describir una jerarquía de estilos para que los usen las IU de Editor. El objeto UserStyle subyacente no se modifica y sigue siendoMap<String, ByteArray>(Iaf6f4). - Se agregó
WatchFace.OverlayStyle, que permite que la cara de reloj configure la renderización de la superposición de estado del sistema (I8520d). - Presentamos
clearWithBackgroundTintBeforeRenderingHighlightLayerun nuevo parámetro de constructor opcional paraCanvasRenderer(el valor predeterminado es falso). Si se establece en verdadero, el lienzo se borrará y quedará el color de tono del fondo (Ie01e5). - Se agregó la clave de metadatos
androidx.watchface.complications.datasource.DEFAULT_CONFIGURATION_SUPPORTED, que permite que las fuentes de datos de complicaciones indiquen que pueden proporcionar un valor predeterminado sin ninguna configuración (Icc0d4). - Cuando se edita una cara de reloj, con frecuencia hay una instancia interactiva y una instancia sin interfaz gráfica. Para ahorrar memoria, presentamos
Renderer.SharedAssets, que permite que un procesador de caras de reloj comparta datos inmutables (p. ej., texturas y sombreadores) entre instancias.GlesRenderer.setEglConfigyGlesRenderer.setEglDisplayquedaron obsoletos, y nunca estuvo previsto que se puedan configurar. Hacerlo, hubiese provocado un comportamiento indefinido (I0d9e7). - Agregamos
setNameResourceIdysetScreenReaderNameResourceId(que son recursos de strings de referencia) aComplicationSlot.Buildery los métodos get correspondientes enandroidx.wear.watchface.client.ComplicationSlotState. Esto permite que el sistema recupere los nombres de ComplicationSlots para usar en editores y lectores de pantalla (If6c6a). WatchfaceMetadataClient.getUserStyleSchemaygetComplicationSlotMetadataMapahora arrojanWatchFaceExceptionen lugar deRemoteException(I86f11).- Se cambió el nombre de
onSynchronousComplicationRequesty las funciones relacionadas enComplicationDataSourceServiceporonImmediateComplicationRequest, etcétera (I87ba0). - Los editores de caras de reloj tienen mucho menos espacio de pantalla que los editores complementarios. Por lo tanto, conviene admitir diferentes íconos en los editores de cara de reloj. Este parche agrega
OnWatchEditorData(que actualmente contiene solo un ícono) a todas las opciones de UserStyleSettings y, cuando corresponda, a sus clases de opción (If1886). - Se agregó
@JvmOverloadsal constructor de ListenableGlesRenderer para una mejor interoperabilidad de Java (I2974a).
Correcciones de errores
- El constructor de
ListenableGlesRendererahora está marcado correctamente como@Throws(GlesException::class)y es posible extender esta clase en Java (Iac6d0). - Se corrigió un error con
PhotoImageComplicationDatatapAction que no se manejaba de forma correcta (I1cc30).
Versión 1.1.0-alpha02
12 de enero de 2022
Lanzamiento de androidx.wear.watchface:watchface-*:1.1.0-alpha02. La versión 1.1.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
- Para facilitar la depuración y las pruebas,
ComplicationDatay las subclases relacionadas ahora anularon el código hash y los métodos equals y toString, lo que permite trabajar con más facilidad.
Cambios en la API
- Los métodos
WatchfaceMetadataClientvuelven a arrojarRemoteExceptionscuando corresponda, lo que facilita que el código del cliente detecte errores de la cara de reloj. (I78785) ComplicationDatay subclases ahora tienen código hash y métodos equals y toString. (I24bc6)
Versión 1.1.0-alpha01
15 de diciembre de 2021
Lanzamiento de androidx.wear.watchface:watchface-*:1.1.0-alpha01. La versión 1.1.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
UserStyleSchemayComplicationSlotsahora se pueden definir en XML. De esta manera, se simplifica la creación de caras de reloj. Además, las búsquedas deWatchFaceMetadataClientson más rápidas porque este objeto no necesita vincularse al servicio para obtener los metadatos.WatchFaceMetadataClientyListenableWatchFaceMetadataClientya no son experimentales y pasarán a formar parte de la API estable. El sistema podrá admitir varias instancias de una cara de reloj, cada una con las distintas opciones de estilo definidas por el usuario. Podrán verse en el selector de caras de reloj. Para habilitar esta función, una cara de reloj debe incluir la siguiente etiqueta de metadatos en su manifiesto.<meta-data android:name="androidx.wear.watchface.MULTIPLE_INSTANCES_ALLOWED" android:value="true" />Algunas caras de reloj tienen un estado que no se captura en
UserStyle. Para admitir esta y varias instancias, el ID de instancia de la cara de reloj ahora está disponible a través deWatchState.watchFaceInstanceId.ComplicationDataahora se almacena en caché para permitir que se muestren las complicaciones de inmediato cuando se carga. En ocasiones, el sistema almacenaComplicationDataen caché de la memoria y, a veces, las bibliotecas de caras de reloj los serializan. Al serializar, se pierde cualquier acción tapAction asociada. En ese caso,ComplicationData.tapActionLostDueToSerializationmostrarátruey la cara de reloj debería renderizar la complicación de manera diferente (p. ej., inhabilitada o semitransparente) para indicar que no se puede presionar. El sistema enviaráComplicationDataactualizados con unatapActionlo antes posible.Algunos
ComplicationDatano deberían almacenarse en caché mucho tiempo. Sin embargo, para admitir esta opción, agregamos una función más general,ComplicationDataTimeline. Esta se puede usar para proporcionar una secuencia deComplicationDatacon restricciones de tiempo para que se entregue a la cara del reloj y se pueda almacenar en caché y actualizar automáticamente. Por ejemplo, el pronóstico del tiempo del día en distintos horarios o varios eventos futuros del calendario. Se amplióComplicationRequestListenercon un nuevo métodoonComplicationDataTimeline, que puedes usar para mostrar estos datos.DefaultComplicationDataSourcePolicyse amplió para que puedas especificarComplicationTypepara las fuentes de datos principal y secundaria.Agregamos compatibilidad con proveedores de complicaciones síncronas en los que la complicación se actualiza con una frecuencia mayor que la normal (hasta una vez por segundo) cuando la cara de reloj es visible y no ambiental. Nota: Es posible que los proveedores de complicaciones síncronas tengan un uso limitado debido a los problemas de presión de la memoria.
Es probable que se reviertan los cambios de
PendingIntentTapListenerporque resolvimos el problema subyacente (no es posible que la cara de reloj inicie actividades durante 5 segundos después de presionar el botón de inicio) en el framework.
Cambios en la API
- Se cambió
ComplicationData.isCachedportapActionLostDueToSerialization, que resulta más útil para determinar si la ranura de la complicación debe procesarse de manera diferente para indicar que no se puede presionar (I6de2f). - Se agregó
ComplicationDataTimelineawear-complication-data-source. Esta se puede usar para proporcionar una secuencia deComplicationDatacon restricciones de tiempo para que se entregue a la cara del reloj y se pueda almacenar en caché y actualizar automáticamente. Por ejemplo, el pronóstico del tiempo del día en distintos horarios o varios eventos futuros del calendario. Se amplióComplicationRequestListenercon un nuevo métodoonComplicationDataTimeline, que puedes usar para mostrar estos datos. Hay un nuevo wrapper de KotlinSuspendingTimelineComplicationDataSourceServicepara suspender servicios de fuentes de datos (Idecdc). - Se agregaron
PendingIntentTapListeneryWatchFaceControlClient.getPendingIntentForTouchEvent. Esto puede ayudar a las caras de reloj que necesitan iniciar intents en respuesta a presiones para solucionar un problema en el que el framework bloquea el inicio de actividades nuevas durante 5 segundos después de presionar el botón de inicio (I98074). - Se introdujo una caché
ComplicationDatade cara de reloj. Su propósito es permitir que la cara de reloj muestre los últimos valores de datos de complicación conocidos al cargarse hasta que el sistema haya tenido la oportunidad de actualizarlos. Hay un nuevo método de APIWatchFaceControlClient.hasComplicationCachepara OEM. Esto puede influir en la estrategia del sistema para enviar complicaciones a una cara de reloj. Además,ComplicationDatatiene una propiedadisCached, por lo que se recomienda que las complicaciones almacenadas en caché se rendericen de manera diferente debido a quetapActionno se puede almacenar en caché y seránullen una complicación almacenada en caché (I404b0). - El ID de instancia de la cara de reloj ahora está disponible a través de
WatchState.watchFaceInstanceId. La mayoría de las caras de reloj no necesitan este recurso, pero si hay un estado de cara de reloj que no esté almacenado en el esquema, esta es la clave que debes usar para identificar la instancia de cara de reloj. Para admitir esta opción, ahora puedes proporcionar un ID cuando llames aWatchFaceControlClient.createHeadlessWatchFaceClient(I1ff98). - Se amplió
DefaultComplicationDataSourcePolicycon la capacidad de establecer elComplicationTypespredeterminado para el proveedor principal y secundario, y el proveedor de sistemas de resguardo. Se dio de bajaComplicationSlot.defaultDataSourceType(If0ce3). ComplicationSlot.configExtrasahora es mutable y se puede actualizar antes de llamar aEditorSession.openComplicationDataSourceChooser()(I6f852).- Se agregaron
WatchFace.setComplicationDeniedDialogIntentysetComplicationRationaleDialogIntent. Estos intents se inician para mostrar un diálogo de justificación antes de solicitar permisos de complicación y otro cuadro que explique que se necesita permiso de complicación cuando se intenta editar una complicación, pero se rechazaron los permisos (el selector de proveedores no podrá abrirse, por lo que se necesita el diálogo) (I3a29c). UserStyleSchemayComplicationSlotsahora se pueden definir en XML. Esto simplifica la construcción de la cara de reloj y hace que las búsquedas deWatchFaceMetadataClientsean más rápidas, ya que no necesitan vincularse al servicio para obtener los metadatos (I85bfa).- Se agregó
InteractiveWatchFaceClient.supportsPendingIntentForTouchEventpara que un cliente pueda determinar si una cara de reloj admitegetPendingIntentForTouchEvent(I0b917). WatchFaceMetadataClientyListenableWatchFaceMetadataClientdejaron de ser experimentales. Se pueden usar de manera eficiente para obtener metadatos de la cara de reloj cuando sea posible sin abrir una vinculación con la cara de reloj (Ibb827).- Agregamos compatibilidad con proveedores de complicaciones síncronas en los que la complicación se actualiza con una frecuencia mayor que la normal (hasta una vez por segundo) cuando la cara de reloj es visible y no ambiental. Para usar esta función, el proveedor debe incluir una nueva etiqueta de metadatos
androidx.wear.watchface.complications.data.source.SYNCHRONOUS_UPDATE_PERIOD_SECONDSen su manifiesto y anularonSynchronousComplicationRequest. Según la naturaleza de la fuente de datos, es posible que también deba anularonStartSynchronousComplicationRequestsyonStopInteractiveComplicationRequestspara recibir notificaciones cuando la complicación ingresa al modo interactivo y sale de él (I8fe9d).
Versión 1.0
Versión 1.0.1
9 de febrero de 2022
Lanzamiento de androidx.wear.watchface:watchface-*:1.0.1. La versión 1.0.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error con
PhotoImageComplicationDatatapAction que no se manejaba de forma correcta (I1cc30)
Versión 1.0.0
1 de diciembre de 2021
Lanzamiento de androidx.wear.watchface:watchface-*:1.0.0. La versión 1.0.0 contiene estas confirmaciones.
Funciones principales de la versión 1.0.0
El paquete androidx.wear.watchface es la nueva biblioteca recomendada para desarrollar caras de reloj para Wear OS. Incluye varias funciones nuevas en comparación con la antigua biblioteca de compatibilidad con dispositivos wearable.
- La biblioteca es compatible directamente con el estilo del usuario (p. ej., permite cambiar la paleta de colores, el estilo de las agujas, el aspecto de las marcas de hora, etc.) (consulta
androidx.wear.watchface.style). Ahora es mucho más fácil desarrollar un editor para la cara del reloj mediante androidx.wear.watchface.editor, y la cara del reloj puede editarse desde la app complementaria del sistema sin necesidad de escribir código adicional. - Prácticas recomendadas integradas. La biblioteca genera automáticamente etiquetas de contenido del lector de pantalla para las complicaciones (también puedes agregar otras propias), y la velocidad de fotogramas disminuye de manera automática cuando el nivel de batería es bajo y no se carga el dispositivo a fin de mejorar la duración de la batería.
- Se necesita menos código para desarrollar una cara de reloj, en especial para las complicaciones en las que gran parte del código estándar se trasladó a la biblioteca.
Correcciones de errores
- Se corrigió
EditorSession.userStyle.compareAndSet(I6f676). - Se corrigieron los breves retrasos de las caras de reloj (Iffb97).
- El elemento
InteractiveWatchFaceImpl.onDestroyse envía en el subproceso de IU (I83340). - Se solucionaron varios problemas con los receptores de emisión (I7d25f).
Versión 1.0.0-rc01
3 de noviembre de 2021
Se lanzó androidx.wear.watchface:watchface-*:1.0.0-rc01. La versión 1.0.0-rc01 contiene estas confirmaciones.
Correcciones de errores
Se corrigió dump() (llamado adb shell dumpsys), que se rompió por las migraciones de flujo (087cf9e).
Garantiza el orden adecuado de writeDirectBootPrefs. Queremos que writeDirectBootPrefs se ejecute siempre después de initStyleAndComplications o corremos el riesgo de retrasar el init del subproceso de IU (37650ac).
Asegúrate de que se llame a Renderer.onDestroy. En el escenario en que se creó el procesador, pero no se completó el init de WF y se llama a Engine.onDestroy, debemos llamar a Renderer.onDestroy (f9952dc).
Optimización o corrección de isBatteryLowAndNotCharging. Este parche mueve la configuración inicial de isBatteryLowAndNotCharging antes, lo que significa que se puede realizar en paralelo con createWatchFace. Además, ahora escuchamos ACTION_POWER_DISCONNECTED (ddffd80
InteractiveWatchFaceClientImpl.isConnectionAlive será falso después de cerrar (ab9774e).
Versión 1.0.0-beta01
27 de octubre de 2021
Se lanzó androidx.wear.watchface:watchface-*:1.0.0-beta01. La versión 1.0.0-beta01 contiene estas confirmaciones.
Versión 1.0.0-alpha24
13 de octubre de 2021
Lanzamiento de androidx.wear.watchface:watchface-*:1.0.0-alpha24. La versión 1.0.0-alpha24 contiene estas confirmaciones.
Cambios en la API
- Las clases en el paquete
androidx.wear.watchface.complicationsse movieron a un proyectowear:watchface:watchface-complicationsnuevo. Ten en cuenta que esto implica que no puedes incluir esta biblioteca, así como tampoco ninguna versión alfa anterior dewear:watchface:watchface-complications-data, ya que se producirán errores relacionados con las clases duplicadas. (I97195) - Renderer.dump cambió de nombre a Renderer.onDump y se anotó con @UiThread. (I44845)
- Se cambió el nombre de
InteractiveWatchFaceClient.addWatchFaceReadyListenerporaddOnWatchFaceReadyListenery el deremoveWatchFaceReadyListenerporremoveOnWatchFaceReadyListener. (I48fea) - EditorSession
getComplicationsPreviewDataygetComplicationsDataSourceInfoya no son funciones de suspensión, sino que son propiedadesStateFlow<>cuyo valor, en un principio, es nulo. En ListenableEditorSession, se quitarongetListenableComplicationPreviewDataygetListenableComplicationsProviderInfo, y se reemplazaron por los objetosStateFlow<>nuevos desde la clase base. Si necesitas detectar los cambios en el código Java, considera usarandroidx.lifecycle.FlowLiveDataConversions.asLiveDatapara convertir aLiveData<>. (Ic5483)
Versión 1.0.0-alpha23
29 de septiembre de 2021
Lanzamiento de androidx.wear.watchface:watchface-*:1.0.0-alpha23. La versión 1.0.0-alpha23 contiene estas confirmaciones.
Nuevas funciones
La biblioteca de caras de reloj ahora es un solo grupo de bibliotecas. Como resultado, las bibliotecas se trasladaron, y deberás actualizar tus importaciones de Gradle de la siguiente manera:
| Antiguas | Nuevas |
|---|---|
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 |
Cambios en la API
- Se migraron las bibliotecas de caras de reloj y complicaciones
androidx.wearpor separado al grupo de bibliotecasandroidx.wear.watchface. (b25f3c0) - Se agregó EditorRequest.canWatchFaceSupportHeadlessEditing para de informar al cliente si un editor de cara de reloj admite la edición sin interfaz gráfica. Ten en cuenta que habrá algunos falsos negativos debido a que se agregó compatibilidad en asop/1756809. Sin embargo, se mostrará el valor correcto para todas las caras de reloj futuras. (ca55590)
- El procesador ahora tiene un método dump() que se puede anular para agregar datos personalizados a la información generada por el servicio de actividad de volcado de shell de ABD WatchFaceService. (95235f9)
- InteractiveWatchFaceClient.addWatchFaceReadyListener ahora especifica el ejecutor primero. (563ac2f)
- Se quitó StateFlowCompatHelper. En su lugar, debes usar asLiveData (androidx.lifecycle.asLiveData). (bd35d3)
- El objeto CurrentUserStyleRepository.userStyle ya no es mutable. (I44889)
- Se cambió el nombre de WatchFaceReadyListener por OnWatchFaceReadyListener. (Ic12a9)
Correcciones de errores
- InteractiveInstanceManager.deleteInstance para llamar a onDestroy. Esto es necesario para asegurarse de que InteractiveWatchFaceImpl obtenga la recolección de elementos no utilizados. (fce4af8, b/199485839)