WindowManager

  Exemplo de código (em inglês)  Codelab
A biblioteca WindowManager do Jetpack permite que os desenvolvedores de aplicativos ofereçam suporte aos novos formatos de dispositivo e a ambientes de várias janelas. A biblioteca oferece uma superfície de API comum para as versões 14 e mais recentes da API. A versão inicial é direcionada para dispositivos dobráveis, mas as versões futuras serão oferecidas para mais tipos de exibição e recursos de janela.
Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
17 de novembro de 2021 - - 1.0.0-beta04 -

Declarar dependências

Para acrescentar uma dependência na WindowManager, é necessário adicionar o repositório Maven do Google ao projeto. Consulte o 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 {
    implementation "androidx.window:window:1.0.0-beta04"

    // For Java-friendly APIs to register and unregister callbacks
    implementation "androidx.window:window-java:1.0.0-beta04"

    // For RxJava2 integration
    implementation "androidx.window:window-rxjava2:1.0.0-beta04"

    // For RxJava3 integration
    implementation "androidx.window:window-rxjava3:1.0.0-beta04"

    // For testing
    implementation "androidx.window:window-testing:1.0.0-beta04"
}

Kotlin

dependencies {
    implementation("androidx.window:window:1.0.0-beta04")

    // For Java-friendly APIs to register and unregister callbacks
    implementation("androidx.window:window-java:1.0.0-beta04")

    // For RxJava2 integration
    implementation("androidx.window:window-rxjava2:1.0.0-beta04")

    // For RxJava3 integration
    implementation("androidx.window:window-rxjava3:1.0.0-beta04")

    // For testing
    implementation("androidx.window:window-testing:1.0.0-beta04")
}

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 existente clicando no botão de estrela.

Criar novo problema

Consulte a documentação do Issue Tracker para saber mais.

Versão 1.0

Versão 1.0.0-beta04

17 de novembro de 2021

androidx.window:window-*:1.0.0-beta04 é lançado. A versão 1.0.0-beta04 contém estas confirmações.

Novos recursos

  • Renomeação de WindowInfoRepository para WindowInfoTracker.
  • A atividade passou a ser uma dependência de método explícita para WindowInfoTracker.
  • Um TestRule simples foi adicionado a WindowMetricsCalculator para dar suporte a desenvolvedores que usam o Robolectric.

Mudanças na API

  • Foram extraídas extensões (I25a5f).
  • isEmpty foi adicionado ao ActivityStack (I5a4e6)
  • Renomeação de WindowInfoRepository para WindowInfoTracker.
    • As dependências de java/rxjava/testing foram atualizadas para corresponder a essa mudança (I0da63).
  • Uma regra de teste foi adicionada a uma WindowMetricsCalculator simples (Ibacdb).

Versão 1.0.0-beta03

27 de outubro de 2021

Lançamento de androidx.window:window-*:1.0.0-beta03. A versão 1.0.0-beta03 contém estas confirmações.

Novos recursos

  • APIs experimentais de incorporação de atividade foram adicionadas. Essa versão inicial do layout permite que duas atividades sejam exibidas lado a lado.

Mudanças na API

  • Remoção da API currentWindowMetrics, porque não é possível fornecê-la com precisão. Use WindowMetricsCalculator (Icda5f).
  • Atualização da API de extensões (Ica92b).
  • Uma interface foi adicionada a um novo recurso que possibilita incorporar atividades e exibi-las lado a lado na janela de tarefas pai (I5711d).
  • Os construtores de WindowMetrics e WindowLayoutInfo foram ocultados. Em vez disso, use as APIs de teste (I5a1b5).
  • Foi adicionada uma API para criar objetos WindowLayoutInfo falsos (I4a2fd).

Correções de bugs

Versão 1.0.0-beta02

1.º de setembro de 2021

Lançamento de androidx.window:window-*:1.0.0-beta02. A versão 1.0.0-beta02 contém estas confirmações.

Novos recursos

  • Adição de uma anotação experimental para APIs experimentais (I9f1b6).
  • Adição de um método de teste para criar uma FoldingFeature de teste que aceite um retângulo. Isso facilitará o teste ao usar o Robolectric em vez de uma atividade real (Id1cca).

Versão 1.0.0-beta01

18 de agosto de 2021

Lançamento de androidx.window:window-*:1.0.0-beta01. A versão 1.0.0-beta01 contém estas confirmações.

Novos recursos

  • As constantes antigas foram removidas e FoldingFeature passou a ser uma interface.

Mudanças na API

  • As constantes antigas foram removidas e FoldFeature passou a ser uma interface (I9a2d5).

Correções de bugs

  • As bibliotecas que dependem da Test Core foram atualizadas para a versão 1.4.0 e agora funcionarão com a versão S da Plataforma Android (I88b72, b/189353863).

Versão 1.0.0-alpha10

4 de agosto de 2021

