Coleção
Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
30 de outubro de 2024 | 1.4.5 | - | - | 1.5.0-alpha05 |
Declarar dependências
Para adicionar uma dependência a Collection, é preciso adicionar o repositório Maven do Google ao 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 { def collection_version = "1.4.3" implementation "androidx.collection:collection:$collection_version" }
Kotlin
dependencies { val collection_version = "1.4.3" implementation("androidx.collection:collection:$collection_version") }
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.
Consulte a documentação do Issue Tracker para saber mais.
Versão 1.5
Versão 1.5.0-alpha05
30 de outubro de 2024
Lançamento de androidx.collection:collection-*:1.5.0-alpha05
. A versão 1.5.0-alpha05 contém estas confirmações.
Versão 1.5.0-alpha04
16 de outubro de 2024
Lançamento de androidx.collection:collection-*:1.5.0-alpha04
. A versão 1.5.0-alpha04 contém estas confirmações.
Versão 1.5.0-alpha03
2 de outubro de 2024
Lançamento de androidx.collection:collection-*:1.5.0-alpha03
. A versão 1.5.0-alpha03 contém estas confirmações.
Mudanças na API
- Atualização da versão do Kotlin para a 1.9 (I1a14c).
Contribuição externa
- Encaminhar
contains
paracontainsKey
. Obrigado, Jake Wharton! (I9362b). - Adicione criadores de contêiner para coleções especializadas em escalares. Obrigado, Jake Wharton! (I13179).
Versão 1.5.0-alpha02
18 de setembro de 2024
Lançamento de androidx.collection:collection-*:1.5.0-alpha02
. A versão 1.5.0-alpha02 contém estas confirmações.
Mudanças na API
- Adição de suporte para a plataforma de destino
watchosDeviceArm64
. (I1cc04, b/364652024).
Versão 1.5.0-alpha01
4 de setembro de 2024
Lançamento de androidx.collection:collection-*:1.5.0-alpha01
. A versão 1.5.0-alpha01 contém estas confirmações.
Mudanças na API
OrderedScatterSet
é uma nova coleção ordenada e sem alocação (Ic4178).- O
SieveCache
é um novo substituto livre de alocação paraLruCache
que oferece melhores características de taxa de acerto. (I50a17). - A representação interna de
packedValue
foi exposta paraIntIntPair
eFloatFloatPair
. (Ifeb75, b/331853566). - Adição de acesso à matriz de conteúdo em coleções de listas. (I899d5, b/333903173).
- Adicionamos
DoubleList
, uma estrutura de dados semelhante a uma lista otimizada para valores duplos. (Ia10d1, b/315127635).
Correções de bugs
- A biblioteca de coleções está sendo migrada para Kotlin 1.9 (I0782f).
- Otimize muitas das coleções para que sejam mais eficientes. (Ic0566).
Versão 1.4
Versão 1.4.5
30 de outubro de 2024
Lançamento de androidx.collection:collection-*:1.4.5
. A versão 1.4.5 contém estas confirmações.
Versão 1.4.4
18 de setembro de 2024
Lançamento de androidx.collection:collection-*:1.4.4
. A versão 1.4.4 contém estas confirmações.
Correções de bugs
- Solução alternativa para
ArrayIndexOutOfBounds
ao classificar uma coleção vazia. (I65245).
Versão 1.4.3
7 de agosto de 2024
Lançamento de androidx.collection:collection-*:1.4.3
. A versão 1.4.3 contém estas confirmações.
Correções de bugs
- Correção de uma corrupção que poderia ocorrer em
ScatterMap
,ScatterSet
e nas variantes primitivas. (I38a4a, b/352560465). - Otimizações de desempenho. Mais especificamente:
- Substitua as chamadas para
check()
erequired()
por variantes que não geram exceções inline. Isso reduz o tamanho final do binário e, mais importante, alivia um pouco a pressão do i-cache. - Melhoria em
removeDeletedMarkers()
na família de coleções "dispersão". A nova versão limpa marcadores excluídos 8 marcadores por vez e pula gravações mais caras no processo. (Ic0566).
- Substitua as chamadas para
Versão 1.4.2
24 de julho de 2024
Lançamento de androidx.collection:collection-*:1.4.2
. A versão 1.4.2 contém estas confirmações.
Novos recursos
- Inclui outros destinos do Kotlin Multiplatform:
watchos
,tvos
,linuxArm64
. (b/352543988).
Versão 1.4.1
10 de julho de 2024
Lançamento de androidx.collection:collection-*:1.4.1
. A versão 1.4.1 contém estas confirmações.
Correções de bugs
- Remova as lápides excluídas do mapa/conjunto ao redimensionar. (7a996c5, b/345960092).
Versão 1.4.0
24 de janeiro de 2024
Lançamento de androidx.collection:collection-*:1.4.0
. A versão 1.4.0 contém estas confirmações.
Mudanças importantes desde a versão 1.3.0
Novas coleções de alta eficiência para armazenar primitivos sem boxe foram adicionadas:
MutableScatterMap
eScatterMap
: classes comMutableMap
e API semelhante a um mapaMutableScatterSet
eScatterSet
: classes comMutableSet
e API semelhante a SetMutableObjectList
eObjectList
: classes comMutableList
e API semelhante a uma lista
Por exemplo, um mapa com uma chave de número inteiro e um valor de tipo de referência é um IntObjectMap<T>
. Um mapa com uma chave longa e um valor flutuante é um LongFloatMap
. Não há uma versão com o nome ObjectObjectMap
porque ela é coberta por ScatterMap/MutableScatterMap
.
Versão 1.4.0-rc01
10 de janeiro de 2024
Lançamento de androidx.collection:collection-*:1.4.0-rc01
sem mudanças. A versão 1.4.0-rc01 contém estas confirmações.
Versão 1.4.0-beta02
29 de novembro de 2023
Lançamento de androidx.collection:collection-*:1.4.0-beta02
. A versão 1.4.0-beta02 contém estas confirmações.
Novos recursos
- Melhoria no desempenho de
FloatFloatPair
. (If5537).
Correções de bugs
- O iterador
ScatterMap.asMap()
agora retorna novas instâncias (I28932, b/310365754).
Versão 1.4.0-beta01
15 de novembro de 2023
Lançamento de androidx.collection:collection-*:1.4.0-beta01
. A versão 1.4.0-beta01 contém estas confirmações.
Correções de bugs
- Correção de
ListIterator
que definia valores incorretamente emObjectList
, o que poderia resultar em uma falha devido aIndexOutOfBoundsException
. (I3bd8a, b/307049391).
Versão 1.4.0-alpha02
18 de outubro de 2023
Lançamento de androidx.collection:collection-*:1.4.0-alpha02
. A versão 1.4.0-alpha02 contém estas confirmações.
Mudanças na API
- A sobrecarga
put
foi adicionada e retorna o valor anterior quando ele é substituído em todas as coleções primitivas, comoFloatFloatMap
. - Converta métodos
removeIf
em coleções primitivas, comoMutableFloatFloatMap
, para in-line. Isso garante que a lambda pararemoveIf
não seja alocada.
Versão 1.4.0-alpha01
4 de outubro de 2023
Lançamento de androidx.collection:collection-*:1.4.0-alpha01
. A versão 1.4.0-alpha01 contém estas confirmações.
Novos recursos
Foram adicionadas novas coleções de alta eficiência com baixa sobrecarga de alocação e alto desempenho:
MutableScatterMap
eScatterMap
: classes comMutableMap
e API semelhante a um mapaMutableScatterSet
eScatterSet
: classes comMutableSet
e API semelhante a SetMutableObjectList
eObjectList
: classes comMutableList
e API do tipo lista.
Foram adicionadas novas coleções de alta eficiência para armazenar primitivos sem boxing:
Mutable[Int|Float|Long]List
: classes com API semelhante aMutableList<Int|Float|Long>
. O[Int|Float|Long]List
somente leitura também existe. Por exemplo, números inteiros podem ser mantidos em umaIntList
.Mutable[Int|Float|Long]Set
: classes com API semelhante aMutableSet<Int|Float|Long>
. O[Int|Float|Long]Set
somente leitura também existe. Por exemplo, números inteiros podem ser mantidos em um IntSet.Mutable[Int|Float|Long|Object][Int|Float|Long|Object]Map
: classes com API semelhante aMutable<Int|Float|Long,T, Int|Float|Long|T>
. O[Int|Float|Long|Object][Int|Float|Long|Object]Map
somente leitura também existe. Por exemplo, um mapa com uma chave de número inteiro e um valor de tipo de referência é umIntObjectMap<T>
. Um mapa com uma chave longa e um valor flutuante é umLongFloatMap
. Não há uma versão com o nomeObjectObjectMap
porque ela é coberta porScatterMap/MutableScatterMap
.
Versão 1.3.0
Versão 1.3.0
4 de outubro de 2023
Lançamento de androidx.collection:collection-*:1.3.0
. A versão 1.3.0 contém estas confirmações.
Mudanças importantes desde a versão 1.2.0
- Agora você pode usar coleções em projetos Kotlin Multiplatform. As plataformas que não são Android ainda são experimentais, mas decidimos mesclar as versões para facilitar a experimentação pelos desenvolvedores.
- Toda a origem foi migrada para o Kotlin. Como parte dessa mudança, muitas APIs agora são tipadas corretamente para nulidade, e alguns membros particulares de pacotes se tornaram
internal
. Uma lista de alterações exatas está disponível nas notas de versão secundárias para 1.3.x abaixo. - Com a migração do Kotlin,
collection-ktx
foi mesclada com o artefato de coleção principal. Você pode descartar com segurança todas as dependências decollection:collection-ktx
em favor decollection:collection
, já quecollection-ktx
agora está vazio.
Versão 1.3.0-rc01
6 de setembro de 2023
Lançamento de androidx.collection:collection-*:1.3.0-rc01
sem mudanças. A versão 1.3.0-rc01 contém estas confirmações.
Versão 1.3.0-beta01
9 de agosto de 2023
Lançamento de androidx.collection:collection-*:1.3.0-beta01
. A versão 1.3.0-beta01 contém estas confirmações.
Versão 1.3.0-alpha04
24 de março de 2023
Lançamento de androidx.collection:collection-*:1.3.0-alpha04
.
Correções de bugs
- Removemos as restrições de dependência dos artefatos do Maven para solucionar um problema de build nos destinos nativos do Kotlin (b/274786186, KT-57531).
Versão 1.3.0-alpha03
22 de março de 2023
Lançamento de androidx.collection:collection-*:1.3.0-alpha03
. A versão 1.3.0-alpha03 contém essas confirmações.
Novos recursos
- Agora é possível usar coleções em projetos do KMM. As plataformas que não são Android das coleções ainda são experimentais, mas decidimos mesclar as versões para facilitar a experiência dos desenvolvedores.
Mudanças na API
ArraySet
agora implementaMutableCollections
em vez deAbstractMutableCollection
para permitir uma implementação mais eficiente detoArray
(I1ac32).
Correções de bugs
- O
ArraySet.toArray
agora só está disponível na JVM, porque sempre foi incluído apenas para compatibilidade com o Java. Em geral, os usuários do Kotlin precisam usar os auxiliares.toTypedArray
do stdlib, que oferecem a mesma funcionalidade com segurança de tipo adicional. (I2c59b).
Versão 1.3.0-alpha02
27 de julho de 2022
Lançamento de androidx.collection:collection:1.3.0-alpha02
e androidx.collection:collection-ktx:1.3.0-alpha02
. A versão 1.3.0-alpha02 contém estas confirmações.
Mudanças na API
SparseArrayCompat
agora está disponível para plataformas que não são JVM do artefato comum (Ic9bd0, b/219589118, b/228347315).CircularIntArray
agora está disponível para plataformas que não são JVM do artefato comum (I3d8ef, b/228344943).LongSparseArray
agora está disponível para plataformas que não são JVM do artefato comum (I73149, b/228347315).
Versão 1.3.0-alpha01
29 de junho de 2022
Lançamento de androidx.collection:collection:1.3.0-alpha01
e androidx.collection:collection-ktx:1.3.0-alpha01
. A versão 1.3.0-alpha01 contém estas confirmações.
Novos recursos
collection-ktx
extensões foram migradas para o artefato das coleções principais,androidx.collection:collection
. Essa mudança torna as extensões -ktx pré-existentes acessíveis aos usuários do Kotlin sem exigir a dependência -ktx, mantendo a compatibilidade com os usuários atuais. Manter essas extensões em um artefato -ktx separado não é mais benéfico, já que o artefato principal foi movido para o Kotlin. (I6eef2).
Mudanças na API
ArraySet
agora estendeAbstractMutableCollection
e não implementa mais diretamente a interface de coleção. (If6da0, b/230860589).- Conversão de
ArraySet
em Kotlin. Devido à tipificação mais rigorosa, algumas chamadas do Kotlin podem não ser compiladas. (Id68c1, b/230860589).- As chamadas a seguir têm o tipo de argumento
T
, nãoT?
:ArraySet<T>.contains(null)
ArraySet<T>.add(null)
ArraySet<T>.remove(null)
- As chamadas a seguir têm o tipo de retorno
T?
, nãoT!
:ArraySet<T?>.valueAt(n)
ArraySet<T?>.removeAt(n)
ArraySet<T?>().iterator().next()
- As seguintes chamadas não são mais possíveis no Kotlin:
set.toArray()
: useset.toTypedArray()
set.toArray(array)
: useset.forEachIndexed(array::set)
- As chamadas a seguir têm o tipo de argumento
- Combine o construtor sobrecarregado para
SparseArrayCompat
como um argumento opcional para usuários do Kotlin. (If8407, b/227474719). - A sintaxe do operador para
SparseArrayCompat.get(key, defaultValue).
foi removida. No entanto, a sintaxe do operador para.get(key)
ainda é permitida, mas a plataforma da API deSparseArrayCompat
foi alinhada melhor com as outras classes dessa biblioteca. (I9a38d). - Migração das extensões
LongSparseArray
para o artefato principal, androidx.collection:collection. Essa mudança torna as extensões -ktx pré-existentes acessíveis aos usuários do Kotlin sem exigir a dependência -ktx, mantendo a compatibilidade com os usuários atuais. Manter essas extensões em um artefato -ktx separado não é mais benéfico, já que o artefato principal foi movido para o Kotlin. (I8659a). - Converta
LongSparseArray
em Kotlin. Essa mudança adiciona nulidade explícita aos tipos, que é uma mudança compatível com binários, mas pode causar incompatibilidades de origem. Em particular: *.isEmpty
não está mais acessível como uma propriedade, precisa ser acessado como uma chamada de função no Kotlin:.isEmpty()
(Idfd0f). - Converta
SimpleArrayMap
em Kotlin. Essa mudança introduz algumas mudanças incompatíveis, como resultado da interoperabilidade entre Java e Kotlin e a capacidade de definir corretamente a nulidade de tipos na origem.- As APIs privadas do pacote,
.mSize
,.mArray
,.mHashes
,.indexOf()
,.indexOfNull()
e.indexOfValue()
, foram tornadas privadas. Essa é tecnicamente uma mudança incompatível binária, mas reflete a visibilidade pretendida desses campos e é o mais próximo que podemos alcançar no Kotlin, já que ele não inclui uma maneira de especificar a visibilidade privada do pacote. - A nulidade de alguns tipos agora é definida corretamente. Os métodos afetados
são:
.getOrDefault
,.keyAt
,.valueAt
,.setValueAt
,.put
,.putIfAbsent
,.removeAt
e.replace
. - Para usuários do Kotlin,
.isEmpty()
agora está disponível apenas como uma função, e não pelo acesso a propriedades. (I271b7, b/182813986).
- As APIs privadas do pacote,
Converta
CircularArray
em Kotlin. Mudanças importantes:- Corrige a nulidade dos genéricos para não ser nula, o que antes era impossível de declarar, mas era aplicado em todas as APIs públicas.
- Devido à interoperabilidade do Kotlin com Java, antes era possível acessar
alguns métodos como propriedades ou funções. No entanto, para reduzir
a duplicação e manter a compatibilidade binária, foi necessário
remover esses elementos, o que é uma mudança incompatível com a origem. As chamadas
afetadas são:
.isEmpty
,.getLast()
e.getFirst()
. (Ifffac).
Converta
CircularIntArray
em Kotlin. Devido à interoperabilidade do Kotlin com Java, era possível acessar determinados métodos como propriedades ou funções. No entanto, para reduzir a duplicação e manter a compatibilidade binária, foi necessário removê-los, o que é uma mudança incompatível com a origem. As chamadas afetadas são:.isEmpty
,.getLast()
e.getFirst()
. (Ie36ce).Conversão de
LruCache
para Kotlin (Ia2f19).Converta
SparseArrayCompat
em Kotlin. (If6fe8).Uma pequena mudança de comportamento foi adicionada a
SparseArrayCompat.valueAt()
, que não retorna maisnull
incorretamente para chamadas não inicializadas fora dos limites desize()
, mas dentro da capacidade inicial fornecida.Essa mudança também introduz a nulidade correta para alguns tipos que estavam ausentes anteriormente.
.get(): E?
->.get(): E
.replace(Int, Int?): Int?
->.replace(Int, Int): Int?
.replace(Int, Int?, Int?): Boolean
->.replace(Int, Int, Int): Boolean
.put(Int, Int?)
->.put(Int, Int)
.putIfAbsent(Int, Int?): Int?
->.putIfAbsent(Int, Int): Int?
.setValueAt(index: Int, value: Int?)
->.setValueAt(index: Int, value: Int)
.indexOfValue(value: Int?): Int
->.indexOfValue(value: Int): Int
.containsValue(value: Int?): Boolean
->.containsValue(value: Int): Boolean
.append(key: Int, value: Int?)
->.append(key: Int, value: Int)
Versão 1.2.0
Versão 1.2.0
1.º de dezembro de 2021
Lançamento de androidx.collection:collection:1.2.0
e androidx.collection:collection-ktx:1.2.0
. A versão 1.2.0 contém estas confirmações.
Mudanças importantes desde a 1.1.0
- Adicione um construtor de matrizes ao
ArraySet
(Id7f19). - A API se tornou compatível com
entrySet()
ao implementarentrySet().toArray()
,remove()
,removeAll()
eretainAll()
e remover a implementação deentrySet().addAll()
(I5d505).
Versão 1.2.0-rc01
17 de novembro de 2021
Lançamento de androidx.collection:collection:1.2.0-rc01
e androidx.collection:collection-ktx:1.2.0-rc01
. A versão 1.2.0-rc01 contém estas confirmações.
Mudanças na API
- Não houve mudanças desde a versão Beta anterior.
Versão 1.2.0-beta01
13 de outubro de 2021
Lançamento de androidx.collection:collection:1.2.0-beta01
e androidx.collection:collection-ktx:1.2.0-beta01
. A versão 1.2.0-beta01 contém estas confirmações.
Correções de bugs
- A API se tornou compatível com
entrySet()
ao implementarentrySet().toArray()
,remove()
,removeAll()
eretainAll()
e remover a implementação deentrySet().addAll()
(I5d505).
Versão 1.2.0-alpha01
16 de dezembro de 2020
Lançamento de androidx.collection:collection:1.2.0-alpha01
e androidx.collection:collection-ktx:1.2.0-alpha01
. A versão 1.2.0-alpha01 contém estas confirmações.
Mudanças na API
- Adicione um construtor de matrizes ao
ArraySet
(Id7f19).
Versão 1.1.0
Versão 1.1.0
5 de junho de 2019
Lançamento de androidx.collection:collection:1.1.0
e androidx.collection:collection-ktx:1.1.0
. As confirmações incluídas na versão 1.1.0 podem ser encontradas neste link.
Veja abaixo um resumo das mudanças da versão 1.0.0 para a 1.1.0:
Novos recursos
- Uso de uma implementação mais eficiente para as funções
contains
eisNotEmpty
no artefato "collection-ktx" (aosp/866529).
Mudanças na API
- Adição de
putIfAbsent
aLongSparseArray
,SimpleArrayMap
eSparseArrayCompat
(aosp/772608). - Adição de
getOrDefault
aSimpleArrayMap
(aosp/772607). - Adição de dois argumentos
remove
aLongSparseArray
,SimpleArrayMap
eSparseArrayCompat
. Suspender o uso das extensões KTX correspondentes para essa funcionalidade. (aosp/772482). - Adição de dois argumentos
replace
aLongSparseArray
,SimpleArrayMap
eSparseArrayCompat
(aosp/772483). - Adição de três argumentos
replace
aLongSparseArray
,SimpleArrayMap
eSparseArrayCompat
(aosp/772484). - Suspensão do uso de métodos
delete
redundantes. O métodoremove
oferece a mesma API e funcionalidade e corresponde à API usada por mapas não especializados. (aosp/866053, link em inglês)
Correções de bugs
- Mudança de
SimpleArrayMap
para sincronizar o cache global interno de matrizes emSimpleArrayMap.class
em vez deArrayMap.class
. Isso garante que, se você usar apenasSimpleArrayMap
, será possível removerArrayMap
usando ferramentas de redução de código. (aosp/934557, link em inglês)
Versão 1.1.0-rc01
7 de maio de 2019
Lançamento de androidx.collection:collection:1.1.0-rc01
e androidx.collection:collection-ktx:1.1.0-rc01
. As confirmações incluídas nessa versão podem ser encontradas neste link.
Novos recursos
- Uso de uma implementação mais eficiente para as funções
contains
eisNotEmpty
no artefato "collection-ktx" (aosp/866529).
Versão 1.1.0-beta01
3 de abril de 2019
Lançamento de androidx.collection:collection:1.1.0-beta01
e androidx.collection:collection-ktx:1.1.0-beta01
. As confirmações incluídas nessa versão podem ser encontradas neste link.
Mudanças na API
- O método mencionado em notas da versão alfa03, como tendo o valor
@RestrictTo
modificado, foi removido. Ele não foi usado por nenhuma biblioteca AndroidX (agora ou historicamente) e não ofereceu nenhuma funcionalidade que estava faltando na API pública.
Correções de bugs
- Mudança de
SimpleArrayMap
para sincronizar o cache global interno de matrizes emSimpleArrayMap.class
em vez deArrayMap.class
. Isso garante que, se você usar apenasSimpleArrayMap
, será possível removerArrayMap
usando ferramentas de redução de código. (aosp/934557, link em inglês)
Versão 1.1.0-alpha03
13 de março de 2019
Lançamento de androidx.collection:collection:1.0.0-alpha03
e androidx.collection:collection-ktx:1.0.0-alpha03
.
A lista completa de confirmações incluídas nessa versão pode ser encontrada aqui (link em inglês).
Mudanças na API
- Um método em
ArraySet
marcado anteriormente como@RestrictTo(LIBRARY_GROUP)
foi alterado para@RestrictTo(LIBRARY_GROUP_PREFIX)
. Essa ação foi realizada para oferecer compatibilidade com o uso histórico de outras bibliotecas do AndroidX que agora pertencem a diferentes IDs de grupo do Maven. Esse método se tornará público ou será removido na versão 1.1.0-alpha04, uma vez que outras bibliotecas do AndroidX não devem receber APIs especiais a que outros desenvolvedores não tenham acesso.
Versão 1.1.0-alpha02
30 de janeiro de 2019
Lançamento de androidx.collection:collection 1.1.0-alpha02
e androidx.collection:collection-ktx 1.1.0-alpha02
.
Mudanças na API
- Suspensão do uso de métodos
delete
redundantes. Os métodosremove
oferecem a mesma API e funcionalidade e correspondem à API usada por mapas não especializados. (aosp/866053, link em inglês)
Versão 1.1.0-alpha01
3 de dezembro de 2018
Mudanças na API
- Adição de
putIfAbsent
aLongSparseArray
,SimpleArrayMap
eSparseArrayCompat
(aosp/772608). - Adição de
getOrDefault
aSimpleArrayMap
(aosp/772607). - Adição de dois argumentos
remove
aLongSparseArray
,SimpleArrayMap
eSparseArrayCompat
. Suspender o uso das extensões KTX correspondentes para essa funcionalidade. (aosp/772482). - Adição de dois argumentos
replace
aLongSparseArray
,SimpleArrayMap
eSparseArrayCompat
(aosp/772483). - Adição de três argumentos
replace
aLongSparseArray
,SimpleArrayMap
eSparseArrayCompat
(aosp/772484).