10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2006 The Android Open Source Project
30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License.
60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at
70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software
110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and
140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License.
150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony.test;
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.AsyncResult;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.HandlerThread;
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Looper;
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message;
23ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Savilleimport android.telephony.Rlog;
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.BaseCommands;
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.CommandException;
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.CommandsInterface;
28ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo;
29ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport com.android.internal.telephony.dataconnection.DataCallResponse;
309d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajanimport com.android.internal.telephony.dataconnection.DataProfile;
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.Phone;
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.UUSInfo;
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.CallFailCause;
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.SuppServiceNotification;
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList;
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic final class SimulatedCommands extends BaseCommands
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        implements CommandsInterface, SimulatedRadioControl {
41cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    private final static String LOG_TAG = "SimulatedCommands";
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private enum SimLockState {
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        NONE,
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        REQUIRE_PIN,
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        REQUIRE_PUK,
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SIM_PERM_LOCKED
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private enum SimFdnState {
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        NONE,
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        REQUIRE_PIN2,
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        REQUIRE_PUK2,
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SIM_PERM_LOCKED
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private final static SimLockState INITIAL_LOCK_STATE = SimLockState.NONE;
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private final static String DEFAULT_SIM_PIN_CODE = "1234";
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private final static String SIM_PUK_CODE = "12345678";
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private final static SimFdnState INITIAL_FDN_STATE = SimFdnState.NONE;
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private final static String DEFAULT_SIM_PIN2_CODE = "5678";
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private final static String SIM_PUK2_CODE = "87654321";
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Instance Variables
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    SimulatedGsmCallState simulatedCallState;
670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    HandlerThread mHandlerThread;
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    SimLockState mSimLockedState;
690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    boolean mSimLockEnabled;
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mPinUnlockAttempts;
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mPukUnlockAttempts;
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    String mPinCode;
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    SimFdnState mSimFdnEnabledState;
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    boolean mSimFdnEnabled;
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mPin2UnlockAttempts;
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mPuk2UnlockAttempts;
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mNetworkType;
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    String mPin2Code;
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    boolean mSsnNotifyOn = false;
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville    int mPausedResponseCount;
8222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville    ArrayList<Message> mPausedResponses = new ArrayList<Message>();
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville    int mNextCallFailCause = CallFailCause.NORMAL_CLEARING;
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Constructor
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    SimulatedCommands() {
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super(null);  // Don't log statistics
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mHandlerThread = new HandlerThread("SimulatedCommands");
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mHandlerThread.start();
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Looper looper = mHandlerThread.getLooper();
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        simulatedCallState = new SimulatedGsmCallState(looper);
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        setRadioState(RadioState.RADIO_OFF);
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSimLockedState = INITIAL_LOCK_STATE;
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSimLockEnabled = (mSimLockedState != SimLockState.NONE);
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPinCode = DEFAULT_SIM_PIN_CODE;
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSimFdnEnabledState = INITIAL_FDN_STATE;
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSimFdnEnabled = (mSimFdnEnabledState != SimFdnState.NONE);
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPin2Code = DEFAULT_SIM_PIN2_CODE;
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** CommandsInterface implementation
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
108cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getIccCardStatus(Message result) {
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
113cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void supplyIccPin(String pin, Message result)  {
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mSimLockedState != SimLockState.REQUIRE_PIN) {
116ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] supplyIccPin: wrong state, state=" +
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSimLockedState);
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CommandException ex = new CommandException(
1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    CommandException.Error.PASSWORD_INCORRECT);
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(result, null, ex);
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            result.sendToTarget();
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (pin != null && pin.equals(mPinCode)) {
126ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] supplyIccPin: success!");
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mPinUnlockAttempts = 0;
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mSimLockedState = SimLockState.NONE;
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mIccStatusChangedRegistrants.notifyRegistrants();
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (result != null) {
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                AsyncResult.forMessage(result, null, null);
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result.sendToTarget();
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (result != null) {
1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mPinUnlockAttempts ++;
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
142ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] supplyIccPin: failed! attempt=" +
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mPinUnlockAttempts);
1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mPinUnlockAttempts >= 3) {
145ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.i(LOG_TAG, "[SimCmd] supplyIccPin: set state to REQUIRE_PUK");
1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSimLockedState = SimLockState.REQUIRE_PUK;
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CommandException ex = new CommandException(
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    CommandException.Error.PASSWORD_INCORRECT);
1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(result, null, ex);
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            result.sendToTarget();
1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
156cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void supplyIccPuk(String puk, String newPin, Message result)  {
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mSimLockedState != SimLockState.REQUIRE_PUK) {
159ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] supplyIccPuk: wrong state, state=" +
1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSimLockedState);
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CommandException ex = new CommandException(
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    CommandException.Error.PASSWORD_INCORRECT);
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(result, null, ex);
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            result.sendToTarget();
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (puk != null && puk.equals(SIM_PUK_CODE)) {
169ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] supplyIccPuk: success!");
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mSimLockedState = SimLockState.NONE;
1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mPukUnlockAttempts = 0;
1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mIccStatusChangedRegistrants.notifyRegistrants();
1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (result != null) {
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                AsyncResult.forMessage(result, null, null);
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result.sendToTarget();
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (result != null) {
1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mPukUnlockAttempts ++;
1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
185ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] supplyIccPuk: failed! attempt=" +
1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mPukUnlockAttempts);
1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mPukUnlockAttempts >= 10) {
188ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.i(LOG_TAG, "[SimCmd] supplyIccPuk: set state to SIM_PERM_LOCKED");
1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSimLockedState = SimLockState.SIM_PERM_LOCKED;
1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CommandException ex = new CommandException(
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    CommandException.Error.PASSWORD_INCORRECT);
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(result, null, ex);
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            result.sendToTarget();
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
199cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void supplyIccPin2(String pin2, Message result)  {
2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mSimFdnEnabledState != SimFdnState.REQUIRE_PIN2) {
202ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] supplyIccPin2: wrong state, state=" +
2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSimFdnEnabledState);
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CommandException ex = new CommandException(
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    CommandException.Error.PASSWORD_INCORRECT);
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(result, null, ex);
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            result.sendToTarget();
2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (pin2 != null && pin2.equals(mPin2Code)) {
212ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] supplyIccPin2: success!");
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mPin2UnlockAttempts = 0;
2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mSimFdnEnabledState = SimFdnState.NONE;
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (result != null) {
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                AsyncResult.forMessage(result, null, null);
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result.sendToTarget();
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (result != null) {
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mPin2UnlockAttempts ++;
2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
227ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] supplyIccPin2: failed! attempt=" +
2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mPin2UnlockAttempts);
2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mPin2UnlockAttempts >= 3) {
230ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.i(LOG_TAG, "[SimCmd] supplyIccPin2: set state to REQUIRE_PUK2");
2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSimFdnEnabledState = SimFdnState.REQUIRE_PUK2;
2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CommandException ex = new CommandException(
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    CommandException.Error.PASSWORD_INCORRECT);
2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(result, null, ex);
2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            result.sendToTarget();
2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
241cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void supplyIccPuk2(String puk2, String newPin2, Message result)  {
2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mSimFdnEnabledState != SimFdnState.REQUIRE_PUK2) {
244ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] supplyIccPuk2: wrong state, state=" +
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mSimLockedState);
2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CommandException ex = new CommandException(
2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    CommandException.Error.PASSWORD_INCORRECT);
2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(result, null, ex);
2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            result.sendToTarget();
2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (puk2 != null && puk2.equals(SIM_PUK2_CODE)) {
254ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] supplyIccPuk2: success!");
2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mSimFdnEnabledState = SimFdnState.NONE;
2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mPuk2UnlockAttempts = 0;
2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (result != null) {
2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                AsyncResult.forMessage(result, null, null);
2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result.sendToTarget();
2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (result != null) {
2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mPuk2UnlockAttempts ++;
2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
269ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] supplyIccPuk2: failed! attempt=" +
2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    mPuk2UnlockAttempts);
2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (mPuk2UnlockAttempts >= 10) {
272ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.i(LOG_TAG, "[SimCmd] supplyIccPuk2: set state to SIM_PERM_LOCKED");
2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSimFdnEnabledState = SimFdnState.SIM_PERM_LOCKED;
2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CommandException ex = new CommandException(
2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    CommandException.Error.PASSWORD_INCORRECT);
2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(result, null, ex);
2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            result.sendToTarget();
2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
283cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void changeIccPin(String oldPin, String newPin, Message result)  {
2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (oldPin != null && oldPin.equals(mPinCode)) {
2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mPinCode = newPin;
2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (result != null) {
2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                AsyncResult.forMessage(result, null, null);
2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result.sendToTarget();
2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (result != null) {
296ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] changeIccPin: pin failed!");
2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CommandException ex = new CommandException(
2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    CommandException.Error.PASSWORD_INCORRECT);
3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(result, null, ex);
3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            result.sendToTarget();
3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
305cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void changeIccPin2(String oldPin2, String newPin2, Message result)  {
3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (oldPin2 != null && oldPin2.equals(mPin2Code)) {
3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mPin2Code = newPin2;
3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (result != null) {
3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                AsyncResult.forMessage(result, null, null);
3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result.sendToTarget();
3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (result != null) {
318ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i(LOG_TAG, "[SimCmd] changeIccPin2: pin2 failed!");
3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            CommandException ex = new CommandException(
3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    CommandException.Error.PASSWORD_INCORRECT);
3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(result, null, ex);
3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            result.sendToTarget();
3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
327cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    changeBarringPassword(String facility, String oldPwd, String newPwd, Message result) {
3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
333cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setSuppServiceNotifications(boolean enable, Message result) {
3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, null);
3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (enable && mSsnNotifyOn) {
339ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.w(LOG_TAG, "Supp Service Notifications already enabled!");
3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSsnNotifyOn = enable;
3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryFacilityLock(String facility, String pin,
3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                   int serviceClass, Message result) {
3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        queryFacilityLockForApp(facility, pin, serviceClass, null, result);
3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryFacilityLockForApp(String facility, String pin, int serviceClass,
3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String appId, Message result) {
3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (facility != null && facility.equals(CommandsInterface.CB_FACILITY_BA_SIM)) {
3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (result != null) {
3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int[] r = new int[1];
3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                r[0] = (mSimLockEnabled ? 1 : 0);
358ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.i(LOG_TAG, "[SimCmd] queryFacilityLock: SIM is "
3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + (r[0] == 0 ? "unlocked" : "locked"));
3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                AsyncResult.forMessage(result, r, null);
3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result.sendToTarget();
3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else if (facility != null && facility.equals(CommandsInterface.CB_FACILITY_BA_FD)) {
3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (result != null) {
3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                int[] r = new int[1];
3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                r[0] = (mSimFdnEnabled ? 1 : 0);
368ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.i(LOG_TAG, "[SimCmd] queryFacilityLock: FDN is "
3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        + (r[0] == 0 ? "disabled" : "enabled"));
3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                AsyncResult.forMessage(result, r, null);
3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result.sendToTarget();
3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setFacilityLock(String facility, boolean lockEnabled, String pin, int serviceClass,
3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Message result) {
3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        setFacilityLockForApp(facility, lockEnabled, pin, serviceClass, null, result);
3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setFacilityLockForApp(String facility, boolean lockEnabled,
3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                 String pin, int serviceClass, String appId,
3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                 Message result) {
3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (facility != null &&
3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                facility.equals(CommandsInterface.CB_FACILITY_BA_SIM)) {
3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (pin != null && pin.equals(mPinCode)) {
392ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.i(LOG_TAG, "[SimCmd] setFacilityLock: pin is valid");
3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSimLockEnabled = lockEnabled;
3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (result != null) {
3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    AsyncResult.forMessage(result, null, null);
3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    result.sendToTarget();
3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return;
4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (result != null) {
404ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.i(LOG_TAG, "[SimCmd] setFacilityLock: pin failed!");
4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                CommandException ex = new CommandException(
4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        CommandException.Error.GENERIC_FAILURE);
4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                AsyncResult.forMessage(result, null, ex);
4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result.sendToTarget();
4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }  else if (facility != null &&
4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                facility.equals(CommandsInterface.CB_FACILITY_BA_FD)) {
4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (pin != null && pin.equals(mPin2Code)) {
416ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.i(LOG_TAG, "[SimCmd] setFacilityLock: pin2 is valid");
4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                mSimFdnEnabled = lockEnabled;
4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (result != null) {
4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    AsyncResult.forMessage(result, null, null);
4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    result.sendToTarget();
4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return;
4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (result != null) {
428ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.i(LOG_TAG, "[SimCmd] setFacilityLock: pin2 failed!");
4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                CommandException ex = new CommandException(
4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        CommandException.Error.GENERIC_FAILURE);
4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                AsyncResult.forMessage(result, null, ex);
4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result.sendToTarget();
4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
442cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void supplyNetworkDepersonalization(String netpin, Message result)  {
4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  returned message
4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  retMsg.obj = AsyncResult ar
4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result contains a List of DriverCall
4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *      The ar.result List is sorted by DriverCall.index
4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
455cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getCurrentCalls (Message result) {
4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if ((mState == RadioState.RADIO_ON) && !isSimLocked()) {
458ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            //Rlog.i("GSM", "[SimCmds] getCurrentCalls");
4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultSuccess(result, simulatedCallState.getDriverCalls());
4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
461ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            //Rlog.i("GSM", "[SimCmds] getCurrentCalls: RADIO_OFF or SIM not ready!");
4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultFail(result,
4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                new CommandException(
4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    CommandException.Error.RADIO_NOT_AVAILABLE));
4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  @deprecated
4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
471cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Deprecated
472cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getPDPContextList(Message result) {
4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        getDataCallList(result);
4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  returned message
4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  retMsg.obj = AsyncResult ar
4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
4810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
482ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville     *  ar.result contains a List of DataCallResponse
4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
484cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getDataCallList(Message result) {
486ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        resultSuccess(result, new ArrayList<DataCallResponse>(0));
4870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  returned message
4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  retMsg.obj = AsyncResult ar
4920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * CLIR_DEFAULT     == on "use subscription default value"
4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * CLIR_SUPPRESSION == on "CLIR suppression" (allow CLI presentation)
4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * CLIR_INVOCATION  == on "CLIR invocation" (restrict CLI presentation)
4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
500cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void dial (String address, int clirMode, Message result) {
5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        simulatedCallState.onDial(address);
5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, null);
5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  returned message
5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  retMsg.obj = AsyncResult ar
5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * CLIR_DEFAULT     == on "use subscription default value"
5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * CLIR_SUPPRESSION == on "CLIR suppression" (allow CLI presentation)
5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * CLIR_INVOCATION  == on "CLIR invocation" (restrict CLI presentation)
5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
518cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void dial(String address, int clirMode, UUSInfo uusInfo, Message result) {
5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        simulatedCallState.onDial(address);
5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, null);
5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
525cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getIMSI(Message result) {
5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        getIMSIForApp(null, result);
5280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  returned message
5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  retMsg.obj = AsyncResult ar
5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
5340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is String containing IMSI on success
5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
536cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getIMSIForApp(String aid, Message result) {
5380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, "012345678901234");
5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  returned message
5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  retMsg.obj = AsyncResult ar
5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is String containing IMEI on success
5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
548cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getIMEI(Message result) {
5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, "012345678901234");
5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  returned message
5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  retMsg.obj = AsyncResult ar
5560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is String containing IMEISV on success
5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
560cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getIMEISV(Message result) {
5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, "99");
5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Hang up one individual connection.
5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  returned message
5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  retMsg.obj = AsyncResult ar
5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  3GPP 22.030 6.5.5
5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  "Releases a specific active call X"
5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
576cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void hangupConnection (int gsmIndex, Message result) {
5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean success;
5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        success = simulatedCallState.onChld('1', (char)('0'+gsmIndex));
5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (!success){
583ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i("GSM", "[SimCmd] hangupConnection: resultFail");
5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultFail(result, new RuntimeException("Hangup Error"));
5850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
586ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.i("GSM", "[SimCmd] hangupConnection: resultSuccess");
5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultSuccess(result, null);
5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * 3GPP 22.030 6.5.5
5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  "Releases all held calls or sets User Determined User Busy (UDUB)
5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *   for a waiting call."
5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
599cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void hangupWaitingOrBackground (Message result) {
6010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean success;
6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        success = simulatedCallState.onChld('0', '\0');
6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (!success){
6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultFail(result, new RuntimeException("Hangup Error"));
6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultSuccess(result, null);
6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
6130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * 3GPP 22.030 6.5.5
6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * "Releases all active calls (if any exist) and accepts
6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  the other (held or waiting) call."
6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
6170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
6200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
621cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void hangupForegroundResumeBackground (Message result) {
6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean success;
6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        success = simulatedCallState.onChld('1', '\0');
6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (!success){
6280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultFail(result, new RuntimeException("Hangup Error"));
6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
6300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultSuccess(result, null);
6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
6350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * 3GPP 22.030 6.5.5
6360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * "Places all active calls (if any exist) on hold and accepts
6370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  the other (held or waiting) call."
6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
6400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
643cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void switchWaitingOrHoldingAndActive (Message result) {
6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean success;
6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        success = simulatedCallState.onChld('2', '\0');
6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (!success){
6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultFail(result, new RuntimeException("Hangup Error"));
6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultSuccess(result, null);
6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * 3GPP 22.030 6.5.5
6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * "Adds a held call to the conversation"
6590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
6600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
664cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void conference (Message result) {
6660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean success;
6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        success = simulatedCallState.onChld('3', '\0');
6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (!success){
6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultFail(result, new RuntimeException("Hangup Error"));
6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultSuccess(result, null);
6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * 3GPP 22.030 6.5.5
6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * "Connects the two calls and disconnects the subscriber from both calls"
6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
685cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void explicitCallTransfer (Message result) {
6870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean success;
6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        success = simulatedCallState.onChld('4', '\0');
6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (!success){
6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultFail(result, new RuntimeException("Hangup Error"));
6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultSuccess(result, null);
6950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * 3GPP 22.030 6.5.5
7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * "Places all active calls on hold except call X with which
7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  communication shall be supported."
7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
703cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void separateConnection (int gsmIndex, Message result) {
7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean success;
7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        char ch = (char)(gsmIndex + '0');
7080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        success = simulatedCallState.onChld('2', ch);
7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (!success){
7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultFail(result, new RuntimeException("Hangup Error"));
7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
7130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultSuccess(result, null);
7140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
7150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
7180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
7190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
7200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
7210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
7220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
723cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
7240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void acceptCall (Message result) {
7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean success;
7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        success = simulatedCallState.onAnswer();
7280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (!success){
7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultFail(result, new RuntimeException("Hangup Error"));
7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultSuccess(result, null);
7330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
7340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  also known as UDUB
7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
7390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
7400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
7410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
742cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
7430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void rejectCall (Message result) {
7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        boolean success;
7450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        success = simulatedCallState.onChld('0', '\0');
7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (!success){
7490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultFail(result, new RuntimeException("Hangup Error"));
7500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
7510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultSuccess(result, null);
7520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
7530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * cause code returned as Integer in Message.obj.response
7570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns integer cause code defined in TS 24.008
7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Annex H or closest approximation.
7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Most significant codes:
7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * - Any defined in 22.001 F.4 (for generating busy/congestion)
7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * - Cause 68: ACM >= ACMMax
7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
763cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getLastCallFailCause (Message result) {
7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int[] ret = new int[1];
7660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
76722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        ret[0] = mNextCallFailCause;
7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, ret);
7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @deprecated
7730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
774cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Deprecated
775cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
7760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getLastPdpFailCause (Message result) {
7770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
7780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
780cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getLastDataCallFailCause(Message result) {
7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //
7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
786cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setMute (boolean enableMute, Message result) {unimplemented(result);}
7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
789cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getMute (Message result) {unimplemented(result);}
7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
7930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj is an AsyncResult
7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.result is an int[2]
7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.result[0] is received signal strength (0-31, 99)
7960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.result[1] is  bit error rate (0-7, 99)
7970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * as defined in TS 27.007 8.5
7980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
799cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getSignalStrength (Message result) {
8010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int ret[] = new int[2];
8020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[0] = 23;
8040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[1] = 0;
8050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, ret);
8070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     /**
8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Assign a specified band for RF configuration.
8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param bandMode one of BM_*_BAND
8130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param result is callback message
8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
815cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setBandMode (int bandMode, Message result) {
8170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, null);
8180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
8210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Query the list of band mode supported by RF.
8220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
8230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param result is callback message
8248a3cf2d80c0cdee7360404dd0ac08ca6f9a7e246Derek Tan     *        ((AsyncResult)response.obj).result  is an int[] where int[0] is
8258a3cf2d80c0cdee7360404dd0ac08ca6f9a7e246Derek Tan     *        the size of the array and the rest of each element representing
8268a3cf2d80c0cdee7360404dd0ac08ca6f9a7e246Derek Tan     *        one available BM_*_BAND
8270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
828cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryAvailableBandMode (Message result) {
8300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int ret[] = new int [4];
8310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[0] = 4;
8330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[1] = Phone.BM_US_BAND;
8340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[2] = Phone.BM_JPN_BAND;
8350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[3] = Phone.BM_AUS_BAND;
8360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, ret);
8380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
8410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
8420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
843cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendTerminalResponse(String contents, Message response) {
8450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(response, null);
8460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
8490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
8500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
851cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendEnvelope(String contents, Message response) {
8530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(response, null);
8540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
8570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
8580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
859cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendEnvelopeWithStatus(String contents, Message response) {
8610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(response, null);
8620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
8650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
867cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void handleCallSetupRequestFromSim(
8690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            boolean accept, Message response) {
8700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(response, null);
8710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
8740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.result is an String[14]
8750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * See ril.h for details
8760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
8770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Please note that registration state 4 ("unknown") is treated
8780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * as "out of service" above
8790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
880cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getVoiceRegistrationState (Message result) {
8820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String ret[] = new String[14];
8830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[0] = "5"; // registered roam
8850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[1] = null;
8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[2] = null;
8870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[3] = null;
8880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[4] = null;
8890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[5] = null;
8900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[6] = null;
8910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[7] = null;
8920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[8] = null;
8930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[9] = null;
8940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[10] = null;
8950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[11] = null;
8960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[12] = null;
8970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[13] = null;
8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, ret);
9000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
9030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.result is an String[4]
9040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.result[0] is registration state 0-5 from TS 27.007 7.2
9050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.result[1] is LAC if registered or NULL if not
9060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.result[2] is CID if registered or NULL if not
9070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.result[3] indicates the available radio technology, where:
9080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *      0 == unknown
9090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *      1 == GPRS only
9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *      2 == EDGE
9110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *      3 == UMTS
9120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
9130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * valid LAC are 0x0000 - 0xffff
9140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * valid CID are 0x00000000 - 0xffffffff
9150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
9160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Please note that registration state 4 ("unknown") is treated
9170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * as "out of service" in the Android telephony system
9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
919cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getDataRegistrationState (Message result) {
9210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String ret[] = new String[4];
9220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[0] = "5"; // registered roam
9240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[1] = null;
9250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[2] = null;
9260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[3] = "2";
9270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, ret);
9290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
9320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.result is a String[3]
9330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.result[0] is long alpha or null if unregistered
9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.result[1] is short alpha or null if unregistered
9350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.result[2] is numeric or null if unregistered
9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
937cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getOperator(Message result) {
9390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String[] ret = new String[3];
9400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[0] = "El Telco Loco";
9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[1] = "Telco Loco";
9430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[2] = "001001";
9440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, ret);
9460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
9490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
9500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
9510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
9520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
953cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendDtmf(char c, Message result) {
9550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, null);
9560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
9590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
9600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
9610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
9620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
963cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void startDtmf(char c, Message result) {
9650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, null);
9660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
9690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
9700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
9710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
9720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
973cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void stopDtmf(Message result) {
9750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, null);
9760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
9790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.exception carries exception on failure
9800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.userObject contains the original value of result.obj
9810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  ar.result is null on success and failure
9820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
983cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendBurstDtmf(String dtmfString, int on, int off, Message result) {
9850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, null);
9860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
9890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * smscPDU is smsc address in PDU form GSM BCD format prefixed
9900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *      by a length byte (as expected by TS 27.005) or NULL for default SMSC
9910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * pdu is SMS in PDU format as an ASCII hex string
9920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *      less the SMSC address
9930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
994cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendSMS (String smscPDU, String pdu, Message result) {unimplemented(result);}
9960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9976ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi    /**
9986ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi     * Send an SMS message, Identical to sendSMS,
9996ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi     * except that more messages are expected to be sent soon
10006ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi     * smscPDU is smsc address in PDU form GSM BCD format prefixed
10016ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi     *      by a length byte (as expected by TS 27.005) or NULL for default SMSC
10026ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi     * pdu is SMS in PDU format as an ASCII hex string
10036ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi     *      less the SMSC address
10046ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi     */
10056ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi    @Override
10066ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi    public void sendSMSExpectMore (String smscPDU, String pdu, Message result) {
10076ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi        unimplemented(result);
10086ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi    }
10096ad88a8a2caf739e78c8d5f7f50fc7fa84a07ca7Chaitanya Saggurthi
1010cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void deleteSmsOnSim(int index, Message response) {
1012ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.d(LOG_TAG, "Delete message at index " + index);
10130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
10140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1016cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void deleteSmsOnRuim(int index, Message response) {
1018ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.d(LOG_TAG, "Delete RUIM message at index " + index);
10190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
10200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1022cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void writeSmsToSim(int status, String smsc, String pdu, Message response) {
1024ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.d(LOG_TAG, "Write SMS to SIM with status " + status);
10250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
10260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1028cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void writeSmsToRuim(int status, String pdu, Message response) {
1030ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.d(LOG_TAG, "Write SMS to RUIM with status " + status);
10310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
10320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1034cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setupDataCall(String radioTechnology, String profile,
10360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String apn, String user, String password, String authType,
10370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String protocol, Message result) {
10380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
10390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1041cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void deactivateDataCall(int cid, int reason, Message result) {unimplemented(result);}
10430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1044cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setPreferredNetworkType(int networkType , Message result) {
10460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mNetworkType = networkType;
10470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, null);
10480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1050cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getPreferredNetworkType(Message result) {
10520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int ret[] = new int[1];
10530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[0] = mNetworkType;
10550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, ret);
10560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1058cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getNeighboringCids(Message result) {
10600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int ret[] = new int[7];
10610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[0] = 6;
10630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 1; i<7; i++) {
10640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            ret[i] = i;
10650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
10660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, ret);
10670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1069cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setLocationUpdates(boolean enable, Message response) {
10710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
10720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1074cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getSmscAddress(Message result) {
10760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
10770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1079cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setSmscAddress(String address, Message result) {
10810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
10820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1084cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reportSmsMemoryStatus(boolean available, Message result) {
10860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
10870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1089cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void reportStkServiceIsRunning(Message result) {
10910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, null);
10920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
10950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getCdmaSubscriptionSource(Message result) {
10960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
10970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private boolean isSimLocked() {
11000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mSimLockedState != SimLockState.NONE) {
11010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return true;
11020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
11030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return false;
11040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1106cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setRadioPower(boolean on, Message result) {
11080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if(on) {
11090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            setRadioState(RadioState.RADIO_ON);
11100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
11110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            setRadioState(RadioState.RADIO_OFF);
11120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
11130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1116cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void acknowledgeLastIncomingGsmSms(boolean success, int cause, Message result) {
11180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
11190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1121cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message result) {
11230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
11240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1126cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu,
11280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Message result) {
11290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
11300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1132cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void iccIO(int command, int fileid, String path, int p1, int p2, int p3, String data,
11340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String pin2, Message response) {
11350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        iccIOForApp(command, fileid, path, p1, p2, p3, data,pin2, null, response);
11360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
11390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * parameters equivalent to 27.007 AT+CRSM command
11400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj will be an AsyncResult
11410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj.userObj will be a SimIoResult on success
11420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1143cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void iccIOForApp (int command, int fileid, String path, int p1, int p2,
11450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                       int p3, String data, String pin2, String aid, Message result) {
11460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
11470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
11500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * (AsyncResult)response.obj).result is an int[] with element [0] set to
11510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * 1 for "CLIP is provisioned", and 0 for "CLIP is not provisioned".
11520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
11530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response is callback message
11540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1155cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryCLIP(Message response) { unimplemented(response); }
11570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
11600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj will be a an int[2]
11610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
11620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj[0] will be TS 27.007 +CLIR parameter 'n'
11630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  0 presentation indicator is used according to the subscription of the CLIR service
11640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  1 CLIR invocation
11650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  2 CLIR suppression
11660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
11670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj[1] will be TS 27.007 +CLIR parameter 'm'
11680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  0 CLIR not provisioned
11690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  1 CLIR provisioned in permanent mode
11700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  2 unknown (e.g. no network, etc.)
11710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  3 CLIR temporary mode presentation restricted
11720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  4 CLIR temporary mode presentation allowed
11730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
11740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1175cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getCLIR(Message result) {unimplemented(result);}
11770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
11790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * clirMode is one of the CLIR_* constants above
11800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
11810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * response.obj is null
11820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
11830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1184cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCLIR(int clirMode, Message result) {unimplemented(result);}
11860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
11880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * (AsyncResult)response.obj).result is an int[] with element [0] set to
11890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * 0 for disabled, 1 for enabled.
11900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
11910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param serviceClass is a sum of SERVICE_CLASS_*
11920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response is callback message
11930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
11940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1195cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryCallWaiting(int serviceClass, Message response) {
11970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
11980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
12010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param enable is true to enable, false to disable
12020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param serviceClass is a sum of SERVICE_CLASS_*
12030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response is callback message
12040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
12050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1206cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCallWaiting(boolean enable, int serviceClass,
12080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Message response) {
12090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
12100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
12130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param action is one of CF_ACTION_*
12140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param cfReason is one of CF_REASON_*
12150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param serviceClass is a sum of SERVICE_CLASSS_*
12160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1217cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCallForward(int action, int cfReason, int serviceClass,
12190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String number, int timeSeconds, Message result) {unimplemented(result);}
12200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
12220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * cfReason is one of CF_REASON_*
12230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
12240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * ((AsyncResult)response.obj).result will be an array of
12250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * CallForwardInfo's
12260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
12270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * An array of length 0 means "disabled for all codes"
12280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1229cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryCallForwardStatus(int cfReason, int serviceClass,
12310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String number, Message result) {unimplemented(result);}
12320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1233cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setNetworkSelectionModeAutomatic(Message result) {unimplemented(result);}
1235cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void exitEmergencyCallbackMode(Message result) {unimplemented(result);}
1237cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setNetworkSelectionModeManual(
12390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String operatorNumeric, Message result) {unimplemented(result);}
12400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
12420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Queries whether the current network selection mode is automatic
12430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * or manual
12440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
12450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * ((AsyncResult)response.obj).result  is an int[] with element [0] being
12460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * a 0 for automatic selection and a 1 for manual selection
12470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
12480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1249cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getNetworkSelectionMode(Message result) {
12510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        int ret[] = new int[1];
12520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        ret[0] = 0;
12540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, ret);
12550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
12580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Queries the currently available networks
12590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
12600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * ((AsyncResult)response.obj).result  is a List of NetworkInfo objects
12610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1262cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getAvailableNetworks(Message result) {unimplemented(result);}
12640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1265cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getBasebandVersion (Message result) {
12670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(result, "SimulatedCommands");
12680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
127109b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja     * Simulates an Stk Call Control Alpha message
127209b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja     * @param alphaString Alpha string to send.
127309b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja     */
127409b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja    public void triggerIncomingStkCcAlpha(String alphaString) {
127509b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        if (mCatCcAlphaRegistrant != null) {
127609b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja            mCatCcAlphaRegistrant.notifyResult(alphaString);
127709b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        }
127809b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja    }
127909b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja
128009b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja    public void sendStkCcAplha(String alphaString) {
128109b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja        triggerIncomingStkCcAlpha(alphaString);
128209b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja    }
128309b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja
128409b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja    /**
12850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Simulates an incoming USSD message
12860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param statusCode  Status code string. See <code>setOnUSSD</code>
12870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * in CommandsInterface.java
12880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param message Message text to send or null if none
12890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1290cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void triggerIncomingUssd(String statusCode, String message) {
12920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mUSSDRegistrant != null) {
12930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String[] result = {statusCode, message};
12940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mUSSDRegistrant.notifyResult(result);
12950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
12960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1299cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendUSSD (String ussdString, Message result) {
13010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // We simulate this particular sequence
13030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (ussdString.equals("#646#")) {
13040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultSuccess(result, null);
13050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // 0 == USSD-Notify
13070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            triggerIncomingUssd("0", "You have NNN minutes remaining.");
13080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
13090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            resultSuccess(result, null);
13100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            triggerIncomingUssd("0", "All Done");
13120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
13130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // inherited javadoc suffices
1316cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void cancelPendingUssd (Message response) {
13180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        resultSuccess(response, null);
13190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1322cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void resetRadio(Message result) {
13240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
13250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1327cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void invokeOemRilRequestRaw(byte[] data, Message response) {
13290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Just echo back data
13300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (response != null) {
13310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(response).result = data;
13320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response.sendToTarget();
13330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
13340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1336cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void invokeOemRilRequestStrings(String[] strings, Message response) {
13380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Just echo back data
13390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (response != null) {
13400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(response).result = strings;
13410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            response.sendToTarget();
13420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
13430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** SimulatedRadioControl
13460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** Start the simulated phone ringing */
1349cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    triggerRing(String number) {
13520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        simulatedCallState.triggerRing(number);
13530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mCallStateRegistrants.notifyRegistrants();
13540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1356cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    progressConnectingCallState() {
13590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        simulatedCallState.progressConnectingCallState();
13600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mCallStateRegistrants.notifyRegistrants();
13610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** If a call is DIALING or ALERTING, progress it all the way to ACTIVE */
1364cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    progressConnectingToActive() {
13670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        simulatedCallState.progressConnectingToActive();
13680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mCallStateRegistrants.notifyRegistrants();
13690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** automatically progress mobile originated calls to ACTIVE.
13720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  default to true
13730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1374cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setAutoProgressConnectingCall(boolean b) {
13770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        simulatedCallState.setAutoProgressConnectingCall(b);
13780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1380cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setNextDialFailImmediately(boolean b) {
13830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        simulatedCallState.setNextDialFailImmediately(b);
13840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1386cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setNextCallFailCause(int gsmCause) {
138922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mNextCallFailCause = gsmCause;
13900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1392cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
13940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    triggerHangupForeground() {
13950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        simulatedCallState.triggerHangupForeground();
13960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mCallStateRegistrants.notifyRegistrants();
13970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** hangup holding calls */
1400cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    triggerHangupBackground() {
14030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        simulatedCallState.triggerHangupBackground();
14040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mCallStateRegistrants.notifyRegistrants();
14050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1407cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void triggerSsn(int type, int code) {
14090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SuppServiceNotification not = new SuppServiceNotification();
14100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        not.notificationType = type;
14110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        not.code = code;
14120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSsnRegistrant.notifyRegistrant(new AsyncResult(null, not, null));
14130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1415cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    shutdown() {
14180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        setRadioState(RadioState.RADIO_UNAVAILABLE);
14190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Looper looper = mHandlerThread.getLooper();
14200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (looper != null) {
14210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            looper.quit();
14220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
14230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** hangup all */
14260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1427cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    triggerHangupAll() {
14300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        simulatedCallState.triggerHangupAll();
14310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mCallStateRegistrants.notifyRegistrants();
14320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1434cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    triggerIncomingSMS(String message) {
14370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //TODO
14380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1440cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    pauseResponses() {
144322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mPausedResponseCount++;
14440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1446cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
14470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
14480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    resumeResponses() {
144922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mPausedResponseCount--;
14500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
145122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        if (mPausedResponseCount == 0) {
145222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            for (int i = 0, s = mPausedResponses.size(); i < s ; i++) {
145322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                mPausedResponses.get(i).sendToTarget();
14540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
145522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            mPausedResponses.clear();
14560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
1457ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.e("GSM", "SimulatedCommands.resumeResponses < 0");
14580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
14590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //***** Private Methods
14620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void unimplemented(Message result) {
14640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (result != null) {
14650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(result).exception
14660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                = new RuntimeException("Unimplemented");
14670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
146822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            if (mPausedResponseCount > 0) {
146922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                mPausedResponses.add(result);
14700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else {
14710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result.sendToTarget();
14720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
14730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
14740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void resultSuccess(Message result, Object ret) {
14770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (result != null) {
14780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(result).result = ret;
147922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            if (mPausedResponseCount > 0) {
148022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                mPausedResponses.add(result);
14810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else {
14820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result.sendToTarget();
14830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
14840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
14850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void resultFail(Message result, Throwable tr) {
14880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (result != null) {
14890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AsyncResult.forMessage(result).exception = tr;
149022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            if (mPausedResponseCount > 0) {
149122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                mPausedResponses.add(result);
14920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } else {
14930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                result.sendToTarget();
14940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
14950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
14960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // ***** Methods for CDMA support
1499cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getDeviceIdentity(Message response) {
1502ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.w(LOG_TAG, "CDMA not implemented in SimulatedCommands");
15030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
15040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1506cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getCDMASubscription(Message response) {
1509ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.w(LOG_TAG, "CDMA not implemented in SimulatedCommands");
15100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
15110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1513cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setCdmaSubscriptionSource(int cdmaSubscriptionType, Message response) {
1516ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.w(LOG_TAG, "CDMA not implemented in SimulatedCommands");
15170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
15180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1520cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryCdmaRoamingPreference(Message response) {
1522ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.w(LOG_TAG, "CDMA not implemented in SimulatedCommands");
15230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
15240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1526cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) {
1528ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.w(LOG_TAG, "CDMA not implemented in SimulatedCommands");
15290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
15300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1532cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void
15340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    setPhoneType(int phoneType) {
1535ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.w(LOG_TAG, "CDMA not implemented in SimulatedCommands");
15360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1538cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getPreferredVoicePrivacy(Message result) {
1540ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.w(LOG_TAG, "CDMA not implemented in SimulatedCommands");
15410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
15420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1544cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setPreferredVoicePrivacy(boolean enable, Message result) {
1546ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.w(LOG_TAG, "CDMA not implemented in SimulatedCommands");
15470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(result);
15480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
15510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  Set the TTY mode
15520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
15530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param ttyMode is one of the following:
15540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * - {@link com.android.internal.telephony.Phone#TTY_MODE_OFF}
15550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * - {@link com.android.internal.telephony.Phone#TTY_MODE_FULL}
15560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * - {@link com.android.internal.telephony.Phone#TTY_MODE_HCO}
15570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * - {@link com.android.internal.telephony.Phone#TTY_MODE_VCO}
15580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response is callback message
15590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1560cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setTTYMode(int ttyMode, Message response) {
1562ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.w(LOG_TAG, "Not implemented in SimulatedCommands");
15630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
15640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
15670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  Query the TTY mode
15680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * (AsyncResult)response.obj).result is an int[] with element [0] set to
15690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * tty mode:
15700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * - {@link com.android.internal.telephony.Phone#TTY_MODE_OFF}
15710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * - {@link com.android.internal.telephony.Phone#TTY_MODE_FULL}
15720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * - {@link com.android.internal.telephony.Phone#TTY_MODE_HCO}
15730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * - {@link com.android.internal.telephony.Phone#TTY_MODE_VCO}
15740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param response is callback message
15750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1576cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryTTYMode(Message response) {
1578ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.w(LOG_TAG, "CDMA not implemented in SimulatedCommands");
15790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
15800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
15830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
15840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1585cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendCDMAFeatureCode(String FeatureCode, Message response) {
1587ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.w(LOG_TAG, "CDMA not implemented in SimulatedCommands");
15880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
15890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
15910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
15920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
15930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1594cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
15950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendCdmaSms(byte[] pdu, Message response){
1596ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville       Rlog.w(LOG_TAG, "CDMA not implemented in SimulatedCommands");
15970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
15980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1599cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaBroadcastActivation(boolean activate, Message response) {
16010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1605cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getCdmaBroadcastConfig(Message response) {
16070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1611cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1612a63f55cf17629426d976830429a7612387532195Rika Brooks    public void setCdmaBroadcastConfig(CdmaSmsBroadcastConfigInfo[] configs, Message response) {
16130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void forceDataDormancy(Message response) {
16170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1621cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setGsmBroadcastActivation(boolean activate, Message response) {
16230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1627cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response) {
16290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1632cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getGsmBroadcastConfig(Message response) {
16340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
16380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void supplyIccPinForApp(String pin, String aid, Message response) {
16390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
16430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void supplyIccPukForApp(String puk, String newPin, String aid, Message response) {
16440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
16480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void supplyIccPin2ForApp(String pin2, String aid, Message response) {
16490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
16530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void supplyIccPuk2ForApp(String puk2, String newPin2, String aid, Message response) {
16540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
16580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void changeIccPinForApp(String oldPin, String newPin, String aidPtr, Message response) {
16590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
16620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
16630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void changeIccPin2ForApp(String oldPin2, String newPin2, String aidPtr,
16640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Message response) {
16650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1668cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
16690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void requestIsimAuthentication(String nonce, Message response) {
16700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1673cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
1674ce083ae9d277bea9fbc1c143766adf1013f4a50eAmit Mahajan    public void requestIccSimAuthentication(int authContext, String data, String aid, Message response) {
1675a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        unimplemented(response);
1676a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
1677a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
1678a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    @Override
16790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getVoiceRadioTechnology(Message response) {
16800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        unimplemented(response);
16810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
16825fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
16835fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    @Override
16845fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    public void getCellInfoList(Message response) {
16855fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        unimplemented(response);
16865fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    }
16875fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
16885fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    @Override
16895fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    public void setCellInfoListRate(int rateInMillis, Message response) {
16905fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        unimplemented(response);
16915fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    }
16925d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi
16935d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi    @Override
16945d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi    public void setInitialAttachApn(String apn, String protocol, int authType, String username,
16955d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi            String password, Message result) {
16965d5eea6ed231163c225144316b0d1913d48678a4Sungmin Choi    }
16971260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
16981260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    @Override
16999d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan    public void setDataProfile(DataProfile[] dps, Message result) {
17009d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan    }
17019d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan
17029d4ec7d45061f1da05f16cd244eb0a798e7f36bbAmit Mahajan    @Override
17031260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    public void getImsRegistrationState(Message response) {
17041260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        unimplemented(response);
17051260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
17061260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
17071260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    @Override
17081260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    public void sendImsCdmaSms(byte[] pdu, int retry, int messageRef,
17091260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            Message response){
17101260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        unimplemented(response);
17111260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
17121260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
17131260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    @Override
17141260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    public void sendImsGsmSms(String smscPDU, String pdu,
17151260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            int retry, int messageRef, Message response){
17161260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        unimplemented(response);
17171260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
171840d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
171940d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    @Override
172040d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    public void iccOpenLogicalChannel(String AID, Message response) {
172140d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        unimplemented(response);
172240d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    }
172340d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
172440d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    @Override
172540d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    public void iccCloseLogicalChannel(int channel, Message response) {
172640d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        unimplemented(response);
172740d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    }
172840d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
172940d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    @Override
173040d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    public void iccTransmitApduLogicalChannel(int channel, int cla, int instruction,
173140d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            int p1, int p2, int p3, String data, Message response) {
173240d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        unimplemented(response);
173340d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    }
173440d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal
173540d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    @Override
173640d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    public void iccTransmitApduBasicChannel(int cla, int instruction, int p1, int p2,
173740d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal            int p3, String data, Message response) {
173840d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal        unimplemented(response);
173940d1d394302d83eb56f66cf08daecc612c97cd28Shishir Agrawal    }
1740f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
1741f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    @Override
1742f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    public void nvReadItem(int itemID, Message response) {
1743f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        unimplemented(response);
1744f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    }
1745f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
1746f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    @Override
1747f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    public void nvWriteItem(int itemID, String itemValue, Message response) {
1748f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        unimplemented(response);
1749f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    }
1750f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
1751f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    @Override
1752f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    public void nvWriteCdmaPrl(byte[] preferredRoamingList, Message response) {
1753f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        unimplemented(response);
1754f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    }
1755f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby
1756f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    @Override
1757f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    public void nvResetConfig(int resetType, Message response) {
1758f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby        unimplemented(response);
1759f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby    }
1760a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville
1761a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    @Override
1762a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    public void getHardwareConfig(Message result) {
1763a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        unimplemented(result);
1764a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
176503586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla
176603586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla    @Override
176703586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla    public void requestShutdown(Message result) {
176803586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla        setRadioState(RadioState.RADIO_UNAVAILABLE);
176903586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla    }
17700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
1771