Home | History | Annotate | Download | only in bugreportsender
      1 package com.android.bugreportsender;
      2 
      3 import android.util.Log;
      4 
      5 import java.io.BufferedReader;
      6 import java.io.IOException;
      7 import java.io.InputStream;
      8 import java.io.InputStreamReader;
      9 
     10 /**
     11  * Utility class for parsing a bugreport into its sections.
     12  */
     13 public final class BugReportParser {
     14     private static final int BUFFER_SIZE = 8*1024;
     15     private static final String SECTION_HEADER = "------";
     16     private static final int MAX_LINES = 1000; // just in case we miss the end of the section.
     17 
     18     // utility class
     19     private BugReportParser() {}
     20 
     21     public static String extractSystemLogs(InputStream in, String section) throws IOException {
     22         final String sectionWithHeader = SECTION_HEADER + " " + section;
     23         StringBuilder sb = new StringBuilder();
     24         // open a reader around the provided inputstream.
     25         BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"), BUFFER_SIZE);
     26         boolean inSection = false;
     27         int numLines = 0;
     28         // read file contents.  loop until we get to the appropriate section header.
     29         // once we reach that header, accumulate all lines until we get to the next section.
     30         String line = null;
     31         while ((line = reader.readLine()) != null) {
     32             if (inSection) {
     33                 // finish when we get to:
     34                 // -----
     35                 if (line.startsWith(SECTION_HEADER) || (numLines > MAX_LINES)) {
     36                     break;
     37                 }
     38                 sb.append(line);
     39                 sb.append("\n");
     40                 ++numLines;
     41             } else if (line.startsWith(sectionWithHeader)) {
     42                 sb.append(line);
     43                 sb.append("\n");
     44                 inSection = true;
     45             }
     46         }
     47         return sb.toString();
     48     }
     49 }
     50