17aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta/*
27aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta * Copyright (C) 2014 The Android Open Source Project
37aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta *
47aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta * Licensed under the Apache License, Version 2.0 (the "License");
57aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta * you may not use this file except in compliance with the License.
67aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta * You may obtain a copy of the License at
77aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta *
87aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta *      http://www.apache.org/licenses/LICENSE-2.0
97aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta *
107aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta * Unless required by applicable law or agreed to in writing, software
117aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta * distributed under the License is distributed on an "AS IS" BASIS,
127aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta * See the License for the specific language governing permissions and
147aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta * limitations under the License.
157aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta */
167aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
177aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Guptapackage android.bluetooth;
187aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
197aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Guptaimport android.os.Parcel;
207aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Guptaimport android.os.Parcelable;
2140bb6f3f8fc02600fe24301c11e804196ced3531Sanket Agarwalimport android.os.SystemClock;
227aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
23e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Leeimport java.util.UUID;
24e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee
257aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta/**
267aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta * This class represents a single call, its state and properties.
277aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta * It implements {@link Parcelable} for inter-process message passing.
28a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He *
297aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta * @hide
307aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta */
31cf916d34671f0ab6aad8de24c18e4dc96fb21941Mike Lockwoodpublic final class BluetoothHeadsetClientCall implements Parcelable {
327aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
337aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /* Call state */
347aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
357aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Call is active.
367aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
377aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public static final int CALL_STATE_ACTIVE = 0;
387aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
397aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Call is in held state.
407aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
417aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public static final int CALL_STATE_HELD = 1;
427aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
437aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Outgoing call that is being dialed right now.
447aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
457aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public static final int CALL_STATE_DIALING = 2;
467aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
477aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Outgoing call that remote party has already been alerted about.
487aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
497aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public static final int CALL_STATE_ALERTING = 3;
507aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
517aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Incoming call that can be accepted or rejected.
527aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
537aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public static final int CALL_STATE_INCOMING = 4;
547aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
557aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Waiting call state when there is already an active call.
567aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
577aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public static final int CALL_STATE_WAITING = 5;
587aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
597aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Call that has been held by response and hold
607aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * (see Bluetooth specification for further references).
617aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
627aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public static final int CALL_STATE_HELD_BY_RESPONSE_AND_HOLD = 6;
637aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
647aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Call that has been already terminated and should not be referenced as a valid call.
657aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
667aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public static final int CALL_STATE_TERMINATED = 7;
677aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
68ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood    private final BluetoothDevice mDevice;
697aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    private final int mId;
707aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    private int mState;
717aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    private String mNumber;
727aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    private boolean mMultiParty;
737aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    private final boolean mOutgoing;
74e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee    private final UUID mUUID;
7540bb6f3f8fc02600fe24301c11e804196ced3531Sanket Agarwal    private final long mCreationElapsedMilli;
76843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo    private final boolean mInBandRing;
777aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
787aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
79cf916d34671f0ab6aad8de24c18e4dc96fb21941Mike Lockwood     * Creates BluetoothHeadsetClientCall instance.
807aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
81ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood    public BluetoothHeadsetClientCall(BluetoothDevice device, int id, int state, String number,
82843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo            boolean multiParty, boolean outgoing, boolean inBandRing) {
83843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo        this(device, id, UUID.randomUUID(), state, number, multiParty, outgoing, inBandRing);
84e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee    }
85e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee
86e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee    public BluetoothHeadsetClientCall(BluetoothDevice device, int id, UUID uuid, int state,
87843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo            String number, boolean multiParty, boolean outgoing, boolean inBandRing) {
88ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood        mDevice = device;
897aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        mId = id;
90e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee        mUUID = uuid;
917aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        mState = state;
927aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        mNumber = number != null ? number : "";
937aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        mMultiParty = multiParty;
947aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        mOutgoing = outgoing;
95843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo        mInBandRing = inBandRing;
9640bb6f3f8fc02600fe24301c11e804196ced3531Sanket Agarwal        mCreationElapsedMilli = SystemClock.elapsedRealtime();
977aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    }
987aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
997aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
1007aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Sets call's state.
1017aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     *
1027aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * <p>Note: This is an internal function and shouldn't be exposed</p>
1037aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     *
104a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He     * @param state new call state.
1057aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
1067aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public void setState(int state) {
1077aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        mState = state;
1087aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    }
1097aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
1107aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
1117aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Sets call's number.
1127aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     *
1137aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * <p>Note: This is an internal function and shouldn't be exposed</p>
1147aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     *
115a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He     * @param number String representing phone number.
1167aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
1177aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public void setNumber(String number) {
1187aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        mNumber = number;
1197aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    }
1207aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
1217aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
1227aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Sets this call as multi party call.
1237aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     *
1247aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * <p>Note: This is an internal function and shouldn't be exposed</p>
1257aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     *
126a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He     * @param multiParty if <code>true</code> sets this call as a part of multi party conference.
1277aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
1287aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public void setMultiParty(boolean multiParty) {
1297aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        mMultiParty = multiParty;
1307aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    }
1317aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
1327aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
133ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood     * Gets call's device.
134ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood     *
135ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood     * @return call device.
136ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood     */
137ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood    public BluetoothDevice getDevice() {
138ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood        return mDevice;
139ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood    }
140ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood
141ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood    /**
1427aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Gets call's Id.
1437aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     *
1447aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * @return call id.
1457aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
1467aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public int getId() {
1477aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        return mId;
1487aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    }
1497aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
1507aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
151e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee     * Gets call's UUID.
152e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee     *
153e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee     * @return call uuid
154e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee     * @hide
155e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee     */
156e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee    public UUID getUUID() {
157e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee        return mUUID;
158e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee    }
159e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee
160e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee    /**
1617aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Gets call's current state.
1627aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     *
1637aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * @return state of this particular phone call.
1647aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
1657aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public int getState() {
1667aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        return mState;
1677aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    }
1687aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
1697aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
1707aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Gets call's number.
1717aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     *
1727aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * @return string representing phone number.
1737aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
1747aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public String getNumber() {
1757aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        return mNumber;
1767aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    }
1777aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
1787aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
17940bb6f3f8fc02600fe24301c11e804196ced3531Sanket Agarwal     * Gets call's creation time in millis since epoch.
18040bb6f3f8fc02600fe24301c11e804196ced3531Sanket Agarwal     *
18140bb6f3f8fc02600fe24301c11e804196ced3531Sanket Agarwal     * @return long representing the creation time.
18240bb6f3f8fc02600fe24301c11e804196ced3531Sanket Agarwal     */
18340bb6f3f8fc02600fe24301c11e804196ced3531Sanket Agarwal    public long getCreationElapsedMilli() {
18440bb6f3f8fc02600fe24301c11e804196ced3531Sanket Agarwal        return mCreationElapsedMilli;
18540bb6f3f8fc02600fe24301c11e804196ced3531Sanket Agarwal    }
18640bb6f3f8fc02600fe24301c11e804196ced3531Sanket Agarwal
18740bb6f3f8fc02600fe24301c11e804196ced3531Sanket Agarwal    /**
1887aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Checks if call is an active call in a conference mode (aka multi party).
1897aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     *
190a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He     * @return <code>true</code> if call is a multi party call, <code>false</code> otherwise.
1917aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
1927aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public boolean isMultiParty() {
1937aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        return mMultiParty;
1947aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    }
1957aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
1967aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
1977aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * Checks if this call is an outgoing call.
1987aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     *
199a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He     * @return <code>true</code> if its outgoing call, <code>false</code> otherwise.
2007aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
2017aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public boolean isOutgoing() {
2027aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        return mOutgoing;
2037aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    }
2047aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
205843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo    /**
206843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo     * Checks if the ringtone will be generated by the connected phone
207843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo     *
208843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo     * @return <code>true</code> if in band ring is enabled, <code>false</code> otherwise.
209843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo     */
210843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo    public boolean isInBandRing() {
211843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo        return mInBandRing;
212843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo    }
213843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo
214843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo
2152992cd084cd5cfd9ef253c37ef269d6c75e7e144Jack He    @Override
2160b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood    public String toString() {
2173c67873f0a20a958f6cf1ccccb472fa050bf55b7Bryce Lee        return toString(false);
2183c67873f0a20a958f6cf1ccccb472fa050bf55b7Bryce Lee    }
2193c67873f0a20a958f6cf1ccccb472fa050bf55b7Bryce Lee
2202992cd084cd5cfd9ef253c37ef269d6c75e7e144Jack He    /**
2212992cd084cd5cfd9ef253c37ef269d6c75e7e144Jack He     * Generate a log string for this call
2222992cd084cd5cfd9ef253c37ef269d6c75e7e144Jack He     * @param loggable whether device address should be logged
2232992cd084cd5cfd9ef253c37ef269d6c75e7e144Jack He     * @return log string
2242992cd084cd5cfd9ef253c37ef269d6c75e7e144Jack He     */
2253c67873f0a20a958f6cf1ccccb472fa050bf55b7Bryce Lee    public String toString(boolean loggable) {
226ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood        StringBuilder builder = new StringBuilder("BluetoothHeadsetClientCall{mDevice: ");
22718116c01c2e35eab0869e4a982c4669bbccb8af6Bryce Lee        builder.append(loggable ? mDevice : mDevice.hashCode());
228ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood        builder.append(", mId: ");
2290b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood        builder.append(mId);
230e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee        builder.append(", mUUID: ");
231e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee        builder.append(mUUID);
2320b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood        builder.append(", mState: ");
2330b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood        switch (mState) {
234a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He            case CALL_STATE_ACTIVE:
235a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                builder.append("ACTIVE");
236a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                break;
237a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He            case CALL_STATE_HELD:
238a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                builder.append("HELD");
239a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                break;
240a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He            case CALL_STATE_DIALING:
241a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                builder.append("DIALING");
242a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                break;
243a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He            case CALL_STATE_ALERTING:
244a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                builder.append("ALERTING");
245a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                break;
246a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He            case CALL_STATE_INCOMING:
247a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                builder.append("INCOMING");
248a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                break;
249a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He            case CALL_STATE_WAITING:
250a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                builder.append("WAITING");
251a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                break;
252a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He            case CALL_STATE_HELD_BY_RESPONSE_AND_HOLD:
253a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                builder.append("HELD_BY_RESPONSE_AND_HOLD");
254a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                break;
255a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He            case CALL_STATE_TERMINATED:
256a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                builder.append("TERMINATED");
257a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                break;
258a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He            default:
259a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                builder.append(mState);
260a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                break;
2610b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood        }
2620b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood        builder.append(", mNumber: ");
26318116c01c2e35eab0869e4a982c4669bbccb8af6Bryce Lee        builder.append(loggable ? mNumber : mNumber.hashCode());
2640b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood        builder.append(", mMultiParty: ");
2650b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood        builder.append(mMultiParty);
2660b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood        builder.append(", mOutgoing: ");
2670b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood        builder.append(mOutgoing);
268843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo        builder.append(", mInBandRing: ");
269843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo        builder.append(mInBandRing);
2700b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood        builder.append("}");
2710b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood        return builder.toString();
2720b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood    }
2730b611b5f3bcbe29fd63102f6924b43eb7c6533f5Mike Lockwood
2747aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    /**
2757aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     * {@link Parcelable.Creator} interface implementation.
2767aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta     */
277cf916d34671f0ab6aad8de24c18e4dc96fb21941Mike Lockwood    public static final Parcelable.Creator<BluetoothHeadsetClientCall> CREATOR =
278cf916d34671f0ab6aad8de24c18e4dc96fb21941Mike Lockwood            new Parcelable.Creator<BluetoothHeadsetClientCall>() {
2797aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta                @Override
280cf916d34671f0ab6aad8de24c18e4dc96fb21941Mike Lockwood                public BluetoothHeadsetClientCall createFromParcel(Parcel in) {
281a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                    return new BluetoothHeadsetClientCall((BluetoothDevice) in.readParcelable(null),
282e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee                            in.readInt(), UUID.fromString(in.readString()), in.readInt(),
283843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo                            in.readString(), in.readInt() == 1, in.readInt() == 1,
284843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo                            in.readInt() == 1);
2857aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta                }
2867aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
2877aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta                @Override
288cf916d34671f0ab6aad8de24c18e4dc96fb21941Mike Lockwood                public BluetoothHeadsetClientCall[] newArray(int size) {
289cf916d34671f0ab6aad8de24c18e4dc96fb21941Mike Lockwood                    return new BluetoothHeadsetClientCall[size];
2907aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta                }
2917aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta            };
2927aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
2937aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    @Override
2947aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public void writeToParcel(Parcel out, int flags) {
295ddbfc9ada117374ffe5c1e232a85c4e70fcd4350Mike Lockwood        out.writeParcelable(mDevice, 0);
2967aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        out.writeInt(mId);
297e457fa4b9d6c37746ba16cf8a1ad801b87ede2fbBryce Lee        out.writeString(mUUID.toString());
2987aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        out.writeInt(mState);
2997aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        out.writeString(mNumber);
3007aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        out.writeInt(mMultiParty ? 1 : 0);
3017aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        out.writeInt(mOutgoing ? 1 : 0);
302843d380cf10a929ecc312e51133aef51dd6942d8Joseph Pirozzo        out.writeInt(mInBandRing ? 1 : 0);
3037aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    }
3047aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta
3057aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    @Override
3067aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    public int describeContents() {
3077aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta        return 0;
3087aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta    }
3097aca90fcc0175ab44613bb3e4f3f13fc4a688fa5Hemant Gupta}
310