Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Mostrador do relógio Wear

Guia do usuário  Exemplo de código (link em inglês)
Crie aplicativos para smartwatches Wear OS by Google.
Atualização mais recente Versão estável Candidata a lançamento Versão Beta Versão Alfa
10 de agosto de 2022 1.1.1 - - 1.2.0-alpha01

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 no arquivo build.gradle para seu app ou módulo:

Groovy

dependencies {
    // Use to implement wear watchfaces
    implementation "androidx.wear.watchface:watchface:1.2.0-alpha03"

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.2.0-alpha03"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.2.0-alpha03"

    // Use to implement a watchface style and complication editor
    implementation "androidx.wear.watchface:watchface-editor:1.2.0-alpha03"

    // 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.0-alpha03"
}

Kotlin

dependencies {
    // Use to implement wear watchfaces
    implementation("androidx.wear.watchface:watchface:1.2.0-alpha03")

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.2.0-alpha03"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.2.0-alpha03"

    // Use to implement a watchface style and complication editor
    implementation("androidx.wear.watchface:watchface-editor:1.2.0-alpha03")

    // 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.0-alpha03"
}

Para ver 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.2

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, não há suporte do CanvasComplicationDrawable para renderizador.
  • 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 ajustadas de forma suave ou se é necessário renderizar etapas sólidas de cor do mesmo tamanho (I9f5bf).
  • O RangedValueComplicationData.drawSegmented mudou para valueType, que é 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. Porém, às vezes o ComplicationDataSource é o melhor colocado para definir as cores, por exemplo, quando elas têm um significado semântico específico, como vermelho e azul para temperatura (I5153a).
  • Adicionamos uma dica experimental drawSegmented ao RangedValueComplicationData. Isso é uma indicação para os renderizadores desenharem o indicador de valor intervalado com segmentos, em 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 de 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 da tela do relógio é assíncrona. Se uma complicação for recebida antes que a tela esteja pronta, ela 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 da tela 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).

  • Correção de 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 na tela do relógio e em editores complementares.
  • Há suporte para a ativação de várias instâncias de uma tela 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.
  • Ao editar duas instâncias da tela do relógio que foram carregadas, agora é possível que elas compartilhem recursos, economizando memória.
  • Ao escolher uma complicação no editor da tela 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 serem entregues à tela do relógio e que 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 telas do relógio.

Outras mudanças:

  • Agora, as classes UserStyleSchema e ComplicationSlots podem ser definidas em XML. Isso simplifica a construção da tela do relógio e permite consultas de metadados mais rápidas pelo sistema.
  • As telas 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

androidx.wear.watchface:watchface-*:1.1.0-rc01 é lançado. A versão 1.1.0-rc01 contém estas confirmações.

Novos recursos

  • Ajustamos a usabilidade na tela do relógio para melhorar a compatibilidade do XML e facilitar a especificação de ComplicationSlotBounds e a compatibilidade com referências. Continuamos o experimento com BoundingArc de complicação de borda, passando para drawHighlight, embora não seja recomendado uso no momento.

Mudanças na API

  • Adicionamos uma sobrecarga experimental de drawHighlight que aceita um parâmetro BoundingArc (I705f8).
  • O XML da tela 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

  • Correção de runBlockingWithTracing que estava executando tarefas no contexto errado (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 era inofensivo, 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 preste atenção a estas descrições.

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).
  • Correção de 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).
  • Correção de 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 havia uma falha visual na captura de tela causada pelo verticalFlip (c674ad2).
  • Correção da verificação de versão do XML WatchFaceService. Ela estava carregando no pacote errado (dfa06f3).
  • O formato de transmissão do marcador de posição agora usa um pacote interno. Não queremos que os marcadores dividam os mostradores de relógio existentes que podem usar o a.s.w.c.ComplicationData interno oculto. Antes, o formato de transmissã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 desmarcada 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, introduzimos 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 se for 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, se o armazenamento em cache do ComplicationData expirar. 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 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).
  • Introduzimos clearWithBackgroundTintBeforeRenderingHighlightLayer, um novo parâmetro de construtor opcional para CanvasRenderer, sendo que "falso" é o padrão. Se definido como verdadeiro, a tela será apagada com a cor do plano de fundo (Ie01e5).
  • Adição da chave de metadados androidx.watchface.complications.datasource.DEFAULT_CONFIGURATION_SUPPORTED, que permite que as fontes de dados de complicação indiquem que é possível fornecer um valor padrão sem nenhuma configuração (Icc0d4).
  • É comum ao editar o mostrador do relógio que haja uma instância interativa e headless. Para ajudar a economizar memória, introduzimos 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 agora é possível ampliar essa classe para Java (Iac6d0).
  • Corrige o bug com a tapAction de PhotoImageComplicationData não sendo corretamente processada (I1cc30).

Versão 1.1.0-alpha02

12 de janeiro de 2022

androidx.wear.watchface:watchface-*:1.1.0-alpha02 é lançado. 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. Isso pode ser usado para fornecer uma sequência de elementos ComplicationData com limite de tempo para serem entregues ao mostrador do relógio e que 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 foi mudada para tapActionLostDueToSerialization, que é mais útil ao determinar se o slot de complicação será renderizado de maneira diferente para sinalizar que não pode ser tocado (I6de2f).
  • A ComplicationDataTimeline foi adicionada a wear-complication-data-source. Isso pode ser usado para fornecer uma sequência de elementos ComplicationData com limite de tempo para serem entregues ao mostrador do relógio e que 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 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 o provedor 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 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).
  • Adição de InteractiveWatchFaceClient.supportsPendingIntentForTouchEvent 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 podem 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).
  • Adição de 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 com a tapAction de PhotoImageComplicationData não sendo corretamente processada (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.

  • O estilo do 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 um editor de mostrador do relógio usando o androidx.wear.watchface.editor. Além disso, o mostrador do relógio pode ser editado no aplicativo Companion do sistema sem que você precise escrever 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).
  • Correção de 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.1.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 ou existe o risco de atrasar a inicialização da linha de execução da IU (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 esta biblioteca nem qualquer versão Alfa anterior de wear:watchface:watchface-complications-data, já que isso resultará 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 para 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).