ApplicationErrorReport.java revision e0ee6efb1e5bc6cf219555e333635ce98531bc85
1f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski/* 2f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Copyright (C) 2008 The Android Open Source Project 3f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * 4f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Licensed under the Apache License, Version 2.0 (the "License"); 5f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * you may not use this file except in compliance with the License. 6f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * You may obtain a copy of the License at 7f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * 8f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * http://www.apache.org/licenses/LICENSE-2.0 9f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * 10f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Unless required by applicable law or agreed to in writing, software 11f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * distributed under the License is distributed on an "AS IS" BASIS, 12f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * See the License for the specific language governing permissions and 14f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * limitations under the License. 15f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 16f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 17f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazskipackage android.app; 18f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 19f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazskiimport android.os.Parcel; 20f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazskiimport android.os.Parcelable; 21f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazskiimport android.util.Printer; 22b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnorimport java.io.PrintWriter; 23b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnorimport java.io.StringWriter; 24f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 25f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski/** 26f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Describes an application error. 27f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * 28f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * A report has a type, which is one of 29f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * <ul> 30f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * <li> {@link #TYPE_CRASH} application crash. Information about the crash 31f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * is stored in {@link #crashInfo}. 32f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * <li> {@link #TYPE_ANR} application not responding. Information about the 33f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * ANR is stored in {@link #anrInfo}. 34f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * <li> {@link #TYPE_NONE} uninitialized instance of {@link ApplicationErrorReport}. 35f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * </ul> 36f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * 37f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * @hide 38f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 39f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 40f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazskipublic class ApplicationErrorReport implements Parcelable { 41f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 42f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Uninitialized error report. 43f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 44f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public static final int TYPE_NONE = 0; 45f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 46f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 47f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * An error report about an application crash. 48f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 49f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public static final int TYPE_CRASH = 1; 50f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 51f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 52f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * An error report about an application that's not responding. 53f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 54f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public static final int TYPE_ANR = 2; 55f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 56f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 57f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Type of this report. Can be one of {@link #TYPE_NONE}, 58f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * {@link #TYPE_CRASH} or {@link #TYPE_ANR}. 59f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 60f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public int type; 61f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 62f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 63f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Package name of the application. 64f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 65f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String packageName; 66f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 67f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 68f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Package name of the application which installed the application this 69f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * report pertains to. 70f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * This identifies which Market the application came from. 71f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 72f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String installerPackageName; 73f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 74f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 75f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Process name of the application. 76f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 77f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String processName; 78f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 79f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 80f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Time at which the error occurred. 81f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 82f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public long time; 83f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 84f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 85e0ee6efb1e5bc6cf219555e333635ce98531bc85Jacek Surazski * Set if the app is on the system image. 86e0ee6efb1e5bc6cf219555e333635ce98531bc85Jacek Surazski */ 87e0ee6efb1e5bc6cf219555e333635ce98531bc85Jacek Surazski public boolean systemApp; 88e0ee6efb1e5bc6cf219555e333635ce98531bc85Jacek Surazski 89e0ee6efb1e5bc6cf219555e333635ce98531bc85Jacek Surazski /** 90f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * If this report is of type {@link #TYPE_CRASH}, contains an instance 91f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * of CrashInfo describing the crash; otherwise null. 92f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 93f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public CrashInfo crashInfo; 94f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 95f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 96f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * If this report is of type {@link #TYPE_ANR}, contains an instance 97f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * of AnrInfo describing the ANR; otherwise null. 98f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 99f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public AnrInfo anrInfo; 100f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 101f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 102f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Create an uninitialized instance of {@link ApplicationErrorReport}. 103f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 104f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public ApplicationErrorReport() { 105f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 106f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 107f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 108f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Create an instance of {@link ApplicationErrorReport} initialized from 109f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * a parcel. 110f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 111f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski ApplicationErrorReport(Parcel in) { 11228b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski readFromParcel(in); 113f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 114f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 115f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public void writeToParcel(Parcel dest, int flags) { 116f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeInt(type); 117f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(packageName); 118f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(installerPackageName); 119f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(processName); 120f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeLong(time); 121e0ee6efb1e5bc6cf219555e333635ce98531bc85Jacek Surazski dest.writeInt(systemApp ? 1 : 0); 122f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 123f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski switch (type) { 124f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski case TYPE_CRASH: 125f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski crashInfo.writeToParcel(dest, flags); 126f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski break; 127f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski case TYPE_ANR: 128f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski anrInfo.writeToParcel(dest, flags); 129f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski break; 130f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 131f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 132f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 133fd0bdcc344488df468ae6d7e89a32febd4bfe300Jacek Surazski public void readFromParcel(Parcel in) { 13428b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski type = in.readInt(); 13528b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski packageName = in.readString(); 13628b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski installerPackageName = in.readString(); 13728b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski processName = in.readString(); 13828b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski time = in.readLong(); 139e0ee6efb1e5bc6cf219555e333635ce98531bc85Jacek Surazski systemApp = in.readInt() == 1; 14028b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski 14128b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski switch (type) { 14228b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski case TYPE_CRASH: 14328b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski crashInfo = new CrashInfo(in); 14428b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski anrInfo = null; 14528b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski break; 14628b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski case TYPE_ANR: 14728b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski anrInfo = new AnrInfo(in); 14828b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski crashInfo = null; 14928b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski break; 15028b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski } 15128b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski } 15228b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski 153f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 154f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Describes an application crash. 155f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 156f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public static class CrashInfo { 157f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 158f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Class name of the exception that caused the crash. 159f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 160f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String exceptionClassName; 161f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 162f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 163f829a78f6c78141d2cf8074f00fcded37fbf9007Jacek Surazski * Message stored in the exception. 164f829a78f6c78141d2cf8074f00fcded37fbf9007Jacek Surazski */ 165f829a78f6c78141d2cf8074f00fcded37fbf9007Jacek Surazski public String exceptionMessage; 166f829a78f6c78141d2cf8074f00fcded37fbf9007Jacek Surazski 167f829a78f6c78141d2cf8074f00fcded37fbf9007Jacek Surazski /** 168f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * File which the exception was thrown from. 169f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 170f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String throwFileName; 171f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 172f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 173f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Class which the exception was thrown from. 174f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 175f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String throwClassName; 176f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 177f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 178f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Method which the exception was thrown from. 179f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 180f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String throwMethodName; 181f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 182f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 1835a12373277f6ce14101f08580bc4f08f9a3d7c50Jacek Surazski * Line number the exception was thrown from. 1845a12373277f6ce14101f08580bc4f08f9a3d7c50Jacek Surazski */ 1855a12373277f6ce14101f08580bc4f08f9a3d7c50Jacek Surazski public int throwLineNumber; 1865a12373277f6ce14101f08580bc4f08f9a3d7c50Jacek Surazski 1875a12373277f6ce14101f08580bc4f08f9a3d7c50Jacek Surazski /** 188f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Stack trace. 189f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 190f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String stackTrace; 191f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 192f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 193f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Create an uninitialized instance of CrashInfo. 194f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 195f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public CrashInfo() { 196f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 197f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 198f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 199b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor * Create an instance of CrashInfo initialized from an exception. 200b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor */ 201b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor public CrashInfo(Throwable tr) { 202b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor StringWriter sw = new StringWriter(); 203b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor tr.printStackTrace(new PrintWriter(sw)); 204b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor stackTrace = sw.toString(); 20560d8762413e8daba5f73559786312a9ec5e3b827Dan Egnor exceptionMessage = tr.getMessage(); 206b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor 207b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor // Populate fields with the "root cause" exception 208b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor while (tr.getCause() != null) { 209b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor tr = tr.getCause(); 210b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor String msg = tr.getMessage(); 211b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor if (msg != null && msg.length() > 0) { 212b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor exceptionMessage = msg; 213b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor } 214b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor } 215b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor 216b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor exceptionClassName = tr.getClass().getName(); 217b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor StackTraceElement trace = tr.getStackTrace()[0]; 218b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor throwFileName = trace.getFileName(); 219b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor throwClassName = trace.getClassName(); 220b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor throwMethodName = trace.getMethodName(); 221b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor throwLineNumber = trace.getLineNumber(); 222b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor } 223b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor 224b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor /** 225f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Create an instance of CrashInfo initialized from a Parcel. 226f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 227f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public CrashInfo(Parcel in) { 228f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski exceptionClassName = in.readString(); 229f829a78f6c78141d2cf8074f00fcded37fbf9007Jacek Surazski exceptionMessage = in.readString(); 230f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski throwFileName = in.readString(); 231f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski throwClassName = in.readString(); 232f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski throwMethodName = in.readString(); 2335a12373277f6ce14101f08580bc4f08f9a3d7c50Jacek Surazski throwLineNumber = in.readInt(); 234f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski stackTrace = in.readString(); 235f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 236f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 237f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 238f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Save a CrashInfo instance to a parcel. 239f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 240f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public void writeToParcel(Parcel dest, int flags) { 241f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(exceptionClassName); 242f829a78f6c78141d2cf8074f00fcded37fbf9007Jacek Surazski dest.writeString(exceptionMessage); 243f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(throwFileName); 244f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(throwClassName); 245f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(throwMethodName); 2465a12373277f6ce14101f08580bc4f08f9a3d7c50Jacek Surazski dest.writeInt(throwLineNumber); 247f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(stackTrace); 248f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 249f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 250f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 251f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Dump a CrashInfo instance to a Printer. 252f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 253f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public void dump(Printer pw, String prefix) { 254f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "exceptionClassName: " + exceptionClassName); 255f829a78f6c78141d2cf8074f00fcded37fbf9007Jacek Surazski pw.println(prefix + "exceptionMessage: " + exceptionMessage); 256f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "throwFileName: " + throwFileName); 257f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "throwClassName: " + throwClassName); 258f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "throwMethodName: " + throwMethodName); 2595a12373277f6ce14101f08580bc4f08f9a3d7c50Jacek Surazski pw.println(prefix + "throwLineNumber: " + throwLineNumber); 260f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "stackTrace: " + stackTrace); 261f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 262f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 263f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 264f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 265f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Describes an application not responding error. 266f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 267f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public static class AnrInfo { 268f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 269f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Activity name. 270f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 271f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String activity; 272f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 273f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 274f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Description of the operation that timed out. 275f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 276f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String cause; 277f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 278f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 279f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Additional info, including CPU stats. 280f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 281f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String info; 282f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 283f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 284f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Create an uninitialized instance of AnrInfo. 285f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 286f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public AnrInfo() { 287f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 288f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 289f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 290f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Create an instance of AnrInfo initialized from a Parcel. 291f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 292f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public AnrInfo(Parcel in) { 293f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski activity = in.readString(); 294f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski cause = in.readString(); 295f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski info = in.readString(); 296f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 297f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 298f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 299f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Save an AnrInfo instance to a parcel. 300f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 301f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public void writeToParcel(Parcel dest, int flags) { 302f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(activity); 303f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(cause); 304f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(info); 305f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 306f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 307f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 308f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Dump an AnrInfo instance to a Printer. 309f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 310f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public void dump(Printer pw, String prefix) { 311f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "activity: " + activity); 312f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "cause: " + cause); 313f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "info: " + info); 314f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 315f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 316f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 317f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public static final Parcelable.Creator<ApplicationErrorReport> CREATOR 318f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski = new Parcelable.Creator<ApplicationErrorReport>() { 319f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public ApplicationErrorReport createFromParcel(Parcel source) { 320f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski return new ApplicationErrorReport(source); 321f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 322f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 323f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public ApplicationErrorReport[] newArray(int size) { 324f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski return new ApplicationErrorReport[size]; 325f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 326f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski }; 327f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 328f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public int describeContents() { 329f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski return 0; 330f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 331f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 332f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 333f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Dump the report to a Printer. 334f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 335f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public void dump(Printer pw, String prefix) { 336f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "type: " + type); 337f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "packageName: " + packageName); 338f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "installerPackageName: " + installerPackageName); 339f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "processName: " + processName); 340f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "time: " + time); 341e0ee6efb1e5bc6cf219555e333635ce98531bc85Jacek Surazski pw.println(prefix + "systemApp: " + systemApp); 342f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 343f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski switch (type) { 344f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski case TYPE_CRASH: 345f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski crashInfo.dump(pw, prefix); 346f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski break; 347f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski case TYPE_ANR: 348f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski anrInfo.dump(pw, prefix); 349f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski break; 350f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 351f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 352f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski} 353