Lançamento de androidx.window:window-*:1.0.0-alpha10. A versão 1.0.0-alpha10 contém estas confirmações.

Novos recursos

  • A WindowInfoRepo foi renomeada como WindowInfoRepository, e os arquivos e classes correspondentes foram ajustados.
  • As métricas de janela atuais foram convertidas em um fluxo na WindowInfoRepository porque o valor delas pode mudar ao longo do tempo.
  • O WindowInfoRepoJavaAdapter foi renomeado como WindowInfoRepoCallbackAdapter.
  • Adição de um método auxiliar para criar objetos de teste de FoldingFeature
  • Os pacotes foram atualizados para agrupar classes com base no recurso ao qual elas oferecem suporte.

Mudanças na API

  • O elemento ActivityExt foi renomeado como ActivityExtensions. O Repo foi renomeado como Repository (I61a16).
  • Os pacotes das classes foram atualizados (I23ae2).
  • A classe WindowMetrics foi removida da WindowInfoRepo (I24663).
  • A WindowManager foi removida. Use a WindowInfoRepo
    • WindowBackend agora é de uso interno (I06d9a).
  • As métricas de janela foram convertidas em um fluxo.
    • O adaptador Java foi renomeado como WindowInfoRepoCallbackAdapter.
    • O callbackFlow foi removido para que APIs experimentais não sejam mais usadas (Ia4d15).
  • Adição de um método auxiliar para criar recursos de exibição de teste.
    • O occlusionMode se tornou occlusionType (If4cff).

Correções de bugs

  • O erro do ProGuard em que a biblioteca principal estava sendo removida foi corrigido.
  • O erro em que objetos WindowLayoutInfo não eram entregues a outros assinantes foi corrigido.
  • Um erro em que as mudanças de configuração não acionavam atualizações de recursos dobráveis foi corrigido.

Versão 1.0.0-alpha09

30 de junho de 2021

Lançamento de androidx.window:window-*:1.0.0-alpha09. A versão 1.0.0-alpha09 contém estas confirmações.

Novos recursos

  • Mudança de constantes inteiras para enumerações ilimitadas.
  • Adicionado utilitário de teste para criar recursos testes de dobráveis.

Mudanças na API

  • Adição de um método auxiliar para criar recursos de exibição de teste. (I3cf54).
    • Mudança de occlusionMode para occlusionType.

Correções de bugs

  • Emitido valor inicial ao adicionar vários consumidores dos streams de dados.

Versão 1.0.0-alpha08

16 de junho de 2021

Lançamento de androidx.window:window-*:1.0.0-alpha08. A versão 1.0.0-alpha08 contém estas confirmações.

Novos recursos

  • Lançamento de um artefato para facilitar o teste com o WindowInfoRepository. Use o WindowInfoRepository para receber informações sobre os DisplayFeatures e as WindowMetrics (I57f66, Ida620).

Versão 1.0.0-alpha07

2 de junho de 2021

Lançamento de androidx.window:window-*:1.0.0-alpha07. A versão 1.0.0-alpha07 contém estas confirmações.

Novos recursos

  • Migração da biblioteca principal de janelas para o Kotlin. Ela usará corrotinas e suspenderá funções para expor dados assíncronos daqui em diante.
  • O WindowInfoRepo foi adicionado como o principal ponto de interação para acessar as WindowMetrics e o fluxo das WindowLayoutInfo.
  • Novo artefato window-java para expor APIs compatíveis com Java para registrar e cancelar o registro de callbacks.
  • Novos artefatos window-rxjava2 e window-rxjava3 para expor APIs adaptadas do RxJava.

Mudanças na API

  • Adição da WindowServices para fornecer dependências de modo uniforme.
    • Adição de API baseada em corrotina para consumir informações de layout da janela (Iab70f).
  • Migração da biblioteca principal de gerenciador de janelas para o Kotlin (Icca34).

Correções de bugs

  • Adição de uma nova classe de dados para representar limites de recursos (I6dcd1).

Versão 1.0.0-alpha06

5 de maio de 2021

Lançamento de androidx.window:window:1.0.0-alpha06. A versão 1.0.0-alpha06 contém estas confirmações.

Novos recursos

  • Iniciamos a migração para o Kotlin e terminaremos na próxima versão.
  • DeviceState foi removido da API pública. Use FoldingFeature.
  • Removemos STATE_FLIPPED dos estados de FoldingFeature, porque ele não é compatível com nenhum caso de uso no momento.
  • Também removemos outras APIs suspensas.

Mudanças na API

  • O Kotlin foi adicionado como uma dependência.
    • A biblioteca principal foi migrada para Kotlin (Idd995).
  • O builder DisplayFeature foi removido (I61fa4).
  • O DeviceState foi removido da API pública. Use FoldingFeature (Id6079).
  • O callback de estado do dispositivo foi removido das extensões (I5ea83).
  • STATE_FLIPPED foi removido de FoldingFeature (I9c4e1).
  • Os métodos suspensos de registro foram removidos (Ib381b).

