diff options
| author | Xavier Ducrohet <xav@android.com> | 2010-07-09 14:17:10 -0700 |
|---|---|---|
| committer | Android Code Review <code-review@android.com> | 2010-07-09 14:17:10 -0700 |
| commit | de559da1ce494e61e63b85ce8d10007cdfa1e086 (patch) | |
| tree | 3209654d5992349d23d81918da13e9a9ad894ad7 | |
| parent | f24ba5fdf67b84f5f91ecd4af77ea62133c18efe (diff) | |
| parent | ca341273a09f696470872eb1a5aa28a935e073c5 (diff) | |
| download | sdk-de559da1ce494e61e63b85ce8d10007cdfa1e086.zip sdk-de559da1ce494e61e63b85ce8d10007cdfa1e086.tar.gz sdk-de559da1ce494e61e63b85ce8d10007cdfa1e086.tar.bz2 | |
Merge "ADT: dock/night combos in layout editor."
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 Binary files differnew file mode 100644 index 0000000..71d1804 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/icons/dockmode.png diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/icons/nightmode.png b/eclipse/plugins/com.android.ide.eclipse.adt/icons/nightmode.png Binary files differnew file mode 100644 index 0000000..a04e4cf --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/icons/nightmode.png diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/icons/orientation.png b/eclipse/plugins/com.android.ide.eclipse.adt/icons/orientation.png Binary files differindex 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 diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/icons/ratio.png b/eclipse/plugins/com.android.ide.eclipse.adt/icons/ratio.png Binary files differnew file mode 100644 index 0000000..8bf07f2 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/icons/ratio.png diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/icons/size.png b/eclipse/plugins/com.android.ide.eclipse.adt/icons/size.png Binary files differnew file mode 100644 index 0000000..c8a82b0 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/icons/size.png diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/icons/version.png b/eclipse/plugins/com.android.ide.eclipse.adt/icons/version.png Binary files differnew file mode 100644 index 0000000..a8dc35e --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/icons/version.png 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; + } + } |
