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