1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/*
2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Copyright (C) 2011 The Android Open Source Project
3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * you may not use this file except in compliance with the License.
6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * You may obtain a copy of the License at
7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Unless required by applicable law or agreed to in writing, software
11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * See the License for the specific language governing permissions and
14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * limitations under the License.
15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipackage com.android.internal.util;
18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.tools.layoutlib.annotations.LayoutlibDelegate;
20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/**
23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Delegate used to provide new implementation of a select few methods of {@link XmlUtils}
24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Through the layoutlib_create tool, the original  methods of XmlUtils have been replaced
26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * by calls to methods of the same name in this delegate class.
27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipublic class XmlUtils_Delegate {
30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @LayoutlibDelegate
32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    /*package*/ static final int convertValueToInt(CharSequence charSeq, int defaultValue) {
33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if (null == charSeq)
34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            return defaultValue;
35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        String nm = charSeq.toString();
37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // This code is copied from the original implementation. The issue is that
39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // The Dalvik libraries are able to handle Integer.parse("XXXXXXXX", 16) where XXXXXXX
40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // is > 80000000 but the Java VM cannot.
41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        int sign = 1;
43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        int index = 0;
44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        int len = nm.length();
45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        int base = 10;
46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if ('-' == nm.charAt(0)) {
48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            sign = -1;
49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            index++;
50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if ('0' == nm.charAt(index)) {
53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            //  Quick check for a zero by itself
54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if (index == (len - 1))
55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                return 0;
56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            char c = nm.charAt(index + 1);
58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            if ('x' == c || 'X' == c) {
60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                index += 2;
61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                base = 16;
62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            } else {
63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                index++;
64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski                base = 8;
65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            }
66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        else if ('#' == nm.charAt(index)) {
68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            index++;
69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            base = 16;
70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return ((int)Long.parseLong(nm.substring(index), base)) * sign;
73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
75