WindowManager

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 Candidata a lançamento Versão Beta Versão Alfa
22 de fevereiro de 2023 1.0.0 - - 1.1.0-alpha06

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"

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

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

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

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

Kotlin

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

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

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

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

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

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-alpha06

22 de fevereiro de 2023

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

Novos recursos

  • Exposição da versão experimental para acessar WindowLayoutInfo de um contexto de interface.

Mudanças na API

  • Adição de splitSupportStatus para indicar se a incorporação de atividades está disponível (I10024).
  • A API WindowLayoutInfo de contexto de interface agora é experimental (I58ee0).
  • Apresenta WindowAreaController e APIs para permitir que o modo RearDisplay mova a janela atual para a tela alinhada à câmera traseira (Iffcbf).
  • Atualização da cor padrão do plano de fundo (I1ac1b).
  • Adição dos parâmetros SplitAttributes (I18bdd).
  • Adição de APIs para SplitRule, SplitAttributes, SplitAttributesCalculator (I92d23).
  • Melhoria das APIs relacionadas a maxAspectRatio:
    1. Substituição de alwaysAllow() e alwaysDisallow() por ALWAYS_ALLOW e ALWAYS_DISALLOW.
    2. Atualização da documentação da API de @see com documentação independente (I3057b).
  • Os seguintes construtores são removidos das APIs públicas porque não podem ser chamados pelos apps.
    • Construtor SplitInfo
    • Construtor ActivityStack (Ide534)
  • A SplitRule agora usa maxAspectRatioInPortrait/Landscape. Ela só permite atividades divididas quando a proporção dos limites pai é menor ou igual ao maxAspectRatio solicitado (Ia5990).
  • Mudança de RuleController#parseRules para estáticas (I785df).
  • Melhoria nas APIs com o ActivityEmbedding
    1. Alinhe a nomenclatura da API: use adicionar/remover para várias instâncias:
    2. Mudança de registerRule para addRule.
    3. Mudança de unregisterRule para removeRule.
    4. Substituição de getSplitRules por getRules, já que ActivityRule não é uma regra de divisão.
    5. Adição de RuleController#setRules para definir várias regras.
    6. Extração de APIs relacionadas a regras de SplitController para o RuleController Singleton. São elas:
    7. addRule
    8. removeRule
    9. getRules
    10. setRules
    11. clearRules
    12. parseRules
    13. Extração de #isActivityEmbedded de SplitController para o ActivityEmbeddingController Singleton. São elas:
    14. isActivityEmbedded
    15. A SplitController#initialize foi removida. Para definir regras com base no arquivo XML, use RuleController#parseRules e #setRules. Antes dessa mudança: SplitController.initialize(context, R.xml.static_rules) Depois dessa mudança: val ruleController = RuleController.getInstance(context) val rules = ruleController.parseRules(R.xml.static_rules) ruleController.setRules(rules)
    16. Não distinguimos mais regras estáticas de regras de ambiente de execução. Sendo assim, chamar #clearRules faz com que todas as regras sejam apagadas, não importa se elas são registradas com definições de regras XML estáticas ou no momento da execução. Para manter o comportamento legado de SplitController#clearRegisteredRules, chame RuleController#parseRules com o ID de recursos XML e chame RuleController#setRules para definir as regras de novo. Antes dessa mudança: SplitController.getInstance(context).clearRegisteredRules() Depois dessa mudança: val ruleController = RuleController.getInstance(context) val rules = ruleController.parseRules(R.xml.static_rules) ruleController.setRules(rules) (Ib3967).
  • Melhorias nas APIs SplitRule:
    1. Uso de dimensões mínimas no DP, em vez de pixels, para SplitRule.
    2. Refatoração para que o builder SplitRule use as dimensões mínimas como opcionais (I95f17).
  • Transmissão de um contexto para inicializar o SplitController (I42549).
  • SplitRule#layoutDir foi renomeado como #layoutDirection, e SplitRule Builder#setLayoutDir foi renomeado como Builder#setLayoutDirection (I3f6d1).

Versão 1.1.0-alpha04

9 de novembro de 2022

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

Novos recursos

  • Um método foi exposto para determinar se uma ActivityStack está vazia para ActivityEmbedding.
  • As tags experimentais da API foram removidas das APIs ActivityEmbedding.
  • O construtor ActivityRule foi ocultado, já que o Builder é a maneira mais recomendada de construir.
  • Um método experimental foi adicionado para receber WindowInsets nas WindowMetrics.
  • O SplitPlaceholderFinishBehavior foi atualizado para evitar a finalização do marcador. A conclusão do marcador causava um comportamento confuso.

