ParcelableConnection.java revision 6107bab041fb7d851fbf865b7310d294aae970c8
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
17e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordonpackage android.telecomm;
18e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
19e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordonimport android.net.Uri;
20e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordonimport android.os.Parcel;
21e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordonimport android.os.Parcelable;
22e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
23b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awadimport com.android.internal.telecomm.IVideoProvider;
24e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
25e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon/**
26e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * Information about a connection that is used between Telecomm and the ConnectionService.
27e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * This is used to send initial Connection information to Telecomm when the connection is
28e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * first created.
29e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon * @hide
30e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon */
31e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordonpublic final class ParcelableConnection implements Parcelable {
32e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    private PhoneAccountHandle mPhoneAccount;
33e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    private int mState;
34e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    private int mCapabilities;
35e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    private Uri mHandle;
36e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    private int mHandlePresentation;
37e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    private String mCallerDisplayName;
38e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    private int mCallerDisplayNamePresentation;
39b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad    private IVideoProvider mVideoProvider;
40e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    private int mVideoState;
418b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal    private boolean mRequestingRingback;
428b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal    private boolean mAudioModeIsVoip;
438b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal    private StatusHints mStatusHints;
446107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad    private int mFailureCode;
456107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad    private String mFailureMessage;
46e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
47e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    /** @hide */
48e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public ParcelableConnection(
49e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            PhoneAccountHandle phoneAccount,
50e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int state,
51e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int capabilities,
52e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            Uri handle,
53e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int handlePresentation,
54e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            String callerDisplayName,
55e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int callerDisplayNamePresentation,
56b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad            IVideoProvider videoProvider,
578b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal            int videoState,
588b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal            boolean requestingRingback,
598b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal            boolean audioModeIsVoip,
606107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad            StatusHints statusHints,
616107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad            int failureCode,
626107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad            String failureMessage) {
63e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mPhoneAccount = phoneAccount;
64e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mState = state;
65e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mCapabilities = capabilities;
66e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mHandle = handle;
67e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mHandlePresentation = handlePresentation;
68e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mCallerDisplayName = callerDisplayName;
69e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mCallerDisplayNamePresentation = callerDisplayNamePresentation;
70b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad        mVideoProvider = videoProvider;
71e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        mVideoState = videoState;
728b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal        mRequestingRingback = requestingRingback;
738b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal        mAudioModeIsVoip = audioModeIsVoip;
748b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal        mStatusHints = statusHints;
756107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad        mFailureCode = failureCode;
766107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad        mFailureMessage = failureMessage;
77e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
78e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
79e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public PhoneAccountHandle getPhoneAccount() {
80e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mPhoneAccount;
81e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
82e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
83e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public int getState() {
84e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mState;
85e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
86e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
87e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    // Bit mask of actions a call supports, values are defined in {@link CallCapabilities}.
88e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public int getCapabilities() {
89e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mCapabilities;
90e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
91e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
92e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public Uri getHandle() {
93e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mHandle;
94e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
95e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
96e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public int getHandlePresentation() {
97e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mHandlePresentation;
98e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
99e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
100e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public String getCallerDisplayName() {
101e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mCallerDisplayName;
102e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
103e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
104e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public int getCallerDisplayNamePresentation() {
105e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mCallerDisplayNamePresentation;
106e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
107e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
108b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad    public IVideoProvider getVideoProvider() {
109b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad        return mVideoProvider;
110e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
111e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
112e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public int getVideoState() {
113e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return mVideoState;
114e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
115e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
1168b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal    public boolean isRequestingRingback() {
1178b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal        return mRequestingRingback;
1188b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal    }
1198b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal
1208b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal    public boolean getAudioModeIsVoip() {
1218b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal        return mAudioModeIsVoip;
1228b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal    }
1238b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal
1248b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal    public final StatusHints getStatusHints() {
1258b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal        return mStatusHints;
1268b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal    }
1278b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal
1286107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad    public final int getFailureCode() {
1296107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad        return mFailureCode;
1306107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad    }
1316107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad
1326107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad    public final String getFailureMessage() {
1336107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad        return mFailureMessage;
1346107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad    }
1356107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad
1367c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon    @Override
1377c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon    public String toString() {
1387c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon        return new StringBuilder()
1397c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon                .append("ParcelableConnection [act:")
1407c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon                .append(mPhoneAccount)
1417c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon                .append(", state:")
1427c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon                .append(mState)
1437c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon                .append(", capabilities:")
144b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                .append(PhoneCapabilities.toString(mCapabilities))
1457c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon                .toString();
1467c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon    }
1477c7bc7f6917484250974c5da00af9ef756844b0aSantos Cordon
148e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public static final Parcelable.Creator<ParcelableConnection> CREATOR =
149e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            new Parcelable.Creator<ParcelableConnection> () {
150e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        @Override
151e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        public ParcelableConnection createFromParcel(Parcel source) {
152e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            ClassLoader classLoader = ParcelableConnection.class.getClassLoader();
153e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
154e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            PhoneAccountHandle phoneAccount = source.readParcelable(classLoader);
155e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int state = source.readInt();
156e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int capabilities = source.readInt();
157e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            Uri handle = source.readParcelable(classLoader);
158e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int handlePresentation = source.readInt();
159e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            String callerDisplayName = source.readString();
160e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int callerDisplayNamePresentation = source.readInt();
161b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad            IVideoProvider videoCallProvider =
162b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                    IVideoProvider.Stub.asInterface(source.readStrongBinder());
163e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            int videoState = source.readInt();
1648b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal            boolean requestingRingback = source.readByte() == 1;
1658b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal            boolean audioModeIsVoip = source.readByte() == 1;
1668b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal            StatusHints statusHints = source.readParcelable(classLoader);
1676107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad            int disconnectCauseCode = source.readInt();
1686107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad            String disconnectCauseMessage = source.readString();
169e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
170e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            return new ParcelableConnection(
171e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon                    phoneAccount,
172e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon                    state,
173e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon                    capabilities,
174e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon                    handle,
175e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon                    handlePresentation,
176e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon                    callerDisplayName,
177e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon                    callerDisplayNamePresentation,
17850aca23bd7f51a3cf32a1f7e32238cc1e26ca1a0Andrew Lee                    videoCallProvider,
1798b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal                    videoState,
1808b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal                    requestingRingback,
1818b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal                    audioModeIsVoip,
1826107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad                    statusHints,
1836107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad                    disconnectCauseCode,
1846107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad                    disconnectCauseMessage);
185e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        }
186e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
187e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        @Override
188e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        public ParcelableConnection[] newArray(int size) {
189e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon            return new ParcelableConnection[size];
190e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        }
191e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    };
192e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
193e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    /** {@inheritDoc} */
194e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    @Override
195e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public int describeContents() {
196e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        return 0;
197e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
198e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon
199e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    /** Writes ParcelableConnection object into a Parcel. */
200e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    @Override
201e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    public void writeToParcel(Parcel destination, int flags) {
202e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeParcelable(mPhoneAccount, 0);
203e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeInt(mState);
204e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeInt(mCapabilities);
205e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeParcelable(mHandle, 0);
206e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeInt(mHandlePresentation);
207e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeString(mCallerDisplayName);
208e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeInt(mCallerDisplayNamePresentation);
209e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeStrongBinder(
210b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad                mVideoProvider != null ? mVideoProvider.asBinder() : null);
211e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon        destination.writeInt(mVideoState);
2128b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal        destination.writeByte((byte) (mRequestingRingback ? 1 : 0));
2138b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal        destination.writeByte((byte) (mAudioModeIsVoip ? 1 : 0));
2148b9d3ca94189b183a2380ba5b289d9a06eb0493eSailesh Nepal        destination.writeParcelable(mStatusHints, 0);
2156107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad        destination.writeInt(mFailureCode);
2166107bab041fb7d851fbf865b7310d294aae970c8Ihab Awad        destination.writeString(mFailureMessage);
217e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon    }
218e8dc4bef00e391defbdee0264b2ed955b1117841Santos Cordon}
219