diff options
3 files changed, 102 insertions, 3 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/ActionBarHandler.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/ActionBarHandler.java new file mode 100644 index 0000000..49585a3 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/ActionBarHandler.java @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2014 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.editors.layout; + +import java.util.ArrayList; +import java.util.List; + +import org.w3c.dom.Element; + +import com.android.ide.common.rendering.api.ActionBarCallback; +import com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart; +import com.android.ide.eclipse.adt.internal.editors.manifest.ManifestInfo; +import com.android.ide.eclipse.adt.internal.editors.manifest.ManifestInfo.ActivityAttributes; +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; + +import static com.android.SdkConstants.TOOLS_URI; +import static com.android.SdkConstants.VALUE_SPLIT_ACTION_BAR_WHEN_NARROW; + +public class ActionBarHandler extends ActionBarCallback { + + private final GraphicalEditorPart mEditor; + + ActionBarHandler(GraphicalEditorPart editor) { + mEditor = editor; + } + + @Override + public List<String> getMenuIdNames() { + String commaSeparatedMenus = getXmlAttribute(ATTR_MENU); + List<String> menus = new ArrayList<String>(); + Iterables.addAll(menus, Splitter.on(',').trimResults().omitEmptyStrings() + .split(commaSeparatedMenus)); + return menus; + } + + @Override + public boolean getSplitActionBarWhenNarrow() { + ActivityAttributes attributes = getActivityAttributes(); + if (attributes != null) { + return VALUE_SPLIT_ACTION_BAR_WHEN_NARROW.equals(attributes.getUiOptions()); + } + return false; + } + + @Override + public int getNavigationMode() { + String navMode = getXmlAttribute(ATTR_NAV_MODE); + if (navMode.equalsIgnoreCase(VALUE_NAV_MODE_TABS)) { + return NAVIGATION_MODE_TABS; + } + if (navMode.equalsIgnoreCase(VALUE_NAV_MODE_LIST)) { + return NAVIGATION_MODE_LIST; + } + return NAVIGATION_MODE_STANDARD; + } + + @Override + public HomeButtonStyle getHomeButtonStyle() { + ActivityAttributes attributes = getActivityAttributes(); + if (attributes != null && attributes.getParentActivity() != null) { + return HomeButtonStyle.SHOW_HOME_AS_UP; + } + return HomeButtonStyle.NONE; + } + + private ActivityAttributes getActivityAttributes() { + ManifestInfo manifest = ManifestInfo.get(mEditor.getProject()); + String activity = mEditor.getConfigurationChooser().getConfiguration().getActivity(); + return manifest.getActivityAttributes(activity); + } + + private String getXmlAttribute(String name) { + Element element = mEditor.getModel().getUiRoot().getXmlDocument().getDocumentElement(); + String value = element.getAttributeNS(TOOLS_URI, name); + if (value == null) { + return ""; + } + return value.trim(); + } +} 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 28b1689..6b842ed 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 @@ -45,6 +45,7 @@ import com.android.ide.common.resources.ResourceResolver; import com.android.ide.common.xml.ManifestData; import com.android.ide.eclipse.adt.AdtConstants; import com.android.ide.eclipse.adt.AdtPlugin; +import com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart; import com.android.ide.eclipse.adt.internal.editors.layout.gle2.LayoutMetadata; import com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderLogger; import com.android.ide.eclipse.adt.internal.editors.layout.uimodel.UiViewElementNode; @@ -93,6 +94,7 @@ public final class ProjectCallback extends LegacyCallback { private String mLayoutName; private ILayoutPullParser mLayoutEmbeddedParser; private ResourceResolver mResourceResolver; + private GraphicalEditorPart mEditor; /** * Creates a new {@link ProjectCallback} to be used with the layout lib. @@ -103,12 +105,14 @@ public final class ProjectCallback extends LegacyCallback { * @param credential the sandbox credential */ public ProjectCallback(LayoutLibrary layoutLib, - ProjectResources projectRes, IProject project, Object credential) { + ProjectResources projectRes, IProject project, Object credential, + GraphicalEditorPart editor) { mLayoutLib = layoutLib; mParentClassLoader = layoutLib.getClassLoader(); mProjectRes = projectRes; mProject = project; mCredential = credential; + mEditor = editor; } public Set<String> getMissingClasses() { @@ -678,6 +682,6 @@ public final class ProjectCallback extends LegacyCallback { @Override public ActionBarCallback getActionBarCallback() { - return new ActionBarCallback(); + return new ActionBarHandler(mEditor); } } 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 b54d5bc..0f5762d 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 @@ -1689,7 +1689,7 @@ public class GraphicalEditorPart extends EditorPart IProject project = getProject(); ProjectResources projectRes = resManager.getProjectResources(project); mProjectCallback = new ProjectCallback(layoutLibrary, projectRes, project, - mCredential); + mCredential, this); } else if (reset) { // Also clears the set of missing/broken classes prior to rendering mProjectCallback.getMissingClasses().clear(); |