Tela do relógio Wear
Observação : o Formato do mostrador do relógio é necessário para que os mostradores de relógio sejam instalados em dispositivos com o Wear OS 5 pré-instalado a partir de 10 de julho de 2024 e para todos os novos mostradores de relógio publicados no Google Play a partir de 27 de janeiro de 2025.
Saiba mais sobre as mudanças voltadas ao usuário neste artigo da Central de Ajuda.
Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
18 de setembro de 2024 | 1.2.1 | - | - | 1.3.0-alpha04 |
Declarar dependências
Para adicionar uma dependência ao Wear, adicione o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.
Adicione as dependências dos artefatos necessários ao arquivo build.gradle
do
seu app ou 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 mais informações sobre dependências, consulte Adicionar dependências de build.
Feedback
Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.
Consulte a documentação do Issue Tracker para saber mais.
Versão 1.3
Versão 1.3.0-alpha04
18 de setembro de 2024
Lançamento de androidx.wear.watchface:watchface-*:1.3.0-alpha04
. A versão 1.3.0-alpha04 contém estas confirmações.
Novos recursos
- Adição de suporte ao carregamento lento de ícones em
UserStyleSettings
eUserStyleOptions
, o que melhora a performance do carregamento de mostradores do relógio. (Iaf43d). - Foi adicionada uma opção para que uma captura de tela atualizada seja tirada sempre que a configuração do sistema mudar (por exemplo, se a localidade mudar) usando o novo
Watchface.setUpdateScreenshotOnConfigurationChange
. Por padrão, essa configuração fica desativada. (I765a1)
Correções de bugs
- O contorno manual de acesso a novas APIs da plataforma foi removido, já que isso acontece automaticamente pelo modelagem de API ao usar o R8 com o AGP 7.3 ou mais recente (por exemplo, o R8 versão 3.3) e para todos os builds ao usar o AGP 8.1 ou mais recente (por exemplo, o D8 versão 8.1). Os clientes que não estão usando o AGP precisam fazer upgrade para a versão 8.1 ou mais recente do D8. Veja mais detalhes neste artigo. (Ia60e0, b/345472586).
Versão 1.3.0-alpha03
17 de abril de 2024
Lançamento de androidx.wear.watchface:watchface-*:1.3.0-alpha03
. A versão 1.3.0-alpha03 contém estas confirmações.
Mudanças na API
- Adicionamos
EditorSession#setOverrideComplications
, que define temporariamente oComplicationData
da instância do mostrador do relógio durante a edição. Se as complicações mudarem com pouca frequência, isso será mais eficiente do que transmitir substituições porEditorSession#renderWatchFaceToBitmap
. (I19384).
Correções de bugs
- Anteriormente,
selectComplicationDataForInstant
chamavatoApiComplicationData
para qualquer linha do tempo, o que significa que o teste de igualdade de referência === subsequente sempre falharia. Isso significa que as complicações eram recarregadas a cada frame, o que levava ao consumo da bateria. (717406).
Versão 1.3.0-alpha02
3 de abril de 2024
Lançamento de androidx.wear.watchface:watchface-*:1.3.0-alpha02
. A versão 1.3.0-alpha02 contém estas confirmações.
Novos recursos
- Agora usamos a igualdade de referência para comparar melhor e
selectedData
, porque o operador de igualdade é caro. (446b00).
Mudanças na API
- Adicionamos uma API dinâmica sem substituto para
GoalProgressComplicationData
. (c33264).
Versão 1.3.0-alpha01
7 de fevereiro de 2024
Lançamento de androidx.wear.watchface:watchface-*:1.3.0-alpha01
. A versão 1.3.0-alpha01 contém estas confirmações.
Novos recursos
WatchFaceServices
pode ser inicializado simultaneamente e, portanto, não pode ter estado. Para oferecer suporte a isso, adicionamosStatefulWatchFaceService
, em que um extra definido pelo usuário criado porcreateExtra()
é transmitido para todas as substituições chamadas durante a inicialização.- Agora,
GlesRenderer2
tem uma sobrecarga de construtor que permite especificar uma lista de atributos a serem testados comeglChooseConfig
.
Mudanças na API
- Agora, o
StatefulWatchFaceService
oferece suporte a uma substituição degetComplicationSlotInflationFactory
em que o extra definido pelo usuário criado porcreateExtra()
é transmitido. (I82d9f). - Alguns mostradores do relógio precisam compartilhar dados auxiliares criados durante
createUserStyleSchema
com os outros métodos de inicialização. Como não havia uma alternativa melhor, os desenvolvedores geralmente faziam com que oWatchFaceServices
tivesse estado. Isso é perigoso porque várias instâncias podem ser criadas simultaneamente, o que pode levar a bugs. Para resolver isso, apresentamosStatefulWatchFaceService
eStatefulWatchFaceRuntimeService
, em que um tipo definido pelo usuário é criado porcreateExtra()
e transmitido aos vários métodos de criação como um parâmetro. (If8a99). - Adicionamos
getUserStyleFlavors
aInteractiveWatchFaceClient
, que é de interesse principalmente para OEMs. (I0f5d8). - Agora,
GlesRenderer2
tem uma sobrecarga de construtor que permite especificar uma lista de atributos a serem testados comeglChooseConfig
. Isso permite, por exemplo, que você tente primeiro uma configuração com anti-aliasing e volte para uma sem ele, se necessário. (I1ba74). - A partir do Android U, o suporte a
SystemDataSources.DATA_SOURCE_HEART_RATE
será adicionado ao WearOS. Essa complicação só tem suporte paraSHORT_TEXT
, mas é recomendável que oComplicationSlot
aceiteSMALL_IMAGE
também, porque os OEMs podem optar por exibir um atalho para o app de saúde em vez do valor em tempo real. (I34223). - Adicionamos
METADATA_KEY_CONFIG_RESTORE_SUPPORTED
, que, a partir do Android U, controla o que acontece quando o sistema é restaurado de um backup para a fonte de dados de complicação comMETADATA_KEY_DATA_SOURCE_CONFIG_ACTION
. Por padrão, o sistema presume que o serviço de origem de dados de complicação ofereça suporte a backups de qualquer dado de configuração. Caso contrário, ele pode adicionar a configuração de metadadosMETADATA_KEY_DATA_SOURCE_CONFIG_ACTION
como falso, o que marca o slot de complicação como não configurado. (I6c505).
Versão 1.2
Versão 1.2.1
24 de janeiro de 2024
Lançamento de androidx.wear.watchface:watchface-*:1.2.1
. A versão 1.2.1 contém estas confirmações.
Correções de bugs
- Correção de uma falha no Samsung Galaxy Watch 4, 5 e 6 (43f0b0).
Versão 1.2.0
29 de novembro de 2023
Lançamento de androidx.wear.watchface:watchface-*:1.2.0
. A versão 1.2.0 contém estas confirmações.
Mudanças importantes desde a 1.1.0
- Adicionamos suporte a alguns novos tipos de complicação que estão disponíveis para uso no Android T:
GoalProgressComplicationData
, que é semelhante aRangedValueComplicationData
, mas serve para avançar para uma meta em que o mínimo é implicitamente zero e o valor pode ser maior quetargetValue
.WeightedElementsComplicationData
, que consiste em uma matriz de elementos (pares de peso e cor) com texto/título/imagem opcionais. Isso pode aparecer como um gráfico de pizza, em que as cores precisam ser significativas de acordo com o contexto, já que normalmente não há espaço em uma complicação para renderizar rótulos
- Adicionamos suporte para
ColorRanges
opcionais aRangedValueComplicationData
. Normalmente, as complicações seriam renderizadas em cores de acordo com o mostrador do relógio, mas, às vezes, é melhor posicionar oComplicationDataSource
para definir as cores, por exemplo, quando elas têm um significado semântico específico. Por exemplo, vermelho para azul, no caso de temperatura - Praticamente todos os tipos de
ComplicationData
agora oferecem suporte aSmallImages
. - Adicionamos
ComplicationDisplayPolicy
, em queDO_NOT_SHOW_WHEN_DEVICE_LOCKED
instrui um mostrador de relógio compatível a não mostrar a complicação quando o dispositivo está bloqueado - No Android T e versões mais recentes, os OEMs vão poder determinar se uma solicitação de complicação é de um mostrador do relógio na lista definida pelos metadados de
android.support.wearable.complications.SAFE_WATCH_FACES
no manifesto do provedor porComplicationRequest#isForSafeWatchFace
. O provedor vai precisar da permissãocom.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE
para receber algo diferente de TargetWatchFaceSafety.UNKNOWN. UserStyleFlavors
se tornou um recurso não experimental.
Versão 1.2.0-rc01
18 de outubro de 2023
Lançamento de androidx.wear.watchface:watchface-*:1.2.0-rc01
. A versão 1.2.0-rc01 contém estas confirmações.
Versão 1.2.0-beta02
6 de setembro de 2023
Lançamento de androidx.wear.watchface:watchface-*:1.2.0-beta02
. A versão 1.2.0-beta02 contém estas confirmações.
Novos recursos
- O
SuspendingComplicationDataSourceService#onDestroy
está aberto. O suporte à complicação de clima padrão do sistema foi removido.
Mudanças na API
- Reverter "Exposição de uma nova fonte de dados para complicações do clima". (I6f335).
Versão 1.2.0-beta01
23 de agosto de 2023
Lançamento de androidx.wear.watchface:watchface-*:1.2.0-beta01
. A versão 1.2.0-beta01 contém estas confirmações.
Novos recursos
- No Android T, o WearOS agora oferece suporte a uma complicação padrão do sistema meteorológico.
Mudanças na API
- Foi adicionado um substituto do sistema padrão de previsão do tempo para complicações. (Ia0994).
- Esse patch adiciona
WatchFaceRuntimeService
eWatchFaceControlClient.createWatchFaceRuntimeControlClient
com wrappers da Guava. Eles adicionam suporte a ambientes de execução de mostradores do relógio, que são um tipo especial de mostrador do relógio que carrega a definição de outro pacote. No momento, o WearOS só oferece suporte ao ambiente de execução para o Formato de mostrador do relógio Android. (I2799f). - Esse patch é uma continuação de aosp/2636578, em que renomeamos as definições de tipo inteiro para que nenhum código que dependa de
WatchFaceType
,CanvasType
,TapType
ouComplicationsSlotBoundsType
precise ser alterado. (I4098b). - Atualização dos arquivos da API para anotar a supressão de compatibilidade. (I8e87a, b/287516207).
- Esse patch expõe constantes
WatchFaceType
emWatchFaceTypes
, constantesCanvasType
emCanvasTypes
, constantesTapType
emTapTypes
e constantesComplicationsSlotBoundsType
emComplicationsSlotBoundsType
. (I3b85a, b/288750666). - O
WatchFace.OverlayStyle
tem um uso muito baixo e não tem suporte dos OEMs. Por isso, vamos descontinuar o recurso e removê-lo em uma data posterior. (I7344a).
Versão 1.2.0-alpha09
21 de junho de 2023
Lançamento de androidx.wear.watchface:watchface-*:1.2.0-alpha09
. A versão 1.2.0-alpha09 contém estas confirmações.
Novos recursos
- Agora,
RangedValueComplicationData.Builder
aceitaDynamicFloat
, e um novoDynamicComplicationText
está disponível como uma subclasse deComplicationText
. Ambos podem usar expressões dinâmicas e vinculações de plataforma atualizadas a 1 Hz em dispositivos Wear 4 compatíveis.
Mudanças na API
- Foram adicionados tipos dinâmicos para distância diária, calorias diárias e andares diários. As chaves para fontes de integridade da plataforma agora estão em
PlatformHealthSources.Keys
(Ib7637). - Implemente
PlatformDataProvider
para fornecer frequência cardíaca e passos diários. A interfaceSensorGateway
foi removida da API pública. (I55b84). - Renomeie
StateEntryValue
comoDynamicDataValue
e atualize as APIs de estado para usarDynamicDataKey
. (If1c01). - Foi adicionado
AppDataKey
para acessar o estado de envio do app. Foi adicionadoPlatformDataKey
para acessar dados da plataforma. Foi adicionado suporte a namespaces emStateStore
. (I7985e). - Os métodos
enable
/disablePlatformSource
foram removidos doDynamicTypeEvaluator
. O autor da chamada precisa ser responsável pelas atualizações. (I78c6d). - Permite limitar o tamanho de tipos de dados vinculados. (Ie2966).
Versão 1.2.0-alpha08
19 de abril de 2023
Lançamento de androidx.wear.watchface:watchface-*:1.2.0-alpha08
. A versão 1.2.0-alpha08 contém estas confirmações.
Novos recursos
- No Android T e versões mais recentes, os provedores de complicação com
com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE
privilegiado podem registrar metadadosandroidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES
que substituemandroid.support.wearable.complications.SUPPORTED_TYPES
para mostradores de relógio seguros. Isso significa que um provedor de complicação pode escolher exibir tipos diferentes para mostradores de relógio confiáveis e não confiáveis.
Mudanças na API
- Propagação da classe
@Deprecated
para a propriedade (I882d1, b/271441831). - O nome do parâmetro de valor para
Enum.valueOf
foi alterado (Ia9b89). - Mais exceções geradas por enum valueOf (I818fe).
- Removemos
renderWatchFaceToSurface
em favor decreateRemoteWatchFaceView
, que é criado em cima do SurfaceControlViewHost e permite que o autor da chamada incorpore uma visualização do mostrador do relógio, que é renderizada quando o cliente chamaRemoteWatchFaceViewHost#renderWatchFace
. (Ib311d). - Adicionamos
renderWatchFaceToSurface
aInteractiveWatchFaceClient
,HeadlessWatchFaceClient
eEditorSession
. Normalmente, isso tem mais desempenho do que a renderização em um bitmap. (Ieacad). ObservableStateStore
foi renomeado comoStateStore
. (Ieb0e2).- Adição de
DynamicTypeEvaluator.Builder
em vez de argumentos de construtor para permitir mais argumentos opcionais, incluindoObservableStateStore
, que agora é padrão para uma loja vazia. (I6f832). - Ordem de parâmetros refatorada em
DynamicTypeEvaluator
. (Ic1ba4). - O executor foi adicionado aos métodos
DynamicTypeEvaluator.bind
. (I346ab). - Adicionamos o método
startEvaluation
aoBoundDynamicType
para acionar a avaliação depois que o tipo dinâmico é vinculado. (I19908). - Os provedores de complicações com o
com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE
privilegiado podem registrar metadadosandroidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES
que substituemandroid.support.wearable.complications.SUPPORTED_TYPES
para mostradores de relógio seguros. (Id1c73). CustomValueUserStyleSettings2
foi renomeada comoLargeCustomValueUserStyleSettings
(Ic17ac).
Correções de bugs
- O
DynamicTypeValueReceiver#onPreUpdate
foi removido. (I2dc35).
Versão 1.2.0-alpha07
22 de fevereiro de 2023
Lançamento de androidx.wear.watchface:watchface-*:1.2.0-alpha07
. A versão 1.2.0-alpha07 contém estas confirmações.
Novos recursos
No Android T e versões mais recentes, os OEMs vão poder determinar se uma solicitação de complicação é de um mostrador do relógio na lista definida pelos metadados de
android.support.wearable.complications.SAFE_WATCH_FACES
no manifesto do provedor porComplicationRequest#isForSafeWatchFace
. O provedor vai precisar da permissãocom.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE
para receber algo diferente deTargetWatchFaceSafety.UNKNOWN
.Além disso, a
CustomValueUserStyleSetting2
também está disponível a partir do Android T para uso com capacidade para até 12,5 KB. O limite anterior paraCustomValueUserStyleSetting
era de 1 KB. Apesar dos limites de tamanho maiores, é recomendado que os desenvolvedores de mostradores de relógio mantenham os dados mais leves porque, durante a edição, as configurações são enviadas por Bluetooth, que tem largura de banda limitada.
Mudanças na API
- Adicionamos um parâmetro opcional
eglContextAttribList
aGlesRenderer
eGlesRenderer2
, o que permite definir aEGL14.EGL_CONTEXT_CLIENT_VERSION
transmitida comoEGL14.eglCreateContext
(I2a83e). - Migramos as bibliotecas de mostrador do relógio para
androidx.core.util.Consumer
em vez dejava.util.function.Consumer
(I273f5). - Agora, há mais exceções geradas por acessadores de propriedades KT (Iff9d9).
- Adicionamos
InteractiveWatchFaceClient.isComplicationDisplayPolicySupported
para que o cliente possa determinar se é necessário emular o suporte ou não em nome dos mostradores do relógio antigos (I24c89). - Decidimos que
isForSafeWatchFace
precisa ser umIntDef
de três estados (Ief2f7). - Para o Android T, apresentamos
ComplicationRequest.isForSafeWatchFace
, que se destina ao uso de OEM e requercom.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE
. Para fontes de dados na imagem do sistema, esse código retornará "true" se o mostrador do relógio que o solicita estiver dentro da lista de mostradores seguros especificados pela fonte de dados no manifesto (I0cbb6). - Para o Android T, adicionamos
CustomValueUserStyleSetting2
, que pode conter até 12,5 KB. O limite anterior paraCustomValueUserStyleSetting
era de 1 KB (I0b100).
Versão 1.2.0-alpha06
25 de janeiro de 2023
Lançamento de androidx.wear.watchface:watchface-*:1.2.0-alpha06
. A versão 1.2.0-alpha06 contém estas confirmações.
Novos recursos
- Estamos trabalhando para adicionar suporte a vinculações de plataforma de complicação. Essa função ainda não está pronta para uso, mas fique de olho.
- Adicionamos suporte ao
ComplicationSlot
XML para os novos tipos de complicação: GOAL_PROGRESS e WEIGHTED_ELEMENTS.
Correções de bugs
- Correção de um vazamento em que o editor de mostradores de relógio não era lançado corretamente em dispositivos Samsung (3b5987).
- Correção de um bug em que, às vezes, as complicações não eram mostradas corretamente ao alternar entre um mostrador do relógio com vários favoritos (b38ece).
- Correção de um bug de serialização com elementos perOptionScreenReaderNames que causavam falhas no mostrador do relógio (e9f466).
Versão 1.2.0-alpha05
7 de dezembro de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.2.0-alpha05
. A versão 1.2.0-alpha05 contém estas confirmações.
Novos recursos
Há algum tempo, adicionamos suporte à
UserStyleSettings
hierárquica e do Android T. Agora é possível ter mais de umaComplicationSlotsUserStyleSetting
em uma hierarquia. Apenas umComplicationSlotsUserStyleSetting
vai estar ativo com base nas seleções de estilo do usuário.Estamos melhorando o suporte ao leitor de tela para o
ListOption
e oComplicationSlotsOption
ao adicionar um camposcreenReaderName
. Ele será ignorado pelos editores complementares anteriores ao Android T.
Mudanças na API
- Adicionamos um novo campo opcional
screenReaderName
aListOption
eComplicationSlotsOption
para uso dos editores. Ele será ignorado por editores complementares em dispositivos anteriores ao Android T (I75326). - No Android T, vários
ComplicationSlotsUserStyleSettings
agora têm suporte em uma hierarquia de estilo, desde que apenas um deles possa estar ativo por vez. Adicionamos uma função utilitáriafindComplicationSlotsOptionForUserStyle
aUserStyleSchema
para encontrar aComplicationSlotsOption
ativa, se houver (Ic2b06). RangedValuesTypes
foram extraídas para o objeto complementar deRangedValueComplicationData
e renomeadas comoTYPE_UNDEFINED
,TYPE_RATING
e um novoTYPE_PERCENTAGE
foi adicionado (I55d02).- Renomeamos o
DynamicFloat
experimental comoFloatExpression
e o marcamos como@hide
(Idf4f1). - A anotação
@JvmDefaultWithCompatibility
foi adicionada (I8f206).
Versão 1.2.0-alpha04
9 de novembro de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.2.0-alpha04
. A versão 1.2.0-alpha04 contém estas confirmações.
Novos recursos
- Para o Android T, adicionamos dois novos tipos de complicação:
GoalProgressComplicationData
eWeightedElementsComplicationData
. GoalProgressComplicationData
é semelhante aRangedValueComplicationData
, mas o valor dele pode ir além da meta (paraRangedValueComplicationData
, o valor é fixado ao intervalo [min .. max]), que tem implicações para o design visual que pode não ser adequado para todos os mostradores.GoalProgressComplicationData
adiciona suporte para gráficos de pizza e detalhamentos semelhantes de dados simples.- Adicionamos suporte opcional para
ColorRamps
aRangedValueComplicationData
. - Para o Android T, adicionamos
ComplicationPersistencePolicy
esetCachePolicy
aComplicationData
, que atualmente permite que um provedor controle se uma complicação deve ser mantida ou não, isto é, se ela é armazenada em cache após a reinicialização. A maioria das complicações não precisa definir o controle de cache, mas isso pode corrigir casos isolados com dados desatualizados para algumas complicações atualizadas com frequência, por exemplo, complicações de dados de saúde. Também adicionamos aComplicationDisplayPolicy
, em queDO_NOT_SHOW_WHEN_DEVICE_LOCKED
instrui um mostrador de relógio compatível a não mostrar a complicação quando o dispositivo está bloqueado (Ic9574).
Mudanças na API
GoalProgressComplicationData
,WeightedElementsComplicationData
eColorRamp
não são mais experimentais (Ica9e2).ComplicationPersistencePolicy
eComplicationDisplayPolicy
agora estão devidamente marcados como APIs T (I31d88).- O construtor
ComplicationSlotOverlay
descontinuado agora temDeprecationLevel.WARNING
, permitindo que ele seja chamado do Java novamente (Ib308c). - Corrigimos alguns problemas de compatibilidade de Java com
ComplicationRequestListener
,CanvasComplication
,ComplicationTapFilter
eInteractiveWatchFaceClient
. Para isso, usamos a anotação@JvmDefaultWithCompatibility
(Id94fc). - Removemos
ProtoLayoutComplicationData
eListComplicationData
experimentais. A história desses desenvolvedores não ficou clara, esperamos voltar no futuro (I9df05). - Adicionamos um
ValueType
de volta aRangedValueComplicationData
.WeightedElementsComplicationData
agora oferece suporte a uma cor de plano de fundo. RemovemosDiscreteRangedValueComplicationData
porque a funcionalidade dele é um subconjunto deWeightedElementsComplicationData
(I6446c).
Correções de bugs
- Inclua o
isForScreenShot
no código de igual e hash. Verifique seonRenderParametersChanged
recebe um valorisForScreenshot
correto (I04a41). - Correção de vazamentos de
WatchFaceControlService
de clientes headless (e90e00).
Versão 1.2.0-alpha03
5 de outubro de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.2.0-alpha03
. A versão 1.2.0-alpha03 contém estas confirmações.
Novos recursos
- Nenhum recurso novo, mas corrigimos alguns bugs do editor de mostradores de relógio.
Mudanças na API
- O uso de
UserStyleSchema.userStyleSettings
foi descontinuado porquerootUserStyleSettings
não é mais experimental (Ie96e3). rootUserStyleSettings
não é mais experimental (I8d6b3).- Marcamos o
WatchFaceColors
como experimental porque nem todos os sistemas oferecem suporte a ele (I6d75d). DisconnectReasons
foi exposto na API pública para que funcione comIntDef
(I791f8).
Correções de bugs
- Se
SysUI
falhar, feche o que estiver aberto no editor de relógio. SeSysUI
falhar e o editor não for fechado, o mostrador do relógio pode ficar em um estado inconsistente, porque o sistema depende deSysUI
para manter as mudanças de estilo do usuário (ba762a). - Foi corrigido um vazamento de memória em
ComplicationDataSourceInfoRetriever
, em que uma continuação de corrotina do Kotlin atuava como uma raiz de GC e retinha a atividade do editor (33ee06).
Versão 1.2.0-alpha02
21 de setembro de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.2.0-alpha02
. A versão 1.2.0-alpha02 contém estas confirmações.
Novos recursos
Alguns mostradores de relógio têm uma configuração externa do
UserStyle
que os afeta visualmente, por exemplo, a seleção de uma foto de plano de fundo. AdicionamosRenderer.sendPreviewImageNeedsUpdateRequest
, que permite que o mostrador do relógio solicite uma imagem de prévia atualizada. Para funcionar, isso exige uma atualização de sistema correspondente.Também adicionamos uma API para mostradores de relógio exporem as cores ao sistema, que pode escolher a paleta de cores com base nisso. Observação: em um patch futuro, esse recurso se tornou experimental.
Praticamente todos os tipos de
ComplicationData
agora oferecem suporte aSmallImages
.
Mudanças na API
- Às vezes, o gerenciador de plano de fundo se separa de um mecanismo e cria outro. Adicionamos uma definição de int
DisconnectReason
e ampliamosClientDisconnectListener
com um novo método que inclui umDisconnectReason
, permitindo que o listener observe a separação de mecanismos (I45cce). - Adição de dois parâmetros opcionais,
nameResourceId
escreenReaderResourceId
, ao construtorComplicationSlotOverlay
(I157e8). - Adicionamos um wrapper guava para a nova sobrecarga de
getOrCreateInteractiveWatchFaceClient
com umPreviewImageUpdateRequestedListener
(Ic31f0). - Adicionamos
Renderer.sendPreviewImageNeedsUpdateRequest
, que é útil para mostradores de relógio que têm um estado fora deUserStyleSchema
capaz de afetar a aparência deles. Por exemplo, um mostrador com uma imagem de plano de fundo selecionável. No lado do cliente, adicionamosPreviewImageUpdateRequestedListener
como um parâmetro opcional àgetOrCreateInteractiveWatchFaceClient
para observar essas solicitações (Iff44a). - Simplificamos a API para expor
WatchFaceColors
. Agora, há uma propriedade simples chamadawatchFaceColors
no renderizador que pode ser definida pelo mostrador do relógio. Ela precisa ser atualizada conforme necessário em resposta a qualquer mudança de estilo. Em vez de usarWallpaperManager
para observar mudanças de cor, adicionamosOnWatchFaceColorsListener
aInteractiveWatchFaceClient
(I490bc). - Adicionamos uma classe
WatchFaceColors
, que contém as três cores de mostrador do relógio mais proeminentes, e adicionamos os métodos abertoswatchfaceColors
enotifyWatchFaceColorsChanged
ao renderizador. Eles permitem que o sistema busque as cores do mostrador usandoWallpaperManager.getWallpaperColors
(I3d611). ShortTextComplicationData
,RangedValueComplicationData
,NoPermissionComplicationData
(eDiscreteRangedValueComplicationData
,GoalProgressComplicationData
eWeightedElementsComplicationData
experimentais) agora oferecem suporte aSmallImages
. Se um mostrador do relógio optar por renderizar uma complicação com várias cores, agora ele tem a opção de usar umaSmallImage
multicolorida. Anteriormente, precisaria usar uma imagem monocromática (I257df).- Refatoração de
PreviewImageUpdateRequestedListener
para ser umConsumer<>
(Ia875d). - O tipo de método abstrato único (SAM, na sigla em inglês) personalizado
OnWatchfaceColorsListener
foi substituído pelo tipo de SAM Java genérico (consumidor) (I0c489). - O uso dos métodos antigos
getOrCreateInteractiveWatchFaceClient
elistenableGetOrCreateInteractiveWatchFaceClient
que não especificam umPreviewImageUpdateRequestedListener
foi descontinuado (Iec502).
Correções de bugs
DisconnectReason.BINDER_DIED
foi renomeado comoDisconnectReason.ENGINE_DIED
(I4eb0e).
Versão 1.2.0-alpha01
10 de agosto de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.2.0-alpha01
. A versão 1.2.0-alpha01 contém estas confirmações.
Novos recursos
- Adicionamos suporte experimental a vários novos formatos de complicação. Essa é uma área de desenvolvimento ativo. Portanto, esses novos formatos estão sujeitos a mudanças sem aviso prévio e, no momento, o renderizador não oferece suporte ao
CanvasComplicationDrawable
. - Também adicionamos margens opcionais aos slots de complemento para facilitar o toque em pequenas complementos.
Mudanças na API
- A classe
BoundingArc
experimental agora é imutável (If624a). - Pode ser difícil tocar em complicações pequenas. Para minimizar esse problema, lançamos o suporte a margens que aumentam a área de toque sem afetar a renderização. A menos que especificado em código ou por XML, os
ComplciationSlots
têm margens de tamanho zero (I14089). - A assinatura
getComplicationSlotInflationFactory(CurrentUserStyleRepository)
foi alterada para retornar uma instância de fábrica não nula. O retorno nulo de antes era um erro. Assim, essa mudança apenas torna o contrato da API mais claro (I0fcc0). - Adicionamos o argumento
currentUserStyleRepository
ao métodoWatchFaceService.getComplicationSlotInflationFactory
para manter a consistência com ocreateComplicationSlotsManager
(I2ddd2). UserStyleFlavors
se tornaram um recurso não experimental (I69cdc).- Removemos o
ValueType
experimental doRangedValueComplicationData
e lançamos oDiscreteRangedValueComplicationData
experimental, que é parecido com oRangedValueComplicationData
, exceto pelo intervalo de números inteiros e pelo valor. Também lançamos oGoalProgressComplicationData
experimental, que é semelhante aoRangedValueComplicationData
, mas serve para avançar para uma meta em que o mínimo é implicitamente zero e o valor pode ser maior quetargetValue
. Para todas as variantesRangedValue
, é necessário especificar pelo menos uma monochromeImage, um texto ou um título (I9590c). - Removemos
boundsWithMargins
doComplicationSlotState
porque o software do sistema não tem um caso de uso para ele (I42e26). - Adicionamos suporte experimental para
WeightedElementsComplicationData
, que consiste em uma matriz de elementos (pares de peso e cor) com texto/título/imagem opcionais. Isso pode aparecer como um gráfico de pizza, em que as cores precisam ser significativas de acordo com o contexto, já que normalmente não há espaço em uma complicação para renderizar rótulos (I87eea). - As
ColorRamps
experimentais usadas opcionalmente porRangedValueComplicationData
eGoalProgressComplicationData
agora permitem especificar uma sequência de até sete cores e uma sinalização que define se as cores devem ser interpoladas levemente ou se é necessário renderizar etapas sólidas de cor do mesmo tamanho (I9f5bf). - O
RangedValueComplicationData.drawSegmented
mudou paravalueType
, um inteiro com umValueType IntDef
correspondente que fornece significado semântico ao valor dentro do intervalo. Além disso, ele pode ser usado pelo renderizador de complicação para influenciar o estilo (I0616b). - Adicionamos suporte experimental para
ColorRanges
opcionais aoRangedValueComplicationData
. Normalmente, as complicações seriam renderizadas em cores de acordo com o mostrador do relógio, mas, às vezes, é melhor posicionar oComplicationDataSource
para definir as cores, por exemplo, quando elas têm um significado semântico específico. Por exemplo, vermelho para azul, no caso de temperatura (I5153a). - Adicionamos uma dica experimental
drawSegmented
aoRangedValueComplicationData
. Isso é uma indicação para os renderizadores desenharem com segmentos o indicador de valor intervalado, sendo que 1 segmento = 1 unidade (I7d7c1).
Correções de bugs
- Adicionamos a capacidade de definir
ComplicationSlotBounds
em relação a um sistema predefinido de coordenadas de tela (I0985d).
Versão 1.1
Versão 1.1.1
10 de agosto de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.1.1
. A versão 1.1.1 contém estas confirmações.
- Esta é uma versão com correção de bug. É altamente recomendável que os usuários da versão 1.1.0 façam upgrade para ela.
Correções de bugs
A inicialização do mostrador do relógio é assíncrona. Se uma complicação for recebida antes que o mostrador esteja pronto, ela vai ser colocada na lista
pendingInitialComplications
e aplicada mais tarde.pendingInitialComplications
era aplicado muito cedo, o que significa que havia uma janela de tempo durante a inicialização do mostrador do relógio em que as complicações ainda eram colocadas empendingInitialComplications
e ignoradas. Isso já foi corrigido. Além disso, esse patch corrige um bug em queComplicationRenderer
tentava incorretamente carregar marcadores de posição de forma assíncrona, o que falhava e fazia o gráfico da compilação nunca ser atualizado. Por fim, esse patch corrige um bug provavelmente teórico, em que váriaspendingInitialComplications
precisam ser mescladas (0d03ba3).Foi corrigido um possível impasse no
InteractiveInstanceManager
, em quegetExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance
mantinha o bloqueio por mais tempo do que o necessário. Normalmente, esperamos que oengine.setUserStyle
seja rápido, mas, se por algum motivo não for, podemos acabar com um impasse/ANR. Esse patch faz com que o trabalho desnecessário seja movido para fora do bloqueio, removendo o potencial de um impasse (5a2adca).Correção de vários problemas que retinham
WatchFaceService
. Às vezes, o WakeLock pode reter oWatchFaceService
. A adição de uma chamadarelease()
corrige isso. Além disso,StateFlows
pode reterWatchFaceService
, o que cancela as correções deCoroutineScopes
(fd48138).Adição de tempos limite à
awaitDeferredWatchFace
* e correção dewatchfaceOverlayStyle
NullPointerException
. Em circunstâncias normais, ela não deve atingir o tempo limite, incluindo após novas instalações e cenáriosDirectBoot
em que a carga da CPU estiver alta. Também corrigimos um NPE segetWatchfaceOverlayStyle
for chamado depois declose()
(a4c3a5a).
Versão 1.1.0
15 de junho de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.1.0
. A versão 1.1.0 contém estas confirmações.
Mudanças importantes desde a versão 1.0.0
Edição aprimorada:
- Adicionamos suporte a esquemas hierárquicos, o que permite que uma hierarquia de estilos seja descrita pelas IUs do editor. Agora, você pode especificar ícones separados para serem usados no mostrador do relógio e em editores complementares.
- Há suporte para a ativação de várias instâncias de um mostrador do relógio. Cada instância tem um ID exclusivo disponível em todas as superfícies de API.
- Agora, você pode especificar nomes humanos legíveis para que
ComplicationSlots
use nos editores. - Suporte experimental à estilização de “variações”, uma seleção de estilos que vai ficar visível no editor complementar.
- Se duas instâncias da tela do relógio forem carregadas durante a edição, agora é possível que elas compartilhem recursos, economizando memória.
- Ao escolher uma complicação no editor do mostrador do relógio, o provedor atual será pré-selecionado.
Complicações aprimoradas:
- Agora, você pode especificar a enumeração
ComplicationType
para as fontes de dados primárias e secundárias, oferecendo aos desenvolvedores mais flexibilidade para a experiência imediata. - Adicionamos a classe
ComplicationDataTimeline
, que fornece uma sequência de dados com limite de tempo para ser entregue ao mostrador do relógio. Esses dados podem ser armazenados em cache e atualizados automaticamente. Por exemplo, a previsão do tempo para hoje em vários horários ou diversos eventos futuros da agenda. - A classe
ComponentName
do provedor de complementos faz parte daComplicationData
. - As complicações agora são armazenadas em cache, o que proporciona uma experiência melhor ao alternar entre mostradores do relógio.
Outras mudanças:
- Agora, as classes
UserStyleSchema
eComplicationSlots
podem ser definidas em XML. Isso simplifica a construção do mostrador do relógio e permite consultas de metadados mais rápidas pelo sistema. - Os mostradores do relógio agora podem influenciar as cores usadas para renderizar a sobreposição do sistema.
Versão 1.1.0-rc01
18 de maio de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.1.0-rc01
. A versão 1.1.0-rc01 contém estas confirmações.
Novos recursos
- Ajustamos a usabilidade no mostrador do relógio para melhorar a compatibilidade do XML e facilitar a especificação de
ComplicationSlotBounds
e o suporte a referências. Continuamos o experimento comBoundingArc
de complicação de borda, passando paradrawHighlight
, embora não seja recomendado para uso no momento.
Mudanças na API
- Adicionamos uma sobrecarga experimental de
drawHighlight
que aceita um parâmetroBoundingArc
(I705f8). - O XML do mostrador do relógio agora é compatível com referências de recursos Isso permite usar as mesmas constantes no XML e no código (I3ef61).
- Adicionamos a capacidade de definir
ComplicationSlotBounds
no formuláriocenter_x
,center_y
,size_x
,size_y
. Agora também é possível usar unidades diferentes (ou seja, dp) com referências de recursos (Iace98).
Correções de bugs
- O
runBlockingWithTracing
que estava executando tarefas no contexto errado foi corrigido (4f595fe). - Tornamos o
BaseEditorSession.close
síncrono. O problema deBaseEditorSession.close
ser assíncrono é que liberamos oComplicationDataSourceInfoRetriever
tarde demais, levando a um aviso de spam no logcat. Isso provavelmente não causava problemas, mas o spam do logcat é uma distração e precisa ser evitado (35a5308).
Versão 1.1.0-beta02
11 de maio de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.1.0-beta02
. A versão 1.1.0-beta02 contém estas confirmações.
Novos recursos
- Adicionamos suporte experimental para os novos tipos de
ComplicationData
. Eles ainda não estão prontos para uso, mas vamos falar mais sobre isso em breve.
Mudanças na API
- Adicionamos a
BoundingArc
, uma classe experimental que descreve a geometria do slot de complicação de uma borda. Ela foi adicionada aoComplicationSlot
e extraída peloComplicationSlotState
eWatchFaceMetadataClient
(I61a40). - Adicionamos a capacidade de herdar configurações no XML
UserStyleSetting
. Isso permite reduzir a verbosidade e compartilhar uma configuração entre mostradores de relógio (Ief841). - Adicionamos dois novos tipos experimentais de
ComplicationData
:ListComplicationData
eProtoLayoutComplicationData
. No momento, não há suporte para a renderização de nenhum desses tipos, e o WearOS não os reconhece caso sejam adicionados a um manifestoComplicationDataSource's
(I1811c).
Correções de bugs
- Correção da serialização do tipo
TimeLineEntry
. Não estávamos serializando o tipoTimeLineEntry
, o que significava que asTimeLineEntries
do tipo NoData armazenadas em cache eram interpretadas incorretamente como tendo o tipo de complicação mãe que levava a NPEs quando campos obrigatórios não existentes eram acessados (55ffdf5). - Foi corrigido um bug em que o
setComplicationData
descartava campos da linha do tempo (fb392f5). - Correção de um bug em que
runBlockingWithTracing
algumas vezes levava a um NPE (12ca62e). - Foi corrigido um bug em que às vezes ocorria uma
ClassNotFoundException: android.support.wearable.complications.ComplicationText
ao receber uma complicação (217942d9). - Correção de um bug no
GlesRenderer.backgroundThreadInitInternal
em que ele só chamavaonBackgroundThreadGlContextCreated
quandoEGL14.eglCreateContext
era chamado. Correção de outro bug em queverticalFlip
causava uma falha visual na captura de tela (c674ad2). - Foi corrigida a verificação de versão do XML
WatchFaceService
. Ela estava carregando no pacote errado (dfa06f3). - O formato de representação do marcador de posição agora usa um pacote interno. Não queremos que os marcadores atrapalhem os mostradores de relógio existentes que podem usar o a.s.w.c.ComplicationData interno oculto. Antes, o formato de representação de um dado
NoDataComplication
armazenava o marcador nos campos habituais. Isso é problemático porque os mostradores de relógio antigos renderizavam a string do marcador e essa não era a intenção. Agora, usamos um pacote interno para termos um isolamento completo (d5e7bd2).
Versão 1.1.0-beta01
20 de abril de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.1.0-beta01
. A versão 1.1.0-beta01 contém estas confirmações.
Mudanças na API
- Agora, os métodos
WatchFaceMetadataClient
(getUserStyleSchema
,getComplicationSlotMetadataMap
,getUserStyleFlavors
) eHeadlessWatchFaceClient.getUserStyleFlavors
geram uma RuntimeException não analisada em vez deWatchFaceException
(I0718a). WatchFaceMetadataClient.WatchFaceException
foi removido da classe para permitir a reutilização (I4e869).
Correções de bugs
- O
WatchFaceMetadataClient
não vai falhar mais quandoComplicationSlotBounds
parciais forem enviados (Iaafd).
Versão 1.1.0-alpha05
6 de abril de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.1.0-alpha05
. A versão 1.1.0-alpha05 contém estas confirmações.
Novos recursos
- Agora você pode saber qual fonte de dados enviou uma
ComplicationData
ao inspecionarComplicationData.dataSource
. Alguns mostradores de relógio podem usar isso para personalizar a exibição da complicação (I44a73).
Mudanças na API
- O uso de
Renderer.CanvasRenderer
eRenderer.GlesRenderer
foi descontinuado em favor deRenderer.CanvasRenderer2
eRenderer.GlesRenderer2
. Eles oferecem suporte paraSharedAssets
, que são transmitidos aos métodos de renderização. Para a interoperabilidade com Java, apresentamosListenableCanvasRenderer2
eListenableGlesRenderer2
(I31ffa). - Agora
@WatchFaceFlavorsExperimental
pode definir variações: lista pré-configurada de mostradores do relógio estilizados (I04dd0). Renderer.sharedAssets
agora é um StateFlow e removemos oRenderer.SharedAssetsFactory
não usado (I12ac5).UserStyleSchema.userStyleSettings
não está mais descontinuado (Iba7e3).- Adicionamos
HeadlessWatchFaceClient.getUserStyleSchemaDigestHash
, que permite que umHeadlessWatchFaceClient
evite a sobrecarga relativamente baixa de transferência do esquema na AIDL antes de calcular o hash de resumo (I33597). - Adicionamos
isUserStyleSchemaStatic
aoWatchFaceMetadataClient
, que é válido apenas quando é possível confiar que oUserStyleSchema
só vai mudar se o APK do mostrador do relógio for atualizado (I45a3f). - Adicionamos
getDigestHash
aUserStyleSchema
, que calcula um hash de resumo do esquema. Isso pode ser usado para determinar com eficiência se oUserStyleSchema
mudou (I2063d). METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIGURATION_SUPPORTED
foi renomeado comoMETADATA_KEY_DATA_SOURCE_DEFAULT_CONFIG_SUPPORTED
(I9ba5d).UserStyleSetting.OnWatchEditorData
foi renomeado comoUserStyleSetting.WatchFaceEditorData
. Ele contém dados usados exclusivamente pelo editor do mostrador do relógio (If3afb).
Versão 1.1.0-alpha04
9 de março de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.1.0-alpha04
. A versão 1.1.0-alpha04 contém estas confirmações.
Mudanças na API
- Nem sempre o
ComplicationData
atualizado está disponível, por exemplo, quando o armazenamento em cache do ComplicationData expira. Por isso, estendemos oNoDataComplication
com um marcador de posição ComplicationData opcional e adicionamosComplicationText.PLACEHOLDER
,MonochromaticImage.PLACEHOLDER
,SmallImage.PLACEHOLDER
ePhotoImage.PLACEHOLDER
que só podem ser usados dentro do contexto de um marcadorNoDataComplicationData
. Se esta opção for selecionada, vai ser sugerido que esses marcadores sejam renderizados com caixas ou arcos cinza (I6285d). - Adicionamos
ComplicationData.getNextChangeInstant
, que informa o próximo Instant após o de referência, em que qualquer campo da complicação pode mudar Isso é usado internamente a fim de programar frames para atualizar complementos. Por exemplo, se um mostrador de relógio normalmente é atualizado uma vez por minuto, configurar a complicação de cronômetro do relógio faz com que ele seja atualizado uma vez por segundo (I7ceb2). EditorSession.watchFaceId
agora pode ser usado em todos os níveis da API. Além disso, o valor agora vai ser sempre consistente comWatchState.watchFaceInstanceId
(I323b9).- A API
getPendingIntentForTouchEvent
não é mais necessária, porque o problema implícito foi corrigido no framework, então todas as APIs relacionadas foram removidas. Os mostradores de relógio não precisam fazer nada especial para disparar aPendingIntents
, mesmo se o botão home tiver sido pressionado recentemente (I1f2e8). - Adicionamos
RendererParameters.isForScreenShot
, que vai ser verdadeiro se a renderização for para uma captura de tela. Alguns mostradores de relógio com animações precisam saber disso para fazer ajustes e garantir os melhores resultados (I96d99). - Adicionamos a
WatchFaceExceptionReason
àWatchFaceException
para dar mais contexto ao que deu errado (I01d15). ComplicationDataSourceService.onImmediateComplicationRequest
foi removido, eComplicationRequest.immediateResponseRequired
foi adicionado para sinalizar que o provedor precisa responder rapidamente (o ideal é responder em menos de 100 ms). Essa funcionalidade é protegida pela permissão privilegiadacom.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE
(Ie6b23).- Atualização da nulidade no núcleo e na appcompat para corresponder ao Tiramisu DP2 (I0cbb7).
Correções de bugs
- O app do mostrador do relógio falha com uma exceção se a validação do esquema falhar (Ia400f).
Versão 1.1.0-alpha03
9 de fevereiro de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.1.0-alpha03
. A versão 1.1.0-alpha03 contém estas confirmações.
Mudanças na API
- Adicionamos suporte experimental a esquemas de estilo hierárquicos. Adicionamos a nova propriedade childSettings a
androidx.wear.watchface.style.UserStyleSetting.Option
, que vai ser usada inicialmente apenas porListOption
. Isso permite que uma hierarquia de estilos seja descrita para uso pelas IUs do editor. A classe UserStyle não muda e ainda é uma propriedadeMap<String, ByteArray>
(Iaf6f4). - Adicionamos
WatchFace.OverlayStyle
, que permite que o mostrador do relógio configure a renderização da sobreposição de status do sistema (I8520d). - Apresentamos
clearWithBackgroundTintBeforeRenderingHighlightLayer
, um novo parâmetro de construtor opcional paraCanvasRenderer
, sendo que "falso" é o padrão. Se definido como verdadeiro, a tela vai ficar da cor do plano de fundo (Ie01e5). - Foi adicionada a chave de metadados
androidx.watchface.complications.datasource.DEFAULT_CONFIGURATION_SUPPORTED
. Com ela, as fontes de dados de complicação indicam se é possível fornecer um valor padrão sem nenhuma configuração (Icc0d4). - Ao editar o mostrador do relógio, é comum que haja uma instância interativa e outra headless. Para ajudar a economizar memória, lançamos
Renderer.SharedAssets
, que permite que um renderizador de mostrador do relógio compartilhe dados imutáveis (por exemplo, texturas e sombreadores) entre instâncias. O uso deGlesRenderer.setEglConfig
eGlesRenderer.setEglDisplay
foi descontinuado. Nunca houve a intenção de que eles fossem configuráveis, já que isso causaria um comportamento indefinido (I0d9e7). - Adicionamos
setNameResourceId
esetScreenReaderNameResourceId
, que são recursos de string de referência, aComplicationSlot.Builder
e getters correspondentes emandroidx.wear.watchface.client.ComplicationSlotState
. Isso permite que o sistema busque os nomes de ComplicationSlots para uso em editores e leitores de tela (If6c6a). WatchfaceMetadataClient.getUserStyleSchema
egetComplicationSlotMetadataMap
agora geram aWatchFaceException
em vez daRemoteException
(I86f11).onSynchronousComplicationRequest
e as funções relacionadas naComplicationDataSourceService
foram renomeadas comoonImmediateComplicationRequest
etc. (I87ba0).- Os editores de mostradores de relógio têm muito menos espaço em tela do que os editores complementares. Portanto, faz sentido oferecer suporte a ícones diferentes para editores de mostradores de relógio. Este patch adiciona
OnWatchEditorData
(com apenas um ícone) a todas as UserStyleSettings e, quando adequado, às classes Option (If1886). - Adicionamos
@JvmOverloads
ao construtor da classe ListenableGlesRenderer para aprimorar a interoperabilidade com Java (I2974a).
Correções de bugs
- O construtor de
ListenableGlesRenderer
agora está corretamente marcado como@Throws(GlesException::class)
e é possível ampliar essa classe para Java (Iac6d0). - Corrige o bug em que a tapAction de
PhotoImageComplicationData
não era processada corretamente (I1cc30).
Versão 1.1.0-alpha02
12 de janeiro de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.1.0-alpha02
. A versão 1.1.0-alpha02 contém estas confirmações.
Novos recursos
- Para ajudar na depuração e nos testes, a
ComplicationData
e as subclasses relacionadas agora substituíram os métodos hashcode, equals e toString, facilitando o trabalho.
Mudanças na API
- Os métodos
WatchfaceMetadataClient
geram novamenteRemoteExceptions
quando apropriado, facilitando a detecção de erros no mostrador do relógio pelo código do cliente (I78785). - A
ComplicationData
e as suas subclasses agora têm hashcode, equals e toString (I24bc6).
Versão 1.1.0-alpha01
15 de dezembro de 2021
Lançamento de androidx.wear.watchface:watchface-*:1.1.0-alpha01
. A versão 1.1.0-alpha01 contém estas confirmações.
Novos recursos
Agora, as classes
UserStyleSchema
eComplicationSlots
podem ser definidas em XML. Isso simplifica a construção do mostrador do relógio. Além disso, as consultas da interfaceWatchFaceMetadataClient
são mais rápidas, porque ela não precisa ser vinculada ao serviço para receber os metadados. AWatchFaceMetadataClient
e aListenableWatchFaceMetadataClient
não são mais experimentais e vão se tornar parte da API estável. O sistema poderá aceitar várias instâncias de um mostrador, cada uma com opções de estilo definidas pelo usuário. Elas vão ser mostradas no seletor de mostrador do relógio. Para ativar esse recurso, o mostrador precisa incluir a seguinte tag de metadados no manifesto.<meta-data android:name="androidx.wear.watchface.MULTIPLE_INSTANCES_ALLOWED" android:value="true" />
Alguns mostradores de relógio têm um estado que não é registrado na classe
UserStyle
. Para que haja suporte a essa e várias instâncias, o ID da instância do mostrador agora está disponível viaWatchState.watchFaceInstanceId
.Agora, o elemento
ComplicationData
está sendo armazenado em cache para permitir que as complicações sejam mostradas imediatamente após o carregamento. Às vezes, oComplicationData
é armazenado em cache na memória pelo sistema e, em outros casos, ele é serializado pelas bibliotecas de mostradores de relógio. Quando serializado, qualquer tapAction associada será perdida. Se isso acontecer,ComplicationData.tapActionLostDueToSerialization
vai retornar o valortrue
, e o mostrador do relógio vai renderizar a complicação de forma diferente (por exemplo, esmaecida ou semitransparente) para sinalizar que não é possível tocar nela. O sistema vai enviar oComplicationData
atualizado com umatapAction
o mais rápido possível.Alguns elementos
ComplicationData
não podem ser armazenados em cache por muito tempo. Para isso, adicionamos umaComplicationDataTimeline
de recurso mais geral. Ela pode ser usada para fornecer uma sequência de elementosComplicationData
com limite de tempo para serem entregues ao mostrador do relógio. Eles podem ser armazenados em cache e atualizados automaticamente. Por exemplo, a previsão do tempo para hoje em vários horários ou diversos eventos futuros da agenda. OComplicationRequestListener
foi ampliado com um novo métodoonComplicationDataTimeline
, que pode ser usado para retornar esses dados.A
DefaultComplicationDataSourcePolicy
foi ampliada para que você possa especificar o elementoComplicationType
para as fontes de dados primárias e secundárias.Adicionamos suporte para provedores de complementos síncronas, em que a complemento é atualizada em uma frequência maior do que o normal (até uma vez por segundo) quando o mostrador do relógio está visível e não ambiente. Observação: os provedores de complicação síncrona podem ter uso limitado devido às preocupações com a pressão da memória.
As mudanças no
PendingIntentTapListener
provavelmente serão revertidas, porque resolvemos o problema no framework em que o mostrador do relógio não iniciava as atividades por cinco segundos após o botão home ser pressionado.
Mudanças na API
- A classe
ComplicationData.isCached
mudou paratapActionLostDueToSerialization
, que é mais útil ao determinar se o slot de complicação vai ser renderizado de maneira diferente para sinalizar que não pode ser tocado (I6de2f). - A
ComplicationDataTimeline
foi adicionada awear-complication-data-source
. Ela pode ser usada para fornecer uma sequência de elementosComplicationData
com limite de tempo para serem entregues ao mostrador do relógio. Eles podem ser armazenados em cache e atualizados automaticamente. Por exemplo, a previsão do tempo para hoje em vários horários ou diversos eventos futuros da agenda. OComplicationRequestListener
foi ampliado com um novo métodoonComplicationDataTimeline
, que pode ser usado para retornar esses dados. Há um novo wrapperSuspendingTimelineComplicationDataSourceService
do Kotlin para suspender os serviços de fonte de dados (Idecdc). PendingIntentTapListener
eWatchFaceControlClient.getPendingIntentForTouchEvent
foram adicionados. Isso pode ajudar os mostradores de relógio que precisam iniciar intents em resposta a toques para contornar um problema em que o framework bloqueia a inicialização de novas atividades por cinco segundos após pressionar o botão home (I98074).- Introdução dos elementos
ComplicationData
armazenados em cache por mostrador de relógio. O objetivo é permitir que o mostrador exiba os últimos valores conhecidos dos dados de complicação após o carregamento até que o sistema consiga atualizá-los. Há um novo métodoWatchFaceControlClient.hasComplicationCache
da API destinado a OEMs. Isso pode influenciar a estratégia do sistema de enviar complicações a um mostrador de relógio. Além disso, os elementosComplicationData
têm uma propriedadeisCached
, e é recomendado que as complementos em cache sejam renderizadas de forma diferente, porque atapAction
não pode ser armazenada em cache e terá um valornull
em uma complemento desse tipo (I404b0). - O ID da instância do mostrador do relógio agora está disponível via
WatchState.watchFaceInstanceId
. A maioria dos mostradores não precisa usar isso, mas se houver um estado por mostrador de relógio que não esteja armazenado no esquema, essa vai ser a chave para identificar a instância do mostrador. Para ajudar com isso, agora você pode fornecer um ID chamandoWatchFaceControlClient.createHeadlessWatchFaceClient
(I1ff98). - A
DefaultComplicationDataSourcePolicy
foi ampliada com a capacidade de definir osComplicationTypes
padrão para os provedores primário e secundário, assim como para o provedor do sistema substituto. O uso deComplicationSlot.defaultDataSourceType
foi descontinuado (If0ce3). ComplicationSlot.configExtras
agora é mutável e pode ser atualizado antes de chamarEditorSession.openComplicationDataSourceChooser()
(I6f852).- A
WatchFace.setComplicationDeniedDialogIntent
e asetComplicationRationaleDialogIntent
foram adicionadas. Essas intents são iniciadas para mostrar uma caixa de diálogo de justificativa antes de solicitar permissões de complicação, assim como outra caixa de diálogo explicando que a permissão é necessária ao tentar editar uma complicação quando permissões tiverem sido negadas. O seletor do provedor não vai ser aberto, então a caixa de diálogo é necessária (I3a29c). - Agora, as classes
UserStyleSchema
eComplicationSlots
podem ser definidas em XML. Isso simplifica a construção do mostrador do relógio e deixa as consultas à interfaceWatchFaceMetadataClient
mais rápidas, já que não é necessário se vincular ao serviço para receber os metadados (I85bfa). - O
InteractiveWatchFaceClient.supportsPendingIntentForTouchEvent
foi adicionado para que o cliente possa determinar se um mostrador do relógio tem suporte aogetPendingIntentForTouchEvent
(I0b917). - A
WatchFaceMetadataClient
e aListenableWatchFaceMetadataClient
não são mais experimentais. Elas poderão ser usadas para acessar metadados de mostradores de relógio de forma eficiente sempre que isso for possível sem abrir um vinculador para o mostrador (Ibb827). - Foi adicionado suporte para provedores de complementos síncronas, em que a complemento é atualizada em uma frequência maior do que o normal (até uma vez por segundo) quando o mostrador do relógio está visível e não ambiente. Para usar esse provedor, é necessário incluir uma nova tag de metadados
androidx.wear.watchface.complications.data.source.SYNCHRONOUS_UPDATE_PERIOD_SECONDS
no manifesto e substituir aonSynchronousComplicationRequest
. Dependendo da natureza da fonte de dados, também pode ser necessário substituir as funçõesonStartSynchronousComplicationRequests
eonStopInteractiveComplicationRequests
para receber notificações de quando a complicação entra e sai do modo interativo (I8fe9d).
Versão 1.0
Versão 1.0.1
9 de fevereiro de 2022
Lançamento de androidx.wear.watchface:watchface-*:1.0.1
. A versão 1.0.1 contém estas confirmações.
Correções de bugs
- Corrige o bug em que a tapAction de
PhotoImageComplicationData
não era processada corretamente (I1cc30).
Versão 1.0.0
1.º de dezembro de 2021
Lançamento de androidx.wear.watchface:watchface-*:1.0.0
. A versão 1.0.0 contém estas confirmações.
Principais recursos da versão 1.0.0
O pacote androidx.wear.watchface
é a nova biblioteca recomendada para desenvolver mostradores de relógio do WearOS. Ele tem uma série de novos recursos em relação à Biblioteca de Suporte de Wearables antiga.
- A personalização feita pelo usuário (por exemplo, para mudar a paleta de cores, o estilo dos ponteiros do relógio, a aparência das marcas de hora etc.) tem suporte direto da biblioteca (consulte
androidx.wear.watchface.style
). Agora ficou muito mais fácil desenvolver em um editor de mostradores de relógio usando o androidx.wear.watchface.editor. Além disso, o mostrador do relógio pode ser editado no app complementar do sistema sem que você precise programar mais código. - Práticas recomendadas integradas. A biblioteca gera automaticamente marcadores de conteúdo do leitor de tela para complicações (também é possível adicionar marcadores próprios). O framerate cai automaticamente quando a bateria está baixa, e não está carregando, para melhorar a duração da bateria.
- Menos código é necessário para desenvolver um mostrador de relógio, especialmente para complicações em que grande parte do código boilerplate foi movido para a biblioteca.
Correções de bugs
- Correção para
EditorSession.userStyle.compareAndSet
(I6f676). - Foram corrigidos atrasos muito curtos do mostrador do relógio (Iffb97).
InteractiveWatchFaceImpl.onDestroy
enviado na linha de execução de IU (I83340).- Correção de vários problemas com broadcast receivers (I7d25f).
Versão 1.0.0-rc01
3 de novembro de 2021
Lançamento de androidx.wear.watchface:watchface-*:1.0.0-rc01
. A versão 1.0.0-rc01 contém estas confirmações.
Correções de bugs
O método dump() (chamado pelo dumpsys do adb shell) que era interrompido por migrações de fluxo foi corrigido (087cf9e).
A ordem correta de writeDirectBootPrefs agora é garantida. Queremos que o método writeDirectBootPrefs seja sempre executado após initStyleAndComplications para que a inicialização da linha de execução da interface não atrase (37650ac).
Garantia de que Renderer.onDestroy seja chamado. No cenário em que o renderizador foi criado, mas a inicialização WF não foi concluída e o método Engine.onDestroy foi chamado, é necessário chamar Renderer.onDestroy (f9952dc).
O método isBatteryLowAndNotLoading foi otimizado/corrigido. Esse patch faz a configuração inicial do método isBatteryLowAndNotLoading mais cedo, o que significa que ele pode ser usado em paralelo com createWatchFace. Além disso, agora ACTION_POWER_DISCONNECTED pode ser detectado (ddffd80).
InteractiveWatchFaceClientImpl.isConnectionAlive será falso após o fechamento (ab9774e).
Versão 1.0.0-beta01
27 de outubro de 2021
Lançamento de androidx.wear.watchface:watchface-*:1.0.0-beta01
. A versão 1.0.0-beta01 contém estas confirmações.
Versão 1.0.0-alpha24
13 de outubro de 2021
Lançamento de androidx.wear.watchface:watchface-*:1.0.0-alpha24
. A versão 1.0.0-alpha24 contém estas confirmações.
Mudanças na API
- As classes no pacote
androidx.wear.watchface.complications
foram movidas para um novo projetowear:watchface:watchface-complications
. Ou seja, não é possível incluir essa biblioteca nem qualquer versão Alfa anterior dewear:watchface:watchface-complications-data
, já que isso resulta em erros sobre classes duplicadas (I97195). - Renderer.dump foi renomeado como Renderer.onDump e anotado com @UiThread (I44845).
InteractiveWatchFaceClient.addWatchFaceReadyListener
foi renomeado comoaddOnWatchFaceReadyListener
, eremoveWatchFaceReadyListener
foi renomeado comoremoveOnWatchFaceReadyListener
(I48fea).getComplicationsPreviewData
egetComplicationsDataSourceInfo
da EditorSession não são mais funções de suspensão, mas sim propriedadesStateFlow<>
com um valor inicialmente nulo. Em ListenableEditorSession,getListenableComplicationPreviewData
egetListenableComplicationsProviderInfo
foram removidas em favor dos novos objetosStateFlow<>
da classe base. Se você precisar detectar mudanças no código Java, useandroidx.lifecycle.FlowLiveDataConversions.asLiveData
para converter emLiveData<>
(Ic5483).
Versão 1.0.0-alpha23
29 de setembro de 2021
Lançamento de androidx.wear.watchface:watchface-*:1.0.0-alpha23
. A versão 1.0.0-alpha23 contém estas confirmações.
Novos recursos
A biblioteca do mostrador do relógio agora é um único grupo de bibliotecas. Como resultado, as bibliotecas foram movidas e você precisará atualizar as importações do Gradle desta maneira:
Antiga | Nova |
---|---|
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 |
Mudanças na API
- As bibliotecas do mostrador do relógio e de complicações do
androidx.wear
separadas foram migradas para o grupo de bibliotecasandroidx.wear.watchface
(b25f3c0). - O elemento EditorRequest.canWatchFaceSupportHeadlessEditing foi adicionado para permitir que um cliente saiba se um editor de mostrador do relógio é compatível com a edição headless. Haverá alguns falsos negativos em relação a esse comportamento porque o suporte foi adicionado em asop/1756809, mas o valor correto será retornado para todos os mostradores de relógio futuros (ca55590).
- O renderizador agora tem um método dump(), que pode ser substituído para adicionar dados personalizados às informações geradas pelo serviço de atividade de dumpsys do shell ABD WatchFaceService (95235f9).
- O elemento InteractiveWatchFaceClient.addWatchFaceReadyListener agora especifica o executor primeiro (563ac2f).
- O StateFlowCompatHelper foi removido. Use asLiveData (androidx.lifecycle.asLiveData) (bd35d3).
- CurrentUserStyleRepository.userStyle não é mais mutável (I44889).
- O WatchFaceReadyListener foi renomeado como OnWatchFaceReadyListener (Ic12a9).
Correções de bugs
- Use o InteractiveInstanceManager.deleteInstance para chamar o método onDestroy. Isso é necessário para garantir que o elemento InteractiveWatchFaceImpl receba o lixo coletado (fce4af8, b/199485839).