Tela do relógio Wear

Crie aplicativos para smartwatches Wear OS by Google.
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.

Criar novo problema

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 o ComplicationData da instância do mostrador do relógio durante a edição Se as complicações mudarem com pouca frequência, isso é mais eficiente do que transmitir substituições via EditorSession#renderWatchFaceToBitmap. (I19384).

Correções de bugs

  • Anteriormente, o selectComplicationDataForInstant chamava toApiComplicationData para qualquer linha do tempo, o que significa que o teste de igualdade de referência === subsequente sempre falhava. Isso significava que as complicações eram recarregadas a cada frame, levando ao consumo elevado 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 these confirmações.

Novos recursos

  • Agora, usamos a igualdade de referência para comparar os melhores e selectedData porque o operador de igualdade é caro. (446b00).

Mudanças na API

  • Adicionamos uma API dinâmica não alternativa 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

  • Os WatchFaceServices podem ser inicializados simultaneamente e, portanto, precisam ser sem estado. Para isso, adicionamos StatefulWatchFaceService, em que um extra definido pelo usuário criado por createExtra() é 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 com eglChooseConfig

Mudanças na API

  • StatefulWatchFaceService agora oferece suporte a uma substituição de getComplicationSlotInflationFactory para a qual o extra definido pelo usuário criado por createExtra() é transmitido (I82d9f).
  • Alguns mostradores de relógio precisam compartilhar dados auxiliares criados durante createUserStyleSchema com outros métodos de inicialização. Como não havia uma alternativa melhor, os desenvolvedores geralmente deixavam as WatchFaceServices com estado. Isso é perigoso, porque várias instâncias podem ser criadas simultaneamente, o que pode levar a bugs. Para resolver isso, introduzimos StatefulWatchFaceService e StatefulWatchFaceRuntimeService, em que um tipo definido pelo usuário é criado pelo createExtra() e transmitido para os vários métodos de criação como um parâmetro (If8a99).
  • Adicionamos getUserStyleFlavors a InteractiveWatchFaceClient, que é de interesse principalmente para OEMs. (I0f5d8).
  • GlesRenderer2 agora tem uma sobrecarga de construtor que permite especificar uma lista de atributos para testar com eglChooseConfig Isso permite, por exemplo, que você tente primeiro uma configuração com anti-aliasing e substitua para uma sem, se necessário. (I1ba74).
  • No Android U, o suporte para SystemDataSources.DATA_SOURCE_HEART_RATE vai ser adicionado ao WearOS. Essa complicação só tem suporte a complicações SHORT_TEXT, mas é recomendável que o ComplicationSlot aceite SMALL_IMAGE também, porque os OEMs podem optar por disponibilizar 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 de um backup para a fonte de dados de complicação com METADATA_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 quaisquer dados de configuração. Se não for, ele pode adicionar a configuração de metadados METADATA_KEY_DATA_SOURCE_CONFIG_ACTION como "false", o que marcará 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

  • 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 que estão disponíveis para uso no Android T:
    • GoalProgressComplicationData, que é semelhante a RangedValueComplicationData, exceto para o progresso em direção a uma meta em que "min" é implicitamente zero, e o valor pode ser maior que targetValue.
    • WeightedElementsComplicationData, que consiste em uma matriz de elementos (pares de peso e cor) com texto/título/imagem opcional. 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
  • Agora o RangedValueComplicationData é compatível com ColorRanges opcional. Normalmente, as complicações seriam renderizadas em cores de acordo com o mostrador do relógio, mas, às vezes, é melhor posicionar o ComplicationDataSource 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 a SmallImages.
  • Adicionamos ComplicationDisplayPolicy, em que DO_NOT_SHOW_WHEN_DEVICE_LOCKED instrui um mostrador de relógio compatível a não mostrar a complicação quando o dispositivo estiver 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 por ComplicationRequest#isForSafeWatchFace. O provedor vai precisar da permissão com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE para receber algo diferente de TargetWatchFaceSafety.UNKNOWN`.
  • O 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 agora. O suporte para uma complicação de clima padrão do sistema foi removido.

