17f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee/*
27f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * Copyright (C) 2014 The Android Open Source Project
37f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee *
47f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * Licensed under the Apache License, Version 2.0 (the "License");
57f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * you may not use this file except in compliance with the License.
67f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * You may obtain a copy of the License at
77f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee *
87f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee *      http://www.apache.org/licenses/LICENSE-2.0
97f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee *
107f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * Unless required by applicable law or agreed to in writing, software
117f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * distributed under the License is distributed on an "AS IS" BASIS,
127f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * See the License for the specific language governing permissions and
147f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * limitations under the License.
157f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee */
167f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
177f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Leepackage android.telecom;
187f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
190e094d926c306c3667bcdf6f23c52cc7181f25f3Evan Charltonimport android.annotation.SystemApi;
207f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Leeimport android.os.Parcel;
217f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Leeimport android.os.Parcelable;
227f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Leeimport android.media.ToneGenerator;
237f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Leeimport android.text.TextUtils;
247f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
257f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Leeimport java.util.Objects;
267f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
277f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee/**
287f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee * Describes the cause of a disconnected call. This always includes a code describing the generic
29d9e614fd56677bc39481fce115731d55ab72171aSantos Cordon * cause of the disconnect. Optionally, it may include a label and/or description to display to the
30d9e614fd56677bc39481fce115731d55ab72171aSantos Cordon * user. It is the responsibility of the {@link ConnectionService} to provide localized versions of
31d9e614fd56677bc39481fce115731d55ab72171aSantos Cordon * the label and description. It also may contain a reason for the disconnect, which is intended for
32d9e614fd56677bc39481fce115731d55ab72171aSantos Cordon * logging and not for display to the user.
330e094d926c306c3667bcdf6f23c52cc7181f25f3Evan Charlton * @hide
347f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee */
350e094d926c306c3667bcdf6f23c52cc7181f25f3Evan Charlton@SystemApi
367f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Leepublic final class DisconnectCause implements Parcelable {
377f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
387f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /** Disconnected because of an unknown or unspecified reason. */
397f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public static final int UNKNOWN = 0;
407f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /** Disconnected because there was an error, such as a problem with the network. */
417f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public static final int ERROR = 1;
427f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /** Disconnected because of a local user-initiated action, such as hanging up. */
437f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public static final int LOCAL = 2;
447f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /**
457f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * Disconnected because of a remote user-initiated action, such as the other party hanging up
467f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * up.
477f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     */
487f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public static final int REMOTE = 3;
497f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /** Disconnected because it has been canceled. */
507f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public static final int CANCELED = 4;
517f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /** Disconnected because there was no response to an incoming call. */
527f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public static final int MISSED = 5;
537f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /** Disconnected because the user rejected an incoming call. */
547f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public static final int REJECTED = 6;
557f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /** Disconnected because the other party was busy. */
567f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public static final int BUSY = 7;
577f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /**
587f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * Disconnected because of a restriction on placing the call, such as dialing in airplane
597f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * mode.
607f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     */
617f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public static final int RESTRICTED = 8;
627f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /** Disconnected for reason not described by other disconnect codes. */
637f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public static final int OTHER = 9;
647a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal    /**
657a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal     * Disconnected because the connection manager did not support the call. The call will be tried
667a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal     * again without a connection manager. See {@link PhoneAccount#CAPABILITY_CONNECTION_MANAGER}.
677a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal     */
687a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal    public static final int CONNECTION_MANAGER_NOT_SUPPORTED = 10;
697f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
707f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    private int mDisconnectCode;
717f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    private CharSequence mDisconnectLabel;
727f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    private CharSequence mDisconnectDescription;
737f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    private String mDisconnectReason;
747f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    private int mToneToPlay;
757f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
767f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /**
777f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * Creates a new DisconnectCause.
787f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     *
797f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * @param code The code for the disconnect cause.
807f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     */
817f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public DisconnectCause(int code) {
827f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        this(code, null, null, null, ToneGenerator.TONE_UNKNOWN);
837f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    }
847f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
857f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /**
867f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * Creates a new DisconnectCause.
877f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     *
887f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * @param code The code for the disconnect cause.
897f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * @param reason The reason for the disconnect.
907f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     */
917f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public DisconnectCause(int code, String reason) {
927f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        this(code, null, null, reason, ToneGenerator.TONE_UNKNOWN);
937f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    }
947f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
957f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /**
967f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * Creates a new DisconnectCause.
97d9e614fd56677bc39481fce115731d55ab72171aSantos Cordon     *
98f4cf77c5dc0348d3f7561f48a5a751cb823cd271Nancy Chen     * @param label The localized label to show to the user to explain the disconnect.
99f4cf77c5dc0348d3f7561f48a5a751cb823cd271Nancy Chen     * @param code The code for the disconnect cause.
100f4cf77c5dc0348d3f7561f48a5a751cb823cd271Nancy Chen     * @param description The localized description to show to the user to explain the disconnect.
101f4cf77c5dc0348d3f7561f48a5a751cb823cd271Nancy Chen     * @param reason The reason for the disconnect.
102f4cf77c5dc0348d3f7561f48a5a751cb823cd271Nancy Chen     */
103f4cf77c5dc0348d3f7561f48a5a751cb823cd271Nancy Chen    public DisconnectCause(int code, CharSequence label, CharSequence description, String reason) {
104f4cf77c5dc0348d3f7561f48a5a751cb823cd271Nancy Chen        this(code, label, description, reason, ToneGenerator.TONE_UNKNOWN);
105f4cf77c5dc0348d3f7561f48a5a751cb823cd271Nancy Chen    }
106f4cf77c5dc0348d3f7561f48a5a751cb823cd271Nancy Chen
107f4cf77c5dc0348d3f7561f48a5a751cb823cd271Nancy Chen    /**
108f4cf77c5dc0348d3f7561f48a5a751cb823cd271Nancy Chen     * Creates a new DisconnectCause.
1097f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     *
1107f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * @param code The code for the disconnect cause.
1117f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * @param label The localized label to show to the user to explain the disconnect.
1127f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * @param description The localized description to show to the user to explain the disconnect.
1137f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * @param reason The reason for the disconnect.
1147f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * @param toneToPlay The tone to play on disconnect, as defined in {@link ToneGenerator}.
1157f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     */
1167f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public DisconnectCause(int code, CharSequence label, CharSequence description, String reason,
1177f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            int toneToPlay) {
1187f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        mDisconnectCode = code;
1197f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        mDisconnectLabel = label;
1207f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        mDisconnectDescription = description;
1217f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        mDisconnectReason = reason;
1227f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        mToneToPlay = toneToPlay;
1237f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    }
1247f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
1257f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /**
1267f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * Returns the code for the reason for this disconnect.
1277f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     *
1287f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * @return The disconnect code.
1297f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     */
1307f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public int getCode() {
1317f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        return mDisconnectCode;
1327f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    }
1337f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
1347f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /**
1357f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * Returns a short label which explains the reason for the disconnect cause and is for display
1367f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * in the user interface. The {@link ConnectionService } is responsible for providing and
1377f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * localizing this label. If there is no string provided, returns null.
1387f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     *
1397f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * @return The disconnect label.
1407f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     */
1417f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public CharSequence getLabel() {
1427f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        return mDisconnectLabel;
1437f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    }
1447f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
1457f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /**
1467f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * Returns a description which explains the reason for the disconnect cause and is for display
1477f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * in the user interface. The {@link ConnectionService } is responsible for providing and
1487f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * localizing this message. If there is no string provided, returns null.
1497f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     *
1507f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * @return The disconnect description.
1517f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     */
1527f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public CharSequence getDescription() {
1537f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        return mDisconnectDescription;
1547f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    }
1557f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
1567f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /**
1577f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * Returns an explanation of the reason for the disconnect. This is not intended for display to
1587f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * the user and is used mainly for logging.
1597f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     *
1607f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * @return The disconnect reason.
1617f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     */
1627f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public String getReason() {
1637f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        return mDisconnectReason;
1647f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    }
1657f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
1667f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    /**
1677f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * Returns the tone to play when disconnected.
1687f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     *
1697f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     * @return the tone as defined in {@link ToneGenerator} to play when disconnected.
1707f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee     */
1717f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public int getTone() {
1727f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        return mToneToPlay;
1737f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    }
1747f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
1757f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public static final Creator<DisconnectCause> CREATOR = new Creator<DisconnectCause>() {
1767f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        @Override
1777f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        public DisconnectCause createFromParcel(Parcel source) {
1787f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            int code = source.readInt();
1797f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            CharSequence label = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
1807f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            CharSequence description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
1817f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            String reason = source.readString();
1827f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            int tone = source.readInt();
1837f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            return new DisconnectCause(code, label, description, reason, tone);
1847f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        }
1857f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
1867f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        @Override
1877f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        public DisconnectCause[] newArray(int size) {
1887f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            return new DisconnectCause[size];
1897f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        }
1907f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    };
1917f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
1927f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    @Override
1937f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public void writeToParcel(Parcel destination, int flags) {
1947f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        destination.writeInt(mDisconnectCode);
1957f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        TextUtils.writeToParcel(mDisconnectLabel, destination, flags);
1967f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        TextUtils.writeToParcel(mDisconnectDescription, destination, flags);
1977f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        destination.writeString(mDisconnectReason);
1987f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        destination.writeInt(mToneToPlay);
1997f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    }
2007f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
2017f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    @Override
2027f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public int describeContents() {
2037f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        return 0;
2047f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    }
2057f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
2067f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    @Override
2077f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public int hashCode() {
2087f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        return Objects.hashCode(mDisconnectCode)
2097f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                + Objects.hashCode(mDisconnectLabel)
2107f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                + Objects.hashCode(mDisconnectDescription)
2117f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                + Objects.hashCode(mDisconnectReason)
2127f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                + Objects.hashCode(mToneToPlay);
2137f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    }
2147f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
2157f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    @Override
2167f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public boolean equals(Object o) {
2177f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        if (o instanceof DisconnectCause) {
2187f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            DisconnectCause d = (DisconnectCause) o;
2197f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            return Objects.equals(mDisconnectCode, d.getCode())
2207f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                    && Objects.equals(mDisconnectLabel, d.getLabel())
2217f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                    && Objects.equals(mDisconnectDescription, d.getDescription())
2227f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                    && Objects.equals(mDisconnectReason, d.getReason())
2237f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                    && Objects.equals(mToneToPlay, d.getTone());
2247f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        }
2257f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        return false;
2267f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    }
2277f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee
2287f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    @Override
2297f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public String toString() {
2307f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        String code = "";
2317a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal        switch (mDisconnectCode) {
2327a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal            case UNKNOWN:
2337a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal                code = "UNKNOWN";
2347a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal                break;
2357f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            case ERROR:
2367f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                code = "ERROR";
2377f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                break;
2387f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            case LOCAL:
2397f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                code = "LOCAL";
2407f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                break;
2417f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            case REMOTE:
2427f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                code = "REMOTE";
2437f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                break;
2447a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal            case CANCELED:
2457a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal                code = "CANCELED";
2467a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal                break;
2477f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            case MISSED:
2487f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                code = "MISSED";
2497f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                break;
2507f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            case REJECTED:
2517f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                code = "REJECTED";
2527f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                break;
2537f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            case BUSY:
2547f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                code = "BUSY";
2557f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                break;
2567f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            case RESTRICTED:
2577f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                code = "RESTRICTED";
2587f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                break;
2597f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            case OTHER:
2607f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                code = "OTHER";
2617f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                break;
2627a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal            case CONNECTION_MANAGER_NOT_SUPPORTED:
2637a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal                code = "CONNECTION_MANAGER_NOT_SUPPORTED";
2647a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal                break;
2657f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            default:
2667a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal                code = "invalid code: " + mDisconnectCode;
2677a69c9277ffde11d862f1bf4fcb92e21a3f98c28Sailesh Nepal                break;
2687f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        }
2697f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        String label = mDisconnectLabel == null ? "" : mDisconnectLabel.toString();
2707f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        String description = mDisconnectDescription == null
2717f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                ? "" : mDisconnectDescription.toString();
2727f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        String reason = mDisconnectReason == null ? "" : mDisconnectReason;
2737f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        return "DisconnectCause [ Code: (" + code + ")"
2747f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                + " Label: (" + label + ")"
2757f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                + " Description: (" + description + ")"
2767f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                + " Reason: (" + reason + ")"
2777f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                + " Tone: (" + mToneToPlay + ") ]";
2787f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    }
2797f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee}
280