diff options
author | Xavier Ducrohet <xav@android.com> | 2011-01-27 18:05:56 -0800 |
---|---|---|
committer | Xavier Ducrohet <xav@android.com> | 2011-01-28 12:42:05 -0800 |
commit | 3bd45f0b16f5ebfafd8080a0f17f71d85c9840ed (patch) | |
tree | 72a0de0eda8b085d7038a3987ef23d1a05000654 | |
parent | 40826f2c5a850a1c0b74ec6193181383175f20cf (diff) | |
download | sdk-3bd45f0b16f5ebfafd8080a0f17f71d85c9840ed.zip sdk-3bd45f0b16f5ebfafd8080a0f17f71d85c9840ed.tar.gz sdk-3bd45f0b16f5ebfafd8080a0f17f71d85c9840ed.tar.bz2 |
Change APIs using String instead of ResourceType.
Move ResourceType into resources.jar so that it's accessible
to layoutlib.jar
This is cleaner and allows us to us more efficient EnumMap objects.
Change-Id: If11cbc69ae3ca8bd6c96e6d0ef402570a07af16f
54 files changed, 358 insertions, 288 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ResourceManagerBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ResourceManagerBuilder.java index c8670b4..84e2751 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ResourceManagerBuilder.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ResourceManagerBuilder.java @@ -90,10 +90,13 @@ public class ResourceManagerBuilder extends BaseBuilder { switch (res) { case ProjectHelper.COMPILER_COMPLIANCE_LEVEL: errorMessage = Messages.Requires_Compiler_Compliance_5; + break; case ProjectHelper.COMPILER_COMPLIANCE_SOURCE: errorMessage = Messages.Requires_Source_Compatibility_5; + break; case ProjectHelper.COMPILER_COMPLIANCE_CODEGEN_TARGET: errorMessage = Messages.Requires_Class_Compatibility_5; + break; } if (errorMessage != null) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlEditor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlEditor.java index 06db45b..067c731 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlEditor.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlEditor.java @@ -139,9 +139,9 @@ public abstract class AndroidXmlEditor extends FormEditor implements IResourceCh public AndroidXmlEditor(boolean addTargetListener) { super(); - if (addTargetListener) { - ResourcesPlugin.getWorkspace().addResourceChangeListener(this); + ResourcesPlugin.getWorkspace().addResourceChangeListener(this); + if (addTargetListener) { mTargetListener = new TargetChangeListener() { @Override public IProject getProject() { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/descriptors/DescriptorsUtils.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/descriptors/DescriptorsUtils.java index 0a6593d..817d4cb 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/descriptors/DescriptorsUtils.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/descriptors/DescriptorsUtils.java @@ -37,7 +37,7 @@ import com.android.ide.common.resources.platform.AttributeInfo; import com.android.ide.eclipse.adt.AndroidConstants; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiDocumentNode; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; +import com.android.resources.ResourceType; import com.android.sdklib.SdkConstants; import org.eclipse.swt.graphics.Image; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/descriptors/ReferenceAttributeDescriptor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/descriptors/ReferenceAttributeDescriptor.java index f291bff..f619450 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/descriptors/ReferenceAttributeDescriptor.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/descriptors/ReferenceAttributeDescriptor.java @@ -23,7 +23,7 @@ import com.android.ide.eclipse.adt.internal.editors.ui.ResourceValueCellEditor; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiAttributeNode; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiResourceAttributeNode; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; +import com.android.resources.ResourceType; import com.android.sdklib.SdkConstants; import org.eclipse.jface.viewers.CellEditor; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutReloadMonitor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutReloadMonitor.java index eafc910..380381b 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutReloadMonitor.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutReloadMonitor.java @@ -18,7 +18,6 @@ package com.android.ide.eclipse.adt.internal.editors.layout; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.AndroidConstants; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonitor; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFile; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFolder; @@ -28,6 +27,7 @@ import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonit import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager.IResourceListener; import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; +import com.android.resources.ResourceType; import com.android.sdklib.SdkConstants; import org.eclipse.core.resources.IFile; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/ProjectCallback.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/ProjectCallback.java index e7cbaea..824d0e1 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/ProjectCallback.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/ProjectCallback.java @@ -24,6 +24,7 @@ import com.android.ide.eclipse.adt.AndroidConstants; import com.android.ide.eclipse.adt.internal.project.AndroidManifestHelper; import com.android.ide.eclipse.adt.internal.resources.manager.ProjectClassLoader; import com.android.ide.eclipse.adt.internal.resources.manager.ProjectResources; +import com.android.resources.ResourceType; import com.android.sdklib.SdkConstants; import com.android.sdklib.xml.ManifestData; @@ -204,10 +205,6 @@ public final class ProjectCallback implements ILegacyCallback { return mNamespace; } - /* - * (non-Javadoc) - * @see com.android.layoutlib.api.IProjectCallback#resolveResourceValue(int) - */ public String[] resolveResourceValue(int id) { if (mProjectRes != null) { return mProjectRes.resolveResourceValue(id); @@ -216,10 +213,6 @@ public final class ProjectCallback implements ILegacyCallback { return null; } - /* - * (non-Javadoc) - * @see com.android.layoutlib.api.IProjectCallback#resolveResourceValue(int[]) - */ public String resolveResourceValue(int[] id) { if (mProjectRes != null) { return mProjectRes.resolveResourceValue(id); @@ -228,11 +221,14 @@ public final class ProjectCallback implements ILegacyCallback { return null; } - /* - * (non-Javadoc) - * @see com.android.layoutlib.api.IProjectCallback#getResourceValue(java.lang.String, java.lang.String) + /** + * @deprecated use {@link #getResourceValue(ResourceType, String)} instead. */ public Integer getResourceValue(String type, String name) { + return getResourceValue(ResourceType.getEnum(type), name); + } + + public Integer getResourceValue(ResourceType type, String name) { if (mProjectRes != null) { return mProjectRes.getResourceValue(type, name); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java index 923caad..12289b9 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java @@ -20,7 +20,6 @@ import com.android.ide.common.rendering.api.ResourceValue; import com.android.ide.common.rendering.api.StyleResourceValue; import com.android.ide.common.sdk.LoadStatus; import com.android.ide.eclipse.adt.AdtPlugin; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.configurations.DockModeQualifier; import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration; import com.android.ide.eclipse.adt.internal.resources.configurations.LanguageQualifier; @@ -44,6 +43,7 @@ import com.android.ide.eclipse.adt.internal.sdk.LayoutDevice.DeviceConfig; import com.android.resources.Density; import com.android.resources.DockMode; import com.android.resources.NightMode; +import com.android.resources.ResourceType; import com.android.resources.ScreenOrientation; import com.android.sdklib.IAndroidTarget; @@ -191,8 +191,8 @@ public class ConfigurationComposite extends Composite { ProjectResources getProjectResources(); ProjectResources getFrameworkResources(); ProjectResources getFrameworkResources(IAndroidTarget target); - Map<String, Map<String, ResourceValue>> getConfiguredProjectResources(); - Map<String, Map<String, ResourceValue>> getConfiguredFrameworkResources(); + Map<ResourceType, Map<String, ResourceValue>> getConfiguredProjectResources(); + Map<ResourceType, Map<String, ResourceValue>> getConfiguredFrameworkResources(); } /** @@ -1364,13 +1364,12 @@ public class ConfigurationComposite extends Composite { // get the themes, and languages from the Framework. if (frameworkProject != null) { // get the configured resources for the framework - Map<String, Map<String, ResourceValue>> frameworResources = + Map<ResourceType, Map<String, ResourceValue>> frameworResources = frameworkProject.getConfiguredResources(getCurrentConfig()); if (frameworResources != null) { // get the styles. - Map<String, ResourceValue> styles = frameworResources.get( - ResourceType.STYLE.getName()); + Map<String, ResourceValue> styles = frameworResources.get(ResourceType.STYLE); // collect the themes out of all the styles. @@ -1399,13 +1398,13 @@ public class ConfigurationComposite extends Composite { // in cases where the opened file is not linked to a project, this could be null. if (project != null) { // get the configured resources for the project - Map<String, Map<String, ResourceValue>> configuredProjectRes = + Map<ResourceType, Map<String, ResourceValue>> configuredProjectRes = mListener.getConfiguredProjectResources(); if (configuredProjectRes != null) { // get the styles. Map<String, ResourceValue> styleMap = configuredProjectRes.get( - ResourceType.STYLE.getName()); + ResourceType.STYLE); if (styleMap != null) { // collect the themes out of all the styles, ie styles that extend, diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/ExtractIncludeAction.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/ExtractIncludeAction.java index da86943..46ec8f3 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/ExtractIncludeAction.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/ExtractIncludeAction.java @@ -29,7 +29,7 @@ import static com.android.ide.eclipse.adt.AndroidConstants.DOT_XML; import static com.android.ide.eclipse.adt.AndroidConstants.WS_SEP; import static com.android.ide.eclipse.adt.internal.editors.descriptors.XmlnsAttributeDescriptor.XMLNS; import static com.android.ide.eclipse.adt.internal.editors.descriptors.XmlnsAttributeDescriptor.XMLNS_COLON; -import static com.android.ide.eclipse.adt.internal.resources.ResourceType.LAYOUT; +import static com.android.resources.ResourceType.LAYOUT; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java index 397aac9..4e66bb0 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java @@ -56,7 +56,6 @@ import com.android.ide.eclipse.adt.internal.editors.uimodel.UiDocumentNode; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode; import com.android.ide.eclipse.adt.internal.editors.xml.Hyperlinks; import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration; import com.android.ide.eclipse.adt.internal.resources.configurations.ScreenSizeQualifier; import com.android.ide.eclipse.adt.internal.resources.manager.ProjectResources; @@ -69,6 +68,7 @@ import com.android.ide.eclipse.adt.internal.sdk.Sdk.ITargetChangeListener; import com.android.ide.eclipse.adt.io.IFileWrapper; import com.android.ide.eclipse.adt.io.IFolderWrapper; import com.android.resources.Density; +import com.android.resources.ResourceType; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.SdkConstants; import com.android.sdklib.io.IAbstractFile; @@ -230,8 +230,8 @@ public class GraphicalEditorPart extends EditorPart */ private Reference mIncludedWithin; - private Map<String, Map<String, ResourceValue>> mConfiguredFrameworkRes; - private Map<String, Map<String, ResourceValue>> mConfiguredProjectRes; + private Map<ResourceType, Map<String, ResourceValue>> mConfiguredFrameworkRes; + private Map<ResourceType, Map<String, ResourceValue>> mConfiguredProjectRes; private ProjectCallback mProjectCallback; private boolean mNeedsRecompute = false; @@ -719,7 +719,7 @@ public class GraphicalEditorPart extends EditorPart mPalette.reloadPalette(target); } - public Map<String, Map<String, ResourceValue>> getConfiguredFrameworkResources() { + public Map<ResourceType, Map<String, ResourceValue>> getConfiguredFrameworkResources() { if (mConfiguredFrameworkRes == null && mConfigComposite != null) { ProjectResources frameworkRes = getFrameworkResources(); @@ -735,7 +735,7 @@ public class GraphicalEditorPart extends EditorPart return mConfiguredFrameworkRes; } - public Map<String, Map<String, ResourceValue>> getConfiguredProjectResources() { + public Map<ResourceType, Map<String, ResourceValue>> getConfiguredProjectResources() { if (mConfiguredProjectRes == null && mConfigComposite != null) { ProjectResources project = getProjectResources(); @@ -1567,11 +1567,11 @@ public class GraphicalEditorPart extends EditorPart } // Get the resources of the file's project. - Map<String, Map<String, ResourceValue>> configuredProjectRes = + Map<ResourceType, Map<String, ResourceValue>> configuredProjectRes = mConfigListener.getConfiguredProjectResources(); // Get the framework resources - Map<String, Map<String, ResourceValue>> frameworkResources = + Map<ResourceType, Map<String, ResourceValue>> frameworkResources = mConfigListener.getConfiguredFrameworkResources(); // Abort the rendering if the resources are not found. @@ -1635,7 +1635,7 @@ public class GraphicalEditorPart extends EditorPart // Find the layout file. Map<String, ResourceValue> layouts = configuredProjectRes.get( - ResourceType.LAYOUT.getName()); + ResourceType.LAYOUT); ResourceValue contextLayout = layouts.get(contextLayoutName); if (contextLayout != null) { File layoutFile = new File(contextLayout.getValue()); @@ -2024,14 +2024,14 @@ public class GraphicalEditorPart extends EditorPart // There is code to handle this, but it's in layoutlib; we should // expose that and use it here. - Map<String, Map<String, ResourceValue>> map; + Map<ResourceType, Map<String, ResourceValue>> map; map = isFrameworkResource ? mConfiguredFrameworkRes : mConfiguredProjectRes; if (map == null) { // Not yet configured return null; } - Map<String, ResourceValue> layoutMap = map.get(type.getName()); + Map<String, ResourceValue> layoutMap = map.get(type); if (layoutMap != null) { ResourceValue value = layoutMap.get(name); if (value != null) { @@ -2108,14 +2108,14 @@ public class GraphicalEditorPart extends EditorPart } private String findString(String name, boolean isFrameworkResource) { - Map<String, Map<String, ResourceValue>> map; + Map<ResourceType, Map<String, ResourceValue>> map; map = isFrameworkResource ? mConfiguredFrameworkRes : mConfiguredProjectRes; if (map == null) { // Not yet configured return null; } - Map<String, ResourceValue> layoutMap = map.get(ResourceType.STRING.getName()); + Map<String, ResourceValue> layoutMap = map.get(ResourceType.STRING); if (layoutMap != null) { ResourceValue value = layoutMap.get(name); if (value != null) { @@ -2399,9 +2399,9 @@ public class GraphicalEditorPart extends EditorPart * @return a collection of resource names, never null but possibly empty */ public Collection<String> getResourceNames(boolean framework, ResourceType type) { - Map<String, Map<String, ResourceValue>> map = + Map<ResourceType, Map<String, ResourceValue>> map = framework ? mConfiguredFrameworkRes : mConfiguredProjectRes; - Map<String, ResourceValue> animations = map.get(type.getName()); + Map<String, ResourceValue> animations = map.get(type); if (animations != null) { return animations.keySet(); } else { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/IncludeFinder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/IncludeFinder.java index e4778ec..e7a7fdf 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/IncludeFinder.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/IncludeFinder.java @@ -28,7 +28,6 @@ import static org.eclipse.core.resources.IResourceDelta.REMOVED; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.editors.layout.descriptors.LayoutDescriptors; import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.manager.ProjectResourceItem; import com.android.ide.eclipse.adt.internal.resources.manager.ProjectResources; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFile; @@ -36,6 +35,7 @@ import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFolder; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager.IResourceListener; import com.android.ide.eclipse.adt.io.IFileWrapper; +import com.android.resources.ResourceType; import com.android.sdklib.SdkConstants; import com.android.sdklib.annotations.VisibleForTesting; import com.android.sdklib.io.IAbstractFile; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PlayAnimationMenu.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PlayAnimationMenu.java index f0cb09b..79c68d9 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PlayAnimationMenu.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PlayAnimationMenu.java @@ -25,8 +25,8 @@ import com.android.ide.common.rendering.api.RenderSession; import com.android.ide.common.rendering.api.Result; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditor; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.wizards.newxmlfile.NewXmlFileWizard; +import com.android.resources.ResourceType; import com.android.sdklib.util.Pair; import org.eclipse.core.resources.IProject; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/RulesEngine.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/RulesEngine.java index afd7848..c5dbec5 100755 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/RulesEngine.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/RulesEngine.java @@ -36,13 +36,13 @@ import com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorP import com.android.ide.eclipse.adt.internal.editors.layout.gle2.SimpleElement; import com.android.ide.eclipse.adt.internal.editors.layout.uimodel.UiViewElementNode; import com.android.ide.eclipse.adt.internal.resources.IResourceRepository; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager; import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData; import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import com.android.ide.eclipse.adt.internal.ui.ReferenceChooserDialog; import com.android.ide.eclipse.adt.internal.ui.ResourceChooser; +import com.android.resources.ResourceType; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.internal.project.ProjectProperties; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/descriptors/ThemeAttributeDescriptor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/descriptors/ThemeAttributeDescriptor.java index db48dae..c078562 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/descriptors/ThemeAttributeDescriptor.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/descriptors/ThemeAttributeDescriptor.java @@ -23,7 +23,7 @@ import com.android.ide.eclipse.adt.internal.editors.descriptors.TextAttributeDes import com.android.ide.eclipse.adt.internal.editors.uimodel.UiAttributeNode; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiResourceAttributeNode; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; +import com.android.resources.ResourceType; /** * Describes a Theme/Style XML attribute displayed by a {@link UiResourceAttributeNode} diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/resources/descriptors/ResourcesDescriptors.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/resources/descriptors/ResourcesDescriptors.java index 2bb7f0f..6e516e6 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/resources/descriptors/ResourcesDescriptors.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/resources/descriptors/ResourcesDescriptors.java @@ -25,7 +25,7 @@ import com.android.ide.eclipse.adt.internal.editors.descriptors.IDescriptorProvi import com.android.ide.eclipse.adt.internal.editors.descriptors.ListAttributeDescriptor; import com.android.ide.eclipse.adt.internal.editors.descriptors.TextAttributeDescriptor; import com.android.ide.eclipse.adt.internal.editors.descriptors.TextValueDescriptor; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; +import com.android.resources.ResourceType; /** diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/uimodel/UiResourceAttributeNode.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/uimodel/UiResourceAttributeNode.java index 87c55d0..32e6167 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/uimodel/UiResourceAttributeNode.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/uimodel/UiResourceAttributeNode.java @@ -23,11 +23,11 @@ import com.android.ide.eclipse.adt.internal.editors.descriptors.TextAttributeDes import com.android.ide.eclipse.adt.internal.editors.ui.SectionHelper; import com.android.ide.eclipse.adt.internal.resources.IResourceRepository; import com.android.ide.eclipse.adt.internal.resources.ResourceItem; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager; import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData; import com.android.ide.eclipse.adt.internal.ui.ReferenceChooserDialog; import com.android.ide.eclipse.adt.internal.ui.ResourceChooser; +import com.android.resources.ResourceType; import org.eclipse.core.resources.IProject; import org.eclipse.jface.window.Window; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/xml/Hyperlinks.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/xml/Hyperlinks.java index 2fa42b1..5225911 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/xml/Hyperlinks.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/xml/Hyperlinks.java @@ -38,7 +38,6 @@ import com.android.ide.eclipse.adt.AndroidConstants; import com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor; import com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditor; import com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration; import com.android.ide.eclipse.adt.internal.resources.manager.FolderTypeRelationship; import com.android.ide.eclipse.adt.internal.resources.manager.ProjectResources; @@ -49,6 +48,7 @@ import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager; import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import com.android.ide.eclipse.adt.io.IFileWrapper; +import com.android.resources.ResourceType; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.SdkConstants; import com.android.sdklib.annotations.VisibleForTesting; @@ -511,7 +511,7 @@ public class Hyperlinks { if (frameworkResources == null) { return false; } - Map<String, Map<String, ResourceValue>> configuredResources = + Map<ResourceType, Map<String, ResourceValue>> configuredResources = frameworkResources.getConfiguredResources(new FolderConfiguration()); Set<String> seen = new HashSet<String>(); @@ -522,7 +522,7 @@ public class Hyperlinks { // @drawable/popup_full_dark, which when looked up will finally yield // the XML path we are looking for while (true) { - Map<String, ResourceValue> typeMap = configuredResources.get(type.getName()); + Map<String, ResourceValue> typeMap = configuredResources.get(type); if (typeMap != null) { ResourceValue value = typeMap.get(name); if (value != null) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigurationTab.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigurationTab.java index c3f319f..d51cd8f 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigurationTab.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigurationTab.java @@ -289,7 +289,6 @@ public class AndroidJUnitLaunchConfigurationTab extends AbstractLaunchConfigurat loaderLabel.setLayoutData(gd); mInstrumentationCombo = new Combo(comp, SWT.DROP_DOWN | SWT.READ_ONLY); - gd = new GridData(GridData.FILL_HORIZONTAL); mInstrumentationCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); mInstrumentationCombo.clearSelection(); mInstrumentationCombo.addSelectionListener(new SelectionAdapter() { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ExportHelper.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ExportHelper.java index ddb4321..3b0622a 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ExportHelper.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ExportHelper.java @@ -98,7 +98,7 @@ public final class ExportHelper { // debuggable in the manifest will override this and generate a debug build IResource manifestResource = project.findMember(SdkConstants.FN_ANDROID_MANIFEST_XML); if (manifestResource.getType() != IResource.FILE) { - new CoreException(new Status(IStatus.ERROR, AdtPlugin.PLUGIN_ID, + throw new CoreException(new Status(IStatus.ERROR, AdtPlugin.PLUGIN_ID, String.format("%1$s missing.", SdkConstants.FN_ANDROID_MANIFEST_XML))); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringRefactoring.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringRefactoring.java index f1d6aa0..1a41caf 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringRefactoring.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringRefactoring.java @@ -26,8 +26,8 @@ import com.android.ide.eclipse.adt.internal.editors.resources.descriptors.Resour import com.android.ide.eclipse.adt.internal.editors.uimodel.UiAttributeNode; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode; import com.android.ide.eclipse.adt.internal.project.AndroidManifestHelper; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFolderType; +import com.android.resources.ResourceType; import com.android.sdklib.SdkConstants; import com.android.sdklib.xml.ManifestData; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/IIdResourceItem.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/IIdResourceItem.java index 7ed6836..acc4cf2 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/IIdResourceItem.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/IIdResourceItem.java @@ -16,6 +16,8 @@ package com.android.ide.eclipse.adt.internal.resources; +import com.android.resources.ResourceType; + /** * Classes which implements this interface provides a method indicating the state of a resource of * type {@link ResourceType#ID}. diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/IResourceRepository.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/IResourceRepository.java index d125dc0..1abd9eb 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/IResourceRepository.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/IResourceRepository.java @@ -16,6 +16,8 @@ package com.android.ide.eclipse.adt.internal.resources; +import com.android.resources.ResourceType; + /** * A repository of resources. This allows access to the resource by {@link ResourceType}. */ diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/ResourceHelper.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/ResourceHelper.java new file mode 100644 index 0000000..327bd89 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/ResourceHelper.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.eclipse.org/org/documents/epl-v10.php + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ide.eclipse.adt.internal.resources; + +import com.android.resources.ResourceType; + + +public class ResourceHelper { + + /** + * Returns a formatted string usable in an XML to use the specified {@link ResourceItem}. + * @param resourceItem The resource item. + * @param system Whether this is a system resource or a project resource. + * @return a string in the format @[type]/[name] + */ + public static String getXmlString(ResourceType type, ResourceItem resourceItem, + boolean system) { + if (type == ResourceType.ID && resourceItem instanceof IIdResourceItem) { + IIdResourceItem idResource = (IIdResourceItem)resourceItem; + if (idResource.isDeclaredInline()) { + return (system?"@android:":"@+") + type.getName() + "/" + resourceItem.getName(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + } + + return (system?"@android:":"@") + type.getName() + "/" + resourceItem.getName(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + +} diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/CompiledResourcesMonitor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/CompiledResourcesMonitor.java index 5d31195..2233cab 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/CompiledResourcesMonitor.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/CompiledResourcesMonitor.java @@ -20,9 +20,9 @@ import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.AndroidConstants; import com.android.ide.eclipse.adt.internal.project.AndroidManifestHelper; import com.android.ide.eclipse.adt.internal.project.ProjectHelper; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonitor.IFileListener; import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonitor.IProjectListener; +import com.android.resources.ResourceType; import com.android.sdklib.xml.ManifestData; import org.eclipse.core.resources.IFile; @@ -36,6 +36,7 @@ import org.eclipse.core.runtime.IStatus; import java.lang.reflect.Field; import java.lang.reflect.Modifier; +import java.util.EnumMap; import java.util.HashMap; import java.util.Map; @@ -147,8 +148,8 @@ public final class CompiledResourcesMonitor implements IFileListener, IProjectLi if (clazz != null) { // create the maps to store the result of the parsing - Map<String, Map<String, Integer>> resourceValueMap = - new HashMap<String, Map<String, Integer>>(); + Map<ResourceType, Map<String, Integer>> resourceValueMap = + new EnumMap<ResourceType, Map<String, Integer>>(ResourceType.class); Map<Integer, String[]> genericValueToNameMap = new HashMap<Integer, String[]>(); Map<IntArrayWrapper, String> styleableValueToNameMap = @@ -181,30 +182,35 @@ public final class CompiledResourcesMonitor implements IFileListener, IProjectLi * @return True if we managed to parse the R class. */ private boolean parseClass(Class<?> rClass, Map<Integer, String[]> genericValueToNameMap, - Map<IntArrayWrapper, String> styleableValueToNameMap, Map<String, + Map<IntArrayWrapper, String> styleableValueToNameMap, Map<ResourceType, Map<String, Integer>> resourceValueMap) { try { for (Class<?> inner : rClass.getDeclaredClasses()) { - String resType = inner.getSimpleName(); - - Map<String, Integer> fullMap = new HashMap<String, Integer>(); - resourceValueMap.put(resType, fullMap); - - for (Field f : inner.getDeclaredFields()) { - // only process static final fields. - int modifiers = f.getModifiers(); - if (Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers)) { - Class<?> type = f.getType(); - if (type.isArray() && type.getComponentType() == int.class) { - // if the object is an int[] we put it in the styleable map - styleableValueToNameMap.put(new IntArrayWrapper((int[]) f.get(null)), - f.getName()); - } else if (type == int.class) { - Integer value = (Integer) f.get(null); - genericValueToNameMap.put(value, new String[] { f.getName(), resType }); - fullMap.put(f.getName(), value); - } else { - assert false; + String resTypeName = inner.getSimpleName(); + ResourceType resType = ResourceType.getEnum(resTypeName); + + if (resType != null) { + Map<String, Integer> fullMap = new HashMap<String, Integer>(); + resourceValueMap.put(resType, fullMap); + + for (Field f : inner.getDeclaredFields()) { + // only process static final fields. + int modifiers = f.getModifiers(); + if (Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers)) { + Class<?> type = f.getType(); + if (type.isArray() && type.getComponentType() == int.class) { + // if the object is an int[] we put it in the styleable map + styleableValueToNameMap.put( + new IntArrayWrapper((int[]) f.get(null)), + f.getName()); + } else if (type == int.class) { + Integer value = (Integer) f.get(null); + genericValueToNameMap.put(value, + new String[] { f.getName(), resType.getName() }); + fullMap.put(f.getName(), value); + } else { + assert false; + } } } } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationship.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationship.java index 3a9c7a1..77a8649 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationship.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationship.java @@ -16,7 +16,7 @@ package com.android.ide.eclipse.adt.internal.resources.manager; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; +import com.android.resources.ResourceType; import java.util.ArrayList; import java.util.HashMap; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/IdResourceItem.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/IdResourceItem.java index a3e42c6..8b142fb 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/IdResourceItem.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/IdResourceItem.java @@ -17,7 +17,7 @@ package com.android.ide.eclipse.adt.internal.resources.manager; import com.android.ide.eclipse.adt.internal.resources.IIdResourceItem; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; +import com.android.resources.ResourceType; /** * Represents a resource item of type {@link ResourceType#ID} diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/IntArrayWrapper.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/IntArrayWrapper.java index f21b15e..3e614ed 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/IntArrayWrapper.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/IntArrayWrapper.java @@ -23,24 +23,27 @@ import java.util.Arrays; * Wrapper around a int[] to provide hashCode/equals support. */ public final class IntArrayWrapper { - + private int[] mData; - + public IntArrayWrapper(int[] data) { mData = data; } - + public void set(int[] data) { mData = data; } - + @Override public int hashCode() { return Arrays.hashCode(mData); } - + @Override public boolean equals(Object obj) { + if (obj == null) { + return false; + } if (getClass().equals(obj.getClass())) { return Arrays.equals(mData, ((IntArrayWrapper)obj).mData); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/MultiResourceFile.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/MultiResourceFile.java index fc5ec4f..a3223c0 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/MultiResourceFile.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/MultiResourceFile.java @@ -19,7 +19,7 @@ package com.android.ide.eclipse.adt.internal.resources.manager; import com.android.ide.common.rendering.api.ResourceValue; import com.android.ide.common.resources.ValueResourceParser; import com.android.ide.common.resources.ValueResourceParser.IValueResourceRepository; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; +import com.android.resources.ResourceType; import com.android.sdklib.io.IAbstractFile; import com.android.sdklib.io.StreamException; @@ -28,7 +28,9 @@ import org.xml.sax.SAXException; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.EnumMap; import java.util.HashMap; +import java.util.Map; import java.util.Set; import javax.xml.parsers.ParserConfigurationException; @@ -45,8 +47,8 @@ public final class MultiResourceFile extends ResourceFile implements IValueResou private final static SAXParserFactory sParserFactory = SAXParserFactory.newInstance(); - private final HashMap<ResourceType, HashMap<String, ResourceValue>> mResourceItems = - new HashMap<ResourceType, HashMap<String, ResourceValue>>(); + private final Map<ResourceType, HashMap<String, ResourceValue>> mResourceItems = + new EnumMap<ResourceType, HashMap<String, ResourceValue>>(ResourceType.class); public MultiResourceFile(IAbstractFile file, ResourceFolder folder) { super(file, folder); @@ -133,29 +135,25 @@ public final class MultiResourceFile extends ResourceFile implements IValueResou * @param resType The type of the resource * @param value The value of the resource. */ - public void addResourceValue(String resType, ResourceValue value) { - ResourceType type = ResourceType.getEnum(resType); - assert type != null; - if (type != null) { - HashMap<String, ResourceValue> list = mResourceItems.get(type); - - // if the list does not exist, create it. - if (list == null) { - list = new HashMap<String, ResourceValue>(); - mResourceItems.put(type, list); - } else { - // look for a possible value already existing. - ResourceValue oldValue = list.get(value.getName()); - - if (oldValue != null) { - oldValue.replaceWith(value); - return; - } + public void addResourceValue(ResourceType resType, ResourceValue value) { + HashMap<String, ResourceValue> list = mResourceItems.get(resType); + + // if the list does not exist, create it. + if (list == null) { + list = new HashMap<String, ResourceValue>(); + mResourceItems.put(resType, list); + } else { + // look for a possible value already existing. + ResourceValue oldValue = list.get(value.getName()); + + if (oldValue != null) { + oldValue.replaceWith(value); + return; } - - // empty list or no match found? add the given resource - list.put(value.getName(), value); } + + // empty list or no match found? add the given resource + list.put(value.getName(), value); } @Override diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResourceItem.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResourceItem.java index 7c382d5..845a974 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResourceItem.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResourceItem.java @@ -1,8 +1,8 @@ package com.android.ide.eclipse.adt.internal.resources.manager; import com.android.ide.eclipse.adt.internal.resources.ResourceItem; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration; +import com.android.resources.ResourceType; import java.util.ArrayList; import java.util.Collections; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java index 1580906..f0939da 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java @@ -19,7 +19,6 @@ package com.android.ide.eclipse.adt.internal.resources.manager; import com.android.ide.common.rendering.api.ResourceValue; import com.android.ide.eclipse.adt.internal.resources.IResourceRepository; import com.android.ide.eclipse.adt.internal.resources.ResourceItem; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration; import com.android.ide.eclipse.adt.internal.resources.configurations.LanguageQualifier; import com.android.ide.eclipse.adt.internal.resources.configurations.RegionQualifier; @@ -27,6 +26,7 @@ import com.android.ide.eclipse.adt.internal.resources.configurations.ResourceQua import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import com.android.ide.eclipse.adt.io.IFolderWrapper; +import com.android.resources.ResourceType; import com.android.sdklib.io.IAbstractFolder; import org.eclipse.core.resources.IFolder; @@ -35,6 +35,7 @@ import org.eclipse.core.resources.IProject; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.EnumMap; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -52,14 +53,14 @@ public class ProjectResources implements IResourceRepository { // project IDs that start at a much higher // value - private final HashMap<ResourceFolderType, List<ResourceFolder>> mFolderMap = - new HashMap<ResourceFolderType, List<ResourceFolder>>(); + private final Map<ResourceFolderType, List<ResourceFolder>> mFolderMap = + new EnumMap<ResourceFolderType, List<ResourceFolder>>(ResourceFolderType.class); - private final HashMap<ResourceType, List<ProjectResourceItem>> mResourceMap = - new HashMap<ResourceType, List<ProjectResourceItem>>(); + private final Map<ResourceType, List<ProjectResourceItem>> mResourceMap = + new EnumMap<ResourceType, List<ProjectResourceItem>>(ResourceType.class); /** Map of (name, id) for resources of type {@link ResourceType#ID} coming from R.java */ - private Map<String, Map<String, Integer>> mResourceValueMap; + private Map<ResourceType, Map<String, Integer>> mResourceValueMap; /** Map of (id, [name, resType]) for all resources coming from R.java */ private Map<Integer, String[]> mResIdValueToNameMap; /** Map of (int[], name) for styleable resources coming from R.java */ @@ -71,7 +72,7 @@ public class ProjectResources implements IResourceRepository { /** Cached list of {@link IdResourceItem}. This is mix of IdResourceItem created by * {@link MultiResourceFile} for ids coming from XML files under res/values and * {@link IdResourceItem} created manually, from the list coming from R.java */ - private final ArrayList<IdResourceItem> mIdResourceList = new ArrayList<IdResourceItem>(); + private final List<IdResourceItem> mIdResourceList = new ArrayList<IdResourceItem>(); private final boolean mIsFrameworkRepository; private final IProject mProject; @@ -266,7 +267,7 @@ public class ProjectResources implements IResourceRepository { // in case ResourceType.ID haven't been added yet because there's no id defined // in XML, we check on the list of compiled id resources. if (list.indexOf(ResourceType.ID) == -1 && mResourceValueMap != null) { - Map<String, Integer> map = mResourceValueMap.get(ResourceType.ID.getName()); + Map<String, Integer> map = mResourceValueMap.get(ResourceType.ID); if (map != null && map.size() > 0) { list.add(ResourceType.ID); } @@ -407,11 +408,11 @@ public class ProjectResources implements IResourceRepository { * Returns the resources values matching a given {@link FolderConfiguration}. * @param referenceConfig the configuration that each value must match. */ - public Map<String, Map<String, ResourceValue>> getConfiguredResources( + public Map<ResourceType, Map<String, ResourceValue>> getConfiguredResources( FolderConfiguration referenceConfig) { - Map<String, Map<String, ResourceValue>> map = - new HashMap<String, Map<String, ResourceValue>>(); + Map<ResourceType, Map<String, ResourceValue>> map = + new EnumMap<ResourceType, Map<String, ResourceValue>>(ResourceType.class); // if the project contains libraries, we need to add the libraries resources here // so that they are accessible to the layout rendering. @@ -436,10 +437,10 @@ public class ProjectResources implements IResourceRepository { // we don't want to simply replace the whole map, but instead merge the // content of any sub-map - Map<String, Map<String, ResourceValue>> libMap = + Map<ResourceType, Map<String, ResourceValue>> libMap = libRes.getConfiguredResources(referenceConfig); - for (Entry<String, Map<String, ResourceValue>> entry : libMap.entrySet()) { + for (Entry<ResourceType, Map<String, ResourceValue>> entry : libMap.entrySet()) { // get the map currently in the result map for this resource type Map<String, ResourceValue> tempMap = map.get(entry.getKey()); if (tempMap == null) { @@ -464,16 +465,15 @@ public class ProjectResources implements IResourceRepository { // special case for Id since there's a mix of compiled id (declared inline) and id declared // in the XML files. if (mIdResourceList.size() > 0) { - String idType = ResourceType.ID.getName(); - Map<String, ResourceValue> idMap = map.get(idType); + Map<String, ResourceValue> idMap = map.get(ResourceType.ID); if (idMap == null) { idMap = new HashMap<String, ResourceValue>(); - map.put(idType, idMap); + map.put(ResourceType.ID, idMap); } for (IdResourceItem id : mIdResourceList) { // FIXME: cache the ResourceValue! - idMap.put(id.getName(), new ResourceValue(idType, id.getName(), + idMap.put(id.getName(), new ResourceValue(ResourceType.ID, id.getName(), mIsFrameworkRepository)); } @@ -488,11 +488,10 @@ public class ProjectResources implements IResourceRepository { referenceConfig); // check if a map for this type already exists - String resName = key.getName(); - Map<String, ResourceValue> resMap = map.get(resName); + Map<String, ResourceValue> resMap = map.get(key); if (resMap == null) { // just use the local results. - map.put(resName, localResMap); + map.put(key, localResMap); } else { // add to the library results. resMap.putAll(localResMap); @@ -549,19 +548,19 @@ public class ProjectResources implements IResourceRepository { * internal map, then new id values are dynamically generated (and stored so that queries * with the same names will return the same value). */ - public Integer getResourceValue(String type, String name) { + public Integer getResourceValue(ResourceType type, String name) { if (mResourceValueMap != null) { Map<String, Integer> map = mResourceValueMap.get(type); if (map != null) { Integer value = map.get(name); // if no value - if (value == null && ResourceType.ID.getName().equals(type)) { + if (value == null && ResourceType.ID == type) { return getDynamicId(name); } return value; - } else if (ResourceType.ID.getName().equals(type)) { + } else if (ResourceType.ID == type) { return getDynamicId(name); } } @@ -925,7 +924,7 @@ public class ProjectResources implements IResourceRepository { */ void setCompiledResources(Map<Integer, String[]> resIdValueToNameMap, Map<IntArrayWrapper, String> styleableValueMap, - Map<String, Map<String, Integer>> resourceValueMap) { + Map<ResourceType, Map<String, Integer>> resourceValueMap) { mResourceValueMap = resourceValueMap; mResIdValueToNameMap = resIdValueToNameMap; mStyleableValueToNameMap = styleableValueMap; @@ -953,7 +952,7 @@ public class ProjectResources implements IResourceRepository { // get the list of compile id resources. Map<String, Integer> idMap = null; if (mResourceValueMap != null) { - idMap = mResourceValueMap.get(ResourceType.ID.getName()); + idMap = mResourceValueMap.get(ResourceType.ID); } if (idMap == null) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceFile.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceFile.java index b5538ac..b754201 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceFile.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceFile.java @@ -17,8 +17,8 @@ package com.android.ide.eclipse.adt.internal.resources.manager; import com.android.ide.common.rendering.api.ResourceValue; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration; +import com.android.resources.ResourceType; import com.android.sdklib.io.IAbstractFile; import java.util.Collection; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceFolder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceFolder.java index f9cc256..b75f226 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceFolder.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceFolder.java @@ -17,9 +17,9 @@ package com.android.ide.eclipse.adt.internal.resources.manager; import com.android.ide.eclipse.adt.internal.resources.ResourceItem; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration; import com.android.ide.eclipse.adt.io.IFileWrapper; +import com.android.resources.ResourceType; import com.android.sdklib.io.IAbstractFile; import com.android.sdklib.io.IAbstractFolder; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceManager.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceManager.java index d2e988b..684620b 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceManager.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceManager.java @@ -18,7 +18,6 @@ package com.android.ide.eclipse.adt.internal.resources.manager; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.AndroidConstants; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration; import com.android.ide.eclipse.adt.internal.resources.configurations.ResourceQualifier; import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonitor.IFileListener; @@ -26,6 +25,7 @@ import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonit import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonitor.IProjectListener; import com.android.ide.eclipse.adt.io.IFileWrapper; import com.android.ide.eclipse.adt.io.IFolderWrapper; +import com.android.resources.ResourceType; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.SdkConstants; import com.android.sdklib.io.FolderWrapper; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/SingleResourceFile.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/SingleResourceFile.java index 403b266..953e57a 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/SingleResourceFile.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/SingleResourceFile.java @@ -18,8 +18,8 @@ package com.android.ide.eclipse.adt.internal.resources.manager; import com.android.ide.common.rendering.api.DensityBasedResourceValue; import com.android.ide.common.rendering.api.ResourceValue; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.configurations.PixelDensityQualifier; +import com.android.resources.ResourceType; import com.android.sdklib.io.IAbstractFile; import java.util.ArrayList; @@ -71,11 +71,11 @@ public class SingleResourceFile extends ResourceFile { PixelDensityQualifier qualifier = folder.getConfiguration().getPixelDensityQualifier(); if (qualifier == null) { - mValue = new ResourceValue(mType.getName(), getResourceName(mType), + mValue = new ResourceValue(mType, getResourceName(mType), file.getOsLocation(), isFramework()); } else { mValue = new DensityBasedResourceValue( - mType.getName(), + mType, getResourceName(mType), file.getOsLocation(), qualifier.getValue(), diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/AndroidTargetParser.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/AndroidTargetParser.java index f1f1aa7..6426fdb 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/AndroidTargetParser.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/AndroidTargetParser.java @@ -27,9 +27,9 @@ import com.android.ide.eclipse.adt.internal.editors.menu.descriptors.MenuDescrip import com.android.ide.eclipse.adt.internal.editors.xml.descriptors.XmlDescriptors; import com.android.ide.eclipse.adt.internal.resources.IResourceRepository; import com.android.ide.eclipse.adt.internal.resources.ResourceItem; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.manager.ProjectResources; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager; +import com.android.resources.ResourceType; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.SdkConstants; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/FrameworkResourceRepository.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/FrameworkResourceRepository.java index 91b0082..247a888 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/FrameworkResourceRepository.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/FrameworkResourceRepository.java @@ -18,7 +18,7 @@ package com.android.ide.eclipse.adt.internal.sdk; import com.android.ide.eclipse.adt.internal.resources.IResourceRepository; import com.android.ide.eclipse.adt.internal.resources.ResourceItem; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; +import com.android.resources.ResourceType; import java.util.List; import java.util.Map; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ReferenceChooserDialog.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ReferenceChooserDialog.java index ba4be6a..2a170a4 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ReferenceChooserDialog.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ReferenceChooserDialog.java @@ -20,8 +20,9 @@ import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.refactorings.extractstring.ExtractStringRefactoring; import com.android.ide.eclipse.adt.internal.refactorings.extractstring.ExtractStringWizard; import com.android.ide.eclipse.adt.internal.resources.IResourceRepository; +import com.android.ide.eclipse.adt.internal.resources.ResourceHelper; import com.android.ide.eclipse.adt.internal.resources.ResourceItem; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; +import com.android.resources.ResourceType; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IStatus; @@ -64,7 +65,7 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { private static Pattern sInlineIdResourcePattern = Pattern.compile("@\\+id/(.+)"); //$NON-NLS-1$ private static IDialogSettings sDialogSettings = new DialogSettings(""); - + private IResourceRepository mResources; private String mCurrentResource; private FilteredTree mFilteredTree; @@ -73,7 +74,7 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { private TreeViewer mTreeViewer; /** - * @param project + * @param project * @param parent */ public ReferenceChooserDialog(IProject project, IResourceRepository resources, Shell parent) { @@ -86,14 +87,14 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { setTitle("Reference Chooser"); setMessage(String.format("Choose a resource")); - + setDialogBoundsSettings(sDialogSettings, getDialogBoundsStrategy()); } public void setCurrentResource(String resource) { mCurrentResource = resource; } - + public String getCurrentResource() { return mCurrentResource; } @@ -111,12 +112,13 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { // get the resource type and the resource item ResourceType resourceType = (ResourceType)treeSelection.getFirstSegment(); ResourceItem resourceItem = (ResourceItem)treeSelection.getLastSegment(); - - mCurrentResource = resourceType.getXmlString(resourceItem, false /* system */); + + mCurrentResource = ResourceHelper.getXmlString(resourceType, + resourceItem, false /* system */); } } } - + @Override protected Control createDialogArea(Composite parent) { Composite top = (Composite)super.createDialogArea(parent); @@ -129,10 +131,10 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { // setup the initial selection setupInitialSelection(); - + // create the "New Resource" button createNewResButtons(top); - + return top; } @@ -149,7 +151,7 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { private void createFilteredTree(Composite parent) { mFilteredTree = new FilteredTree(parent, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION, new PatternFilter()); - + GridData data = new GridData(); data.widthHint = convertWidthInCharsToPixels(60); data.heightHint = convertHeightInCharsToPixels(18); @@ -159,10 +161,10 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { data.verticalAlignment = GridData.FILL; mFilteredTree.setLayoutData(data); mFilteredTree.setFont(parent.getFont()); - + mTreeViewer = mFilteredTree.getViewer(); Tree tree = mTreeViewer.getTree(); - + tree.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { handleDoubleClick(); @@ -172,7 +174,7 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { handleSelection(); } }); - + mTreeViewer.setLabelProvider(new ResourceLabelProvider()); mTreeViewer.setContentProvider(new ResourceContentProvider(false /* fullLevels */)); mTreeViewer.setInput(mResources); @@ -188,7 +190,7 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { buttonPressed(IDialogConstants.OK_ID); } } - + /** * Returns the selected item in the tree as a {@link TreePath} object. * @return the <code>TreePath</code> object or <code>null</code> if there was no selection. @@ -198,19 +200,19 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { if (selection instanceof TreeSelection) { TreeSelection treeSelection = (TreeSelection)selection; TreePath[] treePaths = treeSelection.getPaths(); - + // the selection mode is SWT.SINGLE, so we just get the first one. if (treePaths.length > 0) { return treePaths[0]; } } - + return null; } - + private boolean validateCurrentSelection() { TreePath treeSelection = getSelection(); - + IStatus status; if (treeSelection != null) { if (treeSelection.getSegmentCount() == 2) { @@ -227,7 +229,7 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { IStatus.ERROR, "", //$NON-NLS-1$ null); } - + updateStatus(status); return status.isOK(); @@ -239,10 +241,10 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { */ private void updateNewResButton() { ResourceType type = getSelectedResourceType(); - + // We only support adding new strings right now mNewResButton.setEnabled(type == ResourceType.STRING); - + String title = String.format("New %1$s...", type == null ? "Resource" : type.getDisplayName()); mNewResButton.setText(title); @@ -256,7 +258,7 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); - + ResourceType type = getSelectedResourceType(); // We currently only support strings @@ -271,7 +273,7 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { if (op.run(w.getDisplay().getActiveShell(), wizard.getDefaultPageTitle()) == IDialogConstants.OK_ID) { mTreeViewer.refresh(); - + // select it if possible setupInitialSelection(type, ref.getXmlStringId()); } @@ -279,7 +281,7 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { // Interrupted. Pass. } } - } + } } /** @@ -298,7 +300,7 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { } return type; } - + /** * Sets up the initial selection. * <p/> @@ -322,14 +324,14 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { if (resourceType != null) { // get the matching name String resourceName = m.group(2); - + // setup initial selection setupInitialSelection(resourceType, resourceName); } } } } - + /** * Sets up the initial selection based on a {@link ResourceType} and a resource name. * @param resourceType the resource type. @@ -338,7 +340,7 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { private void setupInitialSelection(ResourceType resourceType, String resourceName) { // get all the resources of this type ResourceItem[] resourceItems = mResources.getResources(resourceType); - + for (ResourceItem resourceItem : resourceItems) { if (resourceName.equals(resourceItem.getName())) { // name of the resource match, we select it, @@ -346,12 +348,12 @@ public class ReferenceChooserDialog extends SelectionStatusDialog { mFilteredTree.getViewer().setSelection( new TreeSelection(treePath), true /*reveal*/); - + // and we're done. return; } } - + // if we get here, the resource type is valid, but the resource is missing. // we select and expand the resource type element. TreePath treePath = new TreePath(new Object[] { resourceType }); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceChooser.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceChooser.java index e2b910c..92647c8 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceChooser.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceChooser.java @@ -19,8 +19,9 @@ package com.android.ide.eclipse.adt.internal.ui; import com.android.ide.eclipse.adt.internal.refactorings.extractstring.ExtractStringRefactoring; import com.android.ide.eclipse.adt.internal.refactorings.extractstring.ExtractStringWizard; import com.android.ide.eclipse.adt.internal.resources.IResourceRepository; +import com.android.ide.eclipse.adt.internal.resources.ResourceHelper; import com.android.ide.eclipse.adt.internal.resources.ResourceItem; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; +import com.android.resources.ResourceType; import org.eclipse.core.resources.IProject; import org.eclipse.jface.dialogs.IDialogConstants; @@ -41,7 +42,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; /** - * A dialog to let the user select a resource based on a resource type. + * A dialog to let the user select a resource based on a resource type. */ public class ResourceChooser extends AbstractElementListSelectionDialog { @@ -51,16 +52,16 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { private IResourceRepository mProjectResources; - private final static boolean SHOW_SYSTEM_RESOURCE = false; // TODO re-enable at some point + private final static boolean SHOW_SYSTEM_RESOURCE = false; // TODO re-enable at some point private Pattern mSystemResourcePattern; private IResourceRepository mSystemResources; private Button mProjectButton; private Button mSystemButton; - + private String mCurrentResource; private final IProject mProject; - + /** * Creates a Resource Chooser dialog. * @param project Project being worked on @@ -78,7 +79,7 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { mResourceType = type; mProjectResources = projectResources; - + mProjectResourcePattern = Pattern.compile( "@" + mResourceType.getName() + "/(.+)"); //$NON-NLS-1$ //$NON-NLS-2$ @@ -92,11 +93,11 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { setMessage(String.format("Choose a %1$s resource", mResourceType.getDisplayName().toLowerCase())); } - + public void setCurrentResource(String resource) { mCurrentResource = resource; } - + public String getCurrentResource() { return mCurrentResource; } @@ -106,9 +107,9 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { Object[] elements = getSelectedElements(); if (elements.length == 1 && elements[0] instanceof ResourceItem) { ResourceItem item = (ResourceItem)elements[0]; - - mCurrentResource = mResourceType.getXmlString(item, - SHOW_SYSTEM_RESOURCE && mSystemButton.getSelection()); + + mCurrentResource = ResourceHelper.getXmlString(mResourceType, item, + SHOW_SYSTEM_RESOURCE && mSystemButton.getSelection()); } } @@ -121,13 +122,13 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { createButtons(top); createFilterText(top); createFilteredList(top); - + // create the "New Resource" button createNewResButtons(top); setupResourceList(); selectResourceString(mCurrentResource); - + return top; } @@ -168,7 +169,7 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { * @param top the parent composite */ private void createNewResButtons(Composite top) { - + Button newResButton = new Button(top, SWT.NONE); String title = String.format("New %1$s...", mResourceType.getDisplayName()); @@ -181,14 +182,14 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); - + if (mResourceType == ResourceType.STRING) { createNewString(); } } }); } - + private void createNewString() { ExtractStringRefactoring ref = new ExtractStringRefactoring( mProject, true /*enforceNew*/); @@ -201,7 +202,7 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { // Recompute the "current resource" to select the new id setupResourceList(); - + // select it if possible selectItemName(ref.getXmlStringId()); } @@ -215,7 +216,7 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { */ private IResourceRepository getCurrentRepository() { IResourceRepository repo = mProjectResources; - + if (SHOW_SYSTEM_RESOURCE && mSystemButton.getSelection()) { repo = mSystemResources; } @@ -229,7 +230,7 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { IResourceRepository repo = getCurrentRepository(); setListElements(repo.getResources(mResourceType)); } - + /** * Select an item by its name, if possible. */ @@ -240,8 +241,8 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { IResourceRepository repo = getCurrentRepository(); - ResourceItem[] items = repo.getResources(mResourceType); - + ResourceItem[] items = repo.getResources(mResourceType); + for (ResourceItem item : items) { if (itemName.equals(item.getName())) { setSelection(new Object[] { item }); @@ -257,7 +258,7 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { private void selectResourceString(String resourceString) { boolean isSystem = false; String itemName = null; - + // Is this a system resource? // If not a system resource or if they are not available, this will be a project res. if (SHOW_SYSTEM_RESOURCE) { @@ -275,7 +276,7 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { itemName = m.group(1); } } - + // Update the repository selection if (SHOW_SYSTEM_RESOURCE) { mProjectButton.setSelection(!isSystem); @@ -284,7 +285,7 @@ public class ResourceChooser extends AbstractElementListSelectionDialog { // Update the list setupResourceList(); - + // If we have a selection name, select it if (itemName != null) { selectItemName(itemName); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceContentProvider.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceContentProvider.java index 4442b71..f57b74e 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceContentProvider.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceContentProvider.java @@ -18,9 +18,9 @@ package com.android.ide.eclipse.adt.internal.ui; import com.android.ide.eclipse.adt.internal.resources.IResourceRepository; import com.android.ide.eclipse.adt.internal.resources.ResourceItem; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.manager.ConfigurableResourceItem; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFile; +import com.android.resources.ResourceType; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceLabelProvider.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceLabelProvider.java index a67fda4..50e1d07 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceLabelProvider.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ResourceLabelProvider.java @@ -18,10 +18,10 @@ package com.android.ide.eclipse.adt.internal.ui; import com.android.ide.eclipse.adt.internal.resources.IIdResourceItem; import com.android.ide.eclipse.adt.internal.resources.ResourceItem; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.manager.ConfigurableResourceItem; import com.android.ide.eclipse.adt.internal.resources.manager.IdResourceItem; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFile; +import com.android.resources.ResourceType; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileCreationPage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileCreationPage.java index b8162b6..b20da44 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileCreationPage.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileCreationPage.java @@ -1120,7 +1120,7 @@ class NewXmlFileCreationPage extends WizardPage { // The configuration is invalid. We still update the path but this time // do it manually on the string. if (wsFolderPath.startsWith(RES_FOLDER_ABS)) { - wsFolderPath.replaceFirst( + wsFolderPath = wsFolderPath.replaceFirst( "^(" + RES_FOLDER_ABS +")[^-]*(.*)", //$NON-NLS-1$ //$NON-NLS-2$ "\\1" + type.getResFolderName() + "\\2"); //$NON-NLS-1$ //$NON-NLS-2$ } else { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/ResourceNameValidator.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/ResourceNameValidator.java index 013e5e2..cc1aa25 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/ResourceNameValidator.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/ResourceNameValidator.java @@ -20,10 +20,10 @@ import static com.android.ide.eclipse.adt.AndroidConstants.DOT_XML; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.AndroidConstants; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.manager.ProjectResourceItem; import com.android.ide.eclipse.adt.internal.resources.manager.ProjectResources; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager; +import com.android.resources.ResourceType; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IStatus; diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/tests/functests/layoutRendering/ApiDemosRenderingTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/tests/functests/layoutRendering/ApiDemosRenderingTest.java index c11c189..3e66649 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/tests/functests/layoutRendering/ApiDemosRenderingTest.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/tests/functests/layoutRendering/ApiDemosRenderingTest.java @@ -40,6 +40,7 @@ import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager; import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData; import com.android.ide.eclipse.tests.SdkTestCase; import com.android.layoutlib.api.IXmlPullParser; +import com.android.resources.ResourceType; import com.android.resources.Density; import com.android.resources.Keyboard; import com.android.resources.KeyboardState; @@ -108,6 +109,12 @@ public class ApiDemosRenderingTest extends SdkTestCase { return result; } + public Integer getResourceValue(ResourceType type, String name) { + Integer result = ++mIdCounter; + mResourceMap.put(result, new String[] { name, type.getName() }); + return result; + } + @SuppressWarnings("unchecked") public Object loadView(String name, Class[] constructorSignature, Object[] constructorArgs) throws ClassNotFoundException, Exception { @@ -182,9 +189,9 @@ public class ApiDemosRenderingTest extends SdkTestCase { FolderConfiguration config = getConfiguration(); // get the configured resources - Map<String, Map<String, ResourceValue>> configuredFramework = + Map<ResourceType, Map<String, ResourceValue>> configuredFramework = framework.getConfiguredResources(config); - Map<String, Map<String, ResourceValue>> configuredProject = + Map<ResourceType, Map<String, ResourceValue>> configuredProject = project.getConfiguredResources(config); boolean saveFiles = System.getenv("save_file") != null; diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationShipTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationShipTest.java index a865ded..f1ce9d9 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationShipTest.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationShipTest.java @@ -16,7 +16,7 @@ package com.android.ide.eclipse.adt.internal.resources.manager; -import com.android.ide.eclipse.adt.internal.resources.ResourceType; +import com.android.resources.ResourceType; import junit.framework.TestCase; diff --git a/ide_common/.classpath b/ide_common/.classpath index 8760b35..9d91c20 100644 --- a/ide_common/.classpath +++ b/ide_common/.classpath @@ -4,5 +4,6 @@ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry combineaccessrules="false" kind="src" path="/layoutlib_api"/> <classpathentry kind="var" path="ANDROID_SRC/prebuilt/common/kxml2/kxml2-2.3.0.jar" sourcepath="/ANDROID_SRC/dalvik/libcore/xml/src/main/java"/> + <classpathentry combineaccessrules="false" kind="src" path="/resources"/> <classpathentry kind="output" path="bin"/> </classpath> diff --git a/ide_common/Android.mk b/ide_common/Android.mk index d3b388c..2cb3f84 100644 --- a/ide_common/Android.mk +++ b/ide_common/Android.mk @@ -20,6 +20,7 @@ LOCAL_SRC_FILES := $(call all-java-files-under,src) LOCAL_JAVA_LIBRARIES := \ layoutlib_api \ + resources \ kxml2-2.3.0 LOCAL_MODULE := ide_common diff --git a/ide_common/src/com/android/ide/common/rendering/LayoutLibrary.java b/ide_common/src/com/android/ide/common/rendering/LayoutLibrary.java index bd72632..6fe7f10 100644 --- a/ide_common/src/com/android/ide/common/rendering/LayoutLibrary.java +++ b/ide_common/src/com/android/ide/common/rendering/LayoutLibrary.java @@ -23,6 +23,7 @@ import com.android.ide.common.rendering.api.ILayoutPullParser; import com.android.ide.common.rendering.api.LayoutLog; import com.android.ide.common.rendering.api.Params; import com.android.ide.common.rendering.api.RenderSession; +import com.android.ide.common.rendering.api.ResourceValue; import com.android.ide.common.rendering.api.Result; import com.android.ide.common.rendering.api.ViewInfo; import com.android.ide.common.rendering.api.Params.RenderingMode; @@ -38,6 +39,7 @@ import com.android.layoutlib.api.IProjectCallback; import com.android.layoutlib.api.IResourceValue; import com.android.layoutlib.api.IXmlPullParser; import com.android.layoutlib.api.ILayoutResult.ILayoutViewInfo; +import com.android.resources.ResourceType; import java.io.File; import java.lang.reflect.Constructor; @@ -46,7 +48,9 @@ import java.net.URI; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; +import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; /** * Class to use the Layout library. @@ -371,12 +375,11 @@ public class LayoutLibrary { // convert the map of ResourceValue into IResourceValue. Super ugly but works. - @SuppressWarnings("unchecked") - Map<String, Map<String, IResourceValue>> projectMap = - (Map<String, Map<String, IResourceValue>>)(Map) resources.getProjectResources(); - @SuppressWarnings("unchecked") - Map<String, Map<String, IResourceValue>> frameworkMap = - (Map<String, Map<String, IResourceValue>>)(Map) resources.getFrameworkResources(); + + Map<String, Map<String, IResourceValue>> projectMap = convertMap( + resources.getProjectResources()); + Map<String, Map<String, IResourceValue>> frameworkMap = convertMap( + resources.getFrameworkResources()); ILayoutResult result = null; @@ -434,6 +437,21 @@ public class LayoutLibrary { return convertToScene(result); } + @SuppressWarnings("unchecked") + private Map<String, Map<String, IResourceValue>> convertMap( + Map<ResourceType, Map<String, ResourceValue>> map) { + Map<String, Map<String, IResourceValue>> result = + new HashMap<String, Map<String, IResourceValue>>(); + + for (Entry<ResourceType, Map<String, ResourceValue>> entry : map.entrySet()) { + // ugly case but works. + result.put(entry.getKey().getName(), + (Map<String, IResourceValue>)(Map) entry.getValue()); + } + + return result; + } + /** * Converts a {@link ILayoutResult} to a {@link RenderSession}. */ diff --git a/ide_common/src/com/android/ide/common/resources/ResourceResolver.java b/ide_common/src/com/android/ide/common/resources/ResourceResolver.java index ddfe2bc..3948ac5 100644 --- a/ide_common/src/com/android/ide/common/resources/ResourceResolver.java +++ b/ide_common/src/com/android/ide/common/resources/ResourceResolver.java @@ -20,6 +20,7 @@ import com.android.ide.common.rendering.api.LayoutLog; import com.android.ide.common.rendering.api.RenderResources; import com.android.ide.common.rendering.api.ResourceValue; import com.android.ide.common.rendering.api.StyleResourceValue; +import com.android.resources.ResourceType; import java.util.Collection; import java.util.HashMap; @@ -27,7 +28,7 @@ import java.util.Map; public class ResourceResolver extends RenderResources { - private final static String REFERENCE_STYLE = RES_STYLE + "/"; + private final static String REFERENCE_STYLE = ResourceType.STYLE.getName() + "/"; private final static String PREFIX_ANDROID_RESOURCE_REF = "@android:"; private final static String PREFIX_RESOURCE_REF = "@"; private final static String PREFIX_ANDROID_THEME_REF = "?android:"; @@ -35,8 +36,8 @@ public class ResourceResolver extends RenderResources { private final static String PREFIX_ANDROID = "android:"; - private final Map<String, Map<String, ResourceValue>> mProjectResources; - private final Map<String, Map<String, ResourceValue>> mFrameworkResources; + private final Map<ResourceType, Map<String, ResourceValue>> mProjectResources; + private final Map<ResourceType, Map<String, ResourceValue>> mFrameworkResources; private final Map<StyleResourceValue, StyleResourceValue> mStyleInheritanceMap = new HashMap<StyleResourceValue, StyleResourceValue>(); @@ -49,8 +50,8 @@ public class ResourceResolver extends RenderResources { private boolean mIsProjectTheme; private ResourceResolver( - Map<String, Map<String, ResourceValue>> projectResources, - Map<String, Map<String, ResourceValue>> frameworkResources) { + Map<ResourceType, Map<String, ResourceValue>> projectResources, + Map<ResourceType, Map<String, ResourceValue>> frameworkResources) { mProjectResources = projectResources; mFrameworkResources = frameworkResources; } @@ -66,8 +67,8 @@ public class ResourceResolver extends RenderResources { * @return */ public static ResourceResolver create( - Map<String, Map<String, ResourceValue>> projectResources, - Map<String, Map<String, ResourceValue>> frameworkResources, + Map<ResourceType, Map<String, ResourceValue>> projectResources, + Map<ResourceType, Map<String, ResourceValue>> frameworkResources, String themeName, boolean isProjectTheme) { ResourceResolver resolver = new ResourceResolver( @@ -88,11 +89,11 @@ public class ResourceResolver extends RenderResources { return mIsProjectTheme; } - public Map<String, Map<String, ResourceValue>> getProjectResources() { + public Map<ResourceType, Map<String, ResourceValue>> getProjectResources() { return mProjectResources; } - public Map<String, Map<String, ResourceValue>> getFrameworkResources() { + public Map<ResourceType, Map<String, ResourceValue>> getFrameworkResources() { return mFrameworkResources; } @@ -118,12 +119,13 @@ public class ResourceResolver extends RenderResources { ResourceValue theme = null; if (frameworkTheme) { - Map<String, ResourceValue> frameworkStyleMap = mFrameworkResources.get(RES_STYLE); + Map<String, ResourceValue> frameworkStyleMap = mFrameworkResources.get( + ResourceType.STYLE); if (frameworkStyleMap != null) { theme = frameworkStyleMap.get(name); } } else { - Map<String, ResourceValue> projectStyleMap = mProjectResources.get(RES_STYLE); + Map<String, ResourceValue> projectStyleMap = mProjectResources.get(ResourceType.STYLE); if (projectStyleMap != null) { theme = projectStyleMap.get(name); } @@ -149,12 +151,12 @@ public class ResourceResolver extends RenderResources { } @Override - public ResourceValue getFrameworkResource(String resourceType, String resourceName) { + public ResourceValue getFrameworkResource(ResourceType resourceType, String resourceName) { return getResource(resourceType, resourceName, mFrameworkResources); } @Override - public ResourceValue getProjectResource(String resourceType, String resourceName) { + public ResourceValue getProjectResource(ResourceType resourceType, String resourceName) { return getResource(resourceType, resourceName, mProjectResources); } @@ -204,7 +206,7 @@ public class ResourceResolver extends RenderResources { if (segments.length == 2) { // there was a resType in the reference. If it's attr, we ignore it // else, we assert for now. - if (RES_ATTR.equals(segments[0])) { + if (ResourceType.ATTR.getName().equals(segments[0])) { referenceName = segments[1]; } else { // At this time, no support for ?type/name where type is not "attr" @@ -256,7 +258,14 @@ public class ResourceResolver extends RenderResources { segments[1] = segments[1].substring(PREFIX_ANDROID.length()); } - return findResValue(segments[0], segments[1], + ResourceType type = ResourceType.getEnum(segments[0]); + + // unknown type? + if (type == null) { + return null; + } + + return findResValue(type, segments[1], forceFrameworkOnly ? true :frameworkOnly); } @@ -265,7 +274,7 @@ public class ResourceResolver extends RenderResources { } @Override - public ResourceValue resolveValue(String type, String name, String value, + public ResourceValue resolveValue(ResourceType type, String name, String value, boolean isFrameworkValue) { if (value == null) { return null; @@ -317,7 +326,8 @@ public class ResourceResolver extends RenderResources { * @param frameworkOnly if <code>true</code>, the method does not search in the * project resources */ - private ResourceValue findResValue(String resType, String resName, boolean frameworkOnly) { + private ResourceValue findResValue(ResourceType resType, String resName, + boolean frameworkOnly) { // map of ResouceValue for the given type Map<String, ResourceValue> typeMap; @@ -343,7 +353,7 @@ public class ResourceResolver extends RenderResources { // if it was not found and the type is an id, it is possible that the ID was // generated dynamically when compiling the framework resources. // Look for it in the R map. - if (mFrameworkProvider != null && RES_ID.equals(resType)) { + if (mFrameworkProvider != null && resType == ResourceType.ID) { if (mFrameworkProvider.getId(resType, resName) != null) { return new ResourceValue(resType, resName, true); } @@ -351,11 +361,7 @@ public class ResourceResolver extends RenderResources { } // didn't find the resource anywhere. - // This is normal if the resource is an ID that is generated automatically. - // For other resources, we output a warning - if (mLogger != null && - "+id".equals(resType) == false && //$NON-NLS-1$ - "+android:id".equals(resType) == false) { //$NON-NLS-1$ + if (mLogger != null) { mLogger.warning(LayoutLog.TAG_RESOURCES_RESOLVE, "Couldn't resolve resource @" + (frameworkOnly ? "android:" : "") + resType + "/" + resName, @@ -364,8 +370,8 @@ public class ResourceResolver extends RenderResources { return null; } - private ResourceValue getResource(String resourceType, String resourceName, - Map<String, Map<String, ResourceValue>> resourceRepository) { + private ResourceValue getResource(ResourceType resourceType, String resourceName, + Map<ResourceType, Map<String, ResourceValue>> resourceRepository) { Map<String, ResourceValue> typeMap = resourceRepository.get(resourceType); if (typeMap != null) { ResourceValue item = typeMap.get(resourceName); @@ -388,8 +394,8 @@ public class ResourceResolver extends RenderResources { private void computeStyleMaps(String themeName, boolean isProjectTheme) { mThemeName = themeName; mIsProjectTheme = isProjectTheme; - Map<String, ResourceValue> projectStyleMap = mProjectResources.get(RES_STYLE); - Map<String, ResourceValue> frameworkStyleMap = mFrameworkResources.get(RES_STYLE); + Map<String, ResourceValue> projectStyleMap = mProjectResources.get(ResourceType.STYLE); + Map<String, ResourceValue> frameworkStyleMap = mFrameworkResources.get(ResourceType.STYLE); if (projectStyleMap != null && frameworkStyleMap != null) { // first, get the theme diff --git a/ide_common/src/com/android/ide/common/resources/ValueResourceParser.java b/ide_common/src/com/android/ide/common/resources/ValueResourceParser.java index 2e4cf8e..cda6587 100644 --- a/ide_common/src/com/android/ide/common/resources/ValueResourceParser.java +++ b/ide_common/src/com/android/ide/common/resources/ValueResourceParser.java @@ -18,6 +18,7 @@ package com.android.ide.common.resources; import com.android.ide.common.rendering.api.ResourceValue; import com.android.ide.common.rendering.api.StyleResourceValue; +import com.android.resources.ResourceType; import org.xml.sax.Attributes; import org.xml.sax.SAXException; @@ -35,15 +36,11 @@ public final class ValueResourceParser extends DefaultHandler { private final static String ATTR_TYPE = "type"; private final static String ATTR_PARENT = "parent"; - // Resource type definition - private final static String RES_STYLE = "style"; - private final static String RES_ATTR = "attr"; - private final static String DEFAULT_NS_PREFIX = "android:"; private final static int DEFAULT_NS_PREFIX_LEN = DEFAULT_NS_PREFIX.length(); public interface IValueResourceRepository { - void addResourceValue(String resType, ResourceValue value); + void addResourceValue(ResourceType type, ResourceValue value); } private boolean inResources = false; @@ -87,24 +84,27 @@ public final class ValueResourceParser extends DefaultHandler { inResources = true; } } else if (mDepth == 2 && inResources == true) { - String type; + String typeValue; // if the node is <item>, we get the type from the attribute "type" if (NODE_ITEM.equals(qName)) { - type = attributes.getValue(ATTR_TYPE); + typeValue = attributes.getValue(ATTR_TYPE); } else { // the type is the name of the node. - type = qName; + typeValue = qName; } + ResourceType type = ResourceType.getEnum(typeValue); + if (type != null) { - if (RES_ATTR.equals(type) == false) { + if (type != ResourceType.ATTR) { // get the resource name String name = attributes.getValue(ATTR_NAME); if (name != null) { - if (RES_STYLE.equals(type)) { + if (type == ResourceType.STYLE) { String parent = attributes.getValue(ATTR_PARENT); - mCurrentStyle = new StyleResourceValue(type, name, parent, mIsFramework); + mCurrentStyle = new StyleResourceValue(type, name, parent, + mIsFramework); mRepository.addResourceValue(type, mCurrentStyle); } else { mCurrentValue = new ResourceValue(type, name, mIsFramework); diff --git a/layoutlib_api/src/com/android/ide/common/rendering/api/DensityBasedResourceValue.java b/layoutlib_api/src/com/android/ide/common/rendering/api/DensityBasedResourceValue.java index 4d0d51f..12bd57c 100644 --- a/layoutlib_api/src/com/android/ide/common/rendering/api/DensityBasedResourceValue.java +++ b/layoutlib_api/src/com/android/ide/common/rendering/api/DensityBasedResourceValue.java @@ -17,13 +17,14 @@ package com.android.ide.common.rendering.api; import com.android.layoutlib.api.IDensityBasedResourceValue; +import com.android.resources.ResourceType; @SuppressWarnings("deprecation") public class DensityBasedResourceValue extends ResourceValue implements IDensityBasedResourceValue { private com.android.resources.Density mDensity; - public DensityBasedResourceValue(String type, String name, String value, + public DensityBasedResourceValue(ResourceType type, String name, String value, com.android.resources.Density density, boolean isFramework) { super(type, name, value, isFramework); mDensity = density; diff --git a/layoutlib_api/src/com/android/ide/common/rendering/api/IProjectCallback.java b/layoutlib_api/src/com/android/ide/common/rendering/api/IProjectCallback.java index 67e082e..aebc5a5 100644 --- a/layoutlib_api/src/com/android/ide/common/rendering/api/IProjectCallback.java +++ b/layoutlib_api/src/com/android/ide/common/rendering/api/IProjectCallback.java @@ -16,6 +16,8 @@ package com.android.ide.common.rendering.api; +import com.android.resources.ResourceType; + /** * Callback for project information needed by the Layout Library. * Classes implementing this interface provide methods giving access to some project data, like @@ -69,6 +71,6 @@ public interface IProjectCallback { * @param name the name of the resource * @return an Integer containing the resource Id, or <code>null</code> if not found. */ - Integer getResourceValue(String type, String name); + Integer getResourceValue(ResourceType type, String name); } diff --git a/layoutlib_api/src/com/android/ide/common/rendering/api/RenderResources.java b/layoutlib_api/src/com/android/ide/common/rendering/api/RenderResources.java index ce86c9a..ea572bc 100644 --- a/layoutlib_api/src/com/android/ide/common/rendering/api/RenderResources.java +++ b/layoutlib_api/src/com/android/ide/common/rendering/api/RenderResources.java @@ -16,6 +16,8 @@ package com.android.ide.common.rendering.api; +import com.android.resources.ResourceType; + /** * A class containing all the resources needed to do a rendering. * <p/> @@ -24,21 +26,10 @@ package com.android.ide.common.rendering.api; */ public class RenderResources { - public final static String RES_ANIMATOR = "animator"; - public final static String RES_STYLE = "style"; - public final static String RES_ATTR = "attr"; - public final static String RES_DIMEN = "dimen"; - public final static String RES_DRAWABLE = "drawable"; - public final static String RES_COLOR = "color"; - public final static String RES_LAYOUT = "layout"; - public final static String RES_STRING = "string"; - public final static String RES_ID = "id"; - public final static String REFERENCE_NULL = "@null"; - public static class FrameworkResourceIdProvider { - public Integer getId(String resType, String resName) { + public Integer getId(ResourceType resType, String resName) { return null; } } @@ -83,7 +74,7 @@ public class RenderResources { * @param resourceType the type of the resource * @param resourceName the name of the resource */ - public ResourceValue getFrameworkResource(String resourceType, String resourceName) { + public ResourceValue getFrameworkResource(ResourceType resourceType, String resourceName) { return null; } @@ -92,7 +83,7 @@ public class RenderResources { * @param resourceType the type of the resource * @param resourceName the name of the resource */ - public ResourceValue getProjectResource(String resourceType, String resourceName) { + public ResourceValue getProjectResource(ResourceType resourceType, String resourceName) { return null; } @@ -165,7 +156,7 @@ public class RenderResources { * * @return the resolved resource value or <code>null</code> if it failed to resolve it. */ - public ResourceValue resolveValue(String type, String name, String value, + public ResourceValue resolveValue(ResourceType type, String name, String value, boolean isFrameworkValue) { return null; } diff --git a/layoutlib_api/src/com/android/ide/common/rendering/api/ResourceValue.java b/layoutlib_api/src/com/android/ide/common/rendering/api/ResourceValue.java index f59f3c3..76561c8 100644 --- a/layoutlib_api/src/com/android/ide/common/rendering/api/ResourceValue.java +++ b/layoutlib_api/src/com/android/ide/common/rendering/api/ResourceValue.java @@ -17,35 +17,41 @@ package com.android.ide.common.rendering.api; import com.android.layoutlib.api.IResourceValue; +import com.android.resources.ResourceType; /** * Represents an android resource with a name and a string value. */ @SuppressWarnings("deprecation") public class ResourceValue implements IResourceValue { - private final String mType; + private final ResourceType mType; private final String mName; private String mValue = null; private final boolean mIsFramwork; - public ResourceValue(String type, String name, boolean isFramwork) { + public ResourceValue(ResourceType type, String name, boolean isFramwork) { mType = type; mName = name; mIsFramwork = isFramwork; } - public ResourceValue(String type, String name, String value, boolean isFramework) { + public ResourceValue(ResourceType type, String name, String value, boolean isFramework) { mType = type; mName = name; mValue = value; mIsFramwork = isFramework; } + public ResourceType getResourceType() { + return mType; + } + /** * Returns the type of the resource. For instance "drawable", "color", etc... + * @deprecated use {@link #getResourceType()} instead. */ public String getType() { - return mType; + return mType.getName(); } /** @@ -70,7 +76,6 @@ public class ResourceValue implements IResourceValue { return mIsFramwork; } - /** * Sets the value of the resource. * @param value the new value diff --git a/layoutlib_api/src/com/android/ide/common/rendering/api/StyleResourceValue.java b/layoutlib_api/src/com/android/ide/common/rendering/api/StyleResourceValue.java index a9f499f..429bd26 100644 --- a/layoutlib_api/src/com/android/ide/common/rendering/api/StyleResourceValue.java +++ b/layoutlib_api/src/com/android/ide/common/rendering/api/StyleResourceValue.java @@ -18,6 +18,7 @@ package com.android.ide.common.rendering.api; import com.android.layoutlib.api.IResourceValue; import com.android.layoutlib.api.IStyleResourceValue; +import com.android.resources.ResourceType; import java.util.HashMap; @@ -30,11 +31,12 @@ public final class StyleResourceValue extends ResourceValue implements IStyleRes private String mParentStyle = null; private HashMap<String, ResourceValue> mItems = new HashMap<String, ResourceValue>(); - public StyleResourceValue(String type, String name, boolean isFramework) { + public StyleResourceValue(ResourceType type, String name, boolean isFramework) { super(type, name, isFramework); } - public StyleResourceValue(String type, String name, String parentStyle, boolean isFramework) { + public StyleResourceValue(ResourceType type, String name, String parentStyle, + boolean isFramework) { super(type, name, isFramework); mParentStyle = parentStyle; } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/ResourceType.java b/resources/src/com/android/resources/ResourceType.java index 0312f44..f5f7063 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/ResourceType.java +++ b/resources/src/com/android/resources/ResourceType.java @@ -14,7 +14,8 @@ * limitations under the License. */ -package com.android.ide.eclipse.adt.internal.resources; +package com.android.resources; + /** * Enum representing a type of compiled resource. @@ -91,23 +92,6 @@ public enum ResourceType { } /** - * Returns a formatted string usable in an XML to use the specified {@link ResourceItem}. - * @param resourceItem The resource item. - * @param system Whether this is a system resource or a project resource. - * @return a string in the format @[type]/[name] - */ - public String getXmlString(ResourceItem resourceItem, boolean system) { - if (this == ID && resourceItem instanceof IIdResourceItem) { - IIdResourceItem idResource = (IIdResourceItem)resourceItem; - if (idResource.isDeclaredInline()) { - return (system?"@android:":"@+") + mName + "/" + resourceItem.getName(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - } - - return (system?"@android:":"@") + mName + "/" + resourceItem.getName(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - - /** * Returns an array with all the names defined by this enum. */ public static String[] getNames() { |