14d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn/*
24d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn * Copyright (C) 2016 The Android Open Source Project
34d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn *
44d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn * Licensed under the Apache License, Version 2.0 (the "License");
54d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn * you may not use this file except in compliance with the License.
64d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn * You may obtain a copy of the License at
74d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn *
84d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn *      http://www.apache.org/licenses/LICENSE-2.0
94d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn *
104d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn * Unless required by applicable law or agreed to in writing, software
114d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn * distributed under the License is distributed on an "AS IS" BASIS,
124d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn * See the License for the specific language governing permissions and
144d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn * limitations under the License
154d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn */
164d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn
174d128b6db8288af77d095d6239d6332e05469f35Tyler Gunnpackage com.android.ims;
184d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn
194d128b6db8288af77d095d6239d6332e05469f35Tyler Gunnimport com.android.ims.internal.IImsMultiEndpoint;
204d128b6db8288af77d095d6239d6332e05469f35Tyler Gunnimport com.android.ims.internal.IImsExternalCallStateListener;
214d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn
224d128b6db8288af77d095d6239d6332e05469f35Tyler Gunnimport android.os.RemoteException;
234d128b6db8288af77d095d6239d6332e05469f35Tyler Gunnimport android.telephony.Rlog;
244d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn
254d128b6db8288af77d095d6239d6332e05469f35Tyler Gunnimport java.util.List;
264d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn
274d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn/**
284d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn * Provides APIs for the IMS multi-endpoint functionality.  Specifically, provides a means for IMS
294d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn * to subscribe to dialog event packages issued by the network.
304d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn *
314d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn * @hide
324d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn */
334d128b6db8288af77d095d6239d6332e05469f35Tyler Gunnpublic class ImsMultiEndpoint {
344d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn    /**
354d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn     * Adapter class for {@link IImsExternalCallStateListener}.
364d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn     */
374d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn    private class ImsExternalCallStateListenerProxy extends IImsExternalCallStateListener.Stub {
384d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn        private ImsExternalCallStateListener mListener;
394d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn
404d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn        public ImsExternalCallStateListenerProxy(ImsExternalCallStateListener listener) {
414d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn            mListener = listener;
424d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn        }
434d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn
444d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn
454d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn        /**
464d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn         * Notifies client when Dialog Event Package update is received
474d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn         *
484d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn         * @param externalCallState the external call state.
494d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn         */
504d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn        @Override
514d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn        public void onImsExternalCallStateUpdate(List<ImsExternalCallState> externalCallState) {
524d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn            if (DBG) Rlog.d(TAG, "onImsExternalCallStateUpdate");
534d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn
544d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn            if (mListener != null) {
554d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn                mListener.onImsExternalCallStateUpdate(externalCallState);
564d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn            }
574d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn        }
584d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn    }
594d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn
604d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn    private static final String TAG = "ImsMultiEndpoint";
614d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn    private static final boolean DBG = true;
624d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn
634d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn    private final IImsMultiEndpoint mImsMultiendpoint;
644d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn
654d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn    public ImsMultiEndpoint(IImsMultiEndpoint iImsMultiEndpoint) {
664d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn        if (DBG) Rlog.d(TAG, "ImsMultiEndpoint created");
674d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn        mImsMultiendpoint = iImsMultiEndpoint;
684d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn    }
694d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn
704d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn    public void setExternalCallStateListener(ImsExternalCallStateListener externalCallStateListener)
714d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn            throws ImsException {
724d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn        try {
734d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn            if (DBG) Rlog.d(TAG, "setExternalCallStateListener");
744d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn            mImsMultiendpoint.setListener(new ImsExternalCallStateListenerProxy(
754d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn                    externalCallStateListener));
764d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn        } catch (RemoteException e) {
774d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn            throw new ImsException("setExternalCallStateListener could not be set.", e,
784d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn                    ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN);
794d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn        }
804d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn    }
814d128b6db8288af77d095d6239d6332e05469f35Tyler Gunn}
82