1ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville/*
2ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Copyright (C) 2013 The Android Open Source Project
3ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville *
4ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * you may not use this file except in compliance with the License.
6ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * You may obtain a copy of the License at
7ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville *
8ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville *
10ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Unless required by applicable law or agreed to in writing, software
11ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * See the License for the specific language governing permissions and
14ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * limitations under the License.
15ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville */
16ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
17ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savillepackage com.android.internal.telephony;
18ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
19ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport android.content.BroadcastReceiver;
20ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport android.content.Context;
21ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport android.content.Intent;
22ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport android.content.IntentFilter;
23df0a189fcdf375cb6f0f1f533e20efec575d6c4eTyler Gunnimport android.content.SharedPreferences;
24fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunnimport android.net.Uri;
25e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimerimport android.os.BadParcelableException;
262cc8c148fa4cb6cba5deac6b011268b4174a0b02Wink Savilleimport android.os.Build;
27df0a189fcdf375cb6f0f1f533e20efec575d6c4eTyler Gunnimport android.preference.PreferenceManager;
28ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport android.telephony.Rlog;
290b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunnimport android.telephony.ServiceState;
30ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
310d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunnimport com.android.ims.ImsCall;
32fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunnimport com.android.ims.ImsCallProfile;
330d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunnimport com.android.ims.ImsConferenceState;
34fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunnimport com.android.ims.ImsExternalCallState;
350b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunnimport com.android.ims.ImsReasonInfo;
36fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunnimport com.android.internal.telephony.imsphone.ImsExternalCallTracker;
370d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunnimport com.android.internal.telephony.imsphone.ImsPhone;
380d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunnimport com.android.internal.telephony.imsphone.ImsPhoneCall;
39df0a189fcdf375cb6f0f1f533e20efec575d6c4eTyler Gunnimport com.android.internal.telephony.imsphone.ImsPhoneCallTracker;
400d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunnimport com.android.internal.telephony.test.TestConferenceEventPackageParser;
410d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn
420d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunnimport java.io.File;
430d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunnimport java.io.FileInputStream;
440d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunnimport java.io.FileNotFoundException;
45fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunnimport java.util.ArrayList;
46fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunnimport java.util.List;
47ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
48ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville/**
49ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Telephony tester receives the following intents where {name} is the phone name
50ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville *
51ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * adb shell am broadcast -a com.android.internal.telephony.{name}.action_detached
52ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * adb shell am broadcast -a com.android.internal.telephony.{name}.action_attached
530d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn * adb shell am broadcast -a com.android.internal.telephony.TestConferenceEventPackage -e filename
540d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn *      test_filename.xml
55ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville */
56ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savillepublic class TelephonyTester {
57ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    private static final String LOG_TAG = "TelephonyTester";
58ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    private static final boolean DBG = true;
59ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
600d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn    /**
610d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn     * Test-only intent used to send a test conference event package to the IMS framework.
620d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn     */
630d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn    private static final String ACTION_TEST_CONFERENCE_EVENT_PACKAGE =
640d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn            "com.android.internal.telephony.TestConferenceEventPackage";
65fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn
66fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn    /**
67fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn     * Test-only intent used to send a test dialog event package to the IMS framework.
68fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn     */
69fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn    private static final String ACTION_TEST_DIALOG_EVENT_PACKAGE =
70fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn            "com.android.internal.telephony.TestDialogEventPackage";
71fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn
720d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn    private static final String EXTRA_FILENAME = "filename";
73fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn    private static final String EXTRA_STARTPACKAGE = "startPackage";
74fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn    private static final String EXTRA_SENDPACKAGE = "sendPackage";
75fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn    private static final String EXTRA_DIALOGID = "dialogId";
76fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn    private static final String EXTRA_NUMBER = "number";
77fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn    private static final String EXTRA_STATE = "state";
78fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn    private static final String EXTRA_CANPULL = "canPull";
79fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn
800b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn    /**
810b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn     * Test-only intent used to trigger the signalling which occurs when a handover to WIFI fails.
820b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn     */
830b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn    private static final String ACTION_TEST_HANDOVER_FAIL =
840b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn            "com.android.internal.telephony.TestHandoverFail";
850b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn
86fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn    private static List<ImsExternalCallState> mImsExternalCallStates = null;
870d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn
886c806ef816f8ae0a1849ba05f3128a04577b32d0Amit Mahajan    private Phone mPhone;
89ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
90ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    // The static intent receiver one for all instances and we assume this
91ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    // is running on the same thread as Dcc.
92ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    protected BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
93ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            @Override
94ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        public void onReceive(Context context, Intent intent) {
95ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            String action = intent.getAction();
96e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer            try {
97e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                if (DBG) log("sIntentReceiver.onReceive: action=" + action);
98e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                if (action.equals(mPhone.getActionDetached())) {
99e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                    log("simulate detaching");
100e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                    mPhone.getServiceStateTracker().mDetachedRegistrants.notifyRegistrants();
101e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                } else if (action.equals(mPhone.getActionAttached())) {
102e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                    log("simulate attaching");
103e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                    mPhone.getServiceStateTracker().mAttachedRegistrants.notifyRegistrants();
104e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                } else if (action.equals(ACTION_TEST_CONFERENCE_EVENT_PACKAGE)) {
105e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                    log("inject simulated conference event package");
106e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                    handleTestConferenceEventPackage(context,
107e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                            intent.getStringExtra(EXTRA_FILENAME));
108e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                } else if (action.equals(ACTION_TEST_DIALOG_EVENT_PACKAGE)) {
109e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                    log("handle test dialog event package intent");
110e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                    handleTestDialogEventPackageIntent(intent);
111e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                } else if (action.equals(ACTION_TEST_HANDOVER_FAIL)) {
112e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                    log("handle handover fail test intent");
113e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                    handleHandoverFailedIntent();
114e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                } else {
115e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                    if (DBG) log("onReceive: unknown action=" + action);
116e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                }
117e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer            } catch (BadParcelableException e) {
118e465c979041310a5e5edc83e36a02e2788e2ee00Erik Wolsheimer                Rlog.w(LOG_TAG, e);
119ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            }
120ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        }
121ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    };
122ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
1236c806ef816f8ae0a1849ba05f3128a04577b32d0Amit Mahajan    TelephonyTester(Phone phone) {
124ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        mPhone = phone;
125ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
1262cc8c148fa4cb6cba5deac6b011268b4174a0b02Wink Saville        if (Build.IS_DEBUGGABLE) {
127ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            IntentFilter filter = new IntentFilter();
128ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
129ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            filter.addAction(mPhone.getActionDetached());
130ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            log("register for intent action=" + mPhone.getActionDetached());
131ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
132ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            filter.addAction(mPhone.getActionAttached());
133ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            log("register for intent action=" + mPhone.getActionAttached());
134ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
1350d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn            if (mPhone.getPhoneType() == PhoneConstants.PHONE_TYPE_IMS) {
1360d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn                log("register for intent action=" + ACTION_TEST_CONFERENCE_EVENT_PACKAGE);
1370d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn                filter.addAction(ACTION_TEST_CONFERENCE_EVENT_PACKAGE);
138fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn                filter.addAction(ACTION_TEST_DIALOG_EVENT_PACKAGE);
1390b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn                filter.addAction(ACTION_TEST_HANDOVER_FAIL);
140fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn                mImsExternalCallStates = new ArrayList<ImsExternalCallState>();
1410d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn            }
1420d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn
143ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            phone.getContext().registerReceiver(mIntentReceiver, filter, null, mPhone.getHandler());
144ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        }
145ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    }
146ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
147ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    void dispose() {
14857da4aa945252ebed6b505387145f99be8ad5d72Wink Saville        if (Build.IS_DEBUGGABLE) {
14957da4aa945252ebed6b505387145f99be8ad5d72Wink Saville            mPhone.getContext().unregisterReceiver(mIntentReceiver);
15057da4aa945252ebed6b505387145f99be8ad5d72Wink Saville        }
151ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    }
152ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
153ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    private static void log(String s) {
154ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        Rlog.d(LOG_TAG, s);
155ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    }
1560d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn
1570b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn    private void handleHandoverFailedIntent() {
1580b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn        // Attempt to get the active IMS call
1590b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn        ImsPhone imsPhone = (ImsPhone) mPhone;
1600b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn        if (imsPhone == null) {
1610b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn            return;
1620b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn        }
1630b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn
1640b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn        ImsPhoneCall imsPhoneCall = imsPhone.getForegroundCall();
1650b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn        if (imsPhoneCall == null) {
1660b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn            return;
1670b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn        }
1680b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn
1690b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn        ImsCall imsCall = imsPhoneCall.getImsCall();
1700b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn        if (imsCall == null) {
1710b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn            return;
1720b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn        }
1730b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn
1740b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn        imsCall.getImsCallSessionListenerProxy().callSessionHandoverFailed(imsCall.getCallSession(),
1750b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn                ServiceState.RIL_RADIO_TECHNOLOGY_LTE, ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN,
1760b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn                new ImsReasonInfo());
1770b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn    }
1780b93f32c1bed6554f058b9f614a0435f7dbfe942Tyler Gunn
1790d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn    /**
1800d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn     * Handles request to send a test conference event package to the active Ims call.
1810d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn     *
1820d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn     * @see com.android.internal.telephony.test.TestConferenceEventPackageParser
1830d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn     * @param context The context.
1840d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn     * @param fileName The name of the test conference event package file to read.
1850d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn     */
1860d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn    private void handleTestConferenceEventPackage(Context context, String fileName) {
1870d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        // Attempt to get the active IMS call before parsing the test XML file.
188fdca22cc56b0e1ef1504e36a5aacb2ebbc4d146cTyler Gunn        ImsPhone imsPhone = (ImsPhone) mPhone;
1890d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        if (imsPhone == null) {
1900d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn            return;
1910d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        }
1920d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn
1930d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        ImsPhoneCall imsPhoneCall = imsPhone.getForegroundCall();
1940d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        if (imsPhoneCall == null) {
1950d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn            return;
1960d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        }
1970d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn
1980d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        ImsCall imsCall = imsPhoneCall.getImsCall();
1990d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        if (imsCall == null) {
2000d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn            return;
2010d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        }
2020d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn
2030d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        File packageFile = new File(context.getFilesDir(), fileName);
2040d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        final FileInputStream is;
2050d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        try {
2060d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn            is = new FileInputStream(packageFile);
2070d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        } catch (FileNotFoundException ex) {
2080d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn            log("Test conference event package file not found: " + packageFile.getAbsolutePath());
2090d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn            return;
2100d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        }
2110d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn
2120d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        TestConferenceEventPackageParser parser = new TestConferenceEventPackageParser(is);
2130d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        ImsConferenceState imsConferenceState = parser.parse();
2140d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        if (imsConferenceState == null) {
2150d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn            return;
2160d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        }
2170d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn
2180d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn        imsCall.conferenceStateUpdated(imsConferenceState);
2190d4f1fe3137cc4a76fc2bb0dac80c68220e53550Tyler Gunn    }
220fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn
221fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn    /**
222fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn     * Handles intents containing test dialog event package data.
223fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn     *
224fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn     * @param intent
225fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn     */
226fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn    private void handleTestDialogEventPackageIntent(Intent intent) {
227fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn        ImsPhone imsPhone = (ImsPhone) mPhone;
228fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn        if (imsPhone == null) {
229fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn            return;
230fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn        }
231fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn        ImsExternalCallTracker externalCallTracker = imsPhone.getExternalCallTracker();
232fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn        if (externalCallTracker == null) {
233fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn            return;
234fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn        }
235fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn
236fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn        if (intent.hasExtra(EXTRA_STARTPACKAGE)) {
237fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn            mImsExternalCallStates.clear();
238fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn        } else if (intent.hasExtra(EXTRA_SENDPACKAGE)) {
239fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn            externalCallTracker.refreshExternalCallState(mImsExternalCallStates);
240fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn            mImsExternalCallStates.clear();
241fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn        } else if (intent.hasExtra(EXTRA_DIALOGID)) {
242fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn            ImsExternalCallState state = new ImsExternalCallState(
243fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn                    intent.getIntExtra(EXTRA_DIALOGID, 0),
244fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn                    Uri.parse(intent.getStringExtra(EXTRA_NUMBER)),
245fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn                    intent.getBooleanExtra(EXTRA_CANPULL, true),
246fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn                    intent.getIntExtra(EXTRA_STATE,
247fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn                            ImsExternalCallState.CALL_STATE_CONFIRMED),
248fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn                    ImsCallProfile.CALL_TYPE_VOICE,
249fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn                    false /* isHeld */
250fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn                    );
251fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn            mImsExternalCallStates.add(state);
252fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn        }
253fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn    }
254ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville}
255