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