196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectpackage jdiff; 296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport java.io.*; 496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport java.util.*; 596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project/* For SAX XML parsing */ 796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport org.xml.sax.Attributes; 896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport org.xml.sax.SAXException; 996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport org.xml.sax.SAXParseException; 1096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport org.xml.sax.XMLReader; 1196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport org.xml.sax.helpers.DefaultHandler; 1296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 1396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project/** 1496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Handle the parsing of an XML file and the generation of a Comments object. 1596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 1696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * All HTML written for the comments sections in the report must 1796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * use tags such as <p/> rather than just <p>, since the XML 1896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * parser used requires that or matching end elements. 1996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 2096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * From http://www.w3.org/TR/2000/REC-xhtml1-20000126: 2196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * "Empty elements must either have an end tag or the start tag must end with /<". 2296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 2396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * See the file LICENSE.txt for copyright details. 2496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @author Matthew Doar, mdoar@pobox.com 2596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 2696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectclass CommentsHandler extends DefaultHandler { 2796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 2896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** The Comments object which is populated from the XML file. */ 2996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public Comments comments_ = null; 3096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 3196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** The current SingleComment object being populated. */ 3296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project private List currSingleComment_ = null; // SingleComment[] 3396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 3496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** Set if in text. */ 3596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project private boolean inText = false; 3696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 3796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** The current text which is being assembled from chunks. */ 3896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project private String currentText = null; 3996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 4096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** The stack of SingleComments still waiting for comment text. */ 4196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project private LinkedList tagStack = null; 4296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 4396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** Default constructor. */ 4496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public CommentsHandler(Comments comments) { 4596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project comments_ = comments; 4696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project tagStack = new LinkedList(); 4796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 4896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 4996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public void startDocument() { 5096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 5196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 5296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public void endDocument() { 5396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (trace) 5496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project comments_.dump(); 5596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 5696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 5796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public void startElement(java.lang.String uri, java.lang.String localName, 5896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project java.lang.String qName, Attributes attributes) { 5996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // The change to JAXP compliance produced this change. 6096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (localName.equals("")) 6196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project localName = qName; 6296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (localName.compareTo("comments") == 0) { 6396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project String commentsName = attributes.getValue("name"); 6496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project String version = attributes.getValue("jdversion"); // Not used yet 6596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (commentsName == null) { 6696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Error: no identifier found in the comments XML file."); 6796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.exit(3); 6896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 6996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Check the given names against the names of the APIs 7096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project int idx1 = JDiff.oldFileName.lastIndexOf('.'); 7196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project int idx2 = JDiff.newFileName.lastIndexOf('.'); 7296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project String filename2 = JDiff.oldFileName.substring(0, idx1) + 7396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project "_to_" + JDiff.newFileName.substring(0, idx2); 7496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (filename2.compareTo(commentsName) != 0) { 7596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Warning: API identifier in the comments XML file (" + filename2 + ") differs from the name of the file."); 7696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 7796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else if (localName.compareTo("comment") == 0) { 7896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project currSingleComment_ = new ArrayList(); // SingleComment[]; 7996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else if (localName.compareTo("identifier") == 0) { 8096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // May have multiple identifiers for one comment's text 8196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project String id = attributes.getValue("id"); 8296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project SingleComment newComment = new SingleComment(id, null); 8396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Store it here until we can add text to it 8496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project currSingleComment_.add(newComment); 8596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else if (localName.compareTo("text") == 0) { 8696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project inText = true; 8796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project currentText = null; 8896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else { 8996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (inText) { 9096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Start of an element, probably an HTML element 9196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project addStartTagToText(localName, attributes); 9296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else { 9396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Error: unknown element type: " + localName); 9496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.exit(-1); 9596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 9696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 9796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 9896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 9996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public void endElement(java.lang.String uri, java.lang.String localName, 10096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project java.lang.String qName) { 10196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (localName.equals("")) 10296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project localName = qName; 10396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (localName.compareTo("text") == 0) { 10496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project inText = false; 10596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project addTextToComments(); 10696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else if (inText) { 10796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project addEndTagToText(localName); 10896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 10996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 11096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 11196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 11296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** Deal with a chunk of text. The text may come in multiple chunks. */ 11396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public void characters(char[] ch, int start, int length) { 11496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (inText) { 11596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project String chunk = new String(ch, start, length); 11696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (currentText == null) 11796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project currentText = chunk; 11896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project else 11996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project currentText += chunk; 12096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 12196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 12296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 12396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 12496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Trim the current text, check it is a sentence and add it to all 12596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * the comments which are waiting for it. 12696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 12796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public void addTextToComments() { 12896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Eliminate any whitespace at each end of the text. 12996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project currentText = currentText.trim(); 13096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Check that it is a sentence 13196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (!currentText.endsWith(".") && 13296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project !currentText.endsWith("?") && 13396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project !currentText.endsWith("!") && 13496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project currentText.compareTo(Comments.placeHolderText) != 0) { 13596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Warning: text of comment does not end in a period: " + currentText); 13696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 13796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Add this comment to all the SingleComments waiting for it 13896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project Iterator iter = currSingleComment_.iterator(); 13996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project while (iter.hasNext()) { 14096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project SingleComment currComment = (SingleComment)(iter.next()); 14196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (currComment.text_ == null) 14296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project currComment.text_ = currentText; 14396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project else 14496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project currComment.text_ += currentText; 14596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project comments_.addComment(currComment); 14696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 14796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 14896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 14996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 15096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Add the start tag to the current comment text. 15196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 15296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public void addStartTagToText(String localName, Attributes attributes) { 15396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Need to insert the HTML tag into the current text 15496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project String currentHTMLTag = localName; 15596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Save the tag in a stack 15696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project tagStack.add(currentHTMLTag); 15796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project String tag = "<" + currentHTMLTag; 15896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Now add all the attributes into the current text 15996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project int len = attributes.getLength(); 16096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project for (int i = 0; i < len; i++) { 16196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project String name = attributes.getLocalName(i); 16296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project String value = attributes.getValue(i); 16396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project tag += " " + name + "=\"" + value+ "\""; 16496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 16596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 16696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // End the tag 16796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (Comments.isMinimizedTag(currentHTMLTag)) { 16896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project tag += "/>"; 16996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else { 17096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project tag += ">"; 17196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 17296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Now insert the HTML tag into the current text 17396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (currentText == null) 17496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project currentText = tag; 17596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project else 17696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project currentText += tag; 17796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 17896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 17996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 18096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Add the end tag to the current comment text. 18196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 18296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public void addEndTagToText(String localName) { 18396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Close the current HTML tag 18496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project String currentHTMLTag = (String)(tagStack.removeLast()); 18596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (!Comments.isMinimizedTag(currentHTMLTag)) 18696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project currentText += "</" + currentHTMLTag + ">"; 18796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 18896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 18996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public void warning(SAXParseException e) { 19096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Warning (" + e.getLineNumber() + "): parsing XML comments file:" + e); 19196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project e.printStackTrace(); 19296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 19396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 19496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public void error(SAXParseException e) { 19596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Error (" + e.getLineNumber() + "): parsing XML comments file:" + e); 19696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project e.printStackTrace(); 19796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.exit(1); 19896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 19996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 20096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public void fatalError(SAXParseException e) { 20196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Fatal Error (" + e.getLineNumber() + "): parsing XML comments file:" + e); 20296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project e.printStackTrace(); 20396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.exit(1); 20496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 20596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 20696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** Set to enable increased logging verbosity for debugging. */ 20796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project private static final boolean trace = false; 20896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 20996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project} 21096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 211