OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright 2013 The Chromium Authors. All rights reserved. | 3 # Copyright 2013 The Chromium Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 """Convert Android xml resources to API 14 compatible. | 7 """Convert Android xml resources to API 14 compatible. |
8 | 8 |
9 There are two reasons that we cannot just use API 17 attributes, | 9 There are two reasons that we cannot just use API 17 attributes, |
10 so we are generating another set of resources by this script. | 10 so we are generating another set of resources by this script. |
11 | 11 |
12 1. paddingStart attribute can cause a crash on Galaxy Tab 2. | 12 1. paddingStart attribute can cause a crash on Galaxy Tab 2. |
13 2. There is a bug that paddingStart does not override paddingLeft on | 13 2. There is a bug that paddingStart does not override paddingLeft on |
14 JB-MR1. This is fixed on JB-MR2. | 14 JB-MR1. This is fixed on JB-MR2. |
15 | 15 |
16 Therefore, this resource generation script can be removed when | 16 Therefore, this resource generation script can be removed when |
17 we drop the support for JB-MR1. | 17 we drop the support for JB-MR1. |
18 | 18 |
19 Please refer to http://crbug.com/235118 for the details. | 19 Please refer to http://crbug.com/235118 for the details. |
20 """ | 20 """ |
21 | 21 |
22 import optparse | 22 import optparse |
23 import os | 23 import os |
| 24 import re |
24 import shutil | 25 import shutil |
25 import sys | 26 import sys |
26 import xml.dom.minidom as minidom | 27 import xml.dom.minidom as minidom |
27 | 28 |
28 from util import build_utils | 29 from util import build_utils |
29 | 30 |
30 # Note that we are assuming 'android:' is an alias of | 31 # Note that we are assuming 'android:' is an alias of |
31 # the namespace 'http://schemas.android.com/apk/res/android'. | 32 # the namespace 'http://schemas.android.com/apk/res/android'. |
32 | 33 |
33 GRAVITY_ATTRIBUTES = ('android:gravity', 'android:layout_gravity') | 34 GRAVITY_ATTRIBUTES = ('android:gravity', 'android:layout_gravity') |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 build_utils.MakeDirectory(options.res_v14_compatibility_dir) | 235 build_utils.MakeDirectory(options.res_v14_compatibility_dir) |
235 | 236 |
236 for name in os.listdir(options.res_dir): | 237 for name in os.listdir(options.res_dir): |
237 if not os.path.isdir(os.path.join(options.res_dir, name)): | 238 if not os.path.isdir(os.path.join(options.res_dir, name)): |
238 continue | 239 continue |
239 | 240 |
240 dir_pieces = name.split('-') | 241 dir_pieces = name.split('-') |
241 resource_type = dir_pieces[0] | 242 resource_type = dir_pieces[0] |
242 qualifiers = dir_pieces[1:] | 243 qualifiers = dir_pieces[1:] |
243 | 244 |
| 245 api_level_qualifier_index = -1 |
| 246 api_level_qualifier = '' |
| 247 for index, qualifier in enumerate(qualifiers): |
| 248 if re.match('v[0-9]+$', qualifier): |
| 249 api_level_qualifier_index = index |
| 250 api_level_qualifier = qualifier |
| 251 break |
| 252 |
244 # Android pre-v17 API doesn't support RTL. Skip. | 253 # Android pre-v17 API doesn't support RTL. Skip. |
245 if 'ldrtl' in qualifiers: | 254 if 'ldrtl' in qualifiers: |
246 continue | 255 continue |
247 | 256 |
248 # We also need to copy the original v17 resource to *-v17 directory | 257 # We also need to copy the original v17 resource to *-v17 directory |
249 # because the generated v14 resource will hide the original resource. | 258 # because the generated v14 resource will hide the original resource. |
250 input_dir = os.path.join(options.res_dir, name) | 259 input_dir = os.path.join(options.res_dir, name) |
251 output_v14_dir = os.path.join(options.res_v14_compatibility_dir, name) | 260 output_v14_dir = os.path.join(options.res_v14_compatibility_dir, name) |
252 output_v17_dir = os.path.join(options.res_v14_compatibility_dir, name + | 261 output_v17_dir = os.path.join(options.res_v14_compatibility_dir, name + |
253 '-v17') | 262 '-v17') |
254 | 263 |
255 # We only convert layout resources under layout*/, xml*/, | 264 # We only convert layout resources under layout*/, xml*/, |
256 # and style resources under values*/. | 265 # and style resources under values*/. |
257 # TODO(kkimlabs): don't process xml directly once all layouts have | |
258 # been moved out of XML directory. see http://crbug.com/238458 | |
259 if resource_type in ('layout', 'xml'): | 266 if resource_type in ('layout', 'xml'): |
260 GenerateV14LayoutResourcesInDir(input_dir, output_v14_dir, output_v17_dir) | 267 if not api_level_qualifier: |
| 268 GenerateV14LayoutResourcesInDir(input_dir, output_v14_dir, |
| 269 output_v17_dir) |
261 elif resource_type == 'values': | 270 elif resource_type == 'values': |
262 if 'v17' in qualifiers: | 271 if api_level_qualifier == 'v17': |
263 output_qualifiers = qualifiers[:] | 272 output_qualifiers = qualifiers[:] |
264 del output_qualifiers[qualifiers.index('v17')] | 273 del output_qualifiers[api_level_qualifier_index] |
265 output_v14_dir = os.path.join(options.res_v14_compatibility_dir, | 274 output_v14_dir = os.path.join(options.res_v14_compatibility_dir, |
266 '-'.join([resource_type] + | 275 '-'.join([resource_type] + |
267 output_qualifiers)) | 276 output_qualifiers)) |
268 GenerateV14StyleResourcesInDir(input_dir, output_v14_dir) | 277 GenerateV14StyleResourcesInDir(input_dir, output_v14_dir) |
269 else: | 278 elif not api_level_qualifier: |
270 ErrorIfStyleResourceExistsInDir(input_dir) | 279 ErrorIfStyleResourceExistsInDir(input_dir) |
271 | 280 |
272 if options.stamp: | 281 if options.stamp: |
273 build_utils.Touch(options.stamp) | 282 build_utils.Touch(options.stamp) |
274 | 283 |
275 if __name__ == '__main__': | 284 if __name__ == '__main__': |
276 sys.exit(main(sys.argv)) | 285 sys.exit(main(sys.argv)) |
277 | 286 |
OLD | NEW |