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