Wear Watchface

Crie aplicativos para smartwatches Wear OS by Google.
Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
12 de janeiro de 2022 1.0.0 - - 1.1.0-alpha02

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.1.0-alpha01"

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

    // Use to implement a watchface style and complication editor
    implementation "androidx.wear.watchface:watchface-editor:1.1.0-alpha01"
}

Kotlin

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

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

    // Use to implement a watchface style and complication editor
    implementation("androidx.wear.watchface:watchface-editor:1.1.0-alpha01")
}

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.1

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.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).