SDK Manager: fix NPE in AVD > Start when there's no skin name.
Also log missing config.ini path.
SDK BUG 2223760
Change-Id: I4517005e03e90c0b5a52bcb40b0d32eddd03c1f3
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/avd/AvdManager.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/avd/AvdManager.java
index 925f321..36b3b7f 100644
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/avd/AvdManager.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/avd/AvdManager.java
@@ -1044,7 +1044,13 @@
}
if (configIniFile != null) {
- properties = SdkManager.parsePropertyFile(configIniFile, log);
+ if (!configIniFile.isFile()) {
+ if (log != null) {
+ log.warning("Missing file '%1$s'.", configIniFile.getPath());
+ }
+ } else {
+ properties = SdkManager.parsePropertyFile(configIniFile, log);
+ }
}
// get name
diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdStartDialog.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdStartDialog.java
index 266a848..b698b64 100644
--- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdStartDialog.java
+++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdStartDialog.java
@@ -120,7 +120,7 @@
l.setText("Skin:");
l = new Label(parent, SWT.NONE);
- l.setText(mSkinDisplay);
+ l.setText(mSkinDisplay == null ? "None" : mSkinDisplay);
l.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
l = new Label(parent, SWT.NONE);
@@ -417,27 +417,29 @@
Map<String, String> prop = mAvd.getProperties();
String skinName = prop.get(AvdManager.AVD_INI_SKIN_NAME);
- Matcher m = AvdManager.NUMERIC_SKIN_SIZE.matcher(skinName);
- if (m.matches()) {
- mSize1 = Integer.parseInt(m.group(1));
- mSize2 = Integer.parseInt(m.group(2));
- mSkinDisplay = skinName;
- mEnableScaling = true;
- } else {
- // The resolution is inside the layout file of the skin.
- mEnableScaling = false; // default to false for now.
+ if (skinName != null) {
+ Matcher m = AvdManager.NUMERIC_SKIN_SIZE.matcher(skinName);
+ if (m != null && m.matches()) {
+ mSize1 = Integer.parseInt(m.group(1));
+ mSize2 = Integer.parseInt(m.group(2));
+ mSkinDisplay = skinName;
+ mEnableScaling = true;
+ }
+ }
- // path to the skin layout file.
- File skinFolder = new File(mSdkLocation, prop.get(AvdManager.AVD_INI_SKIN_PATH));
- if (skinFolder.isDirectory()) {
- File layoutFile = new File(skinFolder, "layout");
- if (layoutFile.isFile()) {
- if (parseLayoutFile(layoutFile)) {
- mSkinDisplay = String.format("%1$s (%2$dx%3$d)", skinName, mSize1, mSize2);
- mEnableScaling = true;
- } else {
- mSkinDisplay = skinName;
- }
+ // The resolution is inside the layout file of the skin.
+ mEnableScaling = false; // default to false for now.
+
+ // path to the skin layout file.
+ File skinFolder = new File(mSdkLocation, prop.get(AvdManager.AVD_INI_SKIN_PATH));
+ if (skinFolder.isDirectory()) {
+ File layoutFile = new File(skinFolder, "layout");
+ if (layoutFile.isFile()) {
+ if (parseLayoutFile(layoutFile)) {
+ mSkinDisplay = String.format("%1$s (%2$dx%3$d)", skinName, mSize1, mSize2);
+ mEnableScaling = true;
+ } else {
+ mSkinDisplay = skinName;
}
}
}