1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
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
17package com.android.resources;
18
19
20/**
21 * Density enum.
22 * <p/>This is used in the manifest in the uses-configuration node and in the resource folder names
23 * as well as other places needing to know the density values.
24 */
25public enum Density implements ResourceEnum {
26    XXHIGH("xxhdpi", "XX-High Density", 480, 16), //$NON-NLS-1$
27    XHIGH("xhdpi", "X-High Density", 320, 8), //$NON-NLS-1$
28    HIGH("hdpi", "High Density", 240, 4), //$NON-NLS-1$
29    TV("tvdpi", "TV Density", 213, 13), //$NON-NLS-1$
30    MEDIUM("mdpi", "Medium Density", 160, 4), //$NON-NLS-1$
31    LOW("ldpi", "Low Density", 120, 4), //$NON-NLS-1$
32    NODPI("nodpi", "No Density", 0, 4); //$NON-NLS-1$
33
34    public final static int DEFAULT_DENSITY = 160;
35
36    private final String mValue;
37    private final String mDisplayValue;
38    private final int mDensity;
39    private final int mSince;
40
41    private Density(String value, String displayValue, int density, int since) {
42        mValue = value;
43        mDisplayValue = displayValue;
44        mDensity = density;
45        mSince = since;
46    }
47
48    /**
49     * Returns the enum matching the provided qualifier value.
50     * @param value The qualifier value.
51     * @return the enum for the qualifier value or null if no match was found.
52     */
53    public static Density getEnum(String value) {
54        for (Density orient : values()) {
55            if (orient.mValue.equals(value)) {
56                return orient;
57            }
58        }
59
60        return null;
61    }
62
63    /**
64     * Returns the enum matching the given density value
65     * @param value The density value.
66     * @return the enum for the density value or null if no match was found.
67     */
68    public static Density getEnum(int value) {
69        for (Density d : values()) {
70            if (d.mDensity == value) {
71                return d;
72            }
73        }
74
75        return null;
76    }
77
78    @Override
79    public String getResourceValue() {
80        return mValue;
81    }
82
83    public int getDpiValue() {
84        return mDensity;
85    }
86
87    public int since() {
88        return mSince;
89    }
90
91    public String getLegacyValue() {
92        if (this != NODPI) {
93            return String.format("%1$ddpi", getDpiValue());
94        }
95
96        return "";
97    }
98
99    @Override
100    public String getShortDisplayValue() {
101        return mDisplayValue;
102    }
103
104    @Override
105    public String getLongDisplayValue() {
106        return mDisplayValue;
107    }
108
109    public static int getIndex(Density value) {
110        int i = 0;
111        for (Density input : values()) {
112            if (value == input) {
113                return i;
114            }
115
116            i++;
117        }
118
119        return -1;
120    }
121
122    public static Density getByIndex(int index) {
123        int i = 0;
124        for (Density value : values()) {
125            if (i == index) {
126                return value;
127            }
128            i++;
129        }
130        return null;
131    }
132
133    @Override
134    public boolean isFakeValue() {
135        return false;
136    }
137
138    @Override
139    public boolean isValidValueForDevice() {
140        return this != NODPI; // nodpi is not a valid config for devices.
141    }
142}
143