diff --git a/plugins/android/src/META-INF/plugin.xml b/plugins/android/src/META-INF/plugin.xml
index 8b00e455b85c..3c461c017973 100644
--- a/plugins/android/src/META-INF/plugin.xml
+++ b/plugins/android/src/META-INF/plugin.xml
@@ -73,6 +73,7 @@
+
diff --git a/plugins/android/src/org/jetbrains/android/dom/AndroidDomExtender.java b/plugins/android/src/org/jetbrains/android/dom/AndroidDomExtender.java
index 2c9ed1b3f2fe..994c164c1855 100644
--- a/plugins/android/src/org/jetbrains/android/dom/AndroidDomExtender.java
+++ b/plugins/android/src/org/jetbrains/android/dom/AndroidDomExtender.java
@@ -574,6 +574,9 @@ public class AndroidDomExtender extends DomExtender {
else if (element instanceof LevelListItem) {
registerAttributes(facet, element, "LevelListDrawableItem", SYSTEM_RESOURCE_PACKAGE, registrar);
}
+ else if (element instanceof AnimationListItem) {
+ registerAttributes(facet, element, "AnimationDrawableItem", SYSTEM_RESOURCE_PACKAGE, registrar);
+ }
}
@Nullable
diff --git a/plugins/android/src/org/jetbrains/android/dom/drawable/AndroidDrawableDomUtil.java b/plugins/android/src/org/jetbrains/android/dom/drawable/AndroidDrawableDomUtil.java
index 522a6b9d598d..f71c06983e48 100644
--- a/plugins/android/src/org/jetbrains/android/dom/drawable/AndroidDrawableDomUtil.java
+++ b/plugins/android/src/org/jetbrains/android/dom/drawable/AndroidDrawableDomUtil.java
@@ -40,6 +40,7 @@ public class AndroidDrawableDomUtil {
SPECIAL_STYLEABLE_NAMES.put("inset", "InsetDrawable");
SPECIAL_STYLEABLE_NAMES.put("clip", "ClipDrawable");
SPECIAL_STYLEABLE_NAMES.put("scale", "ScaleDrawable");
+ SPECIAL_STYLEABLE_NAMES.put("animation-list", "AnimationDrawable");
SPECIAL_STYLEABLE_NAMES.put("shape", "GradientDrawable");
SPECIAL_STYLEABLE_NAMES.put("corners", "DrawableCorners");
diff --git a/plugins/android/src/org/jetbrains/android/dom/drawable/AnimationList.java b/plugins/android/src/org/jetbrains/android/dom/drawable/AnimationList.java
new file mode 100644
index 000000000000..e4c466beab03
--- /dev/null
+++ b/plugins/android/src/org/jetbrains/android/dom/drawable/AnimationList.java
@@ -0,0 +1,13 @@
+package org.jetbrains.android.dom.drawable;
+
+import com.intellij.util.xml.DefinesXml;
+
+import java.util.List;
+
+/**
+ * @author Eugene.Kudelevsky
+ */
+@DefinesXml
+public interface AnimationList extends DrawableDomElement {
+ List getItems();
+}
diff --git a/plugins/android/src/org/jetbrains/android/dom/drawable/AnimationListDomFileDescription.java b/plugins/android/src/org/jetbrains/android/dom/drawable/AnimationListDomFileDescription.java
new file mode 100644
index 000000000000..3bc56891e7cc
--- /dev/null
+++ b/plugins/android/src/org/jetbrains/android/dom/drawable/AnimationListDomFileDescription.java
@@ -0,0 +1,40 @@
+package org.jetbrains.android.dom.drawable;
+
+import com.intellij.openapi.module.Module;
+import com.intellij.psi.xml.XmlFile;
+import com.intellij.psi.xml.XmlTag;
+import org.jetbrains.android.dom.AndroidResourceDomFileDescription;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author Eugene.Kudelevsky
+ */
+public class AnimationListDomFileDescription extends AndroidResourceDomFileDescription {
+ @NonNls static final String ANIMATION_LIST_TAG = "animation-list";
+
+ public AnimationListDomFileDescription() {
+ super(AnimationList.class, ANIMATION_LIST_TAG, "drawable");
+ }
+
+ @Override
+ public boolean acceptsOtherRootTagNames() {
+ return true;
+ }
+
+ @Override
+ public boolean isMyFile(@NotNull XmlFile file, @Nullable Module module) {
+ if (!super.isMyFile(file, module)) {
+ return false;
+ }
+
+ final XmlTag rootTag = file.getRootTag();
+ if (rootTag == null) {
+ return false;
+ }
+
+ return ANIMATION_LIST_TAG.equals(rootTag.getName());
+ }
+}
+
diff --git a/plugins/android/src/org/jetbrains/android/dom/drawable/AnimationListItem.java b/plugins/android/src/org/jetbrains/android/dom/drawable/AnimationListItem.java
new file mode 100644
index 000000000000..3d015e2c5a16
--- /dev/null
+++ b/plugins/android/src/org/jetbrains/android/dom/drawable/AnimationListItem.java
@@ -0,0 +1,16 @@
+package org.jetbrains.android.dom.drawable;
+
+import com.intellij.util.xml.Convert;
+import org.jetbrains.android.dom.AndroidAttributeValue;
+import org.jetbrains.android.dom.ResourceType;
+import org.jetbrains.android.dom.converters.ResourceReferenceConverter;
+import org.jetbrains.android.dom.resources.ResourceValue;
+
+/**
+ * @author Eugene.Kudelevsky
+ */
+public interface AnimationListItem extends DrawableDomElement {
+ @Convert(ResourceReferenceConverter.class)
+ @ResourceType("drawable")
+ AndroidAttributeValue getDrawable();
+}
diff --git a/plugins/android/testData/dom/drawable/animationListCompletion1.xml b/plugins/android/testData/dom/drawable/animationListCompletion1.xml
new file mode 100644
index 000000000000..7c9715e16b23
--- /dev/null
+++ b/plugins/android/testData/dom/drawable/animationListCompletion1.xml
@@ -0,0 +1,4 @@
+
+>
+
+
\ No newline at end of file
diff --git a/plugins/android/testData/dom/drawable/animationListCompletion1_after.xml b/plugins/android/testData/dom/drawable/animationListCompletion1_after.xml
new file mode 100644
index 000000000000..d2feb1aa701a
--- /dev/null
+++ b/plugins/android/testData/dom/drawable/animationListCompletion1_after.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/plugins/android/testData/dom/drawable/animationListCompletion2.xml b/plugins/android/testData/dom/drawable/animationListCompletion2.xml
new file mode 100644
index 000000000000..f5c239dfda33
--- /dev/null
+++ b/plugins/android/testData/dom/drawable/animationListCompletion2.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/plugins/android/testData/dom/drawable/animationListCompletion2_after.xml b/plugins/android/testData/dom/drawable/animationListCompletion2_after.xml
new file mode 100644
index 000000000000..cd81ce9b3622
--- /dev/null
+++ b/plugins/android/testData/dom/drawable/animationListCompletion2_after.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/plugins/android/testData/dom/drawable/animationListCompletion3.xml b/plugins/android/testData/dom/drawable/animationListCompletion3.xml
new file mode 100644
index 000000000000..9dc70b4aaf1e
--- /dev/null
+++ b/plugins/android/testData/dom/drawable/animationListCompletion3.xml
@@ -0,0 +1,4 @@
+
+
+ - />
+
\ No newline at end of file
diff --git a/plugins/android/testData/dom/drawable/animationListCompletion3_after.xml b/plugins/android/testData/dom/drawable/animationListCompletion3_after.xml
new file mode 100644
index 000000000000..fb05a2f9aa54
--- /dev/null
+++ b/plugins/android/testData/dom/drawable/animationListCompletion3_after.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/plugins/android/testData/dom/drawable/animationListHighlighting1.xml b/plugins/android/testData/dom/drawable/animationListHighlighting1.xml
new file mode 100644
index 000000000000..f9f97c9268a8
--- /dev/null
+++ b/plugins/android/testData/dom/drawable/animationListHighlighting1.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/plugins/android/testData/dom/drawable/animationListHighlighting2.xml b/plugins/android/testData/dom/drawable/animationListHighlighting2.xml
new file mode 100644
index 000000000000..b6c725185495
--- /dev/null
+++ b/plugins/android/testData/dom/drawable/animationListHighlighting2.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/plugins/android/testSrc/org/jetbrains/android/dom/AndroidDrawableResourcesDomTest.java b/plugins/android/testSrc/org/jetbrains/android/dom/AndroidDrawableResourcesDomTest.java
index 2e1e819ba515..7f8673f79fe4 100644
--- a/plugins/android/testSrc/org/jetbrains/android/dom/AndroidDrawableResourcesDomTest.java
+++ b/plugins/android/testSrc/org/jetbrains/android/dom/AndroidDrawableResourcesDomTest.java
@@ -213,6 +213,26 @@ public class AndroidDrawableResourcesDomTest extends AndroidDomTest {
doTestCompletionVariants(getTestName(true) + ".xml", "gradient", "solid", "size", "stroke", "padding", "corners");
}
+ public void testAnimationListHighlighting1() throws Throwable {
+ doTestHighlighting();
+ }
+
+ public void testAnimationListHighlighting2() throws Throwable {
+ doTestHighlighting();
+ }
+
+ public void testAnimationListCompletion1() throws Throwable {
+ doTestCompletion();
+ }
+
+ public void testAnimationListCompletion2() throws Throwable {
+ doTestCompletion();
+ }
+
+ public void testAnimationListCompletion3() throws Throwable {
+ doTestCompletion();
+ }
+
public void testIncorrectRootTag() throws Throwable {
doTestHighlighting();
}