1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License. 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.api.org.xml.sax.helpers; 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.AttributeList; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.helpers.AttributeListImpl; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project@SuppressWarnings("deprecation") 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class AttributeListImplTest extends TestCase { 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private AttributeListImpl empty = new AttributeListImpl(); 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private AttributeListImpl multi = new AttributeListImpl(); 30f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setUp() { 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project multi.addAttribute("foo", "string", "abc"); 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project multi.addAttribute("bar", "string", "xyz"); 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project multi.addAttribute("answer", "int", "42"); 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 37f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testAttributeListImpl() { 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(0, empty.getLength()); 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(3, multi.getLength()); 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testAttributeListImplAttributeList() { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Ordinary case 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project AttributeListImpl ai = new AttributeListImpl(empty); 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(0, ai.getLength()); 47f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Another ordinary case 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ai = new AttributeListImpl(multi); 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(3, ai.getLength()); 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // No Attributes 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ai = new AttributeListImpl(null); 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(0, ai.getLength()); 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException expected"); 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Expected 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSetAttributeList() { 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Ordinary cases 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project AttributeListImpl attrs = new AttributeListImpl(); 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project attrs.addAttribute("doe", "boolean", "false"); 66f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project attrs.setAttributeList(empty); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(0, attrs.getLength()); 69f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project attrs.setAttributeList(multi); 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(multi.getLength(), attrs.getLength()); 72f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < multi.getLength(); i++) { 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(multi.getName(i), attrs.getName(i)); 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(multi.getType(i), attrs.getType(i)); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(multi.getValue(i), attrs.getValue(i)); 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 78f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // null case 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project attrs.setAttributeList(null); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException expected"); 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Expected, must still have old elements 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(3, attrs.getLength()); 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testAddAttribute() { 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Ordinary case 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project multi.addAttribute("doe", "boolean", "false"); 92f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("doe", multi.getName(3)); 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("boolean", multi.getType(3)); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("false", multi.getValue(3)); 96f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Duplicate case 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project multi.addAttribute("doe", "boolean", "false"); 99f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("doe", multi.getName(4)); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("boolean", multi.getType(4)); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("false", multi.getValue(4)); 103f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // null case 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project multi.addAttribute(null, null, null); 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(null, multi.getName(5)); 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(null, multi.getType(5)); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(null, multi.getValue(5)); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testRemoveAttribute() { 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Ordinary case 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project multi.removeAttribute("foo"); 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("bar", multi.getName(0)); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("string", multi.getType(0)); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("xyz", multi.getValue(0)); 117f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Unknown attribute 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project multi.removeAttribute("john"); 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(2, multi.getLength()); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // null case 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project multi.removeAttribute(null); 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(2, multi.getLength()); 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testClear() { 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(3, multi.getLength()); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project multi.clear(); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(0, multi.getLength()); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetLength() { 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project AttributeListImpl ai = new AttributeListImpl(empty); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(0, ai.getLength()); 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ai = new AttributeListImpl(multi); 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(3, ai.getLength()); 139f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 2; i >= 0; i--) { 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ai.removeAttribute(ai.getName(i)); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(i, ai.getLength()); 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetName() { 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Ordinary cases 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("foo", multi.getName(0)); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("bar", multi.getName(1)); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("answer", multi.getName(2)); 151f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Out of range 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(null, multi.getName(-1)); 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(null, multi.getName(3)); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetTypeInt() { 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Ordinary cases 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("string", multi.getType(0)); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("string", multi.getType(1)); 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("int", multi.getType(2)); 162f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Out of range 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(null, multi.getType(-1)); 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(null, multi.getType(3)); 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetValueInt() { 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Ordinary cases 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("abc", multi.getValue(0)); 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("xyz", multi.getValue(1)); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("42", multi.getValue(2)); 173f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Out of range 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(null, multi.getValue(-1)); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(null, multi.getValue(5)); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetTypeString() { 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Ordinary cases 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("string", multi.getType("foo")); 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("string", multi.getType("bar")); 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("int", multi.getType("answer")); 184f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Not found 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(null, multi.getType("john")); 187f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // null case 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(null, multi.getType(null)); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetValueString() { 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Ordinary cases 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("abc", multi.getValue("foo")); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("xyz", multi.getValue("bar")); 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("42", multi.getValue("answer")); 197f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Not found 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(null, multi.getValue("john")); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // null case 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(null, multi.getValue(null)); 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 206