ParcelableConnection.java revision 7f3d41fd124dd7c4a8b72c1d48df08a8ee7209ec
1e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon/*
2e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * Copyright 2014, The Android Open Source Project
3e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon *
4e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * Licensed under the Apache License, Version 2.0 (the "License");
5e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * you may not use this file except in compliance with the License.
6e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * You may obtain a copy of the License at
7e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon *
8e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon *     http://www.apache.org/licenses/LICENSE-2.0
9e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon *
10e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * Unless required by applicable law or agreed to in writing, software
11e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * distributed under the License is distributed on an "AS IS" BASIS,
12e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * See the License for the specific language governing permissions and
14e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * limitations under the License.
15e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon */
16e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
17ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunnpackage android.telecom;
18e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
19e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordonimport android.net.Uri;
20e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordonimport android.os.Parcel;
21e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordonimport android.os.Parcelable;
22e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
23ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunnimport com.android.internal.telecom.IVideoProvider;
24e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
25b8e85c74e5910a461078704048d67f82b216508cIhab Awadimport java.util.ArrayList;
26b8e85c74e5910a461078704048d67f82b216508cIhab Awadimport java.util.List;
27b8e85c74e5910a461078704048d67f82b216508cIhab Awad
28e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon/**
29ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * Information about a connection that is used between Telecom and the ConnectionService.
30ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunn * This is used to send initial Connection information to Telecom when the connection is
31e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * first created.
32e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * @hide
33e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon */
34e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordonpublic final class ParcelableConnection implements Parcelable {
35b8e85c74e5910a461078704048d67f82b216508cIhab Awad    private final PhoneAccountHandle mPhoneAccount;
36b8e85c74e5910a461078704048d67f82b216508cIhab Awad    private final int mState;
37b8e85c74e5910a461078704048d67f82b216508cIhab Awad    private final int mCapabilities;
38100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee    private final Uri mAddress;
39100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee    private final int mAddressPresentation;
40b8e85c74e5910a461078704048d67f82b216508cIhab Awad    private final String mCallerDisplayName;
41b8e85c74e5910a461078704048d67f82b216508cIhab Awad    private final int mCallerDisplayNamePresentation;
42b8e85c74e5910a461078704048d67f82b216508cIhab Awad    private final IVideoProvider mVideoProvider;
43b8e85c74e5910a461078704048d67f82b216508cIhab Awad    private final int mVideoState;
44100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee    private final boolean mRingbackRequested;
45100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee    private final boolean mIsVoipAudioMode;
46b8e85c74e5910a461078704048d67f82b216508cIhab Awad    private final StatusHints mStatusHints;
477f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    private final DisconnectCause mDisconnectCause;
48b8e85c74e5910a461078704048d67f82b216508cIhab Awad    private final List<String> mConferenceableConnectionIds;
49e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
50e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    /** @hide */
51e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public ParcelableConnection(
52e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            PhoneAccountHandle phoneAccount,
53e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int state,
54e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int capabilities,
55100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee            Uri address,
56100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee            int addressPresentation,
57e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            String callerDisplayName,
58e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int callerDisplayNamePresentation,
59b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad            IVideoProvider videoProvider,
608b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal            int videoState,
61100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee            boolean ringbackRequested,
62100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee            boolean isVoipAudioMode,
636107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad            StatusHints statusHints,
647f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            DisconnectCause disconnectCause,
65b8e85c74e5910a461078704048d67f82b216508cIhab Awad            List<String> conferenceableConnectionIds) {
66e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mPhoneAccount = phoneAccount;
67e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mState = state;
68e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mCapabilities = capabilities;
69100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee        mAddress = address;
70100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee        mAddressPresentation = addressPresentation;
71e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mCallerDisplayName = callerDisplayName;
72e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mCallerDisplayNamePresentation = callerDisplayNamePresentation;
73b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad        mVideoProvider = videoProvider;
74e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mVideoState = videoState;
75100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee        mRingbackRequested = ringbackRequested;
76100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee        mIsVoipAudioMode = isVoipAudioMode;
778b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal        mStatusHints = statusHints;
78cf7020b7e84c1f5190db7167d70cb0675cd3332fSailesh Nepal        mDisconnectCause = disconnectCause;
79b8e85c74e5910a461078704048d67f82b216508cIhab Awad        this.mConferenceableConnectionIds = conferenceableConnectionIds;
80e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
81e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
82e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public PhoneAccountHandle getPhoneAccount() {
83e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mPhoneAccount;
84e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
85e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
86e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public int getState() {
87e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mState;
88e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
89e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
90e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    // Bit mask of actions a call supports, values are defined in {@link CallCapabilities}.
91e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public int getCapabilities() {
92e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mCapabilities;
93e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
94e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
95e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public Uri getHandle() {
96100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee        return mAddress;
97e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
98e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
99e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public int getHandlePresentation() {
100100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee        return mAddressPresentation;
101e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
102e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
103e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public String getCallerDisplayName() {
104e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mCallerDisplayName;
105e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
106e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
107e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public int getCallerDisplayNamePresentation() {
108e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mCallerDisplayNamePresentation;
109e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
110e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
111b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad    public IVideoProvider getVideoProvider() {
112b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad        return mVideoProvider;
113e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
114e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
115e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public int getVideoState() {
116e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mVideoState;
117e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
118e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
119100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee    public boolean isRingbackRequested() {
120100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee        return mRingbackRequested;
1218b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal    }
1228b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal
123100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee    public boolean getIsVoipAudioMode() {
124100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee        return mIsVoipAudioMode;
1258b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal    }
1268b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal
1278b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal    public final StatusHints getStatusHints() {
1288b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal        return mStatusHints;
1298b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal    }
1308b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal
1317f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee    public final DisconnectCause getDisconnectCause() {
132cf7020b7e84c1f5190db7167d70cb0675cd3332fSailesh Nepal        return mDisconnectCause;
1336107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad    }
1346107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad
135b8e85c74e5910a461078704048d67f82b216508cIhab Awad    public final List<String> getConferenceableConnectionIds() {
136b8e85c74e5910a461078704048d67f82b216508cIhab Awad        return mConferenceableConnectionIds;
137b8e85c74e5910a461078704048d67f82b216508cIhab Awad    }
138b8e85c74e5910a461078704048d67f82b216508cIhab Awad
1397c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon    @Override
1407c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon    public String toString() {
1417c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon        return new StringBuilder()
1427c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon                .append("ParcelableConnection [act:")
1437c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon                .append(mPhoneAccount)
1447c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon                .append(", state:")
1457c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon                .append(mState)
1467c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon                .append(", capabilities:")
147b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                .append(PhoneCapabilities.toString(mCapabilities))
1487c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon                .toString();
1497c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon    }
1507c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon
151e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public static final Parcelable.Creator<ParcelableConnection> CREATOR =
152e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            new Parcelable.Creator<ParcelableConnection> () {
153e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        @Override
154e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        public ParcelableConnection createFromParcel(Parcel source) {
155e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            ClassLoader classLoader = ParcelableConnection.class.getClassLoader();
156e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
157e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            PhoneAccountHandle phoneAccount = source.readParcelable(classLoader);
158e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int state = source.readInt();
159e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int capabilities = source.readInt();
160100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee            Uri address = source.readParcelable(classLoader);
161100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee            int addressPresentation = source.readInt();
162e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            String callerDisplayName = source.readString();
163e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int callerDisplayNamePresentation = source.readInt();
164b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad            IVideoProvider videoCallProvider =
165b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                    IVideoProvider.Stub.asInterface(source.readStrongBinder());
166e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int videoState = source.readInt();
167100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee            boolean ringbackRequested = source.readByte() == 1;
1688b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal            boolean audioModeIsVoip = source.readByte() == 1;
1698b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal            StatusHints statusHints = source.readParcelable(classLoader);
1707f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee            DisconnectCause disconnectCause = source.readParcelable(classLoader);
171b8e85c74e5910a461078704048d67f82b216508cIhab Awad            List<String> conferenceableConnectionIds = new ArrayList<>();
172b8e85c74e5910a461078704048d67f82b216508cIhab Awad            source.readStringList(conferenceableConnectionIds);
173e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
174e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            return new ParcelableConnection(
175e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon                    phoneAccount,
176e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon                    state,
177e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon                    capabilities,
178100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee                    address,
179100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee                    addressPresentation,
180e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon                    callerDisplayName,
181e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon                    callerDisplayNamePresentation,
18250aca23bd7f51a3cf32a1f7e32238cc1e26ca1a0Andrew Lee                    videoCallProvider,
1838b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal                    videoState,
184100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee                    ringbackRequested,
1858b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal                    audioModeIsVoip,
1866107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad                    statusHints,
1877f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee                    disconnectCause,
188b8e85c74e5910a461078704048d67f82b216508cIhab Awad                    conferenceableConnectionIds);
189e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        }
190e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
191e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        @Override
192e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        public ParcelableConnection[] newArray(int size) {
193e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            return new ParcelableConnection[size];
194e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        }
195e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    };
196e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
197e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    /** {@inheritDoc} */
198e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    @Override
199e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public int describeContents() {
200e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return 0;
201e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
202e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
203e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    /** Writes ParcelableConnection object into a Parcel. */
204e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    @Override
205e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public void writeToParcel(Parcel destination, int flags) {
206e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeParcelable(mPhoneAccount, 0);
207e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeInt(mState);
208e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeInt(mCapabilities);
209100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee        destination.writeParcelable(mAddress, 0);
210100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee        destination.writeInt(mAddressPresentation);
211e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeString(mCallerDisplayName);
212e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeInt(mCallerDisplayNamePresentation);
213e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeStrongBinder(
214b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                mVideoProvider != null ? mVideoProvider.asBinder() : null);
215e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeInt(mVideoState);
216100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee        destination.writeByte((byte) (mRingbackRequested ? 1 : 0));
217100e293fa8021caed956597daa4e01cb19be1c33Andrew Lee        destination.writeByte((byte) (mIsVoipAudioMode ? 1 : 0));
2188b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal        destination.writeParcelable(mStatusHints, 0);
2197f3d41fd124dd7c4a8b72c1d48df08a8ee7209ecAndrew Lee        destination.writeParcelable(mDisconnectCause, 0);
220b8e85c74e5910a461078704048d67f82b216508cIhab Awad        destination.writeStringList(mConferenceableConnectionIds);
221e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
222e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon}
223