diff options
author | Raphael Moll <ralf@android.com> | 2011-08-02 15:11:14 -0700 |
---|---|---|
committer | Android Code Review <code-review@android.com> | 2011-08-02 15:11:14 -0700 |
commit | 4f32542827ada925569aa5477b54a940cabfbcfc (patch) | |
tree | 3787067f99181d1ecd926683b6c0caebfa1edd7c | |
parent | 9a729a9908fecd6c8fa49481b57e6b21549fca4f (diff) | |
parent | c8d82c3add5967170f67d2ca83e6e0357c3fd294 (diff) | |
download | sdk-4f32542827ada925569aa5477b54a940cabfbcfc.zip sdk-4f32542827ada925569aa5477b54a940cabfbcfc.tar.gz sdk-4f32542827ada925569aa5477b54a940cabfbcfc.tar.bz2 |
Merge "SDK Man2: Fix initial load of all sources."
-rwxr-xr-x | sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/tasks/ProgressView.java | 12 | ||||
-rwxr-xr-x | sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/tasks/TaskMonitorImpl.java | 8 |
2 files changed, 19 insertions, 1 deletions
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/tasks/ProgressView.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/tasks/ProgressView.java index efa1a93..d90eaed 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/tasks/ProgressView.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/tasks/ProgressView.java @@ -148,7 +148,17 @@ public final class ProgressView implements IProgressUiProvider { final Thread t = new Thread(r, title);
t.start();
- if (parentMonitor == null && !mProgressBar.isDisposed()) {
+ // If for some reason the UI has been disposed, just abort the thread.
+ if (mProgressBar.isDisposed()) {
+ return;
+ }
+
+ if (TaskMonitorImpl.isTaskMonitorImpl(parentMonitor)) {
+ // If there's a parent monitor and it's our own class, we know this parent
+ // monitor is already running an event loop, so don't run a second one,
+ // and instead just wait for the thread.
+ t.join();
+ } else {
// Process the app's event loop whilst we wait for the thread to finish
while (!mProgressBar.isDisposed() && t.isAlive()) {
if (!mProgressBar.getDisplay().readAndDispatch()) {
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/tasks/TaskMonitorImpl.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/tasks/TaskMonitorImpl.java index 547bc37..5286df5 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/tasks/TaskMonitorImpl.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/tasks/TaskMonitorImpl.java @@ -38,6 +38,14 @@ class TaskMonitorImpl implements ITaskMonitor { private final IProgressUiProvider mUi;
/**
+ * Returns true if the given {@code monitor} is an instance of {@link TaskMonitorImpl}
+ * or its private SubTaskMonitor.
+ */
+ public static boolean isTaskMonitorImpl(ITaskMonitor monitor) {
+ return monitor instanceof TaskMonitorImpl || monitor instanceof SubTaskMonitor;
+ }
+
+ /**
* Constructs a new {@link TaskMonitorImpl} that relies on the given
* {@link IProgressUiProvider} to change the user interface.
* @param ui The {@link IProgressUiProvider}. Cannot be null.
|