ApplicationErrorReport.java revision fd0bdcc344488df468ae6d7e89a32febd4bfe300
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; 22f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 23f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski/** 24f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Describes an application error. 25f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * 26f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * A report has a type, which is one of 27f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * <ul> 28f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * <li> {@link #TYPE_CRASH} application crash. Information about the crash 29f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * is stored in {@link #crashInfo}. 30f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * <li> {@link #TYPE_ANR} application not responding. Information about the 31f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * ANR is stored in {@link #anrInfo}. 32f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * <li> {@link #TYPE_NONE} uninitialized instance of {@link ApplicationErrorReport}. 33f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * </ul> 34f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * 35f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * @hide 36f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 37f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 38f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazskipublic class ApplicationErrorReport implements Parcelable { 39f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 40f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Uninitialized error report. 41f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 42f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public static final int TYPE_NONE = 0; 43f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 44f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 45f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * An error report about an application crash. 46f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 47f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public static final int TYPE_CRASH = 1; 48f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 49f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 50f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * An error report about an application that's not responding. 51f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 52f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public static final int TYPE_ANR = 2; 53f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 54f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 55f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Type of this report. Can be one of {@link #TYPE_NONE}, 56f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * {@link #TYPE_CRASH} or {@link #TYPE_ANR}. 57f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 58f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public int type; 59f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 60f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 61f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Package name of the application. 62f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 63f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String packageName; 64f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 65f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 66f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Package name of the application which installed the application this 67f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * report pertains to. 68f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * This identifies which Market the application came from. 69f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 70f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String installerPackageName; 71f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 72f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 73f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Process name of the application. 74f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 75f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String processName; 76f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 77f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 78f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Time at which the error occurred. 79f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 80f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public long time; 81f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 82f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 83f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * If this report is of type {@link #TYPE_CRASH}, contains an instance 84f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * of CrashInfo describing the crash; otherwise null. 85f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 86f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public CrashInfo crashInfo; 87f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 88f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 89f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * If this report is of type {@link #TYPE_ANR}, contains an instance 90f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * of AnrInfo describing the ANR; otherwise null. 91f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 92f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public AnrInfo anrInfo; 93f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 94f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 95f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Create an uninitialized instance of {@link ApplicationErrorReport}. 96f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 97f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public ApplicationErrorReport() { 98f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 99f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 100f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 101f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Create an instance of {@link ApplicationErrorReport} initialized from 102f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * a parcel. 103f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 104f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski ApplicationErrorReport(Parcel in) { 10528b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski readFromParcel(in); 106f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 107f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 108f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public void writeToParcel(Parcel dest, int flags) { 109f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeInt(type); 110f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(packageName); 111f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(installerPackageName); 112f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(processName); 113f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeLong(time); 114f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 115f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski switch (type) { 116f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski case TYPE_CRASH: 117f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski crashInfo.writeToParcel(dest, flags); 118f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski break; 119f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski case TYPE_ANR: 120f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski anrInfo.writeToParcel(dest, flags); 121f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski break; 122f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 123f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 124f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 125fd0bdcc344488df468ae6d7e89a32febd4bfe300Jacek Surazski public void readFromParcel(Parcel in) { 12628b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski type = in.readInt(); 12728b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski packageName = in.readString(); 12828b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski installerPackageName = in.readString(); 12928b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski processName = in.readString(); 13028b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski time = in.readLong(); 13128b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski 13228b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski switch (type) { 13328b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski case TYPE_CRASH: 13428b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski crashInfo = new CrashInfo(in); 13528b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski anrInfo = null; 13628b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski break; 13728b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski case TYPE_ANR: 13828b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski anrInfo = new AnrInfo(in); 13928b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski crashInfo = null; 14028b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski break; 14128b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski } 14228b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski } 14328b0e5d06a04f6fa13edbb28de1dd226a158f724Jacek Surazski 144f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 145f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Describes an application crash. 146f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 147f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public static class CrashInfo { 148f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 149f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Class name of the exception that caused the crash. 150f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 151f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String exceptionClassName; 152f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 153f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 154f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * File which the exception was thrown from. 155f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 156f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String throwFileName; 157f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 158f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 159f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Class which the exception was thrown from. 160f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 161f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String throwClassName; 162f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 163f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 164f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Method which the exception was thrown from. 165f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 166f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String throwMethodName; 167f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 168f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 169f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Stack trace. 170f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 171f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String stackTrace; 172f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 173f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 174f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Create an uninitialized instance of CrashInfo. 175f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 176f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public CrashInfo() { 177f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 178f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 179f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 180f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Create an instance of CrashInfo initialized from a Parcel. 181f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 182f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public CrashInfo(Parcel in) { 183f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski exceptionClassName = in.readString(); 184f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski throwFileName = in.readString(); 185f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski throwClassName = in.readString(); 186f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski throwMethodName = in.readString(); 187f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski stackTrace = in.readString(); 188f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 189f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 190f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 191f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Save a CrashInfo instance to a parcel. 192f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 193f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public void writeToParcel(Parcel dest, int flags) { 194f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(exceptionClassName); 195f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(throwFileName); 196f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(throwClassName); 197f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(throwMethodName); 198f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(stackTrace); 199f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 200f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 201f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 202f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Dump a CrashInfo instance to a Printer. 203f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 204f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public void dump(Printer pw, String prefix) { 205f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "exceptionClassName: " + exceptionClassName); 206f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "throwFileName: " + throwFileName); 207f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "throwClassName: " + throwClassName); 208f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "throwMethodName: " + throwMethodName); 209f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "stackTrace: " + stackTrace); 210f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 211f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 212f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 213f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 214f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Describes an application not responding error. 215f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 216f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public static class AnrInfo { 217f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 218f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Activity name. 219f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 220f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String activity; 221f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 222f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 223f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Description of the operation that timed out. 224f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 225f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String cause; 226f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 227f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 228f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Additional info, including CPU stats. 229f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 230f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public String info; 231f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 232f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 233f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Create an uninitialized instance of AnrInfo. 234f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 235f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public AnrInfo() { 236f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 237f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 238f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 239f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Create an instance of AnrInfo initialized from a Parcel. 240f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 241f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public AnrInfo(Parcel in) { 242f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski activity = in.readString(); 243f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski cause = in.readString(); 244f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski info = in.readString(); 245f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 246f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 247f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 248f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Save an AnrInfo instance to a parcel. 249f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 250f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public void writeToParcel(Parcel dest, int flags) { 251f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(activity); 252f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(cause); 253f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski dest.writeString(info); 254f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 255f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 256f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 257f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Dump an AnrInfo instance to a Printer. 258f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 259f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public void dump(Printer pw, String prefix) { 260f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "activity: " + activity); 261f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "cause: " + cause); 262f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "info: " + info); 263f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 264f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 265f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 266f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public static final Parcelable.Creator<ApplicationErrorReport> CREATOR 267f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski = new Parcelable.Creator<ApplicationErrorReport>() { 268f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public ApplicationErrorReport createFromParcel(Parcel source) { 269f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski return new ApplicationErrorReport(source); 270f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 271f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 272f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public ApplicationErrorReport[] newArray(int size) { 273f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski return new ApplicationErrorReport[size]; 274f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 275f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski }; 276f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 277f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public int describeContents() { 278f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski return 0; 279f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 280f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 281f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski /** 282f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski * Dump the report to a Printer. 283f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski */ 284f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski public void dump(Printer pw, String prefix) { 285f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "type: " + type); 286f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "packageName: " + packageName); 287f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "installerPackageName: " + installerPackageName); 288f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "processName: " + processName); 289f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(prefix + "time: " + time); 290f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 291f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski switch (type) { 292f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski case TYPE_CRASH: 293f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski crashInfo.dump(pw, prefix); 294f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski break; 295f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski case TYPE_ANR: 296f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski anrInfo.dump(pw, prefix); 297f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski break; 298f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 299f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 300f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski} 301