Merge "Making SDK path editing in SDK manager actually work" into studio-1.4-dev
automerge: c52dd60
* commit 'c52dd6072e936aac0773572713b48e788a26b829':
Making SDK path editing in SDK manager actually work
diff --git a/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigPanel.form b/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigPanel.form
index e6e1eac..1677973 100644
--- a/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigPanel.form
+++ b/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigPanel.form
@@ -16,7 +16,7 @@
<text value="Manager for the Android SDK and Tools used by Android Studio"/>
</properties>
</component>
- <grid id="7bcd0" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+ <grid id="7bcd0" layout-manager="GridLayoutManager" row-count="1" column-count="4" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<grid row="1" column="0" row-span="1" col-span="3" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
@@ -24,9 +24,9 @@
<properties/>
<border type="none"/>
<children>
- <component id="ff1ec" class="com.intellij.openapi.ui.TextFieldWithBrowseButton" binding="mySdkLocation">
+ <component id="38898" class="javax.swing.JTextField" binding="mySdkLocation">
<constraints>
- <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+ <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
</component>
@@ -35,9 +35,21 @@
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
+ <enabled value="false"/>
<text value="Android SDK Location:"/>
</properties>
</component>
+ <component id="469be" class="com.intellij.ui.HyperlinkLabel" binding="myEditSdkLink">
+ <constraints>
+ <grid row="0" column="2" row-span="1" col-span="1" vsize-policy="3" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ </constraints>
+ <properties/>
+ </component>
+ <hspacer id="3b2ca">
+ <constraints>
+ <grid row="0" column="3" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+ </constraints>
+ </hspacer>
</children>
</grid>
<tabbedpane id="46ef2" class="com.intellij.ui.components.JBTabbedPane" default-binding="true">
diff --git a/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigPanel.java b/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigPanel.java
index 0c7ef85..88de682 100644
--- a/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigPanel.java
+++ b/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigPanel.java
@@ -30,14 +30,18 @@
import com.google.common.collect.TreeMultimap;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.options.ShowSettingsUtil;
-import com.intellij.openapi.ui.TextFieldWithBrowseButton;
+import com.intellij.openapi.projectRoots.Sdk;
+import com.intellij.openapi.ui.InputValidator;
+import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.updateSettings.impl.UpdateSettingsConfigurable;
+import com.intellij.openapi.util.io.FileUtil;
import com.intellij.ui.HyperlinkAdapter;
import com.intellij.ui.HyperlinkLabel;
import com.intellij.ui.dualView.TreeTableView;
import com.intellij.ui.table.SelectionProvider;
import com.intellij.util.ui.tree.TreeUtil;
import org.jetbrains.android.actions.RunAndroidSdkManagerAction;
+import org.jetbrains.android.sdk.AndroidSdkData;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import sun.awt.CausedFocusEvent;
@@ -50,6 +54,7 @@
import javax.swing.tree.TreePath;
import java.awt.*;
import java.awt.event.*;
+import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Set;
@@ -59,12 +64,13 @@
*/
public class SdkUpdaterConfigPanel {
private JPanel myRootPane;
- private TextFieldWithBrowseButton mySdkLocation;
+ private JTextField mySdkLocation;
private PlatformComponentsPanel myPlatformComponentsPanel;
private ToolComponentsPanel myToolComponentsPanel;
private UpdateSitesPanel myUpdateSitesPanel;
private HyperlinkLabel myLaunchStandaloneLink;
private HyperlinkLabel myChannelLink;
+ private HyperlinkLabel myEditSdkLink;
private SdkSources mySdkSources;
private Runnable mySourcesChangeListener = new DispatchRunnable() {
@Override
@@ -73,7 +79,7 @@
}
};
- private final SdkState mySdkState;
+ private SdkState mySdkState;
private boolean myHasPreview;
private boolean myIncludePreview;
@@ -96,7 +102,6 @@
mySdkSources = mySdkState.getRemoteSdk().fetchSources(RemoteSdk.DEFAULT_EXPIRATION_PERIOD_MS, logger);
mySdkSources.addChangeListener(mySourcesChangeListener);
myUpdateSitesPanel.setSdkState(sdkState);
- mySdkLocation.setText(IdeSdks.getAndroidSdkPath().getPath());
myLaunchStandaloneLink.setHyperlinkText("Launch Standalone SDK Manager");
myLaunchStandaloneLink.addHyperlinkListener(new HyperlinkAdapter() {
@Override
@@ -114,6 +119,26 @@
channelChangedCallback.run();
}
});
+ myEditSdkLink.setHyperlinkText("Edit");
+ myEditSdkLink.addHyperlinkListener(new HyperlinkAdapter() {
+ @Override
+ protected void hyperlinkActivated(HyperlinkEvent e) {
+ String newLocation = Messages
+ .showInputDialog(getComponent(), "New SDK Location:", "Set SDK Location", null, mySdkLocation.getText(), new InputValidator() {
+ @Override
+ public boolean checkInput(String inputString) {
+ return IdeSdks.isValidAndroidSdkPath(new File(inputString));
+ }
+
+ @Override
+ public boolean canClose(String inputString) {
+ return checkInput(inputString);
+ }
+ });
+ setSdkPath(newLocation);
+ }
+ });
+ mySdkLocation.setEditable(false);
}
public void setIncludePreview(boolean includePreview) {
@@ -123,10 +148,6 @@
myToolComponentsPanel.setIncludePreview(includePreview);
}
- public String getSdkPath() {
- return mySdkLocation.getText();
- }
-
public JComponent getComponent() {
return myRootPane;
}
@@ -269,6 +290,7 @@
public void reset() {
refresh();
+ mySdkLocation.setText(IdeSdks.getAndroidSdkPath().getPath());
myPlatformComponentsPanel.reset();
myToolComponentsPanel.reset();
myUpdateSitesPanel.reset();
@@ -282,6 +304,27 @@
myUpdateSitesPanel.save();
}
+ private void setSdkPath(String newLocation) {
+ final File currentPath = IdeSdks.getAndroidSdkPath();
+ assert currentPath != null; // shouldn't be able to get to this point without sdk set.
+ final File newPath = new File(newLocation);
+ assert IdeSdks.isValidAndroidSdkPath(newPath);
+
+ if (FileUtil.filesEqual(currentPath, newPath)) {
+ return;
+ }
+
+ List<Sdk> sdks = IdeSdks.setAndroidSdkPath(newPath, null);
+ if (sdks.isEmpty()) {
+ Messages.showErrorDialog(getComponent(), "Failed to set SDK path");
+ }
+ else {
+ mySdkState = SdkState.getInstance(AndroidSdkData.getSdkData(newPath));
+ mySdkLocation.setText(newPath.getAbsolutePath());
+ refresh();
+ }
+ }
+
private static class CycleAction extends AbstractAction {
boolean myBackward;
diff --git a/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigurable.java b/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigurable.java
index 998d08e..433f307 100644
--- a/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigurable.java
+++ b/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigurable.java
@@ -16,7 +16,6 @@
package com.android.tools.idea.updater.configure;
import com.android.sdklib.repository.descriptors.IPkgDesc;
-import com.android.tools.idea.sdk.IdeSdks;
import com.android.tools.idea.sdk.SdkState;
import com.android.tools.idea.sdk.remote.UpdatablePkgInfo;
import com.android.tools.idea.sdk.wizard.SdkQuickfixWizard;
@@ -24,7 +23,6 @@
import com.android.utils.HtmlBuilder;
import com.google.common.collect.Lists;
import com.intellij.icons.AllIcons;
-import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.openapi.project.Project;
@@ -40,7 +38,6 @@
import javax.swing.*;
import javax.swing.event.AncestorEvent;
-import java.io.File;
import java.util.List;
/**
@@ -116,15 +113,6 @@
@Override
public void apply() throws ConfigurationException {
- if (!IdeSdks.getAndroidSdkPath().getPath().equals(myPanel.getSdkPath())) {
- ApplicationManager.getApplication().runWriteAction(new Runnable() {
- @Override
- public void run() {
- IdeSdks.setAndroidSdkPath(new File(myPanel.getSdkPath()), null);
- }
- });
- }
-
myPanel.saveSources();
HtmlBuilder message = new HtmlBuilder();