Mudanças na API

  • Reverter a opção "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 vai oferecer 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 e WatchFaceControlClient.createWatchFaceRuntimeControlClient com wrappers guava. Eles adicionam suporte a tempos de execução de mostrador do relógio, que são um tipo especial que carrega a definição de outro pacote. No momento, o WearOS só oferece suporte ao ambiente de execução para o Formato do mostrador do relógio do Android. (I2799f).
  • Esse patch é uma sequência de aosp/2636578, em que renomeamos o int defs para que qualquer código dependendo de WatchFaceType, CanvasType, TapType ou ComplicationsSlotBoundsType não precise ser alterado. (I4098b).
  • Atualização dos arquivos de API para anotar a supressão de compatibilidade. (I8e87a, b/287516207).
  • Esse patch expõe constantes WatchFaceType em WatchFaceTypes, constantes CanvasType em CanvasTypes, TapType em constantes TapTypes e ComplicationsSlotBoundsType em ComplicationsSlotBoundsType. (I3b85a, b/288750666).
  • O WatchFace.OverlayStyle é muito pouco usado e não tem suporte dos OEMs. Por isso, ele será descontinuado para ser removido mais tarde. (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

  • RangedValueComplicationData.Builder agora aceita DynamicFloat, e um novo DynamicComplicationText está disponível como uma subclasse de ComplicationText, que pode utilizar expressões dinâmicas e vinculações de plataforma que são atualizadas a 1 hz em dispositivos Wear 4 com suporte

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 informar a frequência cardíaca e os passos diários. A interface SensorGateway foi removida da API pública (I55b84).
  • Renomeie StateEntryValue como DynamicDataValue e atualize as APIs de estado para usar a DynamicDataKey. (If1c01).
  • Adição de AppDataKey para acessar o estado enviado por push do app, adição de PlatformDataKey para acessar dados da plataforma e adição de suporte a namespace em StateStore (I7985e).
  • enable/disablePlatformSource métodos foram removidos de DynamicTypeEvaluator. O autor da chamada deve ser responsável pelas atualizações. (I78c6d).
  • Permitir limitar o 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 o com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE privilegiado podem registrar metadados androidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES, que substituem android.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 ou 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 mudou (Ia9b89).
  • Mais exceções geradas a partir do tipo enumerado valueOf (I818fe).
  • Removemos renderWatchFaceToSurface em favor de createRemoteWatchFaceView, que é criado com base no SurfaceControlViewHost e permite que o autor da chamada incorpore uma visualização do mostrador do relógio, que é renderizada quando o cliente chama RemoteWatchFaceViewHost#renderWatchFace (Ib311d).
  • Adicionamos renderWatchFaceToSurface a InteractiveWatchFaceClient, HeadlessWatchFaceClient e EditorSession Normalmente, isso é mais eficiente do que renderizar para um bitmap. (Ieacad).
  • ObservableStateStore foi renomeado como StateStore. (Ieb0e2).
  • DynamicTypeEvaluator.Builder foi adicionado em vez de argumentos do construtor para permitir mais argumentos opcionais, incluindo ObservableStateStore, que agora tem um armazenamento vazio por padrão (I6f832).
  • Ordem refatorada dos parâmetros em DynamicTypeEvaluator. (Ic1ba4).
  • O Executor foi adicionado aos métodos DynamicTypeEvaluator.bind. (I346ab).
  • Adicionamos o método startEvaluation ao BoundDynamicType para acionar a avaliação depois que o tipo dinâmico for vinculado. (I19908).
  • Provedores de complicação com o com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE privilegiado podem registrar metadados androidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES, que substituem android.support.wearable.complications.SUPPORTED_TYPES para mostradores de relógio seguros. (Id1c73).
  • CustomValueUserStyleSettings2 foi renomeada como LargeCustomValueUserStyleSettings (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 por ComplicationRequest#isForSafeWatchFace. O provedor vai precisar da permissão com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE para receber algo diferente de TargetWatchFaceSafety.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 para CustomValueUserStyleSetting 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 a GlesRenderer e GlesRenderer2, o que permite definir a EGL14.EGL_CONTEXT_CLIENT_VERSION transmitida como EGL14.eglCreateContext (I2a83e).
  • Migramos as bibliotecas de mostrador do relógio para androidx.core.util.Consumer em vez de java.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 um IntDef de três estados (Ief2f7).
  • Para o Android T, apresentamos ComplicationRequest.isForSafeWatchFace, que se destina ao uso de OEM e requer com.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 para CustomValueUserStyleSetting 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 uma ComplicationSlotsUserStyleSetting em uma hierarquia. Apenas um ComplicationSlotsUserStyleSetting 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 o ComplicationSlotsOption ao adicionar um campo screenReaderName. Ele será ignorado pelos editores complementares anteriores ao Android T.

Mudanças na API

  • Adicionamos um novo campo opcional screenReaderName a ListOption e ComplicationSlotsOption 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ária findComplicationSlotsOptionForUserStyle a UserStyleSchema para encontrar a ComplicationSlotsOption ativa, se houver (Ic2b06).
  • RangedValuesTypes foram extraídas para o objeto complementar de RangedValueComplicationData e renomeadas como TYPE_UNDEFINED, TYPE_RATING e um novo TYPE_PERCENTAGE foi adicionado (I55d02).
  • Renomeamos o DynamicFloat experimental como FloatExpression 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 e WeightedElementsComplicationData.
  • GoalProgressComplicationData é semelhante a RangedValueComplicationData, mas o valor dele pode ir além da meta (para RangedValueComplicationData, 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 a RangedValueComplicationData.
  • Para o Android T, adicionamos ComplicationPersistencePolicy e setCachePolicy a ComplicationData, 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 a ComplicationDisplayPolicy, em que DO_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 e ColorRamp não são mais experimentais (Ica9e2).
  • ComplicationPersistencePolicy e ComplicationDisplayPolicy agora estão devidamente marcados como APIs T (I31d88).
  • O construtor ComplicationSlotOverlay descontinuado agora tem DeprecationLevel.WARNING, permitindo que ele seja chamado do Java novamente (Ib308c).
  • Corrigimos alguns problemas de compatibilidade de Java com ComplicationRequestListener, CanvasComplication, ComplicationTapFilter e InteractiveWatchFaceClient. Para isso, usamos a anotação @JvmDefaultWithCompatibility (Id94fc).
  • Removemos ProtoLayoutComplicationData e ListComplicationData experimentais. A história desses desenvolvedores não ficou clara, esperamos voltar no futuro (I9df05).
  • Adicionamos um ValueType de volta a RangedValueComplicationData. WeightedElementsComplicationData agora oferece suporte a uma cor de plano de fundo. Removemos DiscreteRangedValueComplicationData porque a funcionalidade dele é um subconjunto de WeightedElementsComplicationData (I6446c).

Correções de bugs

  • Inclua o isForScreenShot no código de igual e hash. Verifique se onRenderParametersChanged recebe um valor isForScreenshot 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 porque rootUserStyleSettings 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 com IntDef (I791f8).

Correções de bugs

  • Se SysUI falhar, feche o que estiver aberto no editor de relógio. Se SysUI falhar e o editor não for fechado, o mostrador do relógio pode ficar em um estado inconsistente, porque o sistema depende de SysUI 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. Adicionamos Renderer.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 a SmallImages.

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 ampliamos ClientDisconnectListener com um novo método que inclui um DisconnectReason, permitindo que o listener observe a separação de mecanismos (I45cce).
  • Adição de dois parâmetros opcionais, nameResourceId e screenReaderResourceId, ao construtor ComplicationSlotOverlay (I157e8).
  • Adicionamos um wrapper guava para a nova sobrecarga de getOrCreateInteractiveWatchFaceClient com um PreviewImageUpdateRequestedListener (Ic31f0).
  • Adicionamos Renderer.sendPreviewImageNeedsUpdateRequest, que é útil para mostradores de relógio que têm um estado fora de UserStyleSchema capaz de afetar a aparência deles. Por exemplo, um mostrador com uma imagem de plano de fundo selecionável. No lado do cliente, adicionamos PreviewImageUpdateRequestedListener como um parâmetro opcional à getOrCreateInteractiveWatchFaceClient para observar essas solicitações (Iff44a).
  • Simplificamos a API para expor WatchFaceColors. Agora, há uma propriedade simples chamada watchFaceColors 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 usar WallpaperManager para observar mudanças de cor, adicionamos OnWatchFaceColorsListener a InteractiveWatchFaceClient (I490bc).
  • Adicionamos uma classe WatchFaceColors, que contém as três cores de mostrador do relógio mais proeminentes, e adicionamos os métodos abertos watchfaceColors e notifyWatchFaceColorsChanged ao renderizador. Eles permitem que o sistema busque as cores do mostrador usando WallpaperManager.getWallpaperColors (I3d611).
  • ShortTextComplicationData, RangedValueComplicationData, NoPermissionComplicationData (e DiscreteRangedValueComplicationData, GoalProgressComplicationData e WeightedElementsComplicationData experimentais) agora oferecem suporte a SmallImages. Se um mostrador do relógio optar por renderizar uma complicação com várias cores, agora ele tem a opção de usar uma SmallImage multicolorida. Anteriormente, precisaria usar uma imagem monocromática (I257df).
  • Refatoração de PreviewImageUpdateRequestedListener para ser um Consumer<> (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 e listenableGetOrCreateInteractiveWatchFaceClient que não especificam um PreviewImageUpdateRequestedListener foi descontinuado (Iec502).

Correções de bugs

  • DisconnectReason.BINDER_DIED foi renomeado como DisconnectReason.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 complicação para facilitar o toque em pequenas complicações.

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étodo WatchFaceService.getComplicationSlotInflationFactory para manter a consistência com o createComplicationSlotsManager (I2ddd2).
  • UserStyleFlavors se tornaram um recurso não experimental (I69cdc).
  • Removemos o ValueType experimental do RangedValueComplicationData e lançamos o DiscreteRangedValueComplicationData experimental, que é parecido com o RangedValueComplicationData, exceto pelo intervalo de números inteiros e pelo valor. Também lançamos o GoalProgressComplicationData experimental, que é semelhante ao RangedValueComplicationData, mas serve para avançar para uma meta em que o mínimo é implicitamente zero e o valor pode ser maior que targetValue. Para todas as variantes RangedValue, é necessário especificar pelo menos uma monochromeImage, um texto ou um título (I9590c).
  • Removemos boundsWithMargins do ComplicationSlotState 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 por RangedValueComplicationData e GoalProgressComplicationData 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 para valueType, um inteiro com um ValueType 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 ao RangedValueComplicationData. Normalmente, as complicações seriam renderizadas em cores de acordo com o mostrador do relógio, mas, às vezes, é melhor posicionar o ComplicationDataSource 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 ao RangedValueComplicationData. 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 em pendingInitialComplications e ignoradas. Isso já foi corrigido. Além disso, esse patch corrige um bug em que ComplicationRenderer 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árias pendingInitialComplications precisam ser mescladas (0d03ba3).

  • Foi corrigido um possível impasse no InteractiveInstanceManager, em que getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance mantinha o bloqueio por mais tempo do que o necessário. Normalmente, esperamos que o engine.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 o WatchFaceService. A adição de uma chamada release() corrige isso. Além disso, StateFlows pode reter WatchFaceService, o que cancela as correções de CoroutineScopes (fd48138).

  • Adição de tempos limite à awaitDeferredWatchFace* e correção de watchfaceOverlayStyle NullPointerException. Em circunstâncias normais, ela não deve atingir o tempo limite, incluindo após novas instalações e cenários DirectBoot em que a carga da CPU estiver alta. Também corrigimos um NPE se getWatchfaceOverlayStyle for chamado depois de close() (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 complicações faz parte da ComplicationData.
  • 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 e ComplicationSlots 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 com BoundingArc de complicação de borda, passando para drawHighlight, embora não seja recomendado para uso no momento.

Mudanças na API

  • Adicionamos uma sobrecarga experimental de drawHighlight que aceita um parâmetro BoundingArc (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ário center_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 de BaseEditorSession.close ser assíncrono é que liberamos o ComplicationDataSourceInfoRetriever 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 ao ComplicationSlot e extraída pelo ComplicationSlotState e WatchFaceMetadataClient (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 e ProtoLayoutComplicationData. 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 manifesto ComplicationDataSource's (I1811c).

Correções de bugs

  • Correção da serialização do tipo TimeLineEntry. Não estávamos serializando o tipo TimeLineEntry, o que significava que as TimeLineEntries 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ó chamava onBackgroundThreadGlContextCreated quando EGL14.eglCreateContext era chamado. Correção de outro bug em que verticalFlip 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) e HeadlessWatchFaceClient.getUserStyleFlavors geram uma RuntimeException não analisada em vez de WatchFaceException (I0718a).
  • WatchFaceMetadataClient.WatchFaceException foi removido da classe para permitir a reutilização (I4e869).

Correções de bugs

  • O WatchFaceMetadataClient não vai falhar mais quando ComplicationSlotBounds 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 inspecionar ComplicationData.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 e Renderer.GlesRenderer foi descontinuado em favor de Renderer.CanvasRenderer2 e Renderer.GlesRenderer2. Eles oferecem suporte para SharedAssets, que são transmitidos aos métodos de renderização. Para a interoperabilidade com Java, apresentamos ListenableCanvasRenderer2 e ListenableGlesRenderer2 (I31ffa).
  • Agora @WatchFaceFlavorsExperimental pode definir variações: lista pré-configurada de mostradores do relógio estilizados (I04dd0).
  • Renderer.sharedAssets agora é um StateFlow e removemos o Renderer.SharedAssetsFactory não usado (I12ac5).
  • UserStyleSchema.userStyleSettings não está mais descontinuado (Iba7e3).
  • Adicionamos HeadlessWatchFaceClient.getUserStyleSchemaDigestHash, que permite que um HeadlessWatchFaceClient evite a sobrecarga relativamente baixa de transferência do esquema na AIDL antes de calcular o hash de resumo (I33597).
  • Adicionamos isUserStyleSchemaStatic ao WatchFaceMetadataClient, que é válido apenas quando é possível confiar que o UserStyleSchema só vai mudar se o APK do mostrador do relógio for atualizado (I45a3f).
  • Adicionamos getDigestHash a UserStyleSchema, que calcula um hash de resumo do esquema. Isso pode ser usado para determinar com eficiência se o UserStyleSchema mudou (I2063d).
  • METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIGURATION_SUPPORTED foi renomeado como METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIG_SUPPORTED (I9ba5d).
  • UserStyleSetting.OnWatchEditorData foi renomeado como UserStyleSetting.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 o NoDataComplication com um marcador de posição ComplicationData opcional e adicionamos ComplicationText.PLACEHOLDER, MonochromaticImage.PLACEHOLDER, SmallImage.PLACEHOLDER e PhotoImage.PLACEHOLDER que só podem ser usados dentro do contexto de um marcador NoDataComplicationData. 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 complicações. 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 com WatchState.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 a PendingIntents, 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, e ComplicationRequest.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 privilegiada com.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 por ListOption. Isso permite que uma hierarquia de estilos seja descrita para uso pelas IUs do editor. A classe UserStyle não muda e ainda é uma propriedade Map<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 para CanvasRenderer, 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 de GlesRenderer.setEglConfig e GlesRenderer.setEglDisplay foi descontinuado. Nunca houve a intenção de que eles fossem configuráveis, já que isso causaria um comportamento indefinido (I0d9e7).
  • Adicionamos setNameResourceId e setScreenReaderNameResourceId, que são recursos de string de referência, a ComplicationSlot.Builder e getters correspondentes em androidx.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 e getComplicationSlotMetadataMap agora geram a WatchFaceException em vez da RemoteException (I86f11).
  • onSynchronousComplicationRequest e as funções relacionadas na ComplicationDataSourceService foram renomeadas como onImmediateComplicationRequest 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 novamente RemoteExceptions 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 e ComplicationSlots podem ser definidas em XML. Isso simplifica a construção do mostrador do relógio. Além disso, as consultas da interface WatchFaceMetadataClient são mais rápidas, porque ela não precisa ser vinculada ao serviço para receber os metadados. A WatchFaceMetadataClient e a ListenableWatchFaceMetadataClient 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 via WatchState.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, o ComplicationData é 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 valor true, 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 o ComplicationData atualizado com uma tapAction o mais rápido possível.

  • Alguns elementos ComplicationData não podem ser armazenados em cache por muito tempo. Para isso, adicionamos uma ComplicationDataTimeline de recurso mais geral. Ela pode ser usada para fornecer uma sequência de elementos ComplicationData 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. O ComplicationRequestListener foi ampliado com um novo método onComplicationDataTimeline, que pode ser usado para retornar esses dados.

  • A DefaultComplicationDataSourcePolicy foi ampliada para que você possa especificar o elemento ComplicationType para as fontes de dados primárias e secundárias.

  • Adicionamos suporte para provedores de complicações síncronas, em que a complicação é 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 para tapActionLostDueToSerialization, 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 a wear-complication-data-source. Ela pode ser usada para fornecer uma sequência de elementos ComplicationData 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. O ComplicationRequestListener foi ampliado com um novo método onComplicationDataTimeline, que pode ser usado para retornar esses dados. Há um novo wrapper SuspendingTimelineComplicationDataSourceService do Kotlin para suspender os serviços de fonte de dados (Idecdc).
  • PendingIntentTapListener e WatchFaceControlClient.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étodo WatchFaceControlClient.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 elementos ComplicationData têm uma propriedade isCached, e é recomendado que as complicações em cache sejam renderizadas de forma diferente, porque a tapAction não pode ser armazenada em cache e terá um valor null em uma complicação 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 chamando WatchFaceControlClient.createHeadlessWatchFaceClient (I1ff98).
  • A DefaultComplicationDataSourcePolicy foi ampliada com a capacidade de definir os ComplicationTypes padrão para os provedores primário e secundário, assim como para o provedor do sistema substituto. O uso de ComplicationSlot.defaultDataSourceType foi descontinuado (If0ce3).
  • ComplicationSlot.configExtras agora é mutável e pode ser atualizado antes de chamar EditorSession.openComplicationDataSourceChooser() (I6f852).
  • A WatchFace.setComplicationDeniedDialogIntent e a setComplicationRationaleDialogIntent 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 e ComplicationSlots podem ser definidas em XML. Isso simplifica a construção do mostrador do relógio e deixa as consultas à interface WatchFaceMetadataClient 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 ao getPendingIntentForTouchEvent (I0b917).
  • A WatchFaceMetadataClient e a ListenableWatchFaceMetadataClient 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 complicações síncronas, em que a complicação é 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 a onSynchronousComplicationRequest. Dependendo da natureza da fonte de dados, também pode ser necessário substituir as funções onStartSynchronousComplicationRequests e onStopInteractiveComplicationRequests 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 projeto wear:watchface:watchface-complications. Ou seja, não é possível incluir essa biblioteca nem qualquer versão Alfa anterior de wear: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 como addOnWatchFaceReadyListener, e removeWatchFaceReadyListener foi renomeado como removeOnWatchFaceReadyListener (I48fea).
  • getComplicationsPreviewData e getComplicationsDataSourceInfo da EditorSession não são mais funções de suspensão, mas sim propriedades StateFlow<> com um valor inicialmente nulo. Em ListenableEditorSession, getListenableComplicationPreviewData e getListenableComplicationsProviderInfo foram removidas em favor dos novos objetos StateFlow<> da classe base. Se você precisar detectar mudanças no código Java, use androidx.lifecycle.FlowLiveDataConversions.asLiveData para converter em LiveData<> (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 bibliotecas androidx.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).