1e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger/* 21d0af327f9d60dcdb010314bbdc4ab2492df11dfBrad Ebinger * Copyright (C) 2018 The Android Open Source Project 3e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger * 4e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger * Licensed under the Apache License, Version 2.0 (the "License"); 5e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger * you may not use this file except in compliance with the License. 6e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger * You may obtain a copy of the License at 7e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger * 8e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger * http://www.apache.org/licenses/LICENSE-2.0 9e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger * 10e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger * Unless required by applicable law or agreed to in writing, software 11e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger * distributed under the License is distributed on an "AS IS" BASIS, 12e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger * See the License for the specific language governing permissions and 14e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger * limitations under the License. 15e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger */ 16e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 171d0af327f9d60dcdb010314bbdc4ab2492df11dfBrad Ebingerpackage android.telephony.ims; 18e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 198a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebingerimport android.os.Message; 20e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebingerimport android.os.RemoteException; 211d0af327f9d60dcdb010314bbdc4ab2492df11dfBrad Ebingerimport android.telephony.ims.feature.CapabilityChangeRequest; 221d0af327f9d60dcdb010314bbdc4ab2492df11dfBrad Ebingerimport android.telephony.ims.feature.ImsFeature; 231d0af327f9d60dcdb010314bbdc4ab2492df11dfBrad Ebingerimport android.telephony.ims.feature.MmTelFeature; 2404c17b36e012335a8575ae24895fd3f0bea8491fBrad Ebingerimport android.telephony.ims.stub.ImsCallSessionImplBase; 25e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebingerimport android.telephony.ims.stub.ImsEcbmImplBase; 26e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebingerimport android.telephony.ims.stub.ImsMultiEndpointImplBase; 276c3b2891674897c472dba463a2788203fce140c6Brad Ebingerimport android.telephony.ims.stub.ImsRegistrationImplBase; 28e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebingerimport android.telephony.ims.stub.ImsUtImplBase; 29e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 30e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebingerpublic class TestMmTelFeature extends MmTelFeature { 31e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 32e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger public boolean queryConfigurationResult = false; 33e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger public int setCapabilitiesResult = ImsFeature.CAPABILITY_SUCCESS; 34e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger public CapabilityChangeRequest lastRequest; 35e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger public boolean isUtInterfaceCalled = false; 36e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 378a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger private final TestImsCallSession mCallSession = new TestImsCallSession(); 388a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger private class TestImsCallSession extends ImsCallSessionImplBase { 398a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger 408a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger @Override 418a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger public void sendDtmf(char c, Message result) { 428a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger // Just call result to signify complete for test. 438a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger if (result.replyTo != null) { 448a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger try { 458a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger result.replyTo.send(result); 468a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger } catch (RemoteException e) { 478a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger // eat error, test will fail. 488a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger } 498a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger } 508a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger } 518a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger } 528a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger 5304c17b36e012335a8575ae24895fd3f0bea8491fBrad Ebinger public void incomingCall(ImsCallSessionImplBase c) throws RemoteException { 541d0af327f9d60dcdb010314bbdc4ab2492df11dfBrad Ebinger notifyIncomingCall(c, null); 55e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger } 56e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 57e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger @Override 58e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger public ImsCallProfile createCallProfile(int callSessionType, int callType) { 59e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger return super.createCallProfile(callSessionType, callType); 60e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger } 61e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 62e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger @Override 6304c17b36e012335a8575ae24895fd3f0bea8491fBrad Ebinger public ImsCallSessionImplBase createCallSession(ImsCallProfile profile) { 648a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger return mCallSession; 65e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger } 66e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 67e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger @Override 68e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger public ImsUtImplBase getUt() { 69e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger isUtInterfaceCalled = true; 70e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger return super.getUt(); 71e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger } 72e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 73e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger @Override 74e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger public ImsEcbmImplBase getEcbm() { 75e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger return super.getEcbm(); 76e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger } 77e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 78e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger @Override 79e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger public ImsMultiEndpointImplBase getMultiEndpoint() { 80e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger return super.getMultiEndpoint(); 81e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger } 82e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 83e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger @Override 848a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger public void setUiTtyMode(int mode, Message onCompleteMessage) { 858a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger try { 868a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger // just send complete message. 878a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger onCompleteMessage.replyTo.send(onCompleteMessage); 888a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger } catch (RemoteException e) { 898a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger // do nothing, test will fail. 908a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger } 918a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger } 928a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger 938a5c54f8ba1793a89bb8e18e819d1fc5b85bc1bfBrad Ebinger @Override 94e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger public boolean queryCapabilityConfiguration(@MmTelCapabilities.MmTelCapability int capability, 95e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger @ImsRegistrationImplBase.ImsRegistrationTech int radioTech) { 96e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger // Base implementation - Override to provide functionality 97e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger return queryConfigurationResult; 98e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger } 99e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 100e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger @Override 101e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger public void changeEnabledCapabilities(CapabilityChangeRequest request, 102e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger CapabilityCallbackProxy c) { 103e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger lastRequest = request; 104e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger if (setCapabilitiesResult != ImsFeature.CAPABILITY_SUCCESS) { 105e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger // Take the first value to enable and return it as an error. 106e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger CapabilityChangeRequest.CapabilityPair capPair = request.getCapabilitiesToEnable() 107e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger .get(0); 108e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger c.onChangeCapabilityConfigurationError(capPair.getCapability(), capPair.getRadioTech(), 109e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger ImsFeature.CAPABILITY_ERROR_GENERIC); 110e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger } 111e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger } 112e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 113e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger public void sendSetFeatureState(int state) { 114e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger setFeatureState(state); 115e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger } 116e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 117e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger @Override 118e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger public void onFeatureRemoved() { 119e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger } 120e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger 121e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger @Override 122e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger public void onFeatureReady() { 123e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger } 124e5a95e8b1a32f527296dbcf097ca8b4c66710a02Brad Ebinger} 125