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:
Raphael Moll
2009-04-09 13:09:46 -07:00
committed by The Android Open Source Project
parent c3e4be85ab
commit d4ee68f401
5 changed files with 52 additions and 15 deletions

View File

@@ -322,7 +322,6 @@ public final class ManifestEditor extends AndroidEditor {
return;
}
AndroidManifestDescriptors manifestDescriptor = getManifestDescriptors();
if (manifestDescriptor != null) {

View File

@@ -38,7 +38,7 @@ import java.util.Arrays;
/**
* 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 {

View File

@@ -30,16 +30,15 @@ import java.util.ArrayList;
*/
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
* of the same type in the root will be displayed. */
private ElementDescriptor[] mDescriptorFilters;
/** Object which provides the uiRootNode */
private final UiRootNodeProvider mUiRootNodeProvider;
public UiModelTreeContentProvider(UiElementNode uiRootNode,
public UiModelTreeContentProvider(UiRootNodeProvider rootNodeProvider,
ElementDescriptor[] descriptorFilters) {
mUiRootNode = uiRootNode;
mUiRootNodeProvider = rootNodeProvider;
mDescriptorFilters = descriptorFilters;
}
@@ -87,8 +86,9 @@ class UiModelTreeContentProvider implements ITreeContentProvider {
*/
public Object[] getElements(Object inputElement) {
ArrayList<UiElementNode> roots = new ArrayList<UiElementNode>();
if (mUiRootNode != null) {
for (UiElementNode ui_node : mUiRootNode.getUiChildren()) {
UiElementNode uiRootNode = mUiRootNodeProvider.getRootNode();
if (uiRootNode != null) {
for (UiElementNode ui_node : uiRootNode.getUiChildren()) {
if (mDescriptorFilters == null || mDescriptorFilters.length == 0) {
roots.add(ui_node);
} else {

View File

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

View File

@@ -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
* 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. */
private static final int TREE_HEIGHT_HINT = 50;
@@ -181,6 +182,17 @@ public final class UiTreeBlock extends MasterDetailsBlock implements ICommitXml
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
protected void createMasterPart(final IManagedForm managedForm, Composite parent) {
FormToolkit toolkit = managedForm.getToolkit();
@@ -239,8 +251,7 @@ public final class UiTreeBlock extends MasterDetailsBlock implements ICommitXml
tree.setLayoutData(gd);
mTreeViewer = new TreeViewer(tree);
mTreeViewer.setContentProvider(new UiModelTreeContentProvider(
mUiRootNode, mDescriptorFilters));
mTreeViewer.setContentProvider(new UiModelTreeContentProvider(this, mDescriptorFilters));
mTreeViewer.setLabelProvider(new UiModelTreeLabelProvider());
mTreeViewer.setInput("unused"); //$NON-NLS-1$