• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 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 
17 package com.android.sdklib.internal.project;
18 
19 import java.util.Collections;
20 import java.util.HashMap;
21 import java.util.Map;
22 import java.util.Map.Entry;
23 import java.util.regex.Pattern;
24 
25 
26 /**
27  * Settings for multiple APK generation.
28  */
29 public class ApkSettings {
30     private final static char CHAR_EQUAL = ':';
31     private final static char CHAR_SEP = '|';
32     private final static String STR_SEP = Pattern.quote(new String(new char[] { CHAR_SEP }));
33 
34     private boolean mSplitByDensity = false;
35     private boolean mSplitByAbi = false;
36     private final Map<String, String> mSplitByLocale;
37 
38     /**
39      * Creates an ApkSettings and fills it from the project settings read from a
40      * {@link ProjectProperties} file.
41      */
ApkSettings(ProjectProperties properties)42     public ApkSettings(ProjectProperties properties) {
43         mSplitByDensity = Boolean.parseBoolean(properties.getProperty(
44                 ProjectProperties.PROPERTY_SPLIT_BY_DENSITY));
45         mSplitByAbi =  Boolean.parseBoolean(properties.getProperty(
46                 ProjectProperties.PROPERTY_SPLIT_BY_ABI));
47         String locale = properties.getProperty(ProjectProperties.PROPERTY_SPLIT_BY_LOCALE);
48         if (locale != null && locale.length() > 0) {
49             mSplitByLocale = readLocaleFilters(locale);
50         } else {
51             mSplitByLocale = Collections.unmodifiableMap(new HashMap<String, String>());
52         }
53     }
54 
55     /**
56      * Indicates whether APKs should be generate for each dpi level.
57      */
isSplitByDensity()58     public boolean isSplitByDensity() {
59         return mSplitByDensity;
60     }
61 
setSplitByDensity(boolean split)62     public void setSplitByDensity(boolean split) {
63         mSplitByDensity = split;
64     }
65 
isSplitByAbi()66     public boolean isSplitByAbi() {
67         return mSplitByAbi;
68     }
69 
setSplitByAbi(boolean split)70     public void setSplitByAbi(boolean split) {
71         mSplitByAbi = split;
72     }
73 
74     /**
75      * Writes the receiver into a {@link ProjectPropertiesWorkingCopy}.
76      * @param properties the {@link ProjectPropertiesWorkingCopy} in which to store the settings.
77      */
write(ProjectPropertiesWorkingCopy properties)78     public void write(ProjectPropertiesWorkingCopy properties) {
79         properties.setProperty(ProjectProperties.PROPERTY_SPLIT_BY_DENSITY,
80                 Boolean.toString(mSplitByDensity));
81         properties.setProperty(ProjectProperties.PROPERTY_SPLIT_BY_ABI,
82                 Boolean.toString(mSplitByAbi));
83     }
84 
85     @Override
equals(Object obj)86     public boolean equals(Object obj) {
87         if (obj instanceof ApkSettings) {
88             ApkSettings objSettings = (ApkSettings) obj;
89             return mSplitByDensity == objSettings.mSplitByDensity &&
90                     mSplitByAbi == objSettings.mSplitByAbi;
91         }
92 
93         return false;
94     }
95 
96     @Override
hashCode()97     public int hashCode() {
98         return Integer.valueOf(
99                 (mSplitByDensity ? 1 : 0) +
100                 (mSplitByAbi ? 2 : 0)).hashCode();
101     }
102 
readLocaleFilters(String locale)103     public static Map<String, String> readLocaleFilters(String locale) {
104         HashMap<String, String> map = new HashMap<String, String>();
105         String[] filters = locale.split(STR_SEP);
106         for (String filter : filters) {
107             int charPos = filter.indexOf(CHAR_EQUAL);
108             if (charPos > 0) {
109                 map.put(filter.substring(0, charPos), filter.substring(charPos+1));
110             }
111         }
112 
113         return Collections.unmodifiableMap(map);
114     }
115 
writeLocaleFilters(Map<String, String> filterMap)116     public static String writeLocaleFilters(Map<String, String> filterMap) {
117         StringBuilder sb = new StringBuilder();
118 
119         boolean first = true;
120         for (Entry<String, String> entry : filterMap.entrySet()) {
121             if (first == false) {
122                 sb.append(CHAR_SEP);
123             }
124             first = false;
125 
126             sb.append(entry.getKey());
127             sb.append(CHAR_EQUAL);
128             sb.append(entry.getValue());
129         }
130 
131         return sb.toString();
132     }
133 
getLocaleFilters()134     public Map<String, String> getLocaleFilters() {
135         return mSplitByLocale;
136     }
137 }
138