Revert "AAPT2: Auto-version adaptive-icon XML"
This reverts commit 5b7337f77cf036dda2c7218ccf22dedc774dcf76.
Bug: 63579299
Test: none
Change-Id: Ib617c4edfc16eeae3507b59b2debeae4f8bbf9a5
diff --git a/tools/aapt2/link/AutoVersioner.cpp b/tools/aapt2/link/AutoVersioner.cpp
index 4ac70d9..f80c6e9 100644
--- a/tools/aapt2/link/AutoVersioner.cpp
+++ b/tools/aapt2/link/AutoVersioner.cpp
@@ -34,19 +34,6 @@
return sdk_version_to_generate < FindNextApiVersionForConfig(entry, config);
}
-ApiVersion FindNextApiVersionForConfigInSortedVector(
- std::vector<std::unique_ptr<ResourceConfigValue>>::const_iterator start,
- std::vector<std::unique_ptr<ResourceConfigValue>>::const_iterator end) {
- const ConfigDescription start_config = (*start)->config.CopyWithoutSdkVersion();
- ++start;
- if (start != end) {
- if ((*start)->config.CopyWithoutSdkVersion() == start_config) {
- return static_cast<ApiVersion>((*start)->config.sdkVersion);
- }
- }
- return std::numeric_limits<ApiVersion>::max();
-}
-
ApiVersion FindNextApiVersionForConfig(const ResourceEntry* entry,
const ConfigDescription& config) {
const auto end_iter = entry->values.end();
@@ -59,7 +46,25 @@
// The source config came from this list, so it should be here.
CHECK(iter != entry->values.end());
- return FindNextApiVersionForConfigInSortedVector(iter, end_iter);
+ ++iter;
+
+ // The next configuration either only varies in sdkVersion, or it is completely different
+ // and therefore incompatible. If it is incompatible, we must generate the versioned resource.
+
+ // NOTE: The ordering of configurations takes sdkVersion as higher precedence than other
+ // qualifiers, so we need to iterate through the entire list to be sure there
+ // are no higher sdk level versions of this resource.
+ ConfigDescription temp_config(config);
+ for (; iter != end_iter; ++iter) {
+ temp_config.sdkVersion = (*iter)->config.sdkVersion;
+ if (temp_config == (*iter)->config) {
+ // The two configs are the same, return the sdkVersion.
+ return (*iter)->config.sdkVersion;
+ }
+ }
+
+ // Didn't find another config with a different sdk version, so return the highest possible value.
+ return std::numeric_limits<ApiVersion>::max();
}
bool AutoVersioner::Consume(IAaptContext* context, ResourceTable* table) {
diff --git a/tools/aapt2/link/AutoVersioner_test.cpp b/tools/aapt2/link/AutoVersioner_test.cpp
index 88a831b..49639f8 100644
--- a/tools/aapt2/link/AutoVersioner_test.cpp
+++ b/tools/aapt2/link/AutoVersioner_test.cpp
@@ -42,8 +42,8 @@
ResourceEntry entry("foo");
entry.values.push_back(util::make_unique<ResourceConfigValue>(ConfigDescription::DefaultConfig(), ""));
- entry.values.push_back(util::make_unique<ResourceConfigValue>(v21_config, ""));
entry.values.push_back(util::make_unique<ResourceConfigValue>(sw600dp_v13_config, ""));
+ entry.values.push_back(util::make_unique<ResourceConfigValue>(v21_config, ""));
EXPECT_TRUE(ShouldGenerateVersionedResource(&entry, ConfigDescription::DefaultConfig(), 17));
EXPECT_FALSE(ShouldGenerateVersionedResource(&entry, ConfigDescription::DefaultConfig(), 22));
diff --git a/tools/aapt2/link/Linkers.h b/tools/aapt2/link/Linkers.h
index 493b6b1..5527f90 100644
--- a/tools/aapt2/link/Linkers.h
+++ b/tools/aapt2/link/Linkers.h
@@ -23,7 +23,6 @@
#include "android-base/macros.h"
#include "Resource.h"
-#include "ResourceTable.h"
#include "SdkConstants.h"
#include "process/IResourceTableConsumer.h"
#include "xml/XmlDom.h"
@@ -42,19 +41,17 @@
ResourceNameRef resource;
};
-// Determines whether a versioned resource should be created. If a versioned resource already
-// exists, it takes precedence.
+/**
+ * Determines whether a versioned resource should be created. If a versioned
+ * resource already exists, it takes precedence.
+ */
bool ShouldGenerateVersionedResource(const ResourceEntry* entry, const ConfigDescription& config,
const ApiVersion sdk_version_to_generate);
-// Finds the next largest ApiVersion of `config` for values defined for `entry`.
+// Finds the next largest ApiVersion of the config which is identical to the given config except
+// for sdkVersion.
ApiVersion FindNextApiVersionForConfig(const ResourceEntry* entry, const ConfigDescription& config);
-// Finds the next largest ApiVersion of the config pointed to by the iterator `start`.
-ApiVersion FindNextApiVersionForConfigInSortedVector(
- std::vector<std::unique_ptr<ResourceConfigValue>>::const_iterator start,
- std::vector<std::unique_ptr<ResourceConfigValue>>::const_iterator end);
-
class AutoVersioner : public IResourceTableConsumer {
public:
AutoVersioner() = default;