diff options
-rwxr-xr-x | sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java | 47 |
1 files changed, 42 insertions, 5 deletions
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java index fb0c504..712821d 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java @@ -19,8 +19,8 @@ package com.android.sdkuilib.internal.repository; import com.android.sdklib.internal.repository.Archive;
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.RepoSource;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
@@ -28,6 +28,7 @@ import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
@@ -237,12 +238,46 @@ public class RemotePackagesPage extends Composite { private void onTreeCheckStateChanged(CheckStateChangedEvent event) {
boolean b = event.getChecked();
Object elem = event.getElement(); // Will be Archive or Package or RepoSource
- Object src = event.getSource();
- // TODO
+
+ assert event.getSource() == mTreeViewerSources;
+
+ // when deselecting, we just deselect all children too
+ if (b == false) {
+ mTreeViewerSources.setSubtreeChecked(elem, b);
+ return;
+ }
+
+ ITreeContentProvider provider =
+ (ITreeContentProvider) mTreeViewerSources.getContentProvider();
+
+ // When selecting, we want to only select compatible archives.
+ if (elem instanceof RepoSource) {
+ mTreeViewerSources.setExpandedState(elem, true);
+ for (Object pkg : provider.getChildren(elem)) {
+ mTreeViewerSources.setChecked(pkg, true);
+ selectCompatibleArchives(pkg, provider);
+ }
+ } else if (elem instanceof Package) {
+ selectCompatibleArchives(elem, provider);
+ }
+ }
+
+ private void selectCompatibleArchives(Object pkg, ITreeContentProvider provider) {
+ mTreeViewerSources.setExpandedState(pkg, true);
+ for (Object archive : provider.getChildren(pkg)) {
+ if (archive instanceof Archive) {
+ if (((Archive) archive).isCompatible()) {
+ mTreeViewerSources.setChecked(archive, true);
+ } else {
+ mTreeViewerSources.setChecked(archive, false);
+ // TODO change the item image to mark it incompatible
+ }
+ }
+ }
}
private void onTreeDoubleClick(DoubleClickEvent event) {
- // TODO
+ // TODO use or remove
}
private void onInstallSelectedArchives() {
@@ -260,9 +295,11 @@ public class RemotePackagesPage extends Composite { }
private void onAddSiteSelected() {
+ // TODO prompt for new addon site URL, store, refresh
}
private void onRemoveSiteSelected() {
+ // TODO prompt for removing addon site URL, store, refresh
}
private void onRefreshSelected() {
|