From 97d3769f36a25f0ccd2643f1f29b4d7facfea09d Mon Sep 17 00:00:00 2001 From: Raphael Date: Wed, 17 Jun 2009 14:55:57 -0700 Subject: [PATCH] SDK Updater: display icons for local packages. --- .../internal/repository/LocalSdkAdapter.java | 22 +++++--- .../repository/RepoSourcesAdapter.java | 32 +----------- .../repository/UpdateChooserDialog.java | 8 +-- .../repository/UpdaterWindowImpl.java | 2 +- .../repository/icons/ImageFactory.java | 52 ++++++++++++++++++- .../internal/widgets/AvdSelector.java | 4 +- 6 files changed, 74 insertions(+), 46 deletions(-) diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/LocalSdkAdapter.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/LocalSdkAdapter.java index 1deee9261..05e0b06bb 100755 --- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/LocalSdkAdapter.java +++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/LocalSdkAdapter.java @@ -20,6 +20,7 @@ import com.android.sdklib.internal.repository.IDescription; import com.android.sdklib.internal.repository.LocalSdkParser; import com.android.sdklib.internal.repository.Package; import com.android.sdklib.internal.repository.RepoSource; +import com.android.sdkuilib.internal.repository.icons.ImageFactory; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.ILabelProvider; @@ -50,10 +51,16 @@ class LocalSdkAdapter { // ------------ - public static class ViewerLabelProvider extends LabelProvider { - /** Returns null by default */ + public class ViewerLabelProvider extends LabelProvider { + /** Returns an image appropriate for this element. */ @Override public Image getImage(Object element) { + ImageFactory imgFactory = mUpdaterData.getImageFactory(); + + if (imgFactory != null) { + return imgFactory.getImageForObject(element); + } + return super.getImage(element); } @@ -69,7 +76,7 @@ class LocalSdkAdapter { // ------------ - private static class TableContentProvider implements IStructuredContentProvider { + private class TableContentProvider implements IStructuredContentProvider { // Called when the viewer is disposed public void dispose() { @@ -78,7 +85,7 @@ class LocalSdkAdapter { // Called when the input is set or changed on the provider public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - // pass + assert newInput == LocalSdkAdapter.this; } /** @@ -87,15 +94,14 @@ class LocalSdkAdapter { * of {@link RepoSource}. */ public Object[] getElements(Object inputElement) { - if (inputElement instanceof LocalSdkAdapter) { - LocalSdkAdapter adapter = (LocalSdkAdapter) inputElement; - LocalSdkParser parser = adapter.mUpdaterData.getLocalSdkParser(); + if (inputElement == LocalSdkAdapter.this) { + LocalSdkParser parser = mUpdaterData.getLocalSdkParser(); Package[] packages = parser.getPackages(); if (packages == null) { // load on demand the first time - packages = parser.parseSdk(adapter.mUpdaterData.getOsSdkRoot()); + packages = parser.parseSdk(mUpdaterData.getOsSdkRoot()); } if (packages != null) { diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RepoSourcesAdapter.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RepoSourcesAdapter.java index 5ed9959d0..4932a5b37 100755 --- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RepoSourcesAdapter.java +++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RepoSourcesAdapter.java @@ -16,16 +16,12 @@ package com.android.sdkuilib.internal.repository; -import com.android.sdklib.internal.repository.AddonPackage; import com.android.sdklib.internal.repository.Archive; -import com.android.sdklib.internal.repository.DocPackage; import com.android.sdklib.internal.repository.IDescription; import com.android.sdklib.internal.repository.ITask; import com.android.sdklib.internal.repository.ITaskMonitor; import com.android.sdklib.internal.repository.Package; -import com.android.sdklib.internal.repository.PlatformPackage; import com.android.sdklib.internal.repository.RepoSource; -import com.android.sdklib.internal.repository.ToolPackage; import com.android.sdkuilib.internal.repository.icons.ImageFactory; import org.eclipse.jface.viewers.IContentProvider; @@ -61,38 +57,14 @@ class RepoSourcesAdapter { public class ViewerLabelProvider extends LabelProvider { - /** Returns null by default */ + /** Returns an image appropriate for this element. */ @Override public Image getImage(Object element) { ImageFactory imgFactory = mUpdaterData.getImageFactory(); if (imgFactory != null) { - if (element instanceof RepoSource) { - return imgFactory.getImage("source_icon16.png"); - - } else if (element instanceof PlatformPackage) { - return imgFactory.getImage("android_icon_16.png"); - - } else if (element instanceof AddonPackage) { - return imgFactory.getImage("addon_icon16.png"); - - } else if (element instanceof ToolPackage) { - return imgFactory.getImage("tool_icon16.png"); - - } else if (element instanceof DocPackage) { - return imgFactory.getImage("doc_icon16.png"); - - } else if (element instanceof Package) { - return imgFactory.getImage("extra_pkg_icon16.png"); - - } else if (element instanceof Archive) { - if (((Archive) element).isCompatible()) { - return imgFactory.getImage("archive_icon16.png"); - } else { - return imgFactory.getImage("incompat_icon16.png"); - } - } + return imgFactory.getImageForObject(element); } return super.getImage(element); diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java index f193554c4..81d3c5458 100755 --- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java +++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java @@ -310,7 +310,7 @@ final class UpdateChooserDialog extends Dialog { if (mUpdaterData != null) { ImageFactory imgFactory = mUpdaterData.getImageFactory(); if (imgFactory != null) { - mDialogShell.setImage(imgFactory.getImage(imageName)); + mDialogShell.setImage(imgFactory.getImageByName(imageName)); } } } @@ -533,11 +533,11 @@ final class UpdateChooserDialog extends Dialog { ImageFactory imgFactory = mUpdaterData.getImageFactory(); if (imgFactory != null) { if (mAccepted.contains(element)) { - return imgFactory.getImage("accept_icon16.png"); + return imgFactory.getImageByName("accept_icon16.png"); } else if (mRejected.contains(element)) { - return imgFactory.getImage("reject_icon16.png"); + return imgFactory.getImageByName("reject_icon16.png"); } - return imgFactory.getImage("unknown_icon16.png"); + return imgFactory.getImageByName("unknown_icon16.png"); } return super.getImage(element); } diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterWindowImpl.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterWindowImpl.java index 952e18a11..10cadacf0 100755 --- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterWindowImpl.java +++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterWindowImpl.java @@ -190,7 +190,7 @@ public class UpdaterWindowImpl { if (mUpdaterData != null) { ImageFactory imgFactory = mUpdaterData.getImageFactory(); if (imgFactory != null) { - mAndroidSdkUpdater.setImage(imgFactory.getImage(imageName)); + mAndroidSdkUpdater.setImage(imgFactory.getImageByName(imageName)); } } } diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/ImageFactory.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/ImageFactory.java index 51d09d5b2..8cfe53f49 100755 --- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/ImageFactory.java +++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/icons/ImageFactory.java @@ -16,6 +16,14 @@ package com.android.sdkuilib.internal.repository.icons; +import com.android.sdklib.internal.repository.AddonPackage; +import com.android.sdklib.internal.repository.Archive; +import com.android.sdklib.internal.repository.DocPackage; +import com.android.sdklib.internal.repository.Package; +import com.android.sdklib.internal.repository.PlatformPackage; +import com.android.sdklib.internal.repository.RepoSource; +import com.android.sdklib.internal.repository.ToolPackage; + import org.eclipse.swt.SWTException; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; @@ -41,8 +49,13 @@ public class ImageFactory { /** * Loads an image given its filename (with its extension). * Might return null if the image cannot be loaded. + * + * @param imageName The filename (with extension) of the image to load. + * @return A new or existing {@link Image}. The caller must NOT dispose the image (the + * image will disposed by {@link #dispose()}). The returned image can be null if the + * expected file is missing. */ - public Image getImage(String imageName) { + public Image getImageByName(String imageName) { Image image = mImages.get(imageName); if (image != null) { @@ -66,6 +79,43 @@ public class ImageFactory { return image; } + /** + * Loads and returns the appropriate image for a given package, archive or source object. + * + * @param object A {@link RepoSource} or {@link Package} or {@link Archive}. + * @return A new or existing {@link Image}. The caller must NOT dispose the image (the + * image will disposed by {@link #dispose()}). The returned image can be null if the + * expected file is missing. + */ + public Image getImageForObject(Object object) { + if (object instanceof RepoSource) { + return getImageByName("source_icon16.png"); + + } else if (object instanceof PlatformPackage) { + return getImageByName("android_icon_16.png"); + + } else if (object instanceof AddonPackage) { + return getImageByName("addon_icon16.png"); + + } else if (object instanceof ToolPackage) { + return getImageByName("tool_icon16.png"); + + } else if (object instanceof DocPackage) { + return getImageByName("doc_icon16.png"); + + } else if (object instanceof Package) { + return getImageByName("extra_pkg_icon16.png"); + + } else if (object instanceof Archive) { + if (((Archive) object).isCompatible()) { + return getImageByName("archive_icon16.png"); + } else { + return getImageByName("incompat_icon16.png"); + } + } + return null; + } + /** * Dispose all the images created by this factory so far. */ diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java index 39aea27c1..80fdb1ea2 100644 --- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java +++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java @@ -243,8 +243,8 @@ public final class AvdSelector { // get some bitmaps. mIconFactory = new ImageFactory(parent.getDisplay()); - mOkImage = mIconFactory.getImage("accept_icon16.png"); - mBrokenImage = mIconFactory.getImage("reject_icon16.png"); + mOkImage = mIconFactory.getImageByName("accept_icon16.png"); + mBrokenImage = mIconFactory.getImageByName("reject_icon16.png"); adjustColumnsWidth(mTable, column0, column1, column2, column3); setupSelectionListener(mTable);