aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2010-07-07 10:44:36 -0700
committerXavier Ducrohet <xav@android.com>2010-07-08 15:31:52 -0700
commitca341273a09f696470872eb1a5aa28a935e073c5 (patch)
tree72a5dd1f8f3bfb83f372d30f2346149b6d9296dd
parent07af07ab94581a73a81eb92ba030a4c558ed6135 (diff)
downloadsdk-ca341273a09f696470872eb1a5aa28a935e073c5.zip
sdk-ca341273a09f696470872eb1a5aa28a935e073c5.tar.gz
sdk-ca341273a09f696470872eb1a5aa28a935e073c5.tar.bz2
ADT: dock/night combos in layout editor.
Added proper support for qualifiers that have fake values like "__" for language/region or "none" for dock mode. Those are used by ADT internally but do not represent valid values, so some UI (like the config creator) must handle them. They didn't do it before which led to some weird UI behavior such as a language or region qualifier with "__" value. Added some missing icons. Clean-up some qualifiers by moving similar code into a base class for enum based qualifiers Removed dependency on the current IAndroidTarget to get the folder segment corresponding to a qualifier as it's not needed anymore now that targets use recent versions of aapt (and will move to using the most recent one soon). Change-Id: I29c7bb5a7783db1696f53d0e38f46f64671e5e0d
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/icons/dockmode.pngbin0 -> 214 bytes
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/icons/nightmode.pngbin0 -> 296 bytes
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/icons/orientation.pngbin325 -> 175 bytes
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/icons/ratio.pngbin0 -> 163 bytes
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/icons/size.pngbin0 -> 179 bytes
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/icons/version.pngbin0 -> 197 bytes
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigEditDialog.java16
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java119
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/LayoutCreatorDialog.java8
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle1/GraphicalLayoutEditor.java10
-rwxr-xr-xeclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java10
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringInputPage.java2
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/CountryCodeQualifier.java16
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/DockModeQualifier.java59
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/EnumBasedResourceQualifier.java92
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/FolderConfiguration.java55
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/KeyboardStateQualifier.java53
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/LanguageQualifier.java20
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NavigationMethodQualifier.java53
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NavigationStateQualifier.java53
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NetworkCodeQualifier.java16
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NightModeQualifier.java53
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/PixelDensityQualifier.java60
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/RegionQualifier.java20
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ResourceQualifier.java19
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenDimensionQualifier.java19
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenOrientationQualifier.java53
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenRatioQualifier.java63
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenSizeQualifier.java63
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/TextInputMethodQualifier.java53
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/TouchScreenQualifier.java52
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/VersionQualifier.java26
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java6
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/LayoutDevice.java18
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ConfigurationSelector.java117
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/NewProjectWizard.java6
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileCreationPage.java7
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/configurations/DockModeQualifierTest.java67
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/manager/ConfigMatchTest.java29
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/internal/export/ProjectConfig.java13
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Density.java18
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/resources/DockMode.java31
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Keyboard.java37
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/resources/KeyboardState.java37
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Navigation.java39
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/resources/NavigationState.java35
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/resources/NightMode.java35
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ResourceEnum.java60
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenOrientation.java37
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenRatio.java36
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenSize.java37
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/resources/TouchScreen.java37
52 files changed, 932 insertions, 833 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/icons/dockmode.png b/eclipse/plugins/com.android.ide.eclipse.adt/icons/dockmode.png
new file mode 100644
index 0000000..71d1804
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/icons/dockmode.png
Binary files differ
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/icons/nightmode.png b/eclipse/plugins/com.android.ide.eclipse.adt/icons/nightmode.png
new file mode 100644
index 0000000..a04e4cf
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/icons/nightmode.png
Binary files differ
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/icons/orientation.png b/eclipse/plugins/com.android.ide.eclipse.adt/icons/orientation.png
index 423c3cd..53b5e62 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/icons/orientation.png
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/icons/orientation.png
Binary files differ
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/icons/ratio.png b/eclipse/plugins/com.android.ide.eclipse.adt/icons/ratio.png
new file mode 100644
index 0000000..8bf07f2
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/icons/ratio.png
Binary files differ
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/icons/size.png b/eclipse/plugins/com.android.ide.eclipse.adt/icons/size.png
new file mode 100644
index 0000000..c8a82b0
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/icons/size.png
Binary files differ
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/icons/version.png b/eclipse/plugins/com.android.ide.eclipse.adt/icons/version.png
new file mode 100644
index 0000000..a8dc35e
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/icons/version.png
Binary files differ
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigEditDialog.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigEditDialog.java
index e786ff2..f337cdf 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigEditDialog.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigEditDialog.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Eclipse Public License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/org/documents/epl-v10.php
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package com.android.ide.eclipse.adt.internal.editors.layout.configuration;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java
index 4b1d5f6..c267422 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java
@@ -19,8 +19,10 @@ package com.android.ide.eclipse.adt.internal.editors.layout.configuration;
import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
import com.android.ide.eclipse.adt.internal.resources.ResourceType;
+import com.android.ide.eclipse.adt.internal.resources.configurations.DockModeQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration;
import com.android.ide.eclipse.adt.internal.resources.configurations.LanguageQualifier;
+import com.android.ide.eclipse.adt.internal.resources.configurations.NightModeQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.PixelDensityQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.RegionQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.ResourceQualifier;
@@ -37,11 +39,12 @@ import com.android.ide.eclipse.adt.internal.sdk.LayoutDeviceManager;
import com.android.ide.eclipse.adt.internal.sdk.LoadStatus;
import com.android.ide.eclipse.adt.internal.sdk.Sdk;
import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData.LayoutBridge;
-import com.android.ide.eclipse.adt.internal.ui.ConfigurationSelector.LanguageRegionVerifier;
import com.android.layoutlib.api.IResourceValue;
import com.android.layoutlib.api.IStyleResourceValue;
import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.resources.Density;
+import com.android.sdklib.resources.DockMode;
+import com.android.sdklib.resources.NightMode;
import com.android.sdklib.resources.ScreenOrientation;
import org.eclipse.core.resources.IFile;
@@ -100,7 +103,6 @@ public class ConfigurationComposite extends Composite {
private final static String CONFIG_STATE = "state"; //$NON-NLS-1$
private final static String THEME_SEPARATOR = "----------"; //$NON-NLS-1$
- private final static String FAKE_LOCALE_VALUE = "__"; //$NON-NLS-1$
private final static int LOCALE_LANG = 0;
private final static int LOCALE_REGION = 1;
@@ -111,6 +113,8 @@ public class ConfigurationComposite extends Composite {
private Combo mDeviceCombo;
private Combo mDeviceConfigCombo;
private Combo mLocaleCombo;
+ private Combo mDockCombo;
+ private Combo mNightCombo;
private Combo mThemeCombo;
private Button mCreateButton;
@@ -180,6 +184,10 @@ public class ConfigurationComposite extends Composite {
String configName;
ResourceQualifier[] locale;
String theme;
+ /** dock mode. Guaranteed to be non null */
+ DockMode dock = DockMode.NONE;
+ /** night mode. Guaranteed to be non null */
+ NightMode night = NightMode.NOTNIGHT;
String getData() {
StringBuilder sb = new StringBuilder();
@@ -199,6 +207,10 @@ public class ConfigurationComposite extends Composite {
sb.append(SEP);
sb.append(theme);
sb.append(SEP);
+ sb.append(dock.getResourceValue());
+ sb.append(SEP);
+ sb.append(night.getResourceValue());
+ sb.append(SEP);
}
return sb.toString();
@@ -206,7 +218,7 @@ public class ConfigurationComposite extends Composite {
boolean setData(String data) {
String[] values = data.split(SEP);
- if (values.length == 4) {
+ if (values.length == 6) {
for (LayoutDevice d : mDeviceList) {
if (d.getName().equals(values[0])) {
device = d;
@@ -226,6 +238,14 @@ public class ConfigurationComposite extends Composite {
}
theme = values[3];
+ dock = DockMode.getEnum(values[4]);
+ if (dock == null) {
+ dock = DockMode.NONE;
+ }
+ night = NightMode.getEnum(values[5]);
+ if (night == null) {
+ night = NightMode.NOTNIGHT;
+ }
return true;
}
@@ -255,6 +275,10 @@ public class ConfigurationComposite extends Composite {
sb.append(SEP);
sb.append(theme);
sb.append(SEP);
+ sb.append(dock.getResourceValue());
+ sb.append(SEP);
+ sb.append(night.getResourceValue());
+ sb.append(SEP);
return sb.toString();
}
@@ -340,7 +364,7 @@ public class ConfigurationComposite extends Composite {
GridLayout gl;
GridData gd;
- int cols = 10; // device*2+config*2+locale*2+separator*2+theme+createBtn
+ int cols = 9; // device+config+locale+dock+day/night+separator*2+theme+createBtn
// ---- First line: custom buttons, clipping button, editing config display.
Composite labelParent = new Composite(this, SWT.NONE);
@@ -376,7 +400,6 @@ public class ConfigurationComposite extends Composite {
gl.marginHeight = 0;
gl.horizontalSpacing = 0;
- new Label(this, SWT.NONE).setText("Devices");
mDeviceCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
mDeviceCombo.setLayoutData(new GridData(
GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
@@ -387,7 +410,6 @@ public class ConfigurationComposite extends Composite {
}
});
- new Label(this, SWT.NONE).setText("Config");
mDeviceConfigCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
mDeviceConfigCombo.setLayoutData(new GridData(
GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
@@ -398,11 +420,9 @@ public class ConfigurationComposite extends Composite {
}
});
- new Label(this, SWT.NONE).setText("Locale");
mLocaleCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
mLocaleCombo.setLayoutData(new GridData(
GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
- mLocaleCombo.addVerifyListener(new LanguageRegionVerifier());
mLocaleCombo.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
onLocaleChange();
@@ -412,6 +432,36 @@ public class ConfigurationComposite extends Composite {
}
});
+ mDockCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
+ mDockCombo.setLayoutData(new GridData(
+ GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
+ for (DockMode mode : DockMode.values()) {
+ mDockCombo.add(mode.getLongDisplayValue());
+ }
+ mDockCombo.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ onDockChange();
+ }
+ public void widgetSelected(SelectionEvent e) {
+ onDockChange();
+ }
+ });
+
+ mNightCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
+ mNightCombo.setLayoutData(new GridData(
+ GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
+ for (NightMode mode : NightMode.values()) {
+ mNightCombo.add(mode.getLongDisplayValue());
+ }
+ mNightCombo.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ onDayChange();
+ }
+ public void widgetSelected(SelectionEvent e) {
+ onDayChange();
+ }
+ });
+
// first separator
Label separator = new Label(this, SWT.SEPARATOR | SWT.VERTICAL);
separator.setLayoutData(gd = new GridData(
@@ -640,8 +690,14 @@ public class ConfigurationComposite extends Composite {
fillConfigCombo(mState.configName);
adaptConfigSelection(false /*needBestMatch*/);
+
+ mDockCombo.select(DockMode.getIndex(mState.dock));
+ mNightCombo.select(NightMode.getIndex(mState.night));
} else {
findAndSetCompatibleConfig(false /*favorCurrentConfig*/);
+
+ mDockCombo.select(0);
+ mNightCombo.select(0);
}
// update the string showing the config value
@@ -835,7 +891,7 @@ public class ConfigurationComposite extends Composite {
if (locale[LOCALE_LANG].equals(language)) {
// region comparison is more complex, as the region could be null.
if (region == null) {
- if (FAKE_LOCALE_VALUE.equals(
+ if (RegionQualifier.FAKE_REGION_VALUE.equals(
((RegionQualifier)locale[LOCALE_REGION]).getValue())) {
// match!
mLocaleCombo.select(i);
@@ -876,6 +932,16 @@ public class ConfigurationComposite extends Composite {
if (index != -1) {
mState.theme = mThemeCombo.getItem(index);
}
+
+ index = mDockCombo.getSelectionIndex();
+ if (index != -1) {
+ mState.dock = DockMode.getByIndex(index);
+ }
+
+ index = mNightCombo.getSelectionIndex();
+ if (index != -1) {
+ mState.night = NightMode.getByIndex(index);
+ }
}
}
@@ -939,7 +1005,7 @@ public class ConfigurationComposite extends Composite {
// create a region qualifier that will never be matched by qualified resources.
mLocaleList.add(new ResourceQualifier[] {
langQual,
- new RegionQualifier(FAKE_LOCALE_VALUE)
+ new RegionQualifier(RegionQualifier.FAKE_REGION_VALUE)
});
}
}
@@ -949,13 +1015,13 @@ public class ConfigurationComposite extends Composite {
if (hasLocale) {
mLocaleCombo.add("Other");
} else {
- mLocaleCombo.add("Any");
+ mLocaleCombo.add("Any locale");
}
// create language/region qualifier that will never be matched by qualified resources.
mLocaleList.add(new ResourceQualifier[] {
- new LanguageQualifier(FAKE_LOCALE_VALUE),
- new RegionQualifier(FAKE_LOCALE_VALUE)
+ new LanguageQualifier(LanguageQualifier.FAKE_LANG_VALUE),
+ new RegionQualifier(RegionQualifier.FAKE_REGION_VALUE)
});
if (mState.locale != null) {
@@ -1486,7 +1552,7 @@ public class ConfigurationComposite extends Composite {
* Call back for language combo selection
*/
private void onLocaleChange() {
- // because mLanguage triggers onLanguageChange at each modification, the filling
+ // because mLocaleList triggers onLanguageChange at each modification, the filling
// of the combo with data will trigger notifications, and we don't want that.
if (mDisableUpdates > 0) {
return;
@@ -1497,6 +1563,18 @@ public class ConfigurationComposite extends Composite {
}
}
+ private void onDockChange() {
+ if (computeCurrentConfig(false /*force*/) && mListener != null) {
+ mListener.onConfigurationChange();
+ }
+ }
+
+ private void onDayChange() {
+ if (computeCurrentConfig(false /*force*/) && mListener != null) {
+ mListener.onConfigurationChange();
+ }
+ }
+
/**
* Saves the current state and the current configuration
* @param force forces saving the states even if updates are disabled
@@ -1526,6 +1604,19 @@ public class ConfigurationComposite extends Composite {
(RegionQualifier)localeQualifiers[LOCALE_REGION]);
}
+ int index = mDockCombo.getSelectionIndex();
+ if (index == -1) {
+ index = 0; // no selection = 0
+ }
+ mCurrentConfig.setDockModeQualifier(new DockModeQualifier(DockMode.getByIndex(index)));
+
+ index = mNightCombo.getSelectionIndex();
+ if (index == -1) {
+ index = 0; // no selection = 0
+ }
+ mCurrentConfig.setNightModeQualifier(
+ new NightModeQualifier(NightMode.getByIndex(index)));
+
// update the create button.
checkCreateEnable();
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/LayoutCreatorDialog.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/LayoutCreatorDialog.java
index fdbb366..de31ca4 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/LayoutCreatorDialog.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/LayoutCreatorDialog.java
@@ -22,7 +22,6 @@ import com.android.ide.eclipse.adt.internal.resources.configurations.ResourceQua
import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFolderType;
import com.android.ide.eclipse.adt.internal.ui.ConfigurationSelector;
import com.android.ide.eclipse.adt.internal.ui.ConfigurationSelector.ConfigurationState;
-import com.android.sdklib.IAndroidTarget;
import com.android.sdkuilib.ui.GridDialog;
import org.eclipse.jface.dialogs.Dialog;
@@ -46,19 +45,16 @@ public final class LayoutCreatorDialog extends GridDialog {
private final FolderConfiguration mConfig = new FolderConfiguration();
private final String mFileName;
- private final IAndroidTarget mTarget;
/**
* Creates a dialog, and init the UI from a {@link FolderConfiguration}.
* @param parentShell the parent {@link Shell}.
* @param config The starting configuration.
*/
- public LayoutCreatorDialog(Shell parentShell, String fileName, IAndroidTarget target,
- FolderConfiguration config) {
+ public LayoutCreatorDialog(Shell parentShell, String fileName, FolderConfiguration config) {
super(parentShell, 1, false);
mFileName = fileName;
- mTarget = target;
// FIXME: add some data to know what configurations already exist.
mConfig.set(config);
@@ -134,7 +130,7 @@ public final class LayoutCreatorDialog extends GridDialog {
*/
private void resetStatus() {
String displayString = Dialog.shortenText(String.format("New File: res/%1$s/%2$s",
- mConfig.getFolderName(ResourceFolderType.LAYOUT, mTarget), mFileName),
+ mConfig.getFolderName(ResourceFolderType.LAYOUT), mFileName),
mStatusLabel);
mStatusLabel.setText(displayString);
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle1/GraphicalLayoutEditor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle1/GraphicalLayoutEditor.java
index a0fc40d..45a56d7 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle1/GraphicalLayoutEditor.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle1/GraphicalLayoutEditor.java
@@ -856,8 +856,7 @@ public class GraphicalLayoutEditor extends GraphicalEditorWithPalette
String message = String.format(
"No resources match the configuration\n \n\t%1$s\n \nChange the configuration or create:\n \n\tres/%2$s/%3$s\n \nYou can also click the 'Create' button above.",
currentConfig.toDisplayString(),
- currentConfig.getFolderName(ResourceFolderType.LAYOUT,
- Sdk.getCurrent().getTarget(mEditedFile.getProject())),
+ currentConfig.getFolderName(ResourceFolderType.LAYOUT),
mEditedFile.getName());
showErrorInEditor(message);
}
@@ -878,9 +877,7 @@ public class GraphicalLayoutEditor extends GraphicalEditorWithPalette
public void onCreate() {
LayoutCreatorDialog dialog = new LayoutCreatorDialog(mParent.getShell(),
- mEditedFile.getName(),
- Sdk.getCurrent().getTarget(mEditedFile.getProject()),
- mConfigComposite.getCurrentConfig());
+ mEditedFile.getName(), mConfigComposite.getCurrentConfig());
if (dialog.open() == Dialog.OK) {
final FolderConfiguration config = new FolderConfiguration();
dialog.getConfiguration(config);
@@ -1285,8 +1282,7 @@ public class GraphicalLayoutEditor extends GraphicalEditorWithPalette
@Override
protected IStatus run(IProgressMonitor monitor) {
// get the folder name
- String folderName = config.getFolderName(ResourceFolderType.LAYOUT,
- Sdk.getCurrent().getTarget(mEditedFile.getProject()));
+ String folderName = config.getFolderName(ResourceFolderType.LAYOUT);
try {
// look to see if it exists.
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java
index d2d82f6..fbfea59 100755
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java
@@ -487,8 +487,7 @@ public class GraphicalEditorPart extends EditorPart
displayError(
"No resources match the configuration\n \n\t%1$s\n \nChange the configuration or create:\n \n\tres/%2$s/%3$s\n \nYou can also click the 'Create' button above.",
currentConfig.toDisplayString(),
- currentConfig.getFolderName(ResourceFolderType.LAYOUT,
- Sdk.getCurrent().getTarget(mEditedFile.getProject())),
+ currentConfig.getFolderName(ResourceFolderType.LAYOUT),
mEditedFile.getName());
}
}
@@ -507,9 +506,7 @@ public class GraphicalEditorPart extends EditorPart
public void onCreate() {
LayoutCreatorDialog dialog = new LayoutCreatorDialog(mConfigComposite.getShell(),
- mEditedFile.getName(),
- Sdk.getCurrent().getTarget(mEditedFile.getProject()),
- mConfigComposite.getCurrentConfig());
+ mEditedFile.getName(), mConfigComposite.getCurrentConfig());
if (dialog.open() == Dialog.OK) {
final FolderConfiguration config = new FolderConfiguration();
dialog.getConfiguration(config);
@@ -589,8 +586,7 @@ public class GraphicalEditorPart extends EditorPart
@Override
protected IStatus run(IProgressMonitor monitor) {
// get the folder name
- String folderName = config.getFolderName(ResourceFolderType.LAYOUT,
- Sdk.getCurrent().getTarget(mEditedFile.getProject()));
+ String folderName = config.getFolderName(ResourceFolderType.LAYOUT);
try {
// look to see if it exists.
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringInputPage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringInputPage.java
index a54f8b6..954e58c 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringInputPage.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringInputPage.java
@@ -420,7 +420,7 @@ class ExtractStringInputPage extends UserInputWizardPage implements IWizardPage
// recreate the res path from the current configuration
mConfigSelector.getConfiguration(mTempConfig);
StringBuffer sb = new StringBuffer(RES_FOLDER_ABS);
- sb.append(mTempConfig.getFolderName(ResourceFolderType.VALUES, mProject));
+ sb.append(mTempConfig.getFolderName(ResourceFolderType.VALUES));
sb.append('/');
String newPath = sb.toString();
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/CountryCodeQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/CountryCodeQualifier.java
index 97028e9..fcad2dc 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/CountryCodeQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/CountryCodeQualifier.java
@@ -17,7 +17,6 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.IAndroidTarget;
import org.eclipse.swt.graphics.Image;
@@ -109,6 +108,11 @@ public final class CountryCodeQualifier extends ResourceQualifier {
}
@Override
+ public boolean hasFakeValue() {
+ return false;
+ }
+
+ @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
CountryCodeQualifier qualifier = getQualifier(value);
if (qualifier != null) {
@@ -137,16 +141,22 @@ public final class CountryCodeQualifier extends ResourceQualifier {
* Returns the string used to represent this qualifier in the folder name.
*/
@Override
- public String getFolderSegment(IAndroidTarget target) {
+ public String getFolderSegment() {
return getFolderSegment(mCode);
}
@Override
- public String getStringValue() {
+ public String getShortDisplayValue() {
if (mCode != DEFAULT_CODE) {
return String.format("MCC %1$d", mCode);
}
return ""; //$NON-NLS-1$
}
+
+ @Override
+ public String getLongDisplayValue() {
+ return getShortDisplayValue();
+ }
+
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/DockModeQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/DockModeQualifier.java
index 27b5ea2..8b431b1 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/DockModeQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/DockModeQualifier.java
@@ -17,15 +17,15 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.resources.DockMode;
+import com.android.sdklib.resources.ResourceEnum;
import org.eclipse.swt.graphics.Image;
/**
* Resource Qualifier for Navigation Method.
*/
-public final class DockModeQualifier extends ResourceQualifier {
+public final class DockModeQualifier extends EnumBasedResourceQualifier {
public static final String NAME = "Dock Mode";
@@ -44,6 +44,11 @@ public final class DockModeQualifier extends ResourceQualifier {
}
@Override
+ ResourceEnum getEnumValue() {
+ return mValue;
+ }
+
+ @Override
public String getName() {
return NAME;
}
@@ -60,11 +65,6 @@ public final class DockModeQualifier extends ResourceQualifier {
}
@Override
- public boolean isValid() {
- return mValue != null;
- }
-
- @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
DockMode mode = DockMode.getEnum(value);
if (mode != null) {
@@ -77,41 +77,32 @@ public final class DockModeQualifier extends ResourceQualifier {
}
@Override
- public boolean equals(Object qualifier) {
- if (qualifier instanceof DockModeQualifier) {
- return mValue == ((DockModeQualifier)qualifier).mValue;
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- if (mValue != null) {
- return mValue.hashCode();
+ public boolean isMatchFor(ResourceQualifier qualifier) {
+ // only NONE is a match other DockModes
+ if (mValue == DockMode.NONE) {
+ return true;
}
- return 0;
+ // others must be an exact match
+ return ((DockModeQualifier)qualifier).mValue == mValue;
}
- /**
- * Returns the string used to represent this qualifier in the folder name.
- */
@Override
- public String getFolderSegment(IAndroidTarget target) {
- if (mValue != null) {
- return mValue.getValue();
+ public boolean isBetterMatchThan(ResourceQualifier compareTo, ResourceQualifier reference) {
+ if (compareTo == null) {
+ return true;
}
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public String getStringValue() {
- if (mValue != null) {
- return mValue.getDisplayValue();
+ DockModeQualifier compareQualifier = (DockModeQualifier)compareTo;
+ DockModeQualifier referenceQualifier = (DockModeQualifier)reference;
+ // if they are a perfect match, the receiver cannot be a better match.
+ if (compareQualifier.getValue() == referenceQualifier.getValue()) {
+ return false;
+ } else if (mValue == DockMode.NONE) {
+ // else "none" can be a match in case there's no exact match
+ return true;
}
- return ""; //$NON-NLS-1$
+ return false;
}
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/EnumBasedResourceQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/EnumBasedResourceQualifier.java
new file mode 100644
index 0000000..a112d1e
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/EnumBasedResourceQualifier.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Eclipse Public License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/org/documents/epl-v10.php
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.ide.eclipse.adt.internal.resources.configurations;
+
+import com.android.sdklib.resources.ResourceEnum;
+
+/**
+ * Base class for {@link ResourceQualifier} whose value is an {@link ResourceEnum}.
+ *
+ */
+abstract class EnumBasedResourceQualifier extends ResourceQualifier {
+
+ abstract ResourceEnum getEnumValue();
+
+ @Override
+ public boolean isValid() {
+ return getEnumValue() != null;
+ }
+
+ @Override
+ public boolean hasFakeValue() {
+ return getEnumValue().isFakeValue();
+ }
+
+ @Override
+ public boolean equals(Object qualifier) {
+ if (qualifier instanceof EnumBasedResourceQualifier) {
+ return getEnumValue() == ((EnumBasedResourceQualifier)qualifier).getEnumValue();
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ ResourceEnum value = getEnumValue();
+ if (value != null) {
+ return value.hashCode();
+ }
+
+ return 0;
+ }
+
+ /**
+ * Returns the string used to represent this qualifier in the folder name.
+ */
+ @Override
+ public final String getFolderSegment() {
+ ResourceEnum value = getEnumValue();
+ if (value != null) {
+ return value.getResourceValue();
+ }
+
+ return ""; //$NON-NLS-1$
+ }
+
+
+ @Override
+ public String getShortDisplayValue() {
+ ResourceEnum value = getEnumValue();
+ if (value != null) {
+ return value.getShortDisplayValue();
+ }
+
+ return ""; //$NON-NLS-1$
+ }
+
+ @Override
+ public String getLongDisplayValue() {
+ ResourceEnum value = getEnumValue();
+ if (value != null) {
+ return value.getLongDisplayValue();
+ }
+
+ return ""; //$NON-NLS-1$
+ }
+
+}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/FolderConfiguration.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/FolderConfiguration.java
index f3e22cb..6eed4d6 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/FolderConfiguration.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/FolderConfiguration.java
@@ -17,10 +17,6 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFolderType;
-import com.android.ide.eclipse.adt.internal.sdk.Sdk;
-import com.android.sdklib.IAndroidTarget;
-
-import org.eclipse.core.resources.IProject;
/**
@@ -60,12 +56,30 @@ public final class FolderConfiguration implements Comparable<FolderConfiguration
/**
* Sets the config from the qualifiers of a given <var>config</var>.
- * @param config
+ * <p/>This is equivalent to <code>set(config, false)</code>
+ * @param config the configuration to set
+ *
+ * @see #set(FolderConfiguration, boolean)
*/
public void set(FolderConfiguration config) {
+ set(config, false /*nonFakeValuesOnly*/);
+ }
+
+ /**
+ * Sets the config from the qualifiers of a given <var>config</var>.
+ * @param config the configuration to set
+ * @param nonFakeValuesOnly if set to true this ignore qualifiers for which the
+ * current value is a fake value.
+ *
+ * @see ResourceQualifier#hasFakeValue()
+ */
+ public void set(FolderConfiguration config, boolean nonFakeValuesOnly) {
if (config != null) {
for (int i = 0 ; i < INDEX_COUNT ; i++) {
- mQualifiers[i] = config.mQualifiers[i];
+ ResourceQualifier q = config.mQualifiers[i];
+ if (nonFakeValuesOnly == false || q == null || q.hasFakeValue() == false) {
+ mQualifiers[i] = q;
+ }
}
}
}
@@ -361,12 +375,12 @@ public final class FolderConfiguration implements Comparable<FolderConfiguration
/**
* Returns the name of a folder with the configuration.
*/
- public String getFolderName(ResourceFolderType folder, IAndroidTarget target) {
+ public String getFolderName(ResourceFolderType folder) {
StringBuilder result = new StringBuilder(folder.getName());
for (ResourceQualifier qualifier : mQualifiers) {
if (qualifier != null) {
- String segment = qualifier.getFolderSegment(target);
+ String segment = qualifier.getFolderSegment();
if (segment != null && segment.length() > 0) {
result.append(QUALIFIER_SEP);
result.append(segment);
@@ -378,21 +392,6 @@ public final class FolderConfiguration implements Comparable<FolderConfiguration
}
/**
- * Returns the name of a folder with the configuration.
- */
- public String getFolderName(ResourceFolderType folder, IProject project) {
- IAndroidTarget target = null;
- if (project != null) {
- Sdk currentSdk = Sdk.getCurrent();
- if (currentSdk != null) {
- target = currentSdk.getTarget(project);
- }
- }
-
- return getFolderName(folder, target);
- }
-
- /**
* Returns {@link #toDisplayString()}.
*/
@Override
@@ -421,22 +420,22 @@ public final class FolderConfiguration implements Comparable<FolderConfiguration
} else {
result.append(", "); //$NON-NLS-1$
}
- result.append(qualifier.getStringValue());
+ result.append(qualifier.getLongDisplayValue());
}
}
// process the language/region qualifier in a custom way, if there are both non null.
if (mQualifiers[INDEX_LANGUAGE] != null && mQualifiers[INDEX_REGION] != null) {
- String language = mQualifiers[INDEX_LANGUAGE].getStringValue();
- String region = mQualifiers[INDEX_REGION].getStringValue();
+ String language = mQualifiers[INDEX_LANGUAGE].getLongDisplayValue();
+ String region = mQualifiers[INDEX_REGION].getLongDisplayValue();
if (result == null) {
result = new StringBuilder();
} else {
result.append(", "); //$NON-NLS-1$
}
- result.append(String.format("%s_%s", language, region)); //$NON-NLS-1$
+ result.append(String.format("Locale %s_%s", language, region)); //$NON-NLS-1$
index += 2;
}
@@ -450,7 +449,7 @@ public final class FolderConfiguration implements Comparable<FolderConfiguration
} else {
result.append(", "); //$NON-NLS-1$
}
- result.append(qualifier.getStringValue());
+ result.append(qualifier.getLongDisplayValue());
}
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/KeyboardStateQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/KeyboardStateQualifier.java
index 1375d2a..6c6e961 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/KeyboardStateQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/KeyboardStateQualifier.java
@@ -17,15 +17,15 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.resources.KeyboardState;
+import com.android.sdklib.resources.ResourceEnum;
import org.eclipse.swt.graphics.Image;
/**
* Resource Qualifier for keyboard state.
*/
-public final class KeyboardStateQualifier extends ResourceQualifier {
+public final class KeyboardStateQualifier extends EnumBasedResourceQualifier {
public static final String NAME = "Keyboard State";
@@ -44,6 +44,11 @@ public final class KeyboardStateQualifier extends ResourceQualifier {
}
@Override
+ ResourceEnum getEnumValue() {
+ return mValue;
+ }
+
+ @Override
public String getName() {
return NAME;
}
@@ -59,11 +64,6 @@ public final class KeyboardStateQualifier extends ResourceQualifier {
}
@Override
- public boolean isValid() {
- return mValue != null;
- }
-
- @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
KeyboardState orientation = KeyboardState.getEnum(value);
if (orientation != null) {
@@ -111,43 +111,4 @@ public final class KeyboardStateQualifier extends ResourceQualifier {
return false;
}
-
- @Override
- public boolean equals(Object qualifier) {
- if (qualifier instanceof KeyboardStateQualifier) {
- return mValue == ((KeyboardStateQualifier)qualifier).mValue;
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- if (mValue != null) {
- return mValue.hashCode();
- }
-
- return 0;
- }
-
- /**
- * Returns the string used to represent this qualifier in the folder name.
- */
- @Override
- public String getFolderSegment(IAndroidTarget target) {
- if (mValue != null) {
- return mValue.getValue();
- }
-
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public String getStringValue() {
- if (mValue != null) {
- return mValue.getDisplayValue();
- }
-
- return ""; //$NON-NLS-1$
- }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/LanguageQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/LanguageQualifier.java
index 50f5c52..2686eac 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/LanguageQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/LanguageQualifier.java
@@ -17,7 +17,6 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.IAndroidTarget;
import org.eclipse.swt.graphics.Image;
@@ -29,6 +28,7 @@ import java.util.regex.Pattern;
public final class LanguageQualifier extends ResourceQualifier {
private final static Pattern sLanguagePattern = Pattern.compile("^[a-z]{2}$"); //$NON-NLS-1$
+ public static final String FAKE_LANG_VALUE = "__"; //$NON-NLS-1$
public static final String NAME = "Language";
private String mValue;
@@ -100,6 +100,11 @@ public final class LanguageQualifier extends ResourceQualifier {
}
@Override
+ public boolean hasFakeValue() {
+ return FAKE_LANG_VALUE.equals(mValue);
+ }
+
+ @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
LanguageQualifier qualifier = getQualifier(value);
if (qualifier != null) {
@@ -135,7 +140,7 @@ public final class LanguageQualifier extends ResourceQualifier {
* Returns the string used to represent this qualifier in the folder name.
*/
@Override
- public String getFolderSegment(IAndroidTarget target) {
+ public String getFolderSegment() {
if (mValue != null) {
return getFolderSegment(mValue);
}
@@ -144,11 +149,20 @@ public final class LanguageQualifier extends ResourceQualifier {
}
@Override
- public String getStringValue() {
+ public String getShortDisplayValue() {
if (mValue != null) {
return mValue;
}
return ""; //$NON-NLS-1$
}
+
+ @Override
+ public String getLongDisplayValue() {
+ if (mValue != null) {
+ return String.format("Language %s", mValue);
+ }
+
+ return ""; //$NON-NLS-1$
+ }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NavigationMethodQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NavigationMethodQualifier.java
index 9d27e5a..c4d84ee 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NavigationMethodQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NavigationMethodQualifier.java
@@ -17,15 +17,15 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.resources.Navigation;
+import com.android.sdklib.resources.ResourceEnum;
import org.eclipse.swt.graphics.Image;
/**
* Resource Qualifier for Navigation Method.
*/
-public final class NavigationMethodQualifier extends ResourceQualifier {
+public final class NavigationMethodQualifier extends EnumBasedResourceQualifier {
public static final String NAME = "Navigation Method";
@@ -44,6 +44,11 @@ public final class NavigationMethodQualifier extends ResourceQualifier {
}
@Override
+ ResourceEnum getEnumValue() {
+ return mValue;
+ }
+
+ @Override
public String getName() {
return NAME;
}
@@ -60,11 +65,6 @@ public final class NavigationMethodQualifier extends ResourceQualifier {
}
@Override
- public boolean isValid() {
- return mValue != null;
- }
-
- @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
Navigation method = Navigation.getEnum(value);
if (method != null) {
@@ -75,43 +75,4 @@ public final class NavigationMethodQualifier extends ResourceQualifier {
return false;
}
-
- @Override
- public boolean equals(Object qualifier) {
- if (qualifier instanceof NavigationMethodQualifier) {
- return mValue == ((NavigationMethodQualifier)qualifier).mValue;
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- if (mValue != null) {
- return mValue.hashCode();
- }
-
- return 0;
- }
-
- /**
- * Returns the string used to represent this qualifier in the folder name.
- */
- @Override
- public String getFolderSegment(IAndroidTarget target) {
- if (mValue != null) {
- return mValue.getValue();
- }
-
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public String getStringValue() {
- if (mValue != null) {
- return mValue.getDisplayValue();
- }
-
- return ""; //$NON-NLS-1$
- }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NavigationStateQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NavigationStateQualifier.java
index 264930c..cf63160 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NavigationStateQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NavigationStateQualifier.java
@@ -17,15 +17,15 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.resources.NavigationState;
+import com.android.sdklib.resources.ResourceEnum;
import org.eclipse.swt.graphics.Image;
/**
* Resource Qualifier for navigation state.
*/
-public final class NavigationStateQualifier extends ResourceQualifier {
+public final class NavigationStateQualifier extends EnumBasedResourceQualifier {
public static final String NAME = "Navigation State";
@@ -44,6 +44,11 @@ public final class NavigationStateQualifier extends ResourceQualifier {
}
@Override
+ ResourceEnum getEnumValue() {
+ return mValue;
+ }
+
+ @Override
public String getName() {
return NAME;
}
@@ -59,11 +64,6 @@ public final class NavigationStateQualifier extends ResourceQualifier {
}
@Override
- public boolean isValid() {
- return mValue != null;
- }
-
- @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
NavigationState state = NavigationState.getEnum(value);
if (state != null) {
@@ -75,43 +75,4 @@ public final class NavigationStateQualifier extends ResourceQualifier {
return false;
}
-
- @Override
- public boolean equals(Object qualifier) {
- if (qualifier instanceof NavigationStateQualifier) {
- return mValue == ((NavigationStateQualifier)qualifier).mValue;
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- if (mValue != null) {
- return mValue.hashCode();
- }
-
- return 0;
- }
-
- /**
- * Returns the string used to represent this qualifier in the folder name.
- */
- @Override
- public String getFolderSegment(IAndroidTarget target) {
- if (mValue != null) {
- return mValue.getValue();
- }
-
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public String getStringValue() {
- if (mValue != null) {
- return mValue.getDisplayValue();
- }
-
- return ""; //$NON-NLS-1$
- }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NetworkCodeQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NetworkCodeQualifier.java
index 655fe4e..4ef0c75 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NetworkCodeQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NetworkCodeQualifier.java
@@ -17,7 +17,6 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.IAndroidTarget;
import org.eclipse.swt.graphics.Image;
@@ -109,6 +108,11 @@ public final class NetworkCodeQualifier extends ResourceQualifier {
}
@Override
+ public boolean hasFakeValue() {
+ return false;
+ }
+
+ @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
Matcher m = sNetworkCodePattern.matcher(value);
if (m.matches()) {
@@ -148,16 +152,22 @@ public final class NetworkCodeQualifier extends ResourceQualifier {
* Returns the string used to represent this qualifier in the folder name.
*/
@Override
- public String getFolderSegment(IAndroidTarget target) {
+ public String getFolderSegment() {
return getFolderSegment(mCode);
}
@Override
- public String getStringValue() {
+ public String getShortDisplayValue() {
if (mCode != DEFAULT_CODE) {
return String.format("MNC %1$d", mCode);
}
return ""; //$NON-NLS-1$
}
+
+ @Override
+ public String getLongDisplayValue() {
+ return getShortDisplayValue();
+ }
+
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NightModeQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NightModeQualifier.java
index 8f23373..03093cf 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NightModeQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/NightModeQualifier.java
@@ -17,15 +17,15 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.resources.NightMode;
+import com.android.sdklib.resources.ResourceEnum;
import org.eclipse.swt.graphics.Image;
/**
* Resource Qualifier for Navigation Method.
*/
-public final class NightModeQualifier extends ResourceQualifier {
+public final class NightModeQualifier extends EnumBasedResourceQualifier {
public static final String NAME = "Night Mode";
@@ -44,6 +44,11 @@ public final class NightModeQualifier extends ResourceQualifier {
}
@Override
+ ResourceEnum getEnumValue() {
+ return mValue;
+ }
+
+ @Override
public String getName() {
return NAME;
}
@@ -59,11 +64,6 @@ public final class NightModeQualifier extends ResourceQualifier {
}
@Override
- public boolean isValid() {
- return mValue != null;
- }
-
- @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
NightMode mode = NightMode.getEnum(value);
if (mode != null) {
@@ -74,43 +74,4 @@ public final class NightModeQualifier extends ResourceQualifier {
return false;
}
-
- @Override
- public boolean equals(Object qualifier) {
- if (qualifier instanceof NightModeQualifier) {
- return mValue == ((NightModeQualifier)qualifier).mValue;
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- if (mValue != null) {
- return mValue.hashCode();
- }
-
- return 0;
- }
-
- /**
- * Returns the string used to represent this qualifier in the folder name.
- */
- @Override
- public String getFolderSegment(IAndroidTarget target) {
- if (mValue != null) {
- return mValue.getValue();
- }
-
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public String getStringValue() {
- if (mValue != null) {
- return mValue.getDisplayValue();
- }
-
- return ""; //$NON-NLS-1$
- }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/PixelDensityQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/PixelDensityQualifier.java
index 5b3ba91..e4cc1bc 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/PixelDensityQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/PixelDensityQualifier.java
@@ -17,9 +17,8 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.AndroidVersion;
-import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.resources.Density;
+import com.android.sdklib.resources.ResourceEnum;
import org.eclipse.swt.graphics.Image;
@@ -29,7 +28,7 @@ import java.util.regex.Pattern;
/**
* Resource Qualifier for Screen Pixel Density.
*/
-public final class PixelDensityQualifier extends ResourceQualifier {
+public final class PixelDensityQualifier extends EnumBasedResourceQualifier {
private final static Pattern sDensityLegacyPattern = Pattern.compile("^(\\d+)dpi$");//$NON-NLS-1$
public static final String NAME = "Pixel Density";
@@ -49,6 +48,11 @@ public final class PixelDensityQualifier extends ResourceQualifier {
}
@Override
+ ResourceEnum getEnumValue() {
+ return mValue;
+ }
+
+ @Override
public String getName() {
return NAME;
}
@@ -64,11 +68,6 @@ public final class PixelDensityQualifier extends ResourceQualifier {
}
@Override
- public boolean isValid() {
- return mValue != null;
- }
-
- @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
Density density = Density.getEnum(value);
if (density == null) {
@@ -128,49 +127,4 @@ public final class PixelDensityQualifier extends ResourceQualifier {
return mValue.getDpiValue() > compareQ.mValue.getDpiValue();
}
}
-
- @Override
- public boolean equals(Object qualifier) {
- if (qualifier instanceof PixelDensityQualifier) {
- return mValue == ((PixelDensityQualifier)qualifier).mValue;
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- if (mValue != null) {
- return mValue.hashCode();
- }
-
- return 0;
- }
-
- /**
- * Returns the string used to represent this qualifier in the folder name.
- */
- @Override
- public String getFolderSegment(IAndroidTarget target) {
- if (mValue != null) {
- if (target != null) {
- AndroidVersion version = target.getVersion();
- if (version.getApiLevel() <= 3 && version.getCodename() == null) {
- return mValue.getLegacyValue();
- }
- }
- return mValue.getValue();
- }
-
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public String getStringValue() {
- if (mValue != null) {
- return mValue.getDisplayValue();
- }
-
- return ""; //$NON-NLS-1$
- }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/RegionQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/RegionQualifier.java
index bf192c2..dfe02cf 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/RegionQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/RegionQualifier.java
@@ -17,7 +17,6 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.IAndroidTarget;
import org.eclipse.swt.graphics.Image;
@@ -30,6 +29,7 @@ import java.util.regex.Pattern;
public final class RegionQualifier extends ResourceQualifier {
private final static Pattern sRegionPattern = Pattern.compile("^r([A-Z]{2})$"); //$NON-NLS-1$
+ public static final String FAKE_REGION_VALUE = "__"; //$NON-NLS-1$
public static final String NAME = "Region";
private String mValue;
@@ -104,6 +104,11 @@ public final class RegionQualifier extends ResourceQualifier {
}
@Override
+ public boolean hasFakeValue() {
+ return FAKE_REGION_VALUE.equals(mValue);
+ }
+
+ @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
RegionQualifier qualifier = getQualifier(value);
if (qualifier != null) {
@@ -139,16 +144,25 @@ public final class RegionQualifier extends ResourceQualifier {
* Returns the string used to represent this qualifier in the folder name.
*/
@Override
- public String getFolderSegment(IAndroidTarget target) {
+ public String getFolderSegment() {
return getFolderSegment(mValue);
}
@Override
- public String getStringValue() {
+ public String getShortDisplayValue() {
if (mValue != null) {
return mValue;
}
return ""; //$NON-NLS-1$
}
+
+ @Override
+ public String getLongDisplayValue() {
+ if (mValue != null) {
+ return String.format("Region %s", mValue);
+ }
+
+ return ""; //$NON-NLS-1$
+ }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ResourceQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ResourceQualifier.java
index ba54ad0..b4d9a34 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ResourceQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ResourceQualifier.java
@@ -16,8 +16,6 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
-import com.android.sdklib.IAndroidTarget;
-
import org.eclipse.swt.graphics.Image;
/**
@@ -48,6 +46,12 @@ public abstract class ResourceQualifier implements Comparable<ResourceQualifier>
public abstract boolean isValid();
/**
+ * Returns whether the qualifier has a fake value.
+ * <p/>Fake values are used internally and should not be used as real qualifier value.
+ */
+ public abstract boolean hasFakeValue();
+
+ /**
* Check if the value is valid for this qualifier, and if so sets the value
* into a Folder Configuration.
* @param value The value to check and set. Must not be null.
@@ -60,7 +64,7 @@ public abstract class ResourceQualifier implements Comparable<ResourceQualifier>
* Returns a string formated to be used in a folder name.
* <p/>This is declared as abstract to force children classes to implement it.
*/
- public abstract String getFolderSegment(IAndroidTarget target);
+ public abstract String getFolderSegment();
/**
* Returns whether the given qualifier is a match for the receiver.
@@ -90,13 +94,18 @@ public abstract class ResourceQualifier implements Comparable<ResourceQualifier>
@Override
public String toString() {
- return getFolderSegment(null);
+ return getFolderSegment();
}
/**
* Returns a string formatted for display purpose.
*/
- public abstract String getStringValue();
+ public abstract String getShortDisplayValue();
+
+ /**
+ * Returns a string formatted for display purpose.
+ */
+ public abstract String getLongDisplayValue();
/**
* Returns <code>true</code> if both objects are equal.
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenDimensionQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenDimensionQualifier.java
index 30929b2..c9ff7c2 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenDimensionQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenDimensionQualifier.java
@@ -17,7 +17,6 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.IAndroidTarget;
import org.eclipse.swt.graphics.Image;
@@ -86,6 +85,11 @@ public final class ScreenDimensionQualifier extends ResourceQualifier {
}
@Override
+ public boolean hasFakeValue() {
+ return false;
+ }
+
+ @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
Matcher m = sDimensionPattern.matcher(value);
if (m.matches()) {
@@ -143,16 +147,25 @@ public final class ScreenDimensionQualifier extends ResourceQualifier {
* Returns the string used to represent this qualifier in the folder name.
*/
@Override
- public String getFolderSegment(IAndroidTarget target) {
+ public String getFolderSegment() {
return String.format("%1$dx%2$d", mValue1, mValue2); //$NON-NLS-1$
}
@Override
- public String getStringValue() {
+ public String getShortDisplayValue() {
if (mValue1 != -1 && mValue2 != -1) {
return String.format("%1$dx%2$d", mValue1, mValue2);
}
return ""; //$NON-NLS-1$
}
+
+ @Override
+ public String getLongDisplayValue() {
+ if (mValue1 != -1 && mValue2 != -1) {
+ return String.format("Screen resolution %1$dx%2$d", mValue1, mValue2);
+ }
+
+ return ""; //$NON-NLS-1$
+ }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenOrientationQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenOrientationQualifier.java
index 9ba6abb..107d7f4 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenOrientationQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenOrientationQualifier.java
@@ -17,7 +17,7 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.IAndroidTarget;
+import com.android.sdklib.resources.ResourceEnum;
import com.android.sdklib.resources.ScreenOrientation;
import org.eclipse.swt.graphics.Image;
@@ -25,7 +25,7 @@ import org.eclipse.swt.graphics.Image;
/**
* Resource Qualifier for Screen Orientation.
*/
-public final class ScreenOrientationQualifier extends ResourceQualifier {
+public final class ScreenOrientationQualifier extends EnumBasedResourceQualifier {
public static final String NAME = "Screen Orientation";
@@ -43,6 +43,11 @@ public final class ScreenOrientationQualifier extends ResourceQualifier {
}
@Override
+ ResourceEnum getEnumValue() {
+ return mValue;
+ }
+
+ @Override
public String getName() {
return NAME;
}
@@ -58,11 +63,6 @@ public final class ScreenOrientationQualifier extends ResourceQualifier {
}
@Override
- public boolean isValid() {
- return mValue != null;
- }
-
- @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
ScreenOrientation orientation = ScreenOrientation.getEnum(value);
if (orientation != null) {
@@ -73,43 +73,4 @@ public final class ScreenOrientationQualifier extends ResourceQualifier {
return false;
}
-
- @Override
- public boolean equals(Object qualifier) {
- if (qualifier instanceof ScreenOrientationQualifier) {
- return mValue == ((ScreenOrientationQualifier)qualifier).mValue;
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- if (mValue != null) {
- return mValue.hashCode();
- }
-
- return 0;
- }
-
- /**
- * Returns the string used to represent this qualifier in the folder name.
- */
- @Override
- public String getFolderSegment(IAndroidTarget target) {
- if (mValue != null) {
- return mValue.getValue();
- }
-
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public String getStringValue() {
- if (mValue != null) {
- return mValue.getDisplayValue();
- }
-
- return ""; //$NON-NLS-1$
- }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenRatioQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenRatioQualifier.java
index 73feb60..8ae11a8 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenRatioQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenRatioQualifier.java
@@ -17,13 +17,12 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.AndroidVersion;
-import com.android.sdklib.IAndroidTarget;
+import com.android.sdklib.resources.ResourceEnum;
import com.android.sdklib.resources.ScreenRatio;
import org.eclipse.swt.graphics.Image;
-public class ScreenRatioQualifier extends ResourceQualifier {
+public class ScreenRatioQualifier extends EnumBasedResourceQualifier {
public static final String NAME = "Screen Ratio";
@@ -41,6 +40,11 @@ public class ScreenRatioQualifier extends ResourceQualifier {
}
@Override
+ ResourceEnum getEnumValue() {
+ return mValue;
+ }
+
+ @Override
public String getName() {
return NAME;
}
@@ -56,11 +60,6 @@ public class ScreenRatioQualifier extends ResourceQualifier {
}
@Override
- public boolean isValid() {
- return mValue != null;
- }
-
- @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
ScreenRatio size = ScreenRatio.getEnum(value);
if (size != null) {
@@ -71,52 +70,4 @@ public class ScreenRatioQualifier extends ResourceQualifier {
return false;
}
-
- @Override
- public boolean equals(Object qualifier) {
- if (qualifier instanceof ScreenRatioQualifier) {
- return mValue == ((ScreenRatioQualifier)qualifier).mValue;
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- if (mValue != null) {
- return mValue.hashCode();
- }
-
- return 0;
- }
-
- /**
- * Returns the string used to represent this qualifier in the folder name.
- */
- @Override
- public String getFolderSegment(IAndroidTarget target) {
- if (mValue != null) {
- if (target == null) {
- // Default behavior (when target==null) is qualifier is supported
- return mValue.getValue();
- }
-
- AndroidVersion version = target.getVersion();
- if (version.getApiLevel() >= 4 ||
- (version.getApiLevel() == 3 && "Donut".equals(version.getCodename()))) {
- return mValue.getValue();
- }
- }
-
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public String getStringValue() {
- if (mValue != null) {
- return mValue.getDisplayValue();
- }
-
- return ""; //$NON-NLS-1$
- }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenSizeQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenSizeQualifier.java
index 59d5ca1..b36bd09 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenSizeQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/ScreenSizeQualifier.java
@@ -17,8 +17,7 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.AndroidVersion;
-import com.android.sdklib.IAndroidTarget;
+import com.android.sdklib.resources.ResourceEnum;
import com.android.sdklib.resources.ScreenSize;
import org.eclipse.swt.graphics.Image;
@@ -26,7 +25,7 @@ import org.eclipse.swt.graphics.Image;
/**
* Resource Qualifier for Screen Size. Size can be "small", "normal", and "large"
*/
-public class ScreenSizeQualifier extends ResourceQualifier {
+public class ScreenSizeQualifier extends EnumBasedResourceQualifier {
public static final String NAME = "Screen Size";
@@ -45,6 +44,11 @@ public class ScreenSizeQualifier extends ResourceQualifier {
}
@Override
+ ResourceEnum getEnumValue() {
+ return mValue;
+ }
+
+ @Override
public String getName() {
return NAME;
}
@@ -60,11 +64,6 @@ public class ScreenSizeQualifier extends ResourceQualifier {
}
@Override
- public boolean isValid() {
- return mValue != null;
- }
-
- @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
ScreenSize size = ScreenSize.getEnum(value);
if (size != null) {
@@ -75,52 +74,4 @@ public class ScreenSizeQualifier extends ResourceQualifier {
return false;
}
-
- @Override
- public boolean equals(Object qualifier) {
- if (qualifier instanceof ScreenSizeQualifier) {
- return mValue == ((ScreenSizeQualifier)qualifier).mValue;
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- if (mValue != null) {
- return mValue.hashCode();
- }
-
- return 0;
- }
-
- /**
- * Returns the string used to represent this qualifier in the folder name.
- */
- @Override
- public String getFolderSegment(IAndroidTarget target) {
- if (mValue != null) {
- if (target == null) {
- // Default behavior (when target==null) is qualifier is supported
- return mValue.getValue();
- }
-
- AndroidVersion version = target.getVersion();
- if (version.getApiLevel() >= 4 ||
- (version.getApiLevel() == 3 && "Donut".equals(version.getCodename()))) {
- return mValue.getValue();
- }
- }
-
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public String getStringValue() {
- if (mValue != null) {
- return mValue.getDisplayValue();
- }
-
- return ""; //$NON-NLS-1$
- }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/TextInputMethodQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/TextInputMethodQualifier.java
index a4d2ad3..e6276e8 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/TextInputMethodQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/TextInputMethodQualifier.java
@@ -17,15 +17,15 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.resources.Keyboard;
+import com.android.sdklib.resources.ResourceEnum;
import org.eclipse.swt.graphics.Image;
/**
* Resource Qualifier for Text Input Method.
*/
-public final class TextInputMethodQualifier extends ResourceQualifier {
+public final class TextInputMethodQualifier extends EnumBasedResourceQualifier {
public static final String NAME = "Text Input Method";
@@ -45,6 +45,11 @@ public final class TextInputMethodQualifier extends ResourceQualifier {
}
@Override
+ ResourceEnum getEnumValue() {
+ return mValue;
+ }
+
+ @Override
public String getName() {
return NAME;
}
@@ -60,11 +65,6 @@ public final class TextInputMethodQualifier extends ResourceQualifier {
}
@Override
- public boolean isValid() {
- return mValue != null;
- }
-
- @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
Keyboard method = Keyboard.getEnum(value);
if (method != null) {
@@ -76,43 +76,4 @@ public final class TextInputMethodQualifier extends ResourceQualifier {
return false;
}
-
- @Override
- public boolean equals(Object qualifier) {
- if (qualifier instanceof TextInputMethodQualifier) {
- return mValue == ((TextInputMethodQualifier)qualifier).mValue;
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- if (mValue != null) {
- return mValue.hashCode();
- }
-
- return 0;
- }
-
- /**
- * Returns the string used to represent this qualifier in the folder name.
- */
- @Override
- public String getFolderSegment(IAndroidTarget target) {
- if (mValue != null) {
- return mValue.getValue();
- }
-
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public String getStringValue() {
- if (mValue != null) {
- return mValue.getDisplayValue();
- }
-
- return ""; //$NON-NLS-1$
- }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/TouchScreenQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/TouchScreenQualifier.java
index b46b014..23ef94f 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/TouchScreenQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/TouchScreenQualifier.java
@@ -17,7 +17,7 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.IAndroidTarget;
+import com.android.sdklib.resources.ResourceEnum;
import com.android.sdklib.resources.TouchScreen;
import org.eclipse.swt.graphics.Image;
@@ -26,7 +26,7 @@ import org.eclipse.swt.graphics.Image;
/**
* Resource Qualifier for Touch Screen type.
*/
-public final class TouchScreenQualifier extends ResourceQualifier {
+public final class TouchScreenQualifier extends EnumBasedResourceQualifier {
public static final String NAME = "Touch Screen";
@@ -45,6 +45,11 @@ public final class TouchScreenQualifier extends ResourceQualifier {
}
@Override
+ ResourceEnum getEnumValue() {
+ return mValue;
+ }
+
+ @Override
public String getName() {
return NAME;
}
@@ -60,11 +65,6 @@ public final class TouchScreenQualifier extends ResourceQualifier {
}
@Override
- public boolean isValid() {
- return mValue != null;
- }
-
- @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
TouchScreen type = TouchScreen.getEnum(value);
if (type != null) {
@@ -76,42 +76,4 @@ public final class TouchScreenQualifier extends ResourceQualifier {
return false;
}
-
- @Override
- public boolean equals(Object qualifier) {
- if (qualifier instanceof TouchScreenQualifier) {
- return mValue == ((TouchScreenQualifier)qualifier).mValue;
- }
- return false;
- }
-
- @Override
- public int hashCode() {
- if (mValue != null) {
- return mValue.hashCode();
- }
-
- return 0;
- }
-
- /**
- * Returns the string used to represent this qualifier in the folder name.
- */
- @Override
- public String getFolderSegment(IAndroidTarget target) {
- if (mValue != null) {
- return mValue.getValue();
- }
-
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public String getStringValue() {
- if (mValue != null) {
- return mValue.getDisplayValue();
- }
-
- return ""; //$NON-NLS-1$
- }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/VersionQualifier.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/VersionQualifier.java
index 5744fea..f3df195 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/VersionQualifier.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/VersionQualifier.java
@@ -17,8 +17,6 @@
package com.android.ide.eclipse.adt.internal.resources.configurations;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
-import com.android.sdklib.AndroidVersion;
-import com.android.sdklib.IAndroidTarget;
import org.eclipse.swt.graphics.Image;
@@ -103,6 +101,11 @@ public final class VersionQualifier extends ResourceQualifier {
}
@Override
+ public boolean hasFakeValue() {
+ return false;
+ }
+
+ @Override
public boolean checkAndSet(String value, FolderConfiguration config) {
VersionQualifier qualifier = getQualifier(value);
if (qualifier != null) {
@@ -131,24 +134,23 @@ public final class VersionQualifier extends ResourceQualifier {
* Returns the string used to represent this qualifier in the folder name.
*/
@Override
- public String getFolderSegment(IAndroidTarget target) {
- if (target == null) {
- // Default behavior (when target==null) is qualifier is supported
- return getFolderSegment(mVersion);
- }
+ public String getFolderSegment() {
+ return getFolderSegment(mVersion);
+ }
- AndroidVersion version = target.getVersion();
- if (version.getApiLevel() >= 3) {
- return getFolderSegment(mVersion);
+ @Override
+ public String getShortDisplayValue() {
+ if (mVersion != DEFAULT_VERSION) {
+ return String.format("API %1$d", mVersion);
}
return ""; //$NON-NLS-1$
}
@Override
- public String getStringValue() {
+ public String getLongDisplayValue() {
if (mVersion != DEFAULT_VERSION) {
- return String.format("API %1$d", mVersion);
+ return String.format("API Level %1$d", mVersion);
}
return ""; //$NON-NLS-1$
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java
index e46c964..fb00824 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java
@@ -547,7 +547,7 @@ public class ProjectResources implements IResourceRepository {
FolderConfiguration config = folder.getConfiguration();
LanguageQualifier lang = config.getLanguageQualifier();
if (lang != null) {
- set.add(lang.getStringValue());
+ set.add(lang.getShortDisplayValue());
}
}
}
@@ -569,10 +569,10 @@ public class ProjectResources implements IResourceRepository {
// get the language
LanguageQualifier lang = config.getLanguageQualifier();
- if (lang != null && lang.getStringValue().equals(currentLanguage)) {
+ if (lang != null && lang.getShortDisplayValue().equals(currentLanguage)) {
RegionQualifier region = config.getRegionQualifier();
if (region != null) {
- set.add(region.getStringValue());
+ set.add(region.getShortDisplayValue());
}
}
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/LayoutDevice.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/LayoutDevice.java
index cac776a..dd0fb74 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/LayoutDevice.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/LayoutDevice.java
@@ -144,55 +144,55 @@ public class LayoutDevice {
ScreenSizeQualifier ssq = config.getScreenSizeQualifier();
if (ssq != null) {
Element node = createNode(doc, configNode, LayoutDevicesXsd.NODE_SCREEN_SIZE);
- node.setTextContent(ssq.getFolderSegment(null));
+ node.setTextContent(ssq.getFolderSegment());
}
ScreenRatioQualifier srq = config.getScreenRatioQualifier();
if (srq != null) {
Element node = createNode(doc, configNode, LayoutDevicesXsd.NODE_SCREEN_RATIO);
- node.setTextContent(srq.getFolderSegment(null));
+ node.setTextContent(srq.getFolderSegment());
}
ScreenOrientationQualifier soq = config.getScreenOrientationQualifier();
if (soq != null) {
Element node = createNode(doc, configNode, LayoutDevicesXsd.NODE_SCREEN_ORIENTATION);
- node.setTextContent(soq.getFolderSegment(null));
+ node.setTextContent(soq.getFolderSegment());
}
PixelDensityQualifier pdq = config.getPixelDensityQualifier();
if (pdq != null) {
Element node = createNode(doc, configNode, LayoutDevicesXsd.NODE_PIXEL_DENSITY);
- node.setTextContent(pdq.getFolderSegment(null));
+ node.setTextContent(pdq.getFolderSegment());
}
TouchScreenQualifier ttq = config.getTouchTypeQualifier();
if (ttq != null) {
Element node = createNode(doc, configNode, LayoutDevicesXsd.NODE_TOUCH_TYPE);
- node.setTextContent(ttq.getFolderSegment(null));
+ node.setTextContent(ttq.getFolderSegment());
}
KeyboardStateQualifier ksq = config.getKeyboardStateQualifier();
if (ksq != null) {
Element node = createNode(doc, configNode, LayoutDevicesXsd.NODE_KEYBOARD_STATE);
- node.setTextContent(ksq.getFolderSegment(null));
+ node.setTextContent(ksq.getFolderSegment());
}
TextInputMethodQualifier timq = config.getTextInputMethodQualifier();
if (timq != null) {
Element node = createNode(doc, configNode, LayoutDevicesXsd.NODE_TEXT_INPUT_METHOD);
- node.setTextContent(timq.getFolderSegment(null));
+ node.setTextContent(timq.getFolderSegment());
}
NavigationStateQualifier nsq = config.getNavigationStateQualifier();
if (nsq != null) {
Element node = createNode(doc, configNode, LayoutDevicesXsd.NODE_NAV_STATE);
- node.setTextContent(nsq.getFolderSegment(null));
+ node.setTextContent(nsq.getFolderSegment());
}
NavigationMethodQualifier nmq = config.getNavigationMethodQualifier();
if (nmq != null) {
Element node = createNode(doc, configNode, LayoutDevicesXsd.NODE_NAV_METHOD);
- node.setTextContent(nmq.getFolderSegment(null));
+ node.setTextContent(nmq.getFolderSegment());
}
ScreenDimensionQualifier sdq = config.getScreenDimensionQualifier();
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ConfigurationSelector.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ConfigurationSelector.java
index 51525b8..fd22298 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ConfigurationSelector.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/ConfigurationSelector.java
@@ -43,6 +43,7 @@ import com.android.sdklib.resources.KeyboardState;
import com.android.sdklib.resources.Navigation;
import com.android.sdklib.resources.NavigationState;
import com.android.sdklib.resources.NightMode;
+import com.android.sdklib.resources.ResourceEnum;
import com.android.sdklib.resources.ScreenOrientation;
import com.android.sdklib.resources.ScreenRatio;
import com.android.sdklib.resources.ScreenSize;
@@ -433,7 +434,7 @@ public class ConfigurationSelector extends Composite {
* @param config The configuration.
*/
public void setConfiguration(FolderConfiguration config) {
- mSelectedConfiguration.set(config);
+ mSelectedConfiguration.set(config, true /*nonFakeValuesOnly*/);
mSelectionTableViewer.refresh();
// create the base config, which is the default config minus the qualifiers
@@ -533,6 +534,19 @@ public class ConfigurationSelector extends Composite {
}
}
+ private void fillCombo(Combo combo, ResourceEnum[] resEnums) {
+ for (ResourceEnum resEnum : resEnums) {
+ // only add the enum if:
+ // - it's not a fake value. Those are never added as they are used for internal purpose
+ // only.
+ // - if it's a valid value for device only if mDeviceMode is true.
+ if ((mDeviceMode == false || resEnum.isValidValueForDevice() == false) &&
+ resEnum.isFakeValue() == false) {
+ combo.add(resEnum.getShortDisplayValue());
+ }
+ }
+ }
+
/**
* Content provider around a {@link FolderConfiguration}.
*/
@@ -587,7 +601,7 @@ public class ConfigurationSelector extends Composite {
// only one column, so we can ignore columnIndex
if (element instanceof ResourceQualifier) {
if (mShowQualifierValue) {
- String value = ((ResourceQualifier)element).getStringValue();
+ String value = ((ResourceQualifier)element).getShortDisplayValue();
if (value.length() == 0) {
return String.format("%1$s (?)",
((ResourceQualifier)element).getShortName());
@@ -924,10 +938,7 @@ public class ConfigurationSelector extends Composite {
super(parent, ScreenSizeQualifier.NAME);
mSize = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
- ScreenSize[] ssValues = ScreenSize.values();
- for (ScreenSize value : ssValues) {
- mSize.add(value.getDisplayValue());
- }
+ fillCombo(mSize, ScreenSize.values());
mSize.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
mSize.addSelectionListener(new SelectionListener() {
@@ -977,19 +988,16 @@ public class ConfigurationSelector extends Composite {
*/
private class ScreenRatioEdit extends QualifierEditBase {
- private Combo mSize;
+ private Combo mRatio;
public ScreenRatioEdit(Composite parent) {
super(parent, ScreenRatioQualifier.NAME);
- mSize = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
- ScreenRatio[] srValues = ScreenRatio.values();
- for (ScreenRatio value : srValues) {
- mSize.add(value.getDisplayValue());
- }
+ mRatio = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
+ fillCombo(mRatio, ScreenRatio.values());
- mSize.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- mSize.addSelectionListener(new SelectionListener() {
+ mRatio.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ mRatio.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
onScreenRatioChange();
}
@@ -1001,7 +1009,7 @@ public class ConfigurationSelector extends Composite {
protected void onScreenRatioChange() {
// update the current config
- int index = mSize.getSelectionIndex();
+ int index = mRatio.getSelectionIndex();
if (index != -1) {
mSelectedConfiguration.setScreenRatioQualifier(new ScreenRatioQualifier(
@@ -1024,9 +1032,9 @@ public class ConfigurationSelector extends Composite {
ScreenRatio value = q.getValue();
if (value == null) {
- mSize.clearSelection();
+ mRatio.clearSelection();
} else {
- mSize.select(ScreenRatio.getIndex(value));
+ mRatio.select(ScreenRatio.getIndex(value));
}
}
}
@@ -1042,10 +1050,7 @@ public class ConfigurationSelector extends Composite {
super(parent, ScreenOrientationQualifier.NAME);
mOrientation = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
- ScreenOrientation[] soValues = ScreenOrientation.values();
- for (ScreenOrientation value : soValues) {
- mOrientation.add(value.getDisplayValue());
- }
+ fillCombo(mOrientation, ScreenOrientation.values());
mOrientation.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
mOrientation.addSelectionListener(new SelectionListener() {
@@ -1101,10 +1106,7 @@ public class ConfigurationSelector extends Composite {
super(parent, DockModeQualifier.NAME);
mDockMode = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
- DockMode[] values = DockMode.values();
- for (DockMode value : values) {
- mDockMode.add(value.getDisplayValue());
- }
+ fillCombo(mDockMode, DockMode.values());
mDockMode.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
mDockMode.addSelectionListener(new SelectionListener() {
@@ -1159,10 +1161,7 @@ public class ConfigurationSelector extends Composite {
super(parent, NightModeQualifier.NAME);
mNightMode = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
- NightMode[] values = NightMode.values();
- for (NightMode value : values) {
- mNightMode.add(value.getDisplayValue());
- }
+ fillCombo(mNightMode, NightMode.values());
mNightMode.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
mNightMode.addSelectionListener(new SelectionListener() {
@@ -1217,12 +1216,7 @@ public class ConfigurationSelector extends Composite {
super(parent, PixelDensityQualifier.NAME);
mDensity = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
- Density[] soValues = Density.values();
- for (Density value : soValues) {
- if (mDeviceMode == false || value != Density.NODPI) {
- mDensity.add(value.getDisplayValue());
- }
- }
+ fillCombo(mDensity, Density.values());
mDensity.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
mDensity.addSelectionListener(new SelectionListener() {
@@ -1278,10 +1272,7 @@ public class ConfigurationSelector extends Composite {
super(parent, TouchScreenQualifier.NAME);
mTouchScreen = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
- TouchScreen[] tstValues = TouchScreen.values();
- for (TouchScreen value : tstValues) {
- mTouchScreen.add(value.getDisplayValue());
- }
+ fillCombo(mTouchScreen, TouchScreen.values());
mTouchScreen.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
mTouchScreen.addSelectionListener(new SelectionListener() {
@@ -1330,19 +1321,16 @@ public class ConfigurationSelector extends Composite {
*/
private class KeyboardEdit extends QualifierEditBase {
- private Combo mKeyboard;
+ private Combo mKeyboardState;
public KeyboardEdit(Composite parent) {
super(parent, KeyboardStateQualifier.NAME);
- mKeyboard = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
- KeyboardState[] ksValues = KeyboardState.values();
- for (KeyboardState value : ksValues) {
- mKeyboard.add(value.getDisplayValue());
- }
+ mKeyboardState = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
+ fillCombo(mKeyboardState, KeyboardState.values());
- mKeyboard.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- mKeyboard.addSelectionListener(new SelectionListener() {
+ mKeyboardState.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ mKeyboardState.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
onKeyboardChange();
}
@@ -1354,7 +1342,7 @@ public class ConfigurationSelector extends Composite {
protected void onKeyboardChange() {
// update the current config
- int index = mKeyboard.getSelectionIndex();
+ int index = mKeyboardState.getSelectionIndex();
if (index != -1) {
mSelectedConfiguration.setKeyboardStateQualifier(new KeyboardStateQualifier(
@@ -1377,9 +1365,9 @@ public class ConfigurationSelector extends Composite {
KeyboardState value = q.getValue();
if (value == null) {
- mKeyboard.clearSelection();
+ mKeyboardState.clearSelection();
} else {
- mKeyboard.select(KeyboardState.getIndex(value));
+ mKeyboardState.select(KeyboardState.getIndex(value));
}
}
}
@@ -1395,10 +1383,7 @@ public class ConfigurationSelector extends Composite {
super(parent, TextInputMethodQualifier.NAME);
mTextInput = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
- Keyboard[] timValues = Keyboard.values();
- for (Keyboard value : timValues) {
- mTextInput.add(value.getDisplayValue());
- }
+ fillCombo(mTextInput, Keyboard.values());
mTextInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
mTextInput.addSelectionListener(new SelectionListener() {
@@ -1448,19 +1433,16 @@ public class ConfigurationSelector extends Composite {
*/
private class NavigationStateEdit extends QualifierEditBase {
- private Combo mNavigation;
+ private Combo mNavigationState;
public NavigationStateEdit(Composite parent) {
super(parent, NavigationStateQualifier.NAME);
- mNavigation = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
- NavigationState[] values = NavigationState.values();
- for (NavigationState value : values) {
- mNavigation.add(value.getDisplayValue());
- }
+ mNavigationState = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
+ fillCombo(mNavigationState, NavigationState.values());
- mNavigation.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- mNavigation.addSelectionListener(new SelectionListener() {
+ mNavigationState.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ mNavigationState.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
onNavigationChange();
}
@@ -1472,7 +1454,7 @@ public class ConfigurationSelector extends Composite {
protected void onNavigationChange() {
// update the current config
- int index = mNavigation.getSelectionIndex();
+ int index = mNavigationState.getSelectionIndex();
if (index != -1) {
mSelectedConfiguration.setNavigationStateQualifier(
@@ -1494,9 +1476,9 @@ public class ConfigurationSelector extends Composite {
NavigationState value = q.getValue();
if (value == null) {
- mNavigation.clearSelection();
+ mNavigationState.clearSelection();
} else {
- mNavigation.select(NavigationState.getIndex(value));
+ mNavigationState.select(NavigationState.getIndex(value));
}
}
}
@@ -1513,10 +1495,7 @@ public class ConfigurationSelector extends Composite {
super(parent, NavigationMethodQualifier.NAME);
mNavigation = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
- Navigation[] nmValues = Navigation.values();
- for (Navigation value : nmValues) {
- mNavigation.add(value.getDisplayValue());
- }
+ fillCombo(mNavigation, Navigation.values());
mNavigation.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
mNavigation.addSelectionListener(new SelectionListener() {
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/NewProjectWizard.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/NewProjectWizard.java
index 89baa1c..7a4eaaa 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/NewProjectWizard.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/NewProjectWizard.java
@@ -136,11 +136,11 @@ public class NewProjectWizard extends Wizard implements INewWizard {
private static final String DRAWABLE_DIRECTORY =
SdkConstants.FD_DRAWABLE + AndroidConstants.WS_SEP;
private static final String DRAWABLE_HDPI_DIRECTORY =
- SdkConstants.FD_DRAWABLE + "-" + Density.HIGH.getValue() + AndroidConstants.WS_SEP; //$NON-NLS-1$
+ SdkConstants.FD_DRAWABLE + "-" + Density.HIGH.getResourceValue() + AndroidConstants.WS_SEP; //$NON-NLS-1$
private static final String DRAWABLE_MDPI_DIRECTORY =
- SdkConstants.FD_DRAWABLE + "-" + Density.MEDIUM.getValue() + AndroidConstants.WS_SEP; //$NON-NLS-1$
+ SdkConstants.FD_DRAWABLE + "-" + Density.MEDIUM.getResourceValue() + AndroidConstants.WS_SEP; //$NON-NLS-1$
private static final String DRAWABLE_LDPI_DIRECTORY =
- SdkConstants.FD_DRAWABLE + "-" + Density.LOW.getValue() + AndroidConstants.WS_SEP; //$NON-NLS-1$
+ SdkConstants.FD_DRAWABLE + "-" + Density.LOW.getResourceValue() + AndroidConstants.WS_SEP; //$NON-NLS-1$
private static final String LAYOUT_DIRECTORY =
SdkConstants.FD_LAYOUT + AndroidConstants.WS_SEP;
private static final String VALUES_DIRECTORY =
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileCreationPage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileCreationPage.java
index 4926277..7837d66 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileCreationPage.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newxmlfile/NewXmlFileCreationPage.java
@@ -1025,7 +1025,7 @@ class NewXmlFileCreationPage extends WizardPage {
// The configuration is valid. Reformat the folder path using the canonical
// value from the configuration.
- newPath = RES_FOLDER_ABS + mTempConfig.getFolderName(type.getResFolderType(), mProject);
+ newPath = RES_FOLDER_ABS + mTempConfig.getFolderName(type.getResFolderType());
} else {
// The configuration is invalid. We still update the path but this time
// do it manually on the string.
@@ -1034,8 +1034,7 @@ class NewXmlFileCreationPage extends WizardPage {
"^(" + RES_FOLDER_ABS +")[^-]*(.*)", //$NON-NLS-1$ //$NON-NLS-2$
"\\1" + type.getResFolderName() + "\\2"); //$NON-NLS-1$ //$NON-NLS-2$
} else {
- newPath = RES_FOLDER_ABS + mTempConfig.getFolderName(type.getResFolderType(),
- mProject);
+ newPath = RES_FOLDER_ABS + mTempConfig.getFolderName(type.getResFolderType());
}
}
@@ -1139,7 +1138,7 @@ class NewXmlFileCreationPage extends WizardPage {
if (type != null) {
mConfigSelector.getConfiguration(mTempConfig);
StringBuffer sb = new StringBuffer(RES_FOLDER_ABS);
- sb.append(mTempConfig.getFolderName(type.getResFolderType(), mProject));
+ sb.append(mTempConfig.getFolderName(type.getResFolderType()));
mInternalWsFolderPathUpdate = true;
mWsFolderPathTextField.setText(sb.toString());
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/configurations/DockModeQualifierTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/configurations/DockModeQualifierTest.java
new file mode 100644
index 0000000..1cdc91b
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/configurations/DockModeQualifierTest.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Eclipse Public License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/org/documents/epl-v10.php
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.ide.eclipse.adt.internal.editors.resources.configurations;
+
+import com.android.ide.eclipse.adt.internal.resources.configurations.DockModeQualifier;
+import com.android.sdklib.resources.DockMode;
+
+import junit.framework.TestCase;
+
+public class DockModeQualifierTest extends TestCase {
+
+ private DockModeQualifier mCarQualifier;
+ private DockModeQualifier mDeskQualifier;
+ private DockModeQualifier mNoneQualifier;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mCarQualifier = new DockModeQualifier(DockMode.CAR);
+ mDeskQualifier = new DockModeQualifier(DockMode.DESK);
+ mNoneQualifier = new DockModeQualifier(DockMode.NONE);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ mCarQualifier = null;
+ mDeskQualifier = null;
+ mNoneQualifier = null;
+ }
+
+ public void testIsBetterMatchThan() {
+ assertTrue(mNoneQualifier.isBetterMatchThan(mCarQualifier, mDeskQualifier));
+ assertFalse(mNoneQualifier.isBetterMatchThan(mDeskQualifier, mDeskQualifier));
+ assertTrue(mNoneQualifier.isBetterMatchThan(mDeskQualifier, mCarQualifier));
+ assertFalse(mNoneQualifier.isBetterMatchThan(mCarQualifier, mCarQualifier));
+
+ assertFalse(mDeskQualifier.isBetterMatchThan(mCarQualifier, mCarQualifier));
+ assertFalse(mCarQualifier.isBetterMatchThan(mDeskQualifier, mDeskQualifier));
+ }
+
+ public void testIsMatchFor() {
+ assertTrue(mNoneQualifier.isMatchFor(mCarQualifier));
+ assertTrue(mNoneQualifier.isMatchFor(mDeskQualifier));
+ assertTrue(mCarQualifier.isMatchFor(mCarQualifier));
+ assertTrue(mDeskQualifier.isMatchFor(mDeskQualifier));
+
+ assertFalse(mCarQualifier.isMatchFor(mNoneQualifier));
+ assertFalse(mCarQualifier.isMatchFor(mDeskQualifier));
+ assertFalse(mDeskQualifier.isMatchFor(mCarQualifier));
+ assertFalse(mDeskQualifier.isMatchFor(mNoneQualifier));
+ }
+}
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/manager/ConfigMatchTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/manager/ConfigMatchTest.java
index 31f9784..117654d 100644
--- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/manager/ConfigMatchTest.java
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/editors/resources/manager/ConfigMatchTest.java
@@ -28,7 +28,6 @@ import com.android.ide.eclipse.adt.io.IFileWrapper;
import com.android.ide.eclipse.adt.io.IFolderWrapper;
import com.android.ide.eclipse.mock.FileMock;
import com.android.ide.eclipse.mock.FolderMock;
-import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.io.IAbstractFolder;
import com.android.sdklib.resources.Keyboard;
import com.android.sdklib.resources.KeyboardState;
@@ -111,7 +110,7 @@ public class ConfigMatchTest extends TestCase {
null, // screen orientation
null, // dpi
null, // touch mode
- KeyboardState.EXPOSED.getValue(), // keyboard state
+ KeyboardState.EXPOSED.getResourceValue(), // keyboard state
null, // text input
null, // navigation
null, // screen dimension
@@ -129,7 +128,7 @@ public class ConfigMatchTest extends TestCase {
null, // screen orientation
null, // dpi
null, // touch mode
- KeyboardState.HIDDEN.getValue(), // keyboard state
+ KeyboardState.HIDDEN.getResourceValue(), // keyboard state
null, // text input
null, // navigation
null, // screen dimension
@@ -144,7 +143,7 @@ public class ConfigMatchTest extends TestCase {
null, // region
null, // screen size
null, // screen ratio
- ScreenOrientation.LANDSCAPE.getValue(), // screen orientation
+ ScreenOrientation.LANDSCAPE.getResourceValue(), // screen orientation
null, // dpi
null, // touch mode
null, // keyboard state
@@ -162,12 +161,12 @@ public class ConfigMatchTest extends TestCase {
"rUS", // region
"normal", // screen size
"notlong", // screen ratio
- ScreenOrientation.LANDSCAPE.getValue(), // screen orientation
+ ScreenOrientation.LANDSCAPE.getResourceValue(), // screen orientation
"mdpi", // dpi
- TouchScreen.FINGER.getValue(), // touch mode
- KeyboardState.EXPOSED.getValue(), // keyboard state
- Keyboard.QWERTY.getValue(), // text input
- Navigation.DPAD.getValue(), // navigation
+ TouchScreen.FINGER.getResourceValue(), // touch mode
+ KeyboardState.EXPOSED.getResourceValue(), // keyboard state
+ Keyboard.QWERTY.getResourceValue(), // text input
+ Navigation.DPAD.getResourceValue(), // navigation
"480x320", // screen dimension
"v3"); // version
@@ -188,12 +187,12 @@ public class ConfigMatchTest extends TestCase {
"rUS", // region
"normal", // screen size
"notlong", // screen ratio
- ScreenOrientation.LANDSCAPE.getValue(), // screen orientation
+ ScreenOrientation.LANDSCAPE.getResourceValue(), // screen orientation
"mdpi", // dpi
- TouchScreen.FINGER.getValue(), // touch mode
- KeyboardState.EXPOSED.getValue(), // keyboard state
- Keyboard.QWERTY.getValue(), // text input
- Navigation.DPAD.getValue(), // navigation
+ TouchScreen.FINGER.getResourceValue(), // touch mode
+ KeyboardState.EXPOSED.getResourceValue(), // keyboard state
+ Keyboard.QWERTY.getResourceValue(), // text input
+ Navigation.DPAD.getResourceValue(), // navigation
"480x320", // screen dimension
"v3"); // version
@@ -239,7 +238,7 @@ public class ConfigMatchTest extends TestCase {
FileMock[] memberList) throws Exception {
// figure out the folder name based on the configuration
- String folderName = config.getFolderName(ResourceFolderType.LAYOUT, (IAndroidTarget)null);
+ String folderName = config.getFolderName(ResourceFolderType.LAYOUT);
// create the folder mock
FolderMock folder = new FolderMock(folderName, memberList);
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/export/ProjectConfig.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/export/ProjectConfig.java
index 387e8ff..271e427 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/export/ProjectConfig.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/export/ProjectConfig.java
@@ -51,12 +51,13 @@ public final class ProjectConfig {
* List of densities and their associated aapt filter.
*/
private static final String[][] DENSITY_LIST = new String[][] {
- new String[] { Density.HIGH.getValue(),
- Density.HIGH.getValue() + "," + Density.NODPI.getValue() },
- new String[] { Density.MEDIUM.getValue(),
- Density.MEDIUM.getValue() + "," + Density.NODPI.getValue() },
- new String[] { Density.MEDIUM.getValue(),
- Density.MEDIUM.getValue() + "," + Density.NODPI.getValue() },
+ new String[] { Density.HIGH.getResourceValue(),
+ Density.HIGH.getResourceValue() + "," + Density.NODPI.getResourceValue() },
+ new String[] { Density.MEDIUM.getResourceValue(),
+ Density.MEDIUM.getResourceValue() + "," +
+ Density.NODPI.getResourceValue() },
+ new String[] { Density.MEDIUM.getResourceValue(),
+ Density.MEDIUM.getResourceValue() + "," + Density.NODPI.getResourceValue() },
};
private final File mProjectFolder;
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Density.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Density.java
index d4d5256..ac0fb91 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Density.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Density.java
@@ -22,7 +22,7 @@ package com.android.sdklib.resources;
* <p/>This is used in the manifest in the uses-configuration node and in the resource folder names
* as well as other places needing to know the density values.
*/
-public enum Density {
+public enum Density implements ResourceEnum {
HIGH("hdpi", "High Density", 240), //$NON-NLS-1$
MEDIUM("mdpi", "Medium Density", 160), //$NON-NLS-1$
LOW("ldpi", "Low Density", 120), //$NON-NLS-1$
@@ -70,7 +70,7 @@ public enum Density {
return null;
}
- public String getValue() {
+ public String getResourceValue() {
return mValue;
}
@@ -86,7 +86,11 @@ public enum Density {
return "";
}
- public String getDisplayValue() {
+ public String getShortDisplayValue() {
+ return mDisplayValue;
+ }
+
+ public String getLongDisplayValue() {
return mDisplayValue;
}
@@ -113,4 +117,12 @@ public enum Density {
}
return null;
}
+
+ public boolean isFakeValue() {
+ return false;
+ }
+
+ public boolean isValidValueForDevice() {
+ return this != NODPI; // nodpi is not a valid config for devices.
+ }
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/DockMode.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/DockMode.java
index 3b9f9ca..4bac3e9 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/DockMode.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/DockMode.java
@@ -20,16 +20,17 @@ package com.android.sdklib.resources;
* Dock enum.
* <p/>This is used in the resource folder names.
*/
-public enum DockMode {
- CAR("car", "Car"),
- DESK("desk", "Desk");
+public enum DockMode implements ResourceEnum {
+ NONE("", "No Dock"),
+ CAR("car", "Car Dock"),
+ DESK("desk", "Desk Dock");
- private String mValue;
- private String mDisplay;
+ private final String mValue;
+ private final String mDisplayValue;
private DockMode(String value, String display) {
mValue = value;
- mDisplay = display;
+ mDisplayValue = display;
}
/**
@@ -47,12 +48,16 @@ public enum DockMode {
return null;
}
- public String getValue() {
+ public String getResourceValue() {
return mValue;
}
- public String getDisplayValue() {
- return mDisplay;
+ public String getShortDisplayValue() {
+ return mDisplayValue;
+ }
+
+ public String getLongDisplayValue() {
+ return mDisplayValue;
}
public static int getIndex(DockMode value) {
@@ -78,4 +83,12 @@ public enum DockMode {
}
return null;
}
+
+ public boolean isFakeValue() {
+ return this == NONE; // NONE is not a real enum. it's used for internal state only.
+ }
+
+ public boolean isValidValueForDevice() {
+ return this != NONE;
+ }
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Keyboard.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Keyboard.java
index 914b205..c5ff18b 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Keyboard.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Keyboard.java
@@ -20,18 +20,21 @@ package com.android.sdklib.resources;
* Keyboard enum.
* <p/>This is used in the manifest in the uses-configuration node and in the resource folder names.
*/
-public enum Keyboard {
- NOKEY("nokeys", null, "No Keys"), //$NON-NLS-1$
- QWERTY("qwerty", null, "Qwerty"), //$NON-NLS-1$
- TWELVEKEY("12key", "twelvekey", "12 Key"); //$NON-NLS-1$
+public enum Keyboard implements ResourceEnum {
+ NOKEY("nokeys", null, "No Keys", "No keyboard"), //$NON-NLS-1$
+ QWERTY("qwerty", null, "Qwerty", "Qwerty keybard"), //$NON-NLS-1$
+ TWELVEKEY("12key", "twelvekey", "12 Key", "12 key keyboard"); //$NON-NLS-1$ //$NON-NLS-2$
- private String mValue, mValue2;
- private String mDisplayValue;
+ private final String mValue, mValue2;
+ private final String mShortDisplayValue;
+ private final String mLongDisplayValue;
- private Keyboard(String value, String value2, String displayValue) {
+ private Keyboard(String value, String value2, String shortDisplayValue,
+ String longDisplayValue) {
mValue = value;
mValue2 = value2;
- mDisplayValue = displayValue;
+ mShortDisplayValue = shortDisplayValue;
+ mLongDisplayValue = longDisplayValue;
}
/**
@@ -50,12 +53,16 @@ public enum Keyboard {
return null;
}
- public String getValue() {
+ public String getResourceValue() {
return mValue;
}
- public String getDisplayValue() {
- return mDisplayValue;
+ public String getShortDisplayValue() {
+ return mShortDisplayValue;
+ }
+
+ public String getLongDisplayValue() {
+ return mLongDisplayValue;
}
public static int getIndex(Keyboard value) {
@@ -81,4 +88,12 @@ public enum Keyboard {
}
return null;
}
+
+ public boolean isFakeValue() {
+ return false;
+ }
+
+ public boolean isValidValueForDevice() {
+ return true;
+ }
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/KeyboardState.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/KeyboardState.java
index d6c3f6a..c6461a4 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/KeyboardState.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/KeyboardState.java
@@ -20,17 +20,19 @@ package com.android.sdklib.resources;
* Keyboard state enum.
* <p/>This is used in the manifest in the uses-configuration node and in the resource folder names.
*/
-public enum KeyboardState {
- EXPOSED("keysexposed", "Exposed"), //$NON-NLS-1$
- HIDDEN("keyshidden", "Hidden"), //$NON-NLS-1$
- SOFT("keyssoft", "Soft"); //$NON-NLS-1$
+public enum KeyboardState implements ResourceEnum {
+ EXPOSED("keysexposed", "Exposed", "Exposed keyboard"), //$NON-NLS-1$
+ HIDDEN("keyshidden", "Hidden", "Hidden keyboard"), //$NON-NLS-1$
+ SOFT("keyssoft", "Soft", "Soft keyboard"); //$NON-NLS-1$
- private String mValue;
- private String mDisplayValue;
+ private final String mValue;
+ private final String mShortDisplayValue;
+ private final String mLongDisplayValue;
- private KeyboardState(String value, String displayValue) {
+ private KeyboardState(String value, String shortDisplayValue, String longDisplayValue) {
mValue = value;
- mDisplayValue = displayValue;
+ mShortDisplayValue = shortDisplayValue;
+ mLongDisplayValue = longDisplayValue;
}
/**
@@ -48,12 +50,16 @@ public enum KeyboardState {
return null;
}
- public String getValue() {
+ public String getResourceValue() {
return mValue;
}
- public String getDisplayValue() {
- return mDisplayValue;
+ public String getShortDisplayValue() {
+ return mShortDisplayValue;
+ }
+
+ public String getLongDisplayValue() {
+ return mLongDisplayValue;
}
public static int getIndex(KeyboardState value) {
@@ -79,4 +85,13 @@ public enum KeyboardState {
}
return null;
}
+
+ public boolean isFakeValue() {
+ return false;
+ }
+
+ public boolean isValidValueForDevice() {
+ return true;
+ }
+
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Navigation.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Navigation.java
index ae54215..5ac67f4 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Navigation.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/Navigation.java
@@ -20,18 +20,20 @@ package com.android.sdklib.resources;
* Navigation enum.
* <p/>This is used in the manifest in the uses-configuration node and in the resource folder names.
*/
-public enum Navigation {
- NONAV("nonav", "No Navigation"), //$NON-NLS-1$
- DPAD("dpad", "D-pad"), //$NON-NLS-1$
- TRACKBALL("trackball", "Trackball"), //$NON-NLS-1$
- WHEEL("wheel", "Wheel"); //$NON-NLS-1$
+public enum Navigation implements ResourceEnum {
+ NONAV("nonav", "None", "No navigation"), //$NON-NLS-1$
+ DPAD("dpad", "D-pad", "D-pad navigation"), //$NON-NLS-1$
+ TRACKBALL("trackball", "Trackball", "Trackball navigation"), //$NON-NLS-1$
+ WHEEL("wheel", "Wheel", "Wheel navigation"); //$NON-NLS-1$
- private String mValue;
- private String mDisplay;
+ private final String mValue;
+ private final String mShortDisplayValue;
+ private final String mLongDisplayValue;
- private Navigation(String value, String display) {
+ private Navigation(String value, String shortDisplayValue, String longDisplayValue) {
mValue = value;
- mDisplay = display;
+ mShortDisplayValue = shortDisplayValue;
+ mLongDisplayValue = longDisplayValue;
}
/**
@@ -49,12 +51,16 @@ public enum Navigation {
return null;
}
- public String getValue() {
+ public String getResourceValue() {
return mValue;
}
- public String getDisplayValue() {
- return mDisplay;
+ public String getShortDisplayValue() {
+ return mShortDisplayValue;
+ }
+
+ public String getLongDisplayValue() {
+ return mLongDisplayValue;
}
public static int getIndex(Navigation value) {
@@ -80,4 +86,13 @@ public enum Navigation {
}
return null;
}
+
+ public boolean isFakeValue() {
+ return false;
+ }
+
+ public boolean isValidValueForDevice() {
+ return true;
+ }
+
} \ No newline at end of file
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/NavigationState.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/NavigationState.java
index bf24136..612c119 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/NavigationState.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/NavigationState.java
@@ -20,16 +20,18 @@ package com.android.sdklib.resources;
* Navigation state enum.
* <p/>This is used in the resource folder names.
*/
-public enum NavigationState {
- EXPOSED("navexposed", "Exposed"), //$NON-NLS-1$
- HIDDEN("navhidden", "Hidden"); //$NON-NLS-1$
+public enum NavigationState implements ResourceEnum {
+ EXPOSED("navexposed", "Exposed", "Exposed navigation"), //$NON-NLS-1$
+ HIDDEN("navhidden", "Hidden", "Hidden navigation"); //$NON-NLS-1$
- private String mValue;
- private String mDisplayValue;
+ private final String mValue;
+ private final String mShortDisplayValue;
+ private final String mLongDisplayValue;
- private NavigationState(String value, String displayValue) {
+ private NavigationState(String value, String shortDisplayValue, String longDisplayValue) {
mValue = value;
- mDisplayValue = displayValue;
+ mShortDisplayValue = shortDisplayValue;
+ mLongDisplayValue = longDisplayValue;
}
/**
@@ -47,12 +49,16 @@ public enum NavigationState {
return null;
}
- public String getValue() {
+ public String getResourceValue() {
return mValue;
}
- public String getDisplayValue() {
- return mDisplayValue;
+ public String getShortDisplayValue() {
+ return mShortDisplayValue;
+ }
+
+ public String getLongDisplayValue() {
+ return mLongDisplayValue;
}
public static int getIndex(NavigationState value) {
@@ -78,4 +84,13 @@ public enum NavigationState {
}
return null;
}
+
+ public boolean isFakeValue() {
+ return false;
+ }
+
+ public boolean isValidValueForDevice() {
+ return true;
+ }
+
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/NightMode.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/NightMode.java
index a8fae0c..c694f19 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/NightMode.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/NightMode.java
@@ -20,16 +20,18 @@ package com.android.sdklib.resources;
* Night enum.
* <p/>This is used in the resource folder names.
*/
-public enum NightMode {
- NIGHT("night", "Night time"),
- NOTNIGHT("notnight", "Day time");
+public enum NightMode implements ResourceEnum {
+ NOTNIGHT("notnight", "Not Night", "Day time"),
+ NIGHT("night", "Night", "Night time");
- private String mValue;
- private String mDisplay;
+ private final String mValue;
+ private final String mShortDisplayValue;
+ private final String mLongDisplayValue;
- private NightMode(String value, String display) {
+ private NightMode(String value, String shortDisplayValue, String longDisplayValue) {
mValue = value;
- mDisplay = display;
+ mShortDisplayValue = shortDisplayValue;
+ mLongDisplayValue = longDisplayValue;
}
/**
@@ -47,12 +49,16 @@ public enum NightMode {
return null;
}
- public String getValue() {
+ public String getResourceValue() {
return mValue;
}
- public String getDisplayValue() {
- return mDisplay;
+ public String getShortDisplayValue() {
+ return mShortDisplayValue;
+ }
+
+ public String getLongDisplayValue() {
+ return mLongDisplayValue;
}
public static int getIndex(NightMode value) {
@@ -78,4 +84,13 @@ public enum NightMode {
}
return null;
}
+
+ public boolean isFakeValue() {
+ return false;
+ }
+
+ public boolean isValidValueForDevice() {
+ return true;
+ }
+
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ResourceEnum.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ResourceEnum.java
new file mode 100644
index 0000000..7bbcfcb
--- /dev/null
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ResourceEnum.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.sdklib.resources;
+
+/**
+ * An enum representing a resource qualifier value.
+ */
+public interface ResourceEnum {
+
+ /**
+ * Returns the resource string. This is to be used in resource folder names.
+ */
+ String getResourceValue();
+
+ /**
+ * Whether the value actually used on device. This returns true only if a device can report
+ * this value, false if it's just used to qualify resources.
+ */
+ boolean isValidValueForDevice();
+
+ /**
+ * Whether the value is neither used for device nor resources. This returns false when
+ * the value is only used for internal usage in the custom editors.
+ */
+ boolean isFakeValue();
+
+ /**
+ * Returns a short string for display value. The string does not need to show the context.
+ * <p/>For instance "exposed", which can be the value for the keyboard state or the navigation
+ * state, would be valid since something else in the UI is expected to show if this is about the
+ * keyboard or the navigation state.
+ *
+ * @see #getLongDisplayValue()
+ */
+ String getShortDisplayValue();
+
+ /**
+ * Returns a long string for display value. This must not only include the enum value but
+ * context (qualifier) about what the value represents.
+ * <p/>For instance "Exposed keyboard", and "Export navigation", as "exposed" would not be
+ * enough to know what qualifier the value is about.
+ *
+ * @see #getShortDisplayValue()
+ */
+ String getLongDisplayValue();
+}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenOrientation.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenOrientation.java
index 8e28b10..d6fdc59 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenOrientation.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenOrientation.java
@@ -20,17 +20,19 @@ package com.android.sdklib.resources;
* Screen Orientation enum.
* <p/>This is used in the manifest in the uses-configuration node and in the resource folder names.
*/
-public enum ScreenOrientation {
- PORTRAIT("port", "Portrait"), //$NON-NLS-1$
- LANDSCAPE("land", "Landscape"), //$NON-NLS-1$
- SQUARE("square", "Square"); //$NON-NLS-1$
+public enum ScreenOrientation implements ResourceEnum {
+ PORTRAIT("port", "Portrait", "Portrait Orientation"), //$NON-NLS-1$
+ LANDSCAPE("land", "Landscape", "Landscape Orientation"), //$NON-NLS-1$
+ SQUARE("square", "Square", "Square Orientation"); //$NON-NLS-1$
- private String mValue;
- private String mDisplayValue;
+ private final String mValue;
+ private final String mShortDisplayValue;
+ private final String mLongDisplayValue;
- private ScreenOrientation(String value, String displayValue) {
+ private ScreenOrientation(String value, String shortDisplayValue, String longDisplayValue) {
mValue = value;
- mDisplayValue = displayValue;
+ mShortDisplayValue = shortDisplayValue;
+ mLongDisplayValue = longDisplayValue;
}
/**
@@ -48,12 +50,16 @@ public enum ScreenOrientation {
return null;
}
- public String getValue() {
+ public String getResourceValue() {
return mValue;
}
- public String getDisplayValue() {
- return mDisplayValue;
+ public String getShortDisplayValue() {
+ return mShortDisplayValue;
+ }
+
+ public String getLongDisplayValue() {
+ return mLongDisplayValue;
}
public static int getIndex(ScreenOrientation orientation) {
@@ -80,4 +86,13 @@ public enum ScreenOrientation {
return null;
}
+
+ public boolean isFakeValue() {
+ return false;
+ }
+
+ public boolean isValidValueForDevice() {
+ return true;
+ }
+
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenRatio.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenRatio.java
index 4a3577f..28d4024 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenRatio.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenRatio.java
@@ -20,16 +20,18 @@ package com.android.sdklib.resources;
* Screen Ratio enum.
* <p/>This is used in the manifest in the uses-configuration node and in the resource folder names.
*/
-public enum ScreenRatio {
- NOTLONG("notlong", "Not Long"), //$NON-NLS-1$
- LONG("long", "Long"); //$NON-NLS-1$
+public enum ScreenRatio implements ResourceEnum {
+ NOTLONG("notlong", "Not Long", "Short screen aspect ratio"), //$NON-NLS-1$
+ LONG("long", "Long", "Long screen aspect ratio"); //$NON-NLS-1$
- private String mValue;
- private String mDisplayValue;
+ private final String mValue;
+ private final String mShortDisplayValue;
+ private final String mLongDisplayValue;
- private ScreenRatio(String value, String displayValue) {
+ private ScreenRatio(String value, String displayValue, String longDisplayValue) {
mValue = value;
- mDisplayValue = displayValue;
+ mShortDisplayValue = displayValue;
+ mLongDisplayValue = longDisplayValue;
}
/**
@@ -47,12 +49,16 @@ public enum ScreenRatio {
return null;
}
- public String getValue() {
+ public String getResourceValue() {
return mValue;
}
- public String getDisplayValue() {
- return mDisplayValue;
+ public String getShortDisplayValue() {
+ return mShortDisplayValue;
+ }
+
+ public String getLongDisplayValue() {
+ return mLongDisplayValue;
}
public static int getIndex(ScreenRatio orientation) {
@@ -79,4 +85,14 @@ public enum ScreenRatio {
return null;
}
+
+ public boolean isFakeValue() {
+ return false;
+ }
+
+ public boolean isValidValueForDevice() {
+ return true;
+ }
+
}
+
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenSize.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenSize.java
index 1aae15a..dc94afb 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenSize.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/ScreenSize.java
@@ -20,17 +20,19 @@ package com.android.sdklib.resources;
* Screen size enum.
* <p/>This is used in the manifest in the uses-configuration node and in the resource folder names.
*/
-public enum ScreenSize {
- SMALL("small", "Small"), //$NON-NLS-1$
- NORMAL("normal", "Normal"), //$NON-NLS-1$
- LARGE("large", "Large"); //$NON-NLS-1$
+public enum ScreenSize implements ResourceEnum {
+ SMALL("small", "Small", "Small Screen"), //$NON-NLS-1$
+ NORMAL("normal", "Normal", "Normal Screen"), //$NON-NLS-1$
+ LARGE("large", "Large", "Large Screen"); //$NON-NLS-1$
- private String mValue;
- private String mDisplayValue;
+ private final String mValue;
+ private final String mShortDisplayValue;
+ private final String mLongDisplayValue;
- private ScreenSize(String value, String displayValue) {
+ private ScreenSize(String value, String shortDisplayValue, String longDisplayValue) {
mValue = value;
- mDisplayValue = displayValue;
+ mShortDisplayValue = shortDisplayValue;
+ mLongDisplayValue = longDisplayValue;
}
/**
@@ -48,12 +50,16 @@ public enum ScreenSize {
return null;
}
- public String getValue() {
+ public String getResourceValue() {
return mValue;
}
- public String getDisplayValue() {
- return mDisplayValue;
+ public String getShortDisplayValue() {
+ return mShortDisplayValue;
+ }
+
+ public String getLongDisplayValue() {
+ return mLongDisplayValue;
}
public static int getIndex(ScreenSize orientation) {
@@ -80,4 +86,13 @@ public enum ScreenSize {
return null;
}
+
+ public boolean isFakeValue() {
+ return false;
+ }
+
+ public boolean isValidValueForDevice() {
+ return true;
+ }
+
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/TouchScreen.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/TouchScreen.java
index 3def049..233308b 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/TouchScreen.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/resources/TouchScreen.java
@@ -20,17 +20,19 @@ package com.android.sdklib.resources;
* Touch screen enum.
* <p/>This is used in the manifest in the uses-configuration node and in the resource folder names.
*/
-public enum TouchScreen {
- NOTOUCH("notouch", "No Touch"), //$NON-NLS-1$
- STYLUS("stylus", "Stylus"), //$NON-NLS-1$
- FINGER("finger", "Finger"); //$NON-NLS-1$
+public enum TouchScreen implements ResourceEnum {
+ NOTOUCH("notouch", "No Touch", "No-touch screen"), //$NON-NLS-1$
+ STYLUS("stylus", "Stylus", "Stylus-based touchscreen"), //$NON-NLS-1$
+ FINGER("finger", "Finger", "Finger-based touchscreen"); //$NON-NLS-1$
- private String mValue;
- private String mDisplayValue;
+ private final String mValue;
+ private final String mShortDisplayValue;
+ private final String mLongDisplayValue;
- private TouchScreen(String value, String displayValue) {
+ private TouchScreen(String value, String displayValue, String longDisplayValue) {
mValue = value;
- mDisplayValue = displayValue;
+ mShortDisplayValue = displayValue;
+ mLongDisplayValue = longDisplayValue;
}
/**
@@ -48,12 +50,16 @@ public enum TouchScreen {
return null;
}
- public String getValue() {
+ public String getResourceValue() {
return mValue;
}
- public String getDisplayValue() {
- return mDisplayValue;
+ public String getShortDisplayValue() {
+ return mShortDisplayValue;
+ }
+
+ public String getLongDisplayValue() {
+ return mLongDisplayValue;
}
public static int getIndex(TouchScreen touch) {
@@ -80,4 +86,13 @@ public enum TouchScreen {
return null;
}
+
+ public boolean isFakeValue() {
+ return false;
+ }
+
+ public boolean isValidValueForDevice() {
+ return true;
+ }
+
}