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(); }