| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  * This file is part of Adblock Plus <http://adblockplus.org/>, |    2  * This file is part of Adblock Plus <http://adblockplus.org/>, | 
|    3  * Copyright (C) 2006-2014 Eyeo GmbH |    3  * Copyright (C) 2006-2014 Eyeo GmbH | 
|    4  * |    4  * | 
|    5  * Adblock Plus is free software: you can redistribute it and/or modify |    5  * Adblock Plus is free software: you can redistribute it and/or modify | 
|    6  * it under the terms of the GNU General Public License version 3 as |    6  * it under the terms of the GNU General Public License version 3 as | 
|    7  * published by the Free Software Foundation. |    7  * published by the Free Software Foundation. | 
|    8  * |    8  * | 
|    9  * Adblock Plus is distributed in the hope that it will be useful, |    9  * Adblock Plus is distributed in the hope that it will be useful, | 
|   10  * but WITHOUT ANY WARRANTY; without even the implied warranty of |   10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
|   39 import android.view.View; |   39 import android.view.View; | 
|   40 import android.view.Window; |   40 import android.view.Window; | 
|   41 import android.widget.EditText; |   41 import android.widget.EditText; | 
|   42 import android.widget.Toast; |   42 import android.widget.Toast; | 
|   43  |   43  | 
|   44 /** |   44 /** | 
|   45  * Shows crash report dialog asking user to submit crash report together with co
     mments. |   45  * Shows crash report dialog asking user to submit crash report together with co
     mments. | 
|   46  */ |   46  */ | 
|   47 public final class CrashReportDialog extends Activity |   47 public final class CrashReportDialog extends Activity | 
|   48 { |   48 { | 
|   49   private final static String TAG = "CrashReportDialog"; |   49   private static final String TAG = Utils.getTag(CrashReportDialog.class); | 
 |   50  | 
|   50   private String report; |   51   private String report; | 
|   51  |   52  | 
|   52   @Override |   53   @Override | 
|   53   protected void onCreate(Bundle savedInstanceState) |   54   protected void onCreate(final Bundle savedInstanceState) | 
|   54   { |   55   { | 
|   55     super.onCreate(savedInstanceState); |   56     super.onCreate(savedInstanceState); | 
|   56     requestWindowFeature(Window.FEATURE_LEFT_ICON); |   57     requestWindowFeature(Window.FEATURE_LEFT_ICON); | 
|   57     setContentView(R.layout.crashreport); |   58     setContentView(R.layout.crashreport); | 
|   58  |   59  | 
|   59     Bundle extras = getIntent().getExtras(); |   60     final Bundle extras = getIntent().getExtras(); | 
|   60     if (extras == null) |   61     if (extras == null) | 
|   61     { |   62     { | 
|   62       finish(); |   63       finish(); | 
|   63       return; |   64       return; | 
|   64     } |   65     } | 
|   65     report = extras.getString("report"); |   66     report = extras.getString("report"); | 
|   66  |   67  | 
|   67     getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, android.R.d
     rawable.ic_dialog_alert); |   68     getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, android.R.d
     rawable.ic_dialog_alert); | 
|   68   } |   69   } | 
|   69  |   70  | 
|   70   public void onOk(View v) |   71   public void onOk(final View v) | 
|   71   { |   72   { | 
|   72     String comment = ((EditText) findViewById(R.id.comments)).getText().toString
     (); |   73     final String comment = ((EditText) findViewById(R.id.comments)).getText().to
     String(); | 
|   73  |   74  | 
|   74     try |   75     try | 
|   75     { |   76     { | 
|   76       String[] reportLines = report.split(System.getProperty("line.separator")); |   77       final String[] reportLines = report.split(System.getProperty("line.separat
     or")); | 
|   77       int api = Integer.parseInt(reportLines[0]); |   78       final int api = Integer.parseInt(reportLines[0]); | 
|   78       int build = Integer.parseInt(reportLines[1]); |   79       final int build = Integer.parseInt(reportLines[1]); | 
|   79  |   80  | 
|   80       XmlSerializer xmlSerializer = Xml.newSerializer(); |   81       final XmlSerializer xmlSerializer = Xml.newSerializer(); | 
|   81       StringWriter writer = new StringWriter(); |   82       final StringWriter writer = new StringWriter(); | 
|   82  |   83  | 
|   83       xmlSerializer.setOutput(writer); |   84       xmlSerializer.setOutput(writer); | 
|   84       xmlSerializer.startDocument("UTF-8", true); |   85       xmlSerializer.startDocument("UTF-8", true); | 
|   85       xmlSerializer.startTag("", "crashreport"); |   86       xmlSerializer.startTag("", "crashreport"); | 
|   86       xmlSerializer.attribute("", "version", "1"); |   87       xmlSerializer.attribute("", "version", "1"); | 
|   87       xmlSerializer.attribute("", "api", String.valueOf(api)); |   88       xmlSerializer.attribute("", "api", String.valueOf(api)); | 
|   88       xmlSerializer.attribute("", "build", String.valueOf(build)); |   89       xmlSerializer.attribute("", "build", String.valueOf(build)); | 
|   89       xmlSerializer.startTag("", "error"); |   90       xmlSerializer.startTag("", "error"); | 
|   90       xmlSerializer.attribute("", "type", reportLines[2]); |   91       xmlSerializer.attribute("", "type", reportLines[2]); | 
|   91       xmlSerializer.startTag("", "message"); |   92       xmlSerializer.startTag("", "message"); | 
|   92       xmlSerializer.text(reportLines[3]); |   93       xmlSerializer.text(reportLines[3]); | 
|   93       xmlSerializer.endTag("", "message"); |   94       xmlSerializer.endTag("", "message"); | 
|   94       xmlSerializer.startTag("", "stacktrace"); |   95       xmlSerializer.startTag("", "stacktrace"); | 
|   95       Pattern p = Pattern.compile("\\|"); |   96       final Pattern p = Pattern.compile("\\|"); | 
|   96       boolean hasCause = false; |   97       boolean hasCause = false; | 
|   97       int i = 4; |   98       int i = 4; | 
|   98       while (i < reportLines.length) |   99       while (i < reportLines.length) | 
|   99       { |  100       { | 
|  100         if ("cause".equals(reportLines[i])) |  101         if ("cause".equals(reportLines[i])) | 
|  101         { |  102         { | 
|  102           xmlSerializer.endTag("", "stacktrace"); |  103           xmlSerializer.endTag("", "stacktrace"); | 
|  103           xmlSerializer.startTag("", "cause"); |  104           xmlSerializer.startTag("", "cause"); | 
|  104           hasCause = true; |  105           hasCause = true; | 
|  105           i++; |  106           i++; | 
|  106           xmlSerializer.attribute("", "type", reportLines[i]); |  107           xmlSerializer.attribute("", "type", reportLines[i]); | 
|  107           i++; |  108           i++; | 
|  108           xmlSerializer.startTag("", "message"); |  109           xmlSerializer.startTag("", "message"); | 
|  109           xmlSerializer.text(reportLines[i]); |  110           xmlSerializer.text(reportLines[i]); | 
|  110           i++; |  111           i++; | 
|  111           xmlSerializer.endTag("", "message"); |  112           xmlSerializer.endTag("", "message"); | 
|  112           xmlSerializer.startTag("", "stacktrace"); |  113           xmlSerializer.startTag("", "stacktrace"); | 
|  113           continue; |  114           continue; | 
|  114         } |  115         } | 
|  115         Log.e(TAG, "Line: " + reportLines[i]); |  116         Log.e(TAG, "Line: " + reportLines[i]); | 
|  116         String[] element = TextUtils.split(reportLines[i], p); |  117         final String[] element = TextUtils.split(reportLines[i], p); | 
|  117         xmlSerializer.startTag("", "frame"); |  118         xmlSerializer.startTag("", "frame"); | 
|  118         xmlSerializer.attribute("", "class", element[0]); |  119         xmlSerializer.attribute("", "class", element[0]); | 
|  119         xmlSerializer.attribute("", "method", element[1]); |  120         xmlSerializer.attribute("", "method", element[1]); | 
|  120         xmlSerializer.attribute("", "isnative", element[2]); |  121         xmlSerializer.attribute("", "isnative", element[2]); | 
|  121         xmlSerializer.attribute("", "file", element[3]); |  122         xmlSerializer.attribute("", "file", element[3]); | 
|  122         xmlSerializer.attribute("", "line", element[4]); |  123         xmlSerializer.attribute("", "line", element[4]); | 
|  123         xmlSerializer.endTag("", "frame"); |  124         xmlSerializer.endTag("", "frame"); | 
|  124         i++; |  125         i++; | 
|  125       } |  126       } | 
|  126       xmlSerializer.endTag("", "stacktrace"); |  127       xmlSerializer.endTag("", "stacktrace"); | 
|  127       if (hasCause) |  128       if (hasCause) | 
|  128         xmlSerializer.endTag("", "cause"); |  129         xmlSerializer.endTag("", "cause"); | 
|  129       xmlSerializer.endTag("", "error"); |  130       xmlSerializer.endTag("", "error"); | 
|  130       xmlSerializer.startTag("", "comment"); |  131       xmlSerializer.startTag("", "comment"); | 
|  131       xmlSerializer.text(comment); |  132       xmlSerializer.text(comment); | 
|  132       xmlSerializer.endTag("", "comment"); |  133       xmlSerializer.endTag("", "comment"); | 
|  133       xmlSerializer.endTag("", "crashreport"); |  134       xmlSerializer.endTag("", "crashreport"); | 
|  134       xmlSerializer.endDocument(); |  135       xmlSerializer.endDocument(); | 
|  135  |  136  | 
|  136       String xml = writer.toString(); |  137       final String xml = writer.toString(); | 
|  137       HttpClient httpclient = new DefaultHttpClient(); |  138       final HttpClient httpclient = new DefaultHttpClient(); | 
|  138       HttpPost httppost = new HttpPost(getString(R.string.crash_report_url)); |  139       final HttpPost httppost = new HttpPost(getString(R.string.crash_report_url
     )); | 
|  139       httppost.setHeader("Content-Type", "text/xml; charset=UTF-8"); |  140       httppost.setHeader("Content-Type", "text/xml; charset=UTF-8"); | 
|  140       httppost.addHeader("X-Adblock-Plus", "yes"); |  141       httppost.addHeader("X-Adblock-Plus", "yes"); | 
|  141       httppost.setEntity(new StringEntity(xml)); |  142       httppost.setEntity(new StringEntity(xml)); | 
|  142       HttpResponse httpresponse = httpclient.execute(httppost); |  143       final HttpResponse httpresponse = httpclient.execute(httppost); | 
|  143       StatusLine statusLine = httpresponse.getStatusLine(); |  144       final StatusLine statusLine = httpresponse.getStatusLine(); | 
|  144       Log.e(TAG, statusLine.getStatusCode() + " " + statusLine.getReasonPhrase()
     ); |  145       Log.e(TAG, statusLine.getStatusCode() + " " + statusLine.getReasonPhrase()
     ); | 
|  145       Log.e(TAG, EntityUtils.toString(httpresponse.getEntity())); |  146       Log.e(TAG, EntityUtils.toString(httpresponse.getEntity())); | 
|  146       if (statusLine.getStatusCode() != 200) |  147       if (statusLine.getStatusCode() != 200) | 
|  147         throw new ClientProtocolException(); |  148         throw new ClientProtocolException(); | 
|  148       String response = EntityUtils.toString(httpresponse.getEntity()); |  149       final String response = EntityUtils.toString(httpresponse.getEntity()); | 
|  149       if (!"saved".equals(response)) |  150       if (!"saved".equals(response)) | 
|  150         throw new ClientProtocolException(); |  151         throw new ClientProtocolException(); | 
|  151       deleteFile(CrashHandler.REPORT_FILE); |  152       deleteFile(CrashHandler.REPORT_FILE); | 
|  152     } |  153     } | 
|  153     catch (ClientProtocolException e) |  154     catch (final ClientProtocolException e) | 
|  154     { |  155     { | 
|  155       Log.e(TAG, "Failed to submit a crash", e); |  156       Log.e(TAG, "Failed to submit a crash", e); | 
|  156       Toast.makeText(this, R.string.msg_crash_submission_failure, Toast.LENGTH_L
     ONG).show(); |  157       Toast.makeText(this, R.string.msg_crash_submission_failure, Toast.LENGTH_L
     ONG).show(); | 
|  157     } |  158     } | 
|  158     catch (IOException e) |  159     catch (final IOException e) | 
|  159     { |  160     { | 
|  160       Log.e(TAG, "Failed to submit a crash", e); |  161       Log.e(TAG, "Failed to submit a crash", e); | 
|  161       Toast.makeText(this, R.string.msg_crash_submission_failure, Toast.LENGTH_L
     ONG).show(); |  162       Toast.makeText(this, R.string.msg_crash_submission_failure, Toast.LENGTH_L
     ONG).show(); | 
|  162     } |  163     } | 
|  163     catch (Exception e) |  164     catch (final Exception e) | 
|  164     { |  165     { | 
|  165       Log.e(TAG, "Failed to create report", e); |  166       Log.e(TAG, "Failed to create report", e); | 
|  166       // Assuming corrupted report file, just silently deleting it |  167       // Assuming corrupted report file, just silently deleting it | 
|  167       deleteFile(CrashHandler.REPORT_FILE); |  168       deleteFile(CrashHandler.REPORT_FILE); | 
|  168     } |  169     } | 
|  169     finish(); |  170     finish(); | 
|  170   } |  171   } | 
|  171  |  172  | 
|  172   public void onCancel(View v) |  173   public void onCancel(final View v) | 
|  173   { |  174   { | 
|  174     deleteFile(CrashHandler.REPORT_FILE); |  175     deleteFile(CrashHandler.REPORT_FILE); | 
|  175     finish(); |  176     finish(); | 
|  176   } |  177   } | 
|  177 } |  178 } | 
| OLD | NEW |