Tela do relógio Wear
Observação : a partir de 10 de julho de 2024, os mostradores de relógio precisarão usar o Formato de rosto do relógio para ser instalado em novos relógios que são lançados com o Wear OS 5 pré-instalado. Saiba mais em relação às mudanças que o usuário Central de Ajuda artigo.
Além disso, a partir do início de 2025 (data específica a ser anunciada durante no quarto trimestre de 2024), todos os novos mostradores de relógio publicados no Google Play precisam usar o mostrador do relógio Formato.
Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
17 de abril de 2024 | 1.2.1 | - | - | 1.3.0-alpha03 |
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-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 não mudarem com frequência, isso será mais eficiente do que transmitir substituições peloEditorSession#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 significava que as complicações eram recarregadas a cada frame, levando 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 o melhor e
selectedData
porque o operador de igualdade é caro. (446b00).
Mudanças na API
- Adicionamos uma API dinâmica não substituta para a
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, por isso, precisa ser sem estado. Para isso, adicionamosStatefulWatchFaceService
, em que um extra definido pelo usuário criado porcreateExtra()
é transmitido para todas as substituições chamadas durante a inicialização.GlesRenderer2
agora tem uma sobrecarga de construtor que permite especificar uma lista de atributos para testar comeglChooseConfig
Mudanças na API
StatefulWatchFaceService
agora oferece suporte a uma substituição degetComplicationSlotInflationFactory
em que o extra definido pelo usuário criado porcreateExtra()
é transmitido. (I82d9f).- Alguns mostradores de relógio precisam compartilhar dados auxiliares criados durante a
createUserStyleSchema
com os outros métodos de inicialização. Como não havia uma alternativa melhor, os desenvolvedores geralmente tornavam aWatchFaceServices
com 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 pelocreateExtra()
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). GlesRenderer2
agora tem uma sobrecarga de construtor que permite especificar uma lista de atributos para testar comeglChooseConfig
Por exemplo, é possível tentar primeiro uma configuração com anti-aliasing e, se necessário, substituí-la por outra que não funciona. (I1ba74).- No Android U, o suporte ao
SystemDataSources.DATA_SOURCE_HEART_RATE
será adicionado ao WearOS. Essa complicação só oferece suporte a complicaçõesSHORT_TEXT
, mas é recomendável que aComplicationSlot
também aceiteSMALL_IMAGE
, porque os OEMs podem optar por mostrar um atalho para o app de saúde em vez do valor ativo. (I34223). - Adicionamos
METADATA_KEY_CONFIG_RESTORE_SUPPORTED
, que, do Android U em diante, controla o que acontece quando o sistema é restaurado usando um backup da fonte de dados de complicações comMETADATA_KEY_DATA_SOURCE_CONFIG_ACTION
. Por padrão, o sistema presume que o serviço de fonte de dados de complicação oferece suporte ao backup de todos os dados de configuração. Caso contrário, ele pode adicionar a configuração de metadadosMETADATA_KEY_DATA_SOURCE_CONFIG_ACTION
como falso, o que vai marcar o slot da 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
- Corrigida 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 disponíveis para uso no Android T:
GoalProgressComplicationData
, que é semelhante aRangedValueComplicationData
, exceto pelo progresso em direção a 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 a
ColorRanges
opcionais paraRangedValueComplicationData
. 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 - Quase 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`. - A
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
SuspendingComplicationDataSourceService#onDestroy
está aberto. O suporte a uma complicação do clima padrão do sistema foi removido.
Mudanças na API
- Reverta "Expor uma nova fonte de dados para complicações climáticas". (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 e versões mais recentes, o WearOS agora vai oferecer suporte a uma complicação padrão do sistema climático.
Mudanças na API
- Foi adicionado um substituto do sistema padrão de clima para complicações. (Ia0994).
- Esse patch adiciona
WatchFaceRuntimeService
eWatchFaceControlClient.createWatchFaceRuntimeControlClient
com os wrappers guava. Eles adicionam suporte a tempos de execução do mostrador do relógio, que são um tipo especial de mostrador que carrega sua definição a partir de outro pacote. No momento, o WearOS só oferece suporte ao ambiente de execução para o Formato do mostrador do relógio Android. (I2799f). - Esse patch é uma continuação de aosp/2636578 (link em inglês), em que renomeamos os defs int para que códigos que dependam de
WatchFaceType
,CanvasType
,TapType
ouComplicationsSlotBoundsType
não precisem ser alterados. (I4098b). - Atualização dos arquivos de API para anotar a supressão de compatibilidade. (I8e87a, b/287516207).
- Esse patch expõe constantes
WatchFaceType
emWatchFaceTypes
,CanvasType
emCanvasTypes
eTapType
emTapTypes
eComplicationsSlotBoundsType
emComplicationsSlotBoundsType
. (I3b85a, b/288750666). - O
WatchFace.OverlayStyle
tem um uso muito baixo e não é bem aceito por OEMs. Por isso, ele será descontinuado com a intenção de removê-lo futuramente. (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
- O
RangedValueComplicationData.Builder
agora aceitaDynamicFloat
, e uma novaDynamicComplicationText
está disponível como uma subclasse deComplicationText
, que pode utilizar expressões dinâmicas e vinculações de plataforma atualizadas a 1 hz em dispositivos Wear 4 com suporte.
Mudanças na API
- Foram adicionados tipos dinâmicos para a 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 usar oDynamicDataKey
. (If1c01). - Adição de
AppDataKey
para acessar o estado enviado pelo app. Adição dePlatformDataKey
para acessar dados da plataforma. Foi adicionado suporte a namespace emStateStore
. (I7985e). enable
/disablePlatformSource
métodos foram removidos deDynamicTypeEvaluator
. O autor da chamada precisa ser responsável pelas atualizações. (I78c6d).- Permitir o limite do tamanho dos 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, os provedores de complicações com a
com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE
privilegiada 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ções pode disponibilizar 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 do valor para
Enum.valueOf
mudou (Ia9b89). - Mais exceções geradas a partir de valueOf de enum (I818fe).
- Removemos
renderWatchFaceToSurface
em favor decreateRemoteWatchFaceView
, que é criado com base em 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 terá melhor desempenho do que a renderização em um bitmap. (Ieacad). ObservableStateStore
foi renomeado comoStateStore
. (Ieb0e2).- Foram adicionados
DynamicTypeEvaluator.Builder
em vez de argumentos de construtor para permitir mais argumentos opcionais, incluindoObservableStateStore
, que agora tem um armazenamento vazio por padrão. (I6f832). - Ordem refatorada de parâmetros em
DynamicTypeEvaluator
. (Ic1ba4). - O executor foi adicionado aos métodos
DynamicTypeEvaluator.bind
. (I346ab). - Adicionamos o método
startEvaluation
aoBoundDynamicType
para acionar a avaliação após a vinculação do tipo dinâmico. (I19908). - 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 do 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).