1cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak/*
2cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak * Copyright (C) 2016 The Android Open Source Project
3cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak *
4cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak * Licensed under the Apache License, Version 2.0 (the "License");
5cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak * you may not use this file except in compliance with the License.
6cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak * You may obtain a copy of the License at
7cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak *
8cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak *      http://www.apache.org/licenses/LICENSE-2.0
9cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak *
10cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak * Unless required by applicable law or agreed to in writing, software
11cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak * distributed under the License is distributed on an "AS IS" BASIS,
12cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak * See the License for the specific language governing permissions and
14cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak * limitations under the License
15cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak */
16cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak
17cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiakpackage com.android.ims;
18cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak
19cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiakimport com.android.ims.internal.IImsMultiEndpoint;
20cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiakimport com.android.ims.internal.IImsExternalCallStateListener;
21cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak
22cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiakimport android.os.RemoteException;
23cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiakimport android.telephony.Rlog;
24cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak
25cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiakimport java.util.List;
26cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak
27cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak/**
28cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak * Provides APIs for the IMS multi-endpoint functionality.  Specifically, provides a means for IMS
29cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak * to subscribe to dialog event packages issued by the network.
30cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak *
31cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak * @hide
32cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak */
33cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiakpublic class ImsMultiEndpoint {
34cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak    /**
35cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak     * Adapter class for {@link IImsExternalCallStateListener}.
36cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak     */
37cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak    private class ImsExternalCallStateListenerProxy extends IImsExternalCallStateListener.Stub {
38cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak        private ImsExternalCallStateListener mListener;
39cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak
40cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak        public ImsExternalCallStateListenerProxy(ImsExternalCallStateListener listener) {
41cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak            mListener = listener;
42cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak        }
43cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak
44cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak
45cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak        /**
46cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak         * Notifies client when Dialog Event Package update is received
47cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak         *
48cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak         * @param externalCallState the external call state.
49cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak         */
50cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak        @Override
51cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak        public void onImsExternalCallStateUpdate(List<ImsExternalCallState> externalCallState) {
52cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak            if (DBG) Rlog.d(TAG, "onImsExternalCallStateUpdate");
53cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak
54cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak            if (mListener != null) {
55cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak                mListener.onImsExternalCallStateUpdate(externalCallState);
56cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak            }
57cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak        }
58cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak    }
59cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak
60cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak    private static final String TAG = "ImsMultiEndpoint";
61cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak    private static final boolean DBG = true;
62cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak
63cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak    private final IImsMultiEndpoint mImsMultiendpoint;
64cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak
65cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak    public ImsMultiEndpoint(IImsMultiEndpoint iImsMultiEndpoint) {
66cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak        if (DBG) Rlog.d(TAG, "ImsMultiEndpoint created");
67cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak        mImsMultiendpoint = iImsMultiEndpoint;
68cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak    }
69cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak
70cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak    public void setExternalCallStateListener(ImsExternalCallStateListener externalCallStateListener)
71cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak            throws ImsException {
72cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak        try {
73cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak            if (DBG) Rlog.d(TAG, "setExternalCallStateListener");
74cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak            mImsMultiendpoint.setListener(new ImsExternalCallStateListenerProxy(
75cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak                    externalCallStateListener));
76cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak        } catch (RemoteException e) {
77cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak            throw new ImsException("setExternalCallStateListener could not be set.", e,
78cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak                    ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN);
79cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak        }
80cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak    }
81cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak}
82cfedd20d54687449bb6a6982085003cbf9a22bcbPavel Zhamaitsiak