AI 145402: am: CL 145004 ADT #1761064: Properly refresh manifest activity list on framework reload.
Issue: when the SDK gets (re)loaded, the uiRootNode changes in the UiTreeBlock. However the TreeViewer is using a content provider which root node was not updated. The fix is to make the content provider dynamically ask for the root node to the tree block. Instead of depending on the class directly, a new interface is passed for this. Original author: raphael Merged from: //branches/cupcake/... Automated import of CL 145402
This commit is contained in:
committed by
The Android Open Source Project
parent
c3e4be85ab
commit
d4ee68f401
@@ -159,9 +159,9 @@ public final class ManifestEditor extends AndroidEditor {
|
|||||||
protected void xmlModelChanged(Document xml_doc) {
|
protected void xmlModelChanged(Document xml_doc) {
|
||||||
// create the ui root node on demand.
|
// create the ui root node on demand.
|
||||||
initUiRootNode(false /*force*/);
|
initUiRootNode(false /*force*/);
|
||||||
|
|
||||||
loadFromXml(xml_doc);
|
loadFromXml(xml_doc);
|
||||||
|
|
||||||
super.xmlModelChanged(xml_doc);
|
super.xmlModelChanged(xml_doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +184,7 @@ public final class ManifestEditor extends AndroidEditor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onDescriptorsChanged(UiElementNode oldManifestNode) {
|
private void onDescriptorsChanged(UiElementNode oldManifestNode) {
|
||||||
mUiManifestNode.reloadFromXmlNode(oldManifestNode.getXmlNode());
|
mUiManifestNode.reloadFromXmlNode(oldManifestNode.getXmlNode());
|
||||||
|
|
||||||
@@ -321,7 +321,6 @@ public final class ManifestEditor extends AndroidEditor {
|
|||||||
if (mUiManifestNode != null && force == false) {
|
if (mUiManifestNode != null && force == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AndroidManifestDescriptors manifestDescriptor = getManifestDescriptors();
|
AndroidManifestDescriptors manifestDescriptor = getManifestDescriptors();
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import java.util.Arrays;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A selection dialog to select the type of the new element node to
|
* A selection dialog to select the type of the new element node to
|
||||||
* created, either in the application node or the selected sub node.
|
* create, either in the application node or the selected sub node.
|
||||||
*/
|
*/
|
||||||
public class NewItemSelectionDialog extends AbstractElementListSelectionDialog {
|
public class NewItemSelectionDialog extends AbstractElementListSelectionDialog {
|
||||||
|
|
||||||
|
|||||||
@@ -30,16 +30,15 @@ import java.util.ArrayList;
|
|||||||
*/
|
*/
|
||||||
class UiModelTreeContentProvider implements ITreeContentProvider {
|
class UiModelTreeContentProvider implements ITreeContentProvider {
|
||||||
|
|
||||||
/** The root {@link UiElementNode} which contains all the elements that are to be
|
|
||||||
* manipulated by this tree view. In general this is the manifest UI node. */
|
|
||||||
private UiElementNode mUiRootNode;
|
|
||||||
/** The descriptor of the elements to be displayed as root in this tree view. All elements
|
/** The descriptor of the elements to be displayed as root in this tree view. All elements
|
||||||
* of the same type in the root will be displayed. */
|
* of the same type in the root will be displayed. */
|
||||||
private ElementDescriptor[] mDescriptorFilters;
|
private ElementDescriptor[] mDescriptorFilters;
|
||||||
|
/** Object which provides the uiRootNode */
|
||||||
|
private final UiRootNodeProvider mUiRootNodeProvider;
|
||||||
|
|
||||||
public UiModelTreeContentProvider(UiElementNode uiRootNode,
|
public UiModelTreeContentProvider(UiRootNodeProvider rootNodeProvider,
|
||||||
ElementDescriptor[] descriptorFilters) {
|
ElementDescriptor[] descriptorFilters) {
|
||||||
mUiRootNode = uiRootNode;
|
mUiRootNodeProvider = rootNodeProvider;
|
||||||
mDescriptorFilters = descriptorFilters;
|
mDescriptorFilters = descriptorFilters;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,8 +86,9 @@ class UiModelTreeContentProvider implements ITreeContentProvider {
|
|||||||
*/
|
*/
|
||||||
public Object[] getElements(Object inputElement) {
|
public Object[] getElements(Object inputElement) {
|
||||||
ArrayList<UiElementNode> roots = new ArrayList<UiElementNode>();
|
ArrayList<UiElementNode> roots = new ArrayList<UiElementNode>();
|
||||||
if (mUiRootNode != null) {
|
UiElementNode uiRootNode = mUiRootNodeProvider.getRootNode();
|
||||||
for (UiElementNode ui_node : mUiRootNode.getUiChildren()) {
|
if (uiRootNode != null) {
|
||||||
|
for (UiElementNode ui_node : uiRootNode.getUiChildren()) {
|
||||||
if (mDescriptorFilters == null || mDescriptorFilters.length == 0) {
|
if (mDescriptorFilters == null || mDescriptorFilters.length == 0) {
|
||||||
roots.add(ui_node);
|
roots.add(ui_node);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2009 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.editors.ui.tree;
|
||||||
|
|
||||||
|
import com.android.ide.eclipse.editors.uimodel.UiElementNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An object that can provide a uiRootNode.
|
||||||
|
*/
|
||||||
|
public interface UiRootNodeProvider {
|
||||||
|
/** Returns the UiDocumentNode for the current model. */
|
||||||
|
public abstract UiElementNode getRootNode();
|
||||||
|
}
|
||||||
@@ -83,7 +83,8 @@ import java.util.LinkedList;
|
|||||||
* On the left is a details part that displays all the visible UI attributes for a given
|
* On the left is a details part that displays all the visible UI attributes for a given
|
||||||
* selected UI element node.
|
* selected UI element node.
|
||||||
*/
|
*/
|
||||||
public final class UiTreeBlock extends MasterDetailsBlock implements ICommitXml {
|
public final class UiTreeBlock extends MasterDetailsBlock
|
||||||
|
implements ICommitXml, UiRootNodeProvider {
|
||||||
|
|
||||||
/** Height hint for the tree view. Helps the grid layout resize properly on smaller screens. */
|
/** Height hint for the tree view. Helps the grid layout resize properly on smaller screens. */
|
||||||
private static final int TREE_HEIGHT_HINT = 50;
|
private static final int TREE_HEIGHT_HINT = 50;
|
||||||
@@ -181,6 +182,17 @@ public final class UiTreeBlock extends MasterDetailsBlock implements ICommitXml
|
|||||||
return mMasterPart;
|
return mMasterPart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link UiElementNode} for the current model.
|
||||||
|
* <p/>
|
||||||
|
* This is used by the content provider attached to {@link #mTreeViewer} since
|
||||||
|
* the uiRootNode changes after each call to
|
||||||
|
* {@link #changeRootAndDescriptors(UiElementNode, ElementDescriptor[], boolean)}.
|
||||||
|
*/
|
||||||
|
public UiElementNode getRootNode() {
|
||||||
|
return mUiRootNode;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void createMasterPart(final IManagedForm managedForm, Composite parent) {
|
protected void createMasterPart(final IManagedForm managedForm, Composite parent) {
|
||||||
FormToolkit toolkit = managedForm.getToolkit();
|
FormToolkit toolkit = managedForm.getToolkit();
|
||||||
@@ -239,8 +251,7 @@ public final class UiTreeBlock extends MasterDetailsBlock implements ICommitXml
|
|||||||
tree.setLayoutData(gd);
|
tree.setLayoutData(gd);
|
||||||
|
|
||||||
mTreeViewer = new TreeViewer(tree);
|
mTreeViewer = new TreeViewer(tree);
|
||||||
mTreeViewer.setContentProvider(new UiModelTreeContentProvider(
|
mTreeViewer.setContentProvider(new UiModelTreeContentProvider(this, mDescriptorFilters));
|
||||||
mUiRootNode, mDescriptorFilters));
|
|
||||||
mTreeViewer.setLabelProvider(new UiModelTreeLabelProvider());
|
mTreeViewer.setLabelProvider(new UiModelTreeLabelProvider());
|
||||||
mTreeViewer.setInput("unused"); //$NON-NLS-1$
|
mTreeViewer.setInput("unused"); //$NON-NLS-1$
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user