summaryrefslogtreecommitdiff
path: root/android/ultimate
diff options
context:
space:
mode:
authorGregory.Shrago <gregory.shrago@jetbrains.com>2014-07-07 22:46:49 +0400
committerGregory.Shrago <gregory.shrago@jetbrains.com>2014-07-09 20:41:37 +0400
commit7e56e7a3099f12d840824d2b54cc6f3bdabad578 (patch)
tree483b9fee944afae1990ee92546d9b8482de477c7 /android/ultimate
parent0a9d5dee2eea987a6abd4a997a28d1484da6904e (diff)
downloadidea-7e56e7a3099f12d840824d2b54cc6f3bdabad578.tar.gz
IDEA-126591 Android Support NPE (IDEA-CR-336)
Diffstat (limited to 'android/ultimate')
-rw-r--r--android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java4
-rw-r--r--android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java65
2 files changed, 43 insertions, 26 deletions
diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java
index 91d1da6799a..132e4db0054 100644
--- a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java
+++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java
@@ -7,6 +7,7 @@ import com.intellij.openapi.util.ModificationTracker;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.persistence.database.DataSourceInfo;
import com.intellij.persistence.database.DataSourceTemplate;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.ui.classpath.SimpleClasspathElement;
import com.intellij.util.ui.classpath.SimpleClasspathElementFactory;
import com.intellij.util.xmlb.annotations.Tag;
@@ -96,7 +97,8 @@ class AndroidDataSource extends LocalDataSource implements DataSourceInfo, Modif
@NotNull
public String buildUrl() {
- return "jdbc:sqlite:" + FileUtil.toSystemDependentName(FileUtil.toCanonicalPath(buildLocalDbFileOsPath()));
+ String path = buildLocalDbFileOsPath();
+ return StringUtil.isEmpty(path) ? "" : "jdbc:sqlite:" + FileUtil.toSystemDependentName(FileUtil.toCanonicalPath(path));
}
@NotNull
diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java
index 2099c4c5749..4ff1ddac67e 100644
--- a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java
+++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java
@@ -7,13 +7,15 @@ import com.android.ddmlib.MultiLineReceiver;
import com.android.tools.idea.ddms.DeviceComboBoxRenderer;
import com.intellij.facet.ProjectFacetManager;
import com.intellij.javaee.dataSource.AbstractDataSourceConfigurable;
+import com.intellij.javaee.dataSource.DatabaseDriver;
+import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.ComboBox;
+import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.persistence.database.DbImplUtil;
import com.intellij.ui.FieldPanel;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.components.JBRadioButton;
@@ -40,7 +42,7 @@ import java.util.concurrent.TimeUnit;
/**
* @author Eugene.Kudelevsky
*/
-public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigurable<AndroidDbManager, AndroidDataSource> {
+public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigurable<AndroidDbManager, AndroidDataSource> implements Disposable {
private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.database.AndroidDataSourcePropertiesDialog");
private static final String[] DEFAULT_EXTERNAL_DB_PATTERNS = new String[]{"files/"};
@@ -88,7 +90,7 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu
}
}
});
- loadDevices();
+ myDeviceComboBox.setPreferredSize(new Dimension(300, myDeviceComboBox.getPreferredSize().height));
myDeviceListener = new AndroidDebugBridge.IDeviceChangeListener() {
@Override
@@ -107,7 +109,6 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu
}
}
};
- AndroidDebugBridge.addDeviceChangeListener(myDeviceListener);
myDeviceComboBox.addActionListener(new ActionListener() {
@Override
@@ -115,21 +116,32 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu
updateDataBases();
}
});
- updateDataBases();
- final ActionListener l = new ActionListener() {
+ ActionListener l = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateDbCombo();
}
};
myPackageNameComboBox.addActionListener(l);
- updateDbCombo();
-
- myDeviceComboBox.setPreferredSize(new Dimension(300, myDeviceComboBox.getPreferredSize().height));
-
myExternalStorageRadioButton.addActionListener(l);
myInternalStorageRadioButton.addActionListener(l);
+
+ new UiNotifyConnector.Once(myPanel, new Activatable.Adapter() {
+ @Override
+ public void showNotify() {
+ loadDevices();
+ updateDataBases();
+ updateDbCombo();
+ registerDeviceListener();
+ }
+ });
+ new UiNotifyConnector(myPanel, new Activatable.Adapter() {
+ @Override
+ public void showNotify() {
+ checkDriverPresence();
+ }
+ });
}
@NotNull
@@ -328,18 +340,6 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu
@Nullable
@Override
public JComponent createComponent() {
-
- new UiNotifyConnector(myPanel, new Activatable() {
- @Override
- public void showNotify() {
- checkDriverPresence();
- }
-
- @Override
- public void hideNotify() {
- }
- });
-
return myPanel;
}
@@ -379,9 +379,23 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu
myDataBaseComboBox.getEditor().setItem(StringUtil.notNullize(state.getDatabaseName()));
}
+ private void registerDeviceListener() {
+ AndroidDebugBridge.addDeviceChangeListener(myDeviceListener);
+ Disposer.register(this, new Disposable() {
+ @Override
+ public void dispose() {
+ AndroidDebugBridge.removeDeviceChangeListener(myDeviceListener);
+ }
+ });
+ }
+
+ @Override
+ public void dispose() {
+ }
+
@Override
public void disposeUIResources() {
- AndroidDebugBridge.removeDeviceChangeListener(myDeviceListener);
+ Disposer.dispose(this);
}
@Nullable
@@ -407,14 +421,15 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu
}
private void checkDriverPresence() {
- if (!DbImplUtil.canConnectTo(myDataSource) && myDataSource.getDatabaseDriver() != null) {
+ final DatabaseDriver driver = myDataSource.getDatabaseDriver();
+ if (driver != null && !driver.isDownloaded()) {
myController.showErrorNotification(this,
"SQLite driver missing",
"<font size=\"3\"><a href=\"create\">Download</a> SQLite driver files</font>",
new Runnable() {
@Override
public void run() {
- myDataSource.getDatabaseDriver().downloadDriver(myPanel, new Runnable() {
+ driver.downloadDriver(myPanel, new Runnable() {
@Override
public void run() {
fireStateChanged();