Snap for 6798053 from 73902364a12cdb856e8695597c7bf8305f07970b to studio-4.1-release
Change-Id: Id1d0a9529f99f4fd1e1e1629a22aa5f540b087ca
diff --git a/build-system/builder/src/main/java/com/android/builder/png/VectorDrawableRenderer.java b/build-system/builder/src/main/java/com/android/builder/png/VectorDrawableRenderer.java
index b75014b..5d6fec2 100644
--- a/build-system/builder/src/main/java/com/android/builder/png/VectorDrawableRenderer.java
+++ b/build-system/builder/src/main/java/com/android/builder/png/VectorDrawableRenderer.java
@@ -30,6 +30,7 @@
import com.android.ide.common.vectordrawable.VdPreview;
import com.android.resources.Density;
import com.android.resources.ResourceFolderType;
+import com.android.utils.FileUtils;
import com.android.utils.ILogger;
import com.google.common.io.Files;
import java.awt.image.BufferedImage;
@@ -141,8 +142,7 @@
// As there is no version qualifier, N density .png format images are generated from
// the vectors if they are required e.g when the minimum SDK is below the
// PreprocessingReason SDK threshold. A vector with the version qualifier set to the
- // PR
- // SDK threshold and ANYDPI density qualifier is created.
+ // PR SDK threshold and ANYDPI density qualifier is created.
if (mMinSdk < reason.getSdkThreshold() && mDensities.size() > 0) {
for (Density density : mDensities) {
FolderConfiguration newConfiguration =
@@ -159,8 +159,25 @@
originalConfiguration.setVersionQualifier(
new VersionQualifier(reason.getSdkThreshold()));
}
- filesToBeGenerated.add(
- new File(getDirectory(originalConfiguration), inputXmlFile.getName()));
+
+ // Avoid regenerating a vector with reason.mSdkThreshold which will be directly
+ // generated from a source directory with the SdkThreshold version.
+ FolderConfiguration minSdkSourceConfig =
+ FolderConfiguration.copyOf(originalConfiguration);
+ if (originalConfiguration.getDensityQualifier()
+ .isMatchFor(new DensityQualifier(Density.ANYDPI))) {
+ minSdkSourceConfig.removeQualifier(originalConfiguration.getDensityQualifier());
+ }
+ minSdkSourceConfig.setVersionQualifier(new VersionQualifier(reason.mSdkThreshold));
+ File possibleMinReasonSdkResource =
+ FileUtils.join(
+ inputXmlFile.getParentFile().getParentFile(),
+ "drawable-" + minSdkSourceConfig.getQualifierString(),
+ inputXmlFile.getName());
+ if (filesToBeGenerated.isEmpty() || !possibleMinReasonSdkResource.exists()) {
+ filesToBeGenerated.add(
+ new File(getDirectory(originalConfiguration), inputXmlFile.getName()));
+ }
}
return filesToBeGenerated;
diff --git a/build-system/builder/src/test/java/com/android/builder/png/VectorDrawableRendererTest.java b/build-system/builder/src/test/java/com/android/builder/png/VectorDrawableRendererTest.java
index c596439..0f88119 100644
--- a/build-system/builder/src/test/java/com/android/builder/png/VectorDrawableRendererTest.java
+++ b/build-system/builder/src/test/java/com/android/builder/png/VectorDrawableRendererTest.java
@@ -22,6 +22,7 @@
import com.android.resources.Density;
import com.android.utils.FileUtils;
import com.android.utils.NullLogger;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.truth.Truth;
import java.io.File;
@@ -400,7 +401,7 @@
writeToFile(input28, VECTOR_WITH_GRADIENT);
writeToFile(input29, VECTOR_WITH_GRADIENT);
- ImmutableSet.Builder<File> result = ImmutableSet.builder();
+ ImmutableList.Builder<File> result = ImmutableList.builder();
result.addAll(mRenderer.getFilesToBeGenerated(input))
.addAll(mRenderer.getFilesToBeGenerated(input21))
.addAll(mRenderer.getFilesToBeGenerated(input22))
@@ -409,23 +410,61 @@
.addAll(mRenderer.getFilesToBeGenerated(input29));
assertEquals(
- ImmutableSet.of(
+ ImmutableList.of(
FileUtils.join(mOutput, "drawable-hdpi/icon.png"),
FileUtils.join(mOutput, "drawable-mdpi/icon.png"),
FileUtils.join(mOutput, "drawable-ldpi/icon.png"),
- FileUtils.join(mOutput, "drawable-anydpi-v24/icon.xml"),
FileUtils.join(mOutput, "drawable-hdpi-v21/icon.png"),
FileUtils.join(mOutput, "drawable-mdpi-v21/icon.png"),
FileUtils.join(mOutput, "drawable-ldpi-v21/icon.png"),
FileUtils.join(mOutput, "drawable-hdpi-v22/icon.png"),
FileUtils.join(mOutput, "drawable-mdpi-v22/icon.png"),
FileUtils.join(mOutput, "drawable-ldpi-v22/icon.png"),
+ FileUtils.join(mOutput, "drawable-anydpi-v24/icon.xml"),
FileUtils.join(mOutput, "drawable-anydpi-v28/icon.xml"),
FileUtils.join(mOutput, "drawable-anydpi-v29/icon.xml")),
result.build());
}
@Test
+ public void multipleGradientVersionsAndQualifiers() throws Exception {
+ File drawable = new File(mRes, "drawable-port");
+ File input = new File(drawable, "icon.xml");
+
+ File drawable21 = new File(mRes, "drawable-port-v21");
+ File input21 = new File(drawable21, "icon.xml");
+
+ File drawable24 = new File(mRes, "drawable-port-v24");
+ File input24 = new File(drawable24, "icon.xml");
+
+ File drawable29 = new File(mRes, "drawable-port-v29");
+ File input29 = new File(drawable29, "icon.xml");
+
+ writeToFile(input, VECTOR_WITH_GRADIENT);
+ writeToFile(input21, VECTOR_WITH_GRADIENT);
+ writeToFile(input24, VECTOR_WITH_GRADIENT);
+ writeToFile(input29, VECTOR_WITH_GRADIENT);
+
+ ImmutableList.Builder<File> result = ImmutableList.builder();
+ result.addAll(mRenderer.getFilesToBeGenerated(input))
+ .addAll(mRenderer.getFilesToBeGenerated(input21))
+ .addAll(mRenderer.getFilesToBeGenerated(input24))
+ .addAll(mRenderer.getFilesToBeGenerated(input29));
+
+ assertEquals(
+ ImmutableList.of(
+ FileUtils.join(mOutput, "drawable-port-hdpi/icon.png"),
+ FileUtils.join(mOutput, "drawable-port-mdpi/icon.png"),
+ FileUtils.join(mOutput, "drawable-port-ldpi/icon.png"),
+ FileUtils.join(mOutput, "drawable-port-hdpi-v21/icon.png"),
+ FileUtils.join(mOutput, "drawable-port-mdpi-v21/icon.png"),
+ FileUtils.join(mOutput, "drawable-port-ldpi-v21/icon.png"),
+ FileUtils.join(mOutput, "drawable-port-anydpi-v24/icon.xml"),
+ FileUtils.join(mOutput, "drawable-port-anydpi-v29/icon.xml")),
+ result.build());
+ }
+
+ @Test
public void fillTypeSdk23WithoutSupportLibrary() throws Exception {
mRenderer = new VectorDrawableRenderer(23, false, mOutput, mDensities, NullLogger::new);
File drawable = new File(mRes, "drawable");