Versão 1.0.0-alpha05

24 de março de 2021

Lançamento de androidx.window:window:1.0.0-alpha05. A versão 1.0.0-alpha05 contém estas confirmações.

Novos recursos

Adicionamos métodos de conveniência ao FoldingFeature para que os apps possam saber se o recurso está separando ou obscurecendo e determinar a orientação da articulação. Também escondemos o tipo de articulação.

Estamos removendo os métodos de leitura síncronos do WindowManager. Os métodos de leitura síncrona são propensos a erros, já que há uma disputa implícita. Registre listeners e callbacks para receber atualizações no WindowLayoutInfo.

Mudanças na API

  • Métodos de conveniência foram adicionados para trabalhar com o FoldingFeatures (Ie733f).
  • Métodos de leitura síncrona do WindowManager foram removidos (I96fd4).

Versão 1.0.0-alpha04

10 de Março de 2021

Lançamento de androidx.window:window:1.0.0-alpha04. A versão 1.0.0-alpha04 contém estas confirmações.

Novos recursos

  • Correção de um bug em que nenhum WindowLayoutInfo é emitido se não há uma implementação de OEM. Agora, emitimos um WIndowLayoutInfo vazio.
  • Correção de um bug em que o estado não era atualizado corretamente se o estado da dobradiça mudasse enquanto o app era colocado em segundo plano. Agora o estado será consistente.
  • Atualize nossos arquivos Proguard para ignorar avisos de dependências de tempo de execução.

Correções de bugs

  • Emissão de um valor vazio quando a biblioteca do OEM está ausente (Ide935).

Versão 1.0.0-alpha03

18 de fevereiro de 2021

Lançamento de androidx.window:window:1.0.0-alpha03. A versão 1.0.0-alpha03 contém estas confirmações.

Novos recursos

  • Emissão de um valor vazio para WindowLayoutInfo quando a implementação do OEM estiver vazia. Isso facilitará o uso da biblioteca em mais dispositivos. Como as APIs são assíncronas, ainda é recomendável que os apps gravem um código de defesa e emitam um valor padrão após um tempo limite. Não há garantias de implementações do OEM, e o valor inicial pode apresentar atraso.

Correções de bugs

  • Emissão de um valor vazio quando a biblioteca do OEM está ausente (Ide935).

Versão 1.0.0-alpha02

27 de janeiro de 2021

Lançamento de androidx.window:window:1.0.0-alpha02. A versão 1.0.0-alpha02 contém estas confirmações.

Novos recursos

  • Nós suspendemos algumas APIs para ajudar a simplificar o uso delas e reduzir erros. Alguns exemplos relevantes são a remoção das operações de leitura síncronas do WindowManager e a suspensão do uso do DeviceState. As operações de leitura síncronas podem levar a disputas e apresentar uma IU incorreta.

  • Convertemos o DisplayFeature em uma interface que outros recursos implementarão daqui em diante. Nosso primeiro recurso é o FoldingFeature, que agora é a representação de uma dobra de tela ou articulação. Ele também contém o estado da articulação que substitui o DeviceState.

  • O WindowMetrics foi introduzido no Android 11 para oferecer aos desenvolvedores uma forma simples de consultar métricas sobre uma janela, como a posição e o tamanho na tela e os encartes do sistema. Retiramos a API nessa versão para que os desenvolvedores possam aproveitar o WindowMetrics e continuar oferecendo compatibilidade com versões anteriores do Android. O WindowMetrics pode ser adquirido pelas APIs WindowManager#getCurrentWindowMetrics() e WindowManager#getMaximedWindowMetrics().

Mudanças na API

  • Suspensão do uso das APIs que serão removidas na próxima versão Alfa (Ib7cc4).
  • Atualização da ExtensionInterface para aceitar referências explícitas de atividade (I07ded).
  • Introdução da API WindowMetrics (I3ccee).
  • Remoção dos métodos de leitura síncronos do WindowManager (I69983).
  • Proteção do pacote ExtensionWindowBackend (Ied208).

Correções de bugs

  • Atualização das APIs ExtensionInterface para aceitar contextos visuais (I8e827).

Contribuição externa

  • Mescla de DeviceState e WindowLayoutInfo para facilitar o acesso aos dados (Id34f4).

Versão 1.0.0-alpha01

27 de fevereiro de 2020

Lançamento de androidx.window:window:1.0.0-alpha01 e androidx.window:window-extensions:1.0.0-alpha01. A versão 1.0.0-alpha01 contém essas confirmações (link em inglês). Essa é a primeira versão da biblioteca do Window Manager.

Novos recursos

  • DisplayFeature: essa nova API identifica interrupções nas superfícies contínuas de telas planas, como articulações ou dobras
  • DeviceState: essa nova API informa a posição atual do smartphone a partir de uma lista de posições definidas (por exemplo, CLOSED, OPENED, HALF_OPENED etc.)