10de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet/* 20de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * Copyright (C) 2011 The Android Open Source Project 30de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * 40de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License"); 50de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * you may not use this file except in compliance with the License. 60de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * You may obtain a copy of the License at 70de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * 80de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * http://www.apache.org/licenses/LICENSE-2.0 90de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * 100de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * Unless required by applicable law or agreed to in writing, software 110de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS, 120de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * See the License for the specific language governing permissions and 140de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * limitations under the License. 150de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet */ 160de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 170de16070935adb8656d646b8c69a362652db7443Xavier Ducrohetpackage com.android.internal.util; 180de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 199a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohetimport com.android.tools.layoutlib.annotations.LayoutlibDelegate; 209a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet 210de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 220de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet/** 230de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * Delegate used to provide new implementation of a select few methods of {@link XmlUtils} 240de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * 250de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * Through the layoutlib_create tool, the original methods of XmlUtils have been replaced 260de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * by calls to methods of the same name in this delegate class. 270de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet * 280de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet */ 290de16070935adb8656d646b8c69a362652db7443Xavier Ducrohetpublic class XmlUtils_Delegate { 309a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet 319a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 320de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet /*package*/ static final int convertValueToInt(CharSequence charSeq, int defaultValue) { 330de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (null == charSeq) 340de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return defaultValue; 350de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 360de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet String nm = charSeq.toString(); 370de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 380de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet // This code is copied from the original implementation. The issue is that 390de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet // The Dalvik libraries are able to handle Integer.parse("XXXXXXXX", 16) where XXXXXXX 400de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet // is > 80000000 but the Java VM cannot. 410de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 420de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet int sign = 1; 430de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet int index = 0; 440de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet int len = nm.length(); 450de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet int base = 10; 460de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 470de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if ('-' == nm.charAt(0)) { 480de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet sign = -1; 490de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet index++; 500de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 510de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 520de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if ('0' == nm.charAt(index)) { 530de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet // Quick check for a zero by itself 540de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if (index == (len - 1)) 550de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet return 0; 560de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 576c740cf71e5ce5ba7c8493c545c3a57c57ac7024Xavier Ducrohet char c = nm.charAt(index + 1); 580de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 590de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet if ('x' == c || 'X' == c) { 600de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet index += 2; 610de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet base = 16; 620de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } else { 630de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet index++; 640de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet base = 8; 650de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 660de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 676c740cf71e5ce5ba7c8493c545c3a57c57ac7024Xavier Ducrohet else if ('#' == nm.charAt(index)) { 680de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet index++; 690de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet base = 16; 700de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 710de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet 726c740cf71e5ce5ba7c8493c545c3a57c57ac7024Xavier Ducrohet return ((int)Long.parseLong(nm.substring(index), base)) * sign; 730de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet } 740de16070935adb8656d646b8c69a362652db7443Xavier Ducrohet} 75