Wear Watchface
Actualización más reciente | Versión estable | Versión potencial | Versión beta | Versión alfa |
---|---|---|---|---|
15 de junio de 2022 | 1.1.0 | - | - | - |
Cómo declarar dependencias
Para agregar una dependencia en Wear, debes agregar el repositorio Maven de Google a tu proyecto. Consulta el repositorio 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.1.0-rc01" // Use to implement wear watchface complications implementation "androidx.wear.watchface:watchface-complications-data-source:1.1.0-rc01" // (Kotlin-specific extensions) implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.1.0-rc01" // Use to implement a watchface style and complication editor implementation "androidx.wear.watchface:watchface-editor:1.1.0-rc01" }
Kotlin
dependencies { // Use to implement wear watchfaces implementation("androidx.wear.watchface:watchface:1.1.0-rc01") // Use to implement wear watchface complications implementation "androidx.wear.watchface:watchface-complications-data-source:1.1.0-rc01" // (Kotlin-specific extensions) implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.1.0-rc01" // Use to implement a watchface style and complication editor implementation("androidx.wear.watchface:watchface-editor:1.1.0-rc01") }
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 en esta biblioteca antes de crear uno nuevo. Para agregar tu voto a un error existente, haz 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.1
Versión 1.1.0
15 de junio de 2022
Se lanzó androidx.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
ComplicationSlots
a 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
ComplicationType
para 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
ComponentName
del 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:
UserStyleSchema
yComplicationSlots
ahora 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
ComplicationSlotBounds
y referencias compatibles. La experimentación con la complicación perimetralBoundingArc
continúa y se la proporciona mediantedrawHighlight
, aunque no se recomienda usarla en ese momento.
Cambios en la API
- Se agregó una sobrecarga experimental de
drawHighlight
que 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
ComplicationSlotBounds
encenter_x
,center_y
,size_x
ysize_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.close
es síncrono. El problema con queBaseEditorSession.close
sea asíncrono es queComplicationDataSourceInfoRetriever
se 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ó aComplicationSlot
y se conectó aComplicationSlotState
yWatchFaceMetadataClient
(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
:ListComplicationData
yProtoLayoutComplicationData
. 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 elementoTimeLineEntries
de 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
setComplicationData
descartaba campos de cronograma (fb392f5). - Se corrigió un error por el que, con frecuencia,
runBlockingWithTracing
provocaba un elemento NPE (12ca62e). - Se corrigió un error por el que a veces se obtenía
ClassNotFoundException: android.support.wearable.complications.ComplicationText
cuando se recibía una complicación (217942d9). - Se corrigió un error en
GlesRenderer.backgroundThreadInitInternal
que solo llamaba aonBackgroundThreadGlContextCreated
si 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
NoDataComplication
almacenaba 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.getUserStyleFlavors
arrojan una excepción RuntimeException sin verificar en lugar deWatchFaceException
. (I0718a) WatchFaceMetadataClient.WatchFaceException
se quitó de la clase para permitir que se vuelva a usar. (I4e869)
Correcciones de errores
WatchFaceMetadataClient
ya no fallará cuando se envíe una versión parcial deComplicationSlotBounds
.(Iaafd)
Versión 1.1.0-alpha05
6 de abril de 2022
Lanzamiento de 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
ComplicationData
si inspeccionasComplicationData.dataSource
. Algunas caras de reloj pueden usar esto para personalizar la visualización de complicaciones. (I44a73)
Cambios en la API
Renderer.CanvasRenderer
yRenderer.GlesRenderer
dejaron de estar disponibles y se los reemplazó porRenderer.CanvasRenderer2
yRenderer.GlesRenderer2
, que admitenSharedAssets
y se pasan a los métodos de renderización. Para la interoperabilidad de Java, presentamosListenableCanvasRenderer2
yListenableGlesRenderer2
. (I31ffa)- Se agregó la capacidad
@WatchFaceFlavorsExperimental
para definir variantes: lista preconfigurada de caras de reloj con estilo. (I04dd0) Renderer.sharedAssets
ahora es un StateFlow y quitamos elRenderer.SharedAssetsFactory
que no se usa. (I12ac5)UserStyleSchema.userStyleSettings
ya no es obsoleto. (Iba7e3)- Agregamos
HeadlessWatchFaceClient.getUserStyleSchemaDigestHash
, que permite que unHeadlessWatchFaceClient
evite la sobrecarga relativamente baja de pasar el esquema por AIDL antes de calcular el hash de resumen. (I33597) - Se agregó
isUserStyleSchemaStatic
aWatchFaceMetadataClient
, 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
getDigestHash
aUserStyleSchema
, 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_SUPPORTED
porMETADATA_KEY_DATA_SOURCE_DEFAULT_CONFIG_SUPPORTED
. (I9ba5d) - Se cambió el nombre de
UserStyleSetting.OnWatchEditorData
porUserStyleSetting.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
ComplicationData
actualizado no siempre esté disponible (p. ej., ComplicationData vencido almacenado en caché), por lo que extendimosNoDataComplication
con ComplicationData de marcador de posición opcional y agregamosComplicationText.PLACEHOLDER
,MonochromaticImage.PLACEHOLDER
,SmallImage.PLACEHOLDER
yPhotoImage.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.watchFaceId
en todos los niveles de API. Además, su valor ahora siempre será coherente conWatchState.watchFaceInstanceId
(I323b9). - La API de
getPendingIntentForTouchEvent
ya 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ó
WatchFaceExceptionReason
aWatchFaceException
para proporcionar contexto sobre el problema (I01d15). - Se quitó
ComplicationDataSourceService.onImmediateComplicationRequest
; en su lugar, se agregóComplicationRequest.immediateResponseRequired
para 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_UPDATE
privilegiado (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
clearWithBackgroundTintBeforeRenderingHighlightLayer
un 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.setEglConfig
yGlesRenderer.setEglDisplay
quedaron obsoletos, y nunca estuvo previsto que se puedan configurar. Hacerlo, hubiese provocado un comportamiento indefinido (I0d9e7). - Agregamos
setNameResourceId
ysetScreenReaderNameResourceId
(que son recursos de strings de referencia) aComplicationSlot.Builder
y 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.getUserStyleSchema
ygetComplicationSlotMetadataMap
ahora arrojanWatchFaceException
en lugar deRemoteException
(I86f11).- Se cambió el nombre de
onSynchronousComplicationRequest
y las funciones relacionadas enComplicationDataSourceService
poronImmediateComplicationRequest
, 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ó
@JvmOverloads
al constructor de ListenableGlesRenderer para una mejor interoperabilidad de Java (I2974a).
Correcciones de errores
- El constructor de
ListenableGlesRenderer
ahora está marcado correctamente como@Throws(GlesException::class)
y es posible extender esta clase en Java (Iac6d0). - Se corrigió un error con
PhotoImageComplicationData
tapAction 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,
ComplicationData
y 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
WatchfaceMetadataClient
vuelven a arrojarRemoteExceptions
cuando corresponda, lo que facilita que el código del cliente detecte errores de la cara de reloj. (I78785) ComplicationData
y 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
UserStyleSchema
yComplicationSlots
ahora se pueden definir en XML. De esta manera, se simplifica la creación de caras de reloj. Además, las búsquedas deWatchFaceMetadataClient
son más rápidas porque este objeto no necesita vincularse al servicio para obtener los metadatos.WatchFaceMetadataClient
yListenableWatchFaceMetadataClient
ya 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
.ComplicationData
ahora se almacena en caché para permitir que se muestren las complicaciones de inmediato cuando se carga. En ocasiones, el sistema almacenaComplicationData
en 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.tapActionLostDueToSerialization
mostrarátrue
y 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áComplicationData
actualizados con unatapAction
lo antes posible.Algunos
ComplicationData
no 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 deComplicationData
con 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óComplicationRequestListener
con un nuevo métodoonComplicationDataTimeline
, que puedes usar para mostrar estos datos.DefaultComplicationDataSourcePolicy
se amplió para que puedas especificarComplicationType
para 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
PendingIntentTapListener
porque 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.isCached
portapActionLostDueToSerialization
, 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ó
ComplicationDataTimeline
awear-complication-data-source
. Esta se puede usar para proporcionar una secuencia deComplicationData
con 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óComplicationRequestListener
con un nuevo métodoonComplicationDataTimeline
, que puedes usar para mostrar estos datos. Hay un nuevo wrapper de KotlinSuspendingTimelineComplicationDataSourceService
para suspender servicios de fuentes de datos (Idecdc). - Se agregaron
PendingIntentTapListener
yWatchFaceControlClient.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é
ComplicationData
de 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.hasComplicationCache
para OEM. Esto puede influir en la estrategia del sistema para enviar complicaciones a una cara de reloj. Además,ComplicationData
tiene una propiedadisCached
, por lo que se recomienda que las complicaciones almacenadas en caché se rendericen de manera diferente debido a quetapAction
no se puede almacenar en caché y seránull
en 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ó
DefaultComplicationDataSourcePolicy
con la capacidad de establecer elComplicationTypes
predeterminado para el proveedor principal y secundario, y el proveedor de sistemas de resguardo. Se dio de bajaComplicationSlot.defaultDataSourceType
(If0ce3). ComplicationSlot.configExtras
ahora es mutable y se puede actualizar antes de llamar aEditorSession.openComplicationDataSourceChooser()
(I6f852).- Se agregaron
WatchFace.setComplicationDeniedDialogIntent
ysetComplicationRationaleDialogIntent
. 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). UserStyleSchema
yComplicationSlots
ahora se pueden definir en XML. Esto simplifica la construcción de la cara de reloj y hace que las búsquedas deWatchFaceMetadataClient
sean más rápidas, ya que no necesitan vincularse al servicio para obtener los metadatos (I85bfa).- Se agregó
InteractiveWatchFaceClient.supportsPendingIntentForTouchEvent
para que un cliente pueda determinar si una cara de reloj admitegetPendingIntentForTouchEvent
(I0b917). WatchFaceMetadataClient
yListenableWatchFaceMetadataClient
dejaron 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_SECONDS
en su manifiesto y anularonSynchronousComplicationRequest
. Según la naturaleza de la fuente de datos, es posible que también deba anularonStartSynchronousComplicationRequests
yonStopInteractiveComplicationRequests
para 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
PhotoImageComplicationData
tapAction 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.onDestroy
se 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.complications
se movieron a un proyectowear:watchface:watchface-complications
nuevo. 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.addWatchFaceReadyListener
poraddOnWatchFaceReadyListener
y el deremoveWatchFaceReadyListener
porremoveOnWatchFaceReadyListener
. (I48fea) - EditorSession
getComplicationsPreviewData
ygetComplicationsDataSourceInfo
ya no son funciones de suspensión, sino que son propiedadesStateFlow<>
cuyo valor, en un principio, es nulo. En ListenableEditorSession, se quitarongetListenableComplicationPreviewData
ygetListenableComplicationsProviderInfo
, 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.asLiveData
para 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.wear
por 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)