content: /*
   * Copyright (C) 2011 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package com.android.internal.util;
  
  import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
  
  
  /**
   * Delegate used to provide new implementation of a select few methods of {@link XmlUtils}
   *
   * Through the layoutlib_create tool, the original  methods of XmlUtils have been replaced
   * by calls to methods of the same name in this delegate class.
   *
   */
  public class XmlUtils_Delegate {
  
      @LayoutlibDelegate
      /*package*/ static final int convertValueToInt(CharSequence charSeq, int defaultValue) {
          if (null == charSeq)
              return defaultValue;
  
          String nm = charSeq.toString();
  
          // This code is copied from the original implementation. The issue is that
          // The Dalvik libraries are able to handle Integer.parse("XXXXXXXX", 16) where XXXXXXX
          // is > 80000000 but the Java VM cannot.
  
          int sign = 1;
          int index = 0;
          int len = nm.length();
          int base = 10;
  
          if ('-' == nm.charAt(0)) {
              sign = -1;
              index++;
          }
  
          if ('0' == nm.charAt(index)) {
              //  Quick check for a zero by itself
              if (index == (len - 1))
                  return 0;
  
              char c = nm.charAt(index + 1);
  
              if ('x' == c || 'X' == c) {
                  index += 2;
                  base = 16;
              } else {
                  index++;
                  base = 8;
              }
          }
          else if ('#' == nm.charAt(index)) {
              index++;
              base = 16;
          }
  
          return ((int)Long.parseLong(nm.substring(index), base)) * sign;
      }
  }
  