Do not include system overlay data when excluded

Do not include configurations or locales from overlays overriding system
resources when exclude_system is specified in GetResourceConfigurations
or GetResourceLocales.

Bug: 120083032
Test: run cts -m CtsContentTestCases -t
  android.content.res.cts.AssetManagerTest#testGetNonSystemLocales

Change-Id: I4ba3b07d3bb9ac72b196ff7ed4d1e853b51f7eea
This commit is contained in:
Ryan Mitchell
2018-11-30 15:22:31 -08:00
parent e59ac13c37
commit 449a54fb6b

View File

@@ -217,10 +217,19 @@ std::set<ResTable_config> AssetManager2::GetResourceConfigurations(bool exclude_
ATRACE_NAME("AssetManager::GetResourceConfigurations");
std::set<ResTable_config> configurations;
for (const PackageGroup& package_group : package_groups_) {
bool found_system_package = false;
for (const ConfiguredPackage& package : package_group.packages_) {
if (exclude_system && package.loaded_package_->IsSystem()) {
found_system_package = true;
continue;
}
if (exclude_system && package.loaded_package_->IsOverlay() && found_system_package) {
// Overlays must appear after the target package to take effect. Any overlay found in the
// same package as a system package is able to overlay system resources.
continue;
}
package.loaded_package_->CollectConfigurations(exclude_mipmap, &configurations);
}
}
@@ -232,10 +241,19 @@ std::set<std::string> AssetManager2::GetResourceLocales(bool exclude_system,
ATRACE_NAME("AssetManager::GetResourceLocales");
std::set<std::string> locales;
for (const PackageGroup& package_group : package_groups_) {
bool found_system_package = false;
for (const ConfiguredPackage& package : package_group.packages_) {
if (exclude_system && package.loaded_package_->IsSystem()) {
found_system_package = true;
continue;
}
if (exclude_system && package.loaded_package_->IsOverlay() && found_system_package) {
// Overlays must appear after the target package to take effect. Any overlay found in the
// same package as a system package is able to overlay system resources.
continue;
}
package.loaded_package_->CollectLocales(merge_equivalent_languages, &locales);
}
}