Mudanças na API

  • O valor isEmpty foi tornado público para substituir o isEmpty divertido.
  • As atividades do parâmetro ActivityStack foram renomeadas como activitiesInProcess (Ia5055).
  • ActivityFilter#matchesClassName e ActivityFilter#matchesClassNameOrWildCard foram removidos por serem confusos.
  • O ActivityFilter#componentName abd ActivityFilter#intentAction foi adicionado para permitir que o autor da chamada diferencie filtros diferentes (I41f22).
  • As APIs @Deprecated foram removidas da API experimental (I216b3).
  • O @ExperimentalWindowApi foi removido das APIs Activity Embedding (I69ebe).
  • O construtor de ActivityRule foi ocultado. Use o Builder (If4eb6).
  • APIs foram adicionadas para verificar se uma atividade faz parte do ActivityFilter (Ia43cf).
  • Os arquivos de API foram atualizados para refletir as mudanças nas classes WindowMetrics e WindowMetricsCalculatorCompat (I667fe).
  • O Javadoc e o nome da classe da propriedade ActivityEmbedding foram atualizados (Ia1386).
  • Nomes de tags da propriedade ActivityEmbedding foram adicionados para serem usados em AndroidManifest.xml (Id1ad4).
  • As novas APIs SplitPlaceholderFinishBehavior e SplitPlaceholderRule.finishPrimaryWithPlaceholder foram adicionadas para substituir SplitPlaceholderRule.finishPrimaryWithSecondary, que define quando as atividades de marcador de posição são concluídas e como as atividades associadas na incorporação precisam se comportar (I64647).

Correções de bugs

  • Apresenta WindowAreaController e APIs para permitir que o modo RearDisplay mova a janela atual para a tela alinhada à câmera traseira (I388ab).

Versão 1.1.0-alpha03

27 de julho de 2022

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

Novos recursos

  • Atualização dos valores padrão para as regras de incorporação.

Mudanças na API

  • Atualização dos valores padrão para as propriedades da regra de incorporação (Ic4d35).

Versão 1.1.0-alpha02

11 de maio de 2022

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

Novos recursos

  • Lançamento das bibliotecas de adaptadores para oferecer suporte a Java e RxJava.

Versão 1.1.0-alpha01

11 de maio de 2022

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

Novos recursos

  • Lançamento de adaptadores para oferecer suporte a Java e RxJava.

Versão 1.1.0-alpha01

20 de abril de 2022

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

Novos recursos

  • Um bug em que o app em segundo plano parava de emitir recursos de dobra foi corrigido.
  • Expansão da API ActivityEmbedding experimental.

Mudanças na API

  • Uma API pública para verificar se uma atividade está sendo incorporada (I39eb7).

Correções de bugs

  • APIs que personalizam o comportamento de conclusão para contêineres em divisões de atividade foram adicionadas (I1a1e4).
  • Uma nova opção de configuração para regras de divisões de atividade foi adicionada (Iec6af).

Versão 1.0

Versão 1.0.0

26 de janeiro de 2022

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

Principais recursos da versão 1.0.0

  • Suporte a smartphones dobráveis com WindowInfoTracker e FoldingFeature. WindowMetricsCalculator para ajudar a calcular as WindowMetrics atuais.

Versão 1.0.0-rc01

15 de dezembro de 2021

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

Novos recursos

  • Foi adicionado suporte a smartphones dobráveis usando a interface WindowInfoTracker.
  • Adição de métodos para calcular as WindowMetrics atuais e máximas.
  • Adição de suporte para APIs de teste.

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.
  • Uma 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).
  • O 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

  • A API currentWindowMetrics foi removida 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 e exibir atividades lado a lado na janela de tarefas mãe (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. De agora em diante, ela vai usar corrotinas e suspender funções para expor dados assíncronos.
  • O WindowInfoRepo foi adicionado como o principal ponto de interação para acessar as WindowMetrics e o fluxo das WindowLayoutInfo.
  • Novo artefato window-java foi adicionado 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, já que ele não oferece suporte a 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 de registro descontinuados 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.
  • Foi corrigido um bug em que o estado não era atualizado corretamente quando o estado da articulação mudava enquanto o app era colocado em segundo plano. Agora o estado será consistente.
  • Nossos arquivos Proguard foram atualizados para ignorar avisos de dependências do ambiente de execução.

Correções de bugs

  • Um valor vazio vai ser emitido quando a biblioteca do OEM estiver 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

  • Um valor vazio vai ser emitido 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

  • Um valor vazio vai ser emitido quando a biblioteca do OEM estiver 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

  • Descontinuamos 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 descontinuaçã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 apresentado 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. Fizemos backport da API nesta versão para que os desenvolvedores possam aproveitar o WindowMetrics e continuar oferecendo suporte a versões anteriores do Android. O WindowMetrics pode ser conseguido pelas APIs WindowManager#getCurrentWindowMetrics() e WindowManager#getMaximedWindowMetrics().

Mudanças na API

  • O uso das APIs que serão removidas na próxima versão Alfa foi descontinuado (Ib7cc4).
  • Atualiza 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 estas confirmações. Essa é a primeira versão da biblioteca do Window Manager.

Novos recursos

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