Home | History | Annotate | Download | only in configurations
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Eclipse Public License, Version 1.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.eclipse.org/org/documents/epl-v10.php
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.ide.eclipse.adt.internal.resources.configurations;
     18 
     19 import com.android.ide.eclipse.adt.internal.editors.IconFactory;
     20 import com.android.sdklib.AndroidVersion;
     21 import com.android.sdklib.IAndroidTarget;
     22 
     23 import org.eclipse.swt.graphics.Image;
     24 
     25 /**
     26  * Resource Qualifier for Screen Size. Size can be "small", "normal", and "large"
     27  */
     28 public class ScreenSizeQualifier extends ResourceQualifier {
     29 
     30     public static final String NAME = "Screen Size";
     31 
     32     private ScreenSize mValue = null;
     33 
     34     /**
     35      * Screen Orientation enum.
     36      */
     37     public static enum ScreenSize {
     38         SMALL("small", "Small"), //$NON-NLS-1$
     39         NORMAL("normal", "Normal"), //$NON-NLS-1$
     40         LARGE("large", "Large"); //$NON-NLS-1$
     41 
     42         private String mValue;
     43         private String mDisplayValue;
     44 
     45         private ScreenSize(String value, String displayValue) {
     46             mValue = value;
     47             mDisplayValue = displayValue;
     48         }
     49 
     50         /**
     51          * Returns the enum for matching the provided qualifier value.
     52          * @param value The qualifier value.
     53          * @return the enum for the qualifier value or null if no matching was found.
     54          */
     55         public static ScreenSize getEnum(String value) {
     56             for (ScreenSize orient : values()) {
     57                 if (orient.mValue.equals(value)) {
     58                     return orient;
     59                 }
     60             }
     61 
     62             return null;
     63         }
     64 
     65         public String getValue() {
     66             return mValue;
     67         }
     68 
     69         public String getDisplayValue() {
     70             return mDisplayValue;
     71         }
     72 
     73         public static int getIndex(ScreenSize orientation) {
     74             int i = 0;
     75             for (ScreenSize orient : values()) {
     76                 if (orient == orientation) {
     77                     return i;
     78                 }
     79 
     80                 i++;
     81             }
     82 
     83             return -1;
     84         }
     85 
     86         public static ScreenSize getByIndex(int index) {
     87             int i = 0;
     88             for (ScreenSize orient : values()) {
     89                 if (i == index) {
     90                     return orient;
     91                 }
     92                 i++;
     93             }
     94 
     95             return null;
     96         }
     97     }
     98 
     99     public ScreenSizeQualifier() {
    100     }
    101 
    102     public ScreenSizeQualifier(ScreenSize value) {
    103         mValue = value;
    104     }
    105 
    106     public ScreenSize getValue() {
    107         return mValue;
    108     }
    109 
    110     @Override
    111     public String getName() {
    112         return NAME;
    113     }
    114 
    115     @Override
    116     public String getShortName() {
    117         return "Size";
    118     }
    119 
    120     @Override
    121     public Image getIcon() {
    122         return IconFactory.getInstance().getIcon("size"); //$NON-NLS-1$
    123     }
    124 
    125     @Override
    126     public boolean isValid() {
    127         return mValue != null;
    128     }
    129 
    130     @Override
    131     public boolean checkAndSet(String value, FolderConfiguration config) {
    132         ScreenSize size = ScreenSize.getEnum(value);
    133         if (size != null) {
    134             ScreenSizeQualifier qualifier = new ScreenSizeQualifier(size);
    135             config.setScreenSizeQualifier(qualifier);
    136             return true;
    137         }
    138 
    139         return false;
    140     }
    141 
    142     @Override
    143     public boolean equals(Object qualifier) {
    144         if (qualifier instanceof ScreenSizeQualifier) {
    145             return mValue == ((ScreenSizeQualifier)qualifier).mValue;
    146         }
    147 
    148         return false;
    149     }
    150 
    151     @Override
    152     public int hashCode() {
    153         if (mValue != null) {
    154             return mValue.hashCode();
    155         }
    156 
    157         return 0;
    158     }
    159 
    160     /**
    161      * Returns the string used to represent this qualifier in the folder name.
    162      */
    163     @Override
    164     public String getFolderSegment(IAndroidTarget target) {
    165         if (mValue != null) {
    166             if (target == null) {
    167                 // Default behavior (when target==null) is qualifier is supported
    168                 return mValue.getValue();
    169             }
    170 
    171             AndroidVersion version = target.getVersion();
    172             if (version.getApiLevel() >= 4 ||
    173                     (version.getApiLevel() == 3 && "Donut".equals(version.getCodename()))) {
    174                 return mValue.getValue();
    175             }
    176         }
    177 
    178         return ""; //$NON-NLS-1$
    179     }
    180 
    181     @Override
    182     public String getStringValue() {
    183         if (mValue != null) {
    184             return mValue.getDisplayValue();
    185         }
    186 
    187         return ""; //$NON-NLS-1$
    188     }
    189 }
    190