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