Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 449a54fb authored by Ryan Mitchell's avatar Ryan Mitchell
Browse files

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
parent e59ac13c
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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);
    }
  }