OSDN Git Service

Adds call back to the SDK updater for SDK content notifications.
authorXavier Ducrohet <xav@android.com>
Thu, 30 Jul 2009 00:36:21 +0000 (17:36 -0700)
committerXavier Ducrohet <xav@android.com>
Thu, 30 Jul 2009 00:36:21 +0000 (17:36 -0700)
Make ADT reload the SDK when a new package is installed/removed through the
SDK Updater.

tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AdtPlugin.java
tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/actions/AvdManagerAction.java
tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/AvdManagerPage.java
tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/LocalPackagesPage.java
tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java
tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java
tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterWindowImpl.java
tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/repository/UpdaterWindow.java

index b4289a6..d213f7a 100644 (file)
@@ -313,16 +313,7 @@ public class AdtPlugin extends AbstractUIPlugin {
                     if (checkSdkLocationAndId()) {
                         // if sdk if valid, reparse it
 
-                        // add all the opened Android projects to the list of projects to be updated
-                        // after the SDK is reloaded
-                        synchronized (getSdkLockObject()) {
-                            // get the project to refresh.
-                            IJavaProject[] androidProjects = BaseProjectHelper.getAndroidProjects();
-                            mPostLoadProjectsToResolve.addAll(Arrays.asList(androidProjects));
-                        }
-
-                        // parse the SDK resources at the new location
-                        parseSdkContent();
+                        reparseSdk();
                     }
                 } else if (PREFS_BUILD_VERBOSITY.equals(property)) {
                     mBuildVerbosity = BuildPreferencePage.getBuildLevel(
@@ -1389,6 +1380,22 @@ public class AdtPlugin extends AbstractUIPlugin {
     }
 
     /**
+     * Reparses the content of the SDK and updates opened projects.
+     */
+    public void reparseSdk() {
+        // add all the opened Android projects to the list of projects to be updated
+        // after the SDK is reloaded
+        synchronized (getSdkLockObject()) {
+            // get the project to refresh.
+            IJavaProject[] androidProjects = BaseProjectHelper.getAndroidProjects();
+            mPostLoadProjectsToResolve.addAll(Arrays.asList(androidProjects));
+        }
+
+        // parse the SDK resources at the new location
+        parseSdkContent();
+    }
+
+    /**
      * Prints messages, associated with a project to the specified stream
      * @param stream The stream to write to
      * @param tag The tag associated to the message. Can be null
index 4a7d918..edc97fa 100755 (executable)
@@ -49,6 +49,11 @@ public class AvdManagerAction implements IWorkbenchWindowActionDelegate, IObject
                     null /*sdk log*/,\r
                     sdk.getSdkLocation(),\r
                     false /*userCanChangeSdkRoot*/);\r
+            window.addListeners(new UpdaterWindow.ISdkListener() {\r
+                public void onSdkChange() {\r
+                    AdtPlugin.getDefault().reparseSdk();\r
+                }\r
+            });\r
             window.open();\r
         }\r
     }\r
index ccfd276..5716edf 100755 (executable)
@@ -16,9 +16,9 @@
 \r
 package com.android.sdkuilib.internal.repository;\r
 \r
-import com.android.sdkuilib.internal.repository.UpdaterData.ISdkListener;\r
 import com.android.sdkuilib.internal.widgets.AvdSelector;\r
 import com.android.sdkuilib.internal.widgets.AvdSelector.DisplayMode;\r
+import com.android.sdkuilib.repository.UpdaterWindow.ISdkListener;\r
 \r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.layout.GridLayout;\r
index 115bf32..d4ab86f 100755 (executable)
@@ -19,7 +19,7 @@ package com.android.sdkuilib.internal.repository;
 import com.android.sdklib.internal.repository.Archive;\r
 import com.android.sdklib.internal.repository.IDescription;\r
 import com.android.sdklib.internal.repository.Package;\r
-import com.android.sdkuilib.internal.repository.UpdaterData.ISdkListener;\r
+import com.android.sdkuilib.repository.UpdaterWindow.ISdkListener;\r
 \r
 import org.eclipse.jface.dialogs.MessageDialog;\r
 import org.eclipse.jface.viewers.ISelection;\r
index 7d991c5..a7c1a83 100755 (executable)
@@ -21,7 +21,7 @@ import com.android.sdklib.internal.repository.Archive;
 import com.android.sdklib.internal.repository.IDescription;\r
 import com.android.sdklib.internal.repository.Package;\r
 import com.android.sdklib.internal.repository.RepoSource;\r
-import com.android.sdkuilib.internal.repository.UpdaterData.ISdkListener;\r
+import com.android.sdkuilib.repository.UpdaterWindow.ISdkListener;\r
 \r
 import org.eclipse.jface.dialogs.IInputValidator;\r
 import org.eclipse.jface.dialogs.InputDialog;\r
index ebe3679..321f5ca 100755 (executable)
@@ -32,6 +32,7 @@ import com.android.sdklib.internal.repository.RepoSources;
 import com.android.sdklib.internal.repository.ToolPackage;\r
 import com.android.sdklib.internal.repository.Package.UpdateInfo;\r
 import com.android.sdkuilib.internal.repository.icons.ImageFactory;\r
+import com.android.sdkuilib.repository.UpdaterWindow.ISdkListener;\r
 \r
 import org.eclipse.swt.widgets.Shell;\r
 \r
@@ -67,10 +68,6 @@ class UpdaterData {
 \r
     private Shell mWindowShell;\r
 \r
-    public interface ISdkListener {\r
-        void onSdkChange();\r
-    }\r
-\r
     public UpdaterData(String osSdkRoot, ISdkLog sdkLog) {\r
         mOsSdkRoot = osSdkRoot;\r
         mSdkLog = sdkLog;\r
index e36bd6c..0fbcc41 100755 (executable)
@@ -24,6 +24,7 @@ import com.android.sdklib.internal.repository.RepoSources;
 import com.android.sdklib.repository.SdkRepository;\r
 import com.android.sdkuilib.internal.repository.icons.ImageFactory;\r
 import com.android.sdkuilib.internal.tasks.ProgressTaskFactory;\r
+import com.android.sdkuilib.repository.UpdaterWindow.ISdkListener;\r
 \r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.custom.SashForm;\r
@@ -168,6 +169,14 @@ public class UpdaterWindowImpl {
         mExtraPages.add(new Object[]{ title, pageClass });\r
     }\r
 \r
+    public void addListeners(ISdkListener listener) {\r
+        mUpdaterData.addListeners(listener);\r
+    }\r
+\r
+    public void removeListener(ISdkListener listener) {\r
+        mUpdaterData.removeListener(listener);\r
+    }\r
+\r
     /**\r
      * Helper to return the SWT shell.\r
      */\r
index 9c47013..94881dc 100755 (executable)
@@ -32,6 +32,17 @@ public class UpdaterWindow {
     private UpdaterWindowImpl mWindow;\r
 \r
     /**\r
+     * Interface for listeners on SDK modifications (ie new installed compoments, or deleted\r
+     * components)\r
+     */\r
+    public interface ISdkListener {\r
+        /**\r
+         * Sent when the content of the SDK changed\r
+         */\r
+        void onSdkChange();\r
+    }\r
+\r
+    /**\r
      * Creates a new window. Caller must call open(), which will block.\r
      * @param sdkLog\r
      * @param osSdkRoot The OS path to the SDK root.\r
@@ -59,6 +70,21 @@ public class UpdaterWindow {
     }\r
 \r
     /**\r
+     * Adds a new listener to be notified when a change is made to the content of the SDK.\r
+     */\r
+    public void addListeners(ISdkListener listener) {\r
+        mWindow.addListeners(listener);\r
+    }\r
+\r
+    /**\r
+     * Removes a new listener to be notified anymore when a change is made to the content of\r
+     * the SDK.\r
+     */\r
+    public void removeListener(ISdkListener listener) {\r
+        mWindow.removeListener(listener);\r
+    }\r
+\r
+    /**\r
      * Opens the window.\r
      */\r
     public void open() {\r