diff options
| author | Wink Saville <wink@google.com> | 2012-01-10 17:04:21 -0800 |
|---|---|---|
| committer | Wink Saville <wink@google.com> | 2012-01-10 17:04:21 -0800 |
| commit | 7c20c4607c4402589ce4800a0c49127876dbc6bd (patch) | |
| tree | 78a6318a612d1bae0916317ba1ffbb24b3dbe775 /telephony | |
| parent | b282e08ab641d4fc74d0324b7a0ce30926638dd5 (diff) | |
| download | frameworks_base-7c20c4607c4402589ce4800a0c49127876dbc6bd.zip frameworks_base-7c20c4607c4402589ce4800a0c49127876dbc6bd.tar.gz frameworks_base-7c20c4607c4402589ce4800a0c49127876dbc6bd.tar.bz2 | |
Add ril.test.emergency system property.
This allows testing of emergency numbers by dialing an emergency
number but having it remapped to another number.
Bug: 5479306
Change-Id: Ia9bb53e2e2e47f78dc9f75d3add6f785d10e4b2a
Diffstat (limited to 'telephony')
6 files changed, 93 insertions, 4 deletions
diff --git a/telephony/java/com/android/internal/telephony/BaseCommands.java b/telephony/java/com/android/internal/telephony/BaseCommands.java index 893d7a8..35cdf9b 100644 --- a/telephony/java/com/android/internal/telephony/BaseCommands.java +++ b/telephony/java/com/android/internal/telephony/BaseCommands.java @@ -715,4 +715,7 @@ public abstract class BaseCommands implements CommandsInterface { "' lteOnCdmaProductType='" + sLteOnCdmaProductType + "'"); return retVal; } + + @Override + public void testingEmergencyCall() {} } diff --git a/telephony/java/com/android/internal/telephony/CallTracker.java b/telephony/java/com/android/internal/telephony/CallTracker.java index 31f9e18..958481c 100644 --- a/telephony/java/com/android/internal/telephony/CallTracker.java +++ b/telephony/java/com/android/internal/telephony/CallTracker.java @@ -19,6 +19,8 @@ package com.android.internal.telephony; import android.os.AsyncResult; import android.os.Handler; import android.os.Message; +import android.os.SystemProperties; +import android.text.TextUtils; import android.util.Log; import com.android.internal.telephony.CommandException; @@ -116,6 +118,48 @@ public abstract class CallTracker extends Handler { return pendingOperations == 0; } + /** + * Routine called from dial to check if the number is a test Emergency number + * and if so remap the number. This allows a short emergency number to be remapped + * to a regular number for testing how the frameworks handles emergency numbers + * without actually calling an emergency number. + * + * This is not a full test and is not a substitute for testing real emergency + * numbers but can be useful. + * + * To use this feature set a system property ril.test.emergencynumber to a pair of + * numbers separated by a colon. If the first number matches the number parameter + * this routine returns the second number. Example: + * + * ril.test.emergencynumber=112:1-123-123-45678 + * + * To test Dial 112 take call then hang up on MO device to enter ECM + * see RIL#processSolicited RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND + * + * @param number to test if it should be remapped + * @return the same number or the remapped number. + */ + protected String checkForTestEmergencyNumber(String dialString) { + String testEn = SystemProperties.get("ril.test.emergencynumber"); + if (DBG_POLL) { + log("checkForTestEmergencyNumber: dialString=" + dialString + + " testEn=" + testEn); + } + if (!TextUtils.isEmpty(testEn)) { + String values[] = testEn.split(":"); + log("checkForTestEmergencyNumber: values.length=" + values.length); + if (values.length == 2) { + if (values[0].equals( + android.telephony.PhoneNumberUtils.stripSeparators(dialString))) { + cm.testingEmergencyCall(); + log("checkForTestEmergencyNumber: remap " + + dialString + " to " + values[1]); + dialString = values[1]; + } + } + } + return dialString; + } //***** Overridden from Handler public abstract void handleMessage (Message msg); diff --git a/telephony/java/com/android/internal/telephony/CommandsInterface.java b/telephony/java/com/android/internal/telephony/CommandsInterface.java index ee39850..4abb20f 100644 --- a/telephony/java/com/android/internal/telephony/CommandsInterface.java +++ b/telephony/java/com/android/internal/telephony/CommandsInterface.java @@ -1559,4 +1559,9 @@ public interface CommandsInterface { * @param response a callback message with the String response in the obj field */ public void requestIsimAuthentication(String nonce, Message response); + + /** + * Notifiy that we are testing an emergency call + */ + public void testingEmergencyCall(); } diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java index 718a4fd..95842bb 100644 --- a/telephony/java/com/android/internal/telephony/RIL.java +++ b/telephony/java/com/android/internal/telephony/RIL.java @@ -59,6 +59,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; +import java.util.concurrent.atomic.AtomicBoolean; /** * {@hide} @@ -231,6 +232,9 @@ public final class RIL extends BaseCommands implements CommandsInterface { Object mLastNITZTimeInfo; + // When we are testing emergency calls + AtomicBoolean mTestingEmergencyCall = new AtomicBoolean(false); + //***** Events static final int EVENT_SEND = 1; @@ -2194,7 +2198,16 @@ public final class RIL extends BaseCommands implements CommandsInterface { case RIL_REQUEST_GET_IMSI: ret = responseString(p); break; case RIL_REQUEST_HANGUP: ret = responseVoid(p); break; case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: ret = responseVoid(p); break; - case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: ret = responseVoid(p); break; + case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: { + if (mTestingEmergencyCall.getAndSet(false)) { + if (mEmergencyCallbackModeRegistrant != null) { + riljLog("testing emergency call, notify ECM Registrants"); + mEmergencyCallbackModeRegistrant.notifyRegistrant(); + } + } + ret = responseVoid(p); + break; + } case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: ret = responseVoid(p); break; case RIL_REQUEST_CONFERENCE: ret = responseVoid(p); break; case RIL_REQUEST_UDUB: ret = responseVoid(p); break; @@ -2985,6 +2998,11 @@ public final class RIL extends BaseCommands implements CommandsInterface { num = p.readInt(); response = new ArrayList<DriverCall>(num); + if (RILJ_LOGV) { + riljLog("responseCallList: num=" + num + + " mEmergencyCallbackModeRegistrant=" + mEmergencyCallbackModeRegistrant + + " mTestingEmergencyCall=" + mTestingEmergencyCall.get()); + } for (int i = 0 ; i < num ; i++) { dc = new DriverCall(); @@ -3036,6 +3054,14 @@ public final class RIL extends BaseCommands implements CommandsInterface { Collections.sort(response); + if ((num == 0) && mTestingEmergencyCall.getAndSet(false)) { + if (mEmergencyCallbackModeRegistrant != null) { + riljLog("responseCallList: call ended, testing emergency call," + + " notify ECM Registrants"); + mEmergencyCallbackModeRegistrant.notifyRegistrant(); + } + } + return response; } @@ -3762,4 +3788,13 @@ public final class RIL extends BaseCommands implements CommandsInterface { send(rr); } + + /* (non-Javadoc) + * @see com.android.internal.telephony.BaseCommands#testingEmergencyCall() + */ + @Override + public void testingEmergencyCall() { + if (RILJ_LOGD) riljLog("testingEmergencyCall"); + mTestingEmergencyCall.set(true); + } } diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java index 83efc51..f918dce 100644 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java @@ -210,7 +210,8 @@ public final class CdmaCallTracker extends CallTracker { return dialThreeWay(dialString); } - pendingMO = new CdmaConnection(phone.getContext(), dialString, this, foregroundCall); + pendingMO = new CdmaConnection(phone.getContext(), checkForTestEmergencyNumber(dialString), + this, foregroundCall); hangupPendingMO = false; if (pendingMO.address == null || pendingMO.address.length() == 0 @@ -259,7 +260,7 @@ public final class CdmaCallTracker extends CallTracker { // Attach the new connection to foregroundCall pendingMO = new CdmaConnection(phone.getContext(), - dialString, this, foregroundCall); + checkForTestEmergencyNumber(dialString), this, foregroundCall); cm.sendCDMAFeatureCode(pendingMO.address, obtainMessage(EVENT_THREE_WAY_DIAL_L2_RESULT_CDMA)); return pendingMO; diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmCallTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmCallTracker.java index 06f310c..425afe6 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmCallTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmCallTracker.java @@ -198,7 +198,8 @@ public final class GsmCallTracker extends CallTracker { throw new CallStateException("cannot dial in current state"); } - pendingMO = new GsmConnection(phone.getContext(), dialString, this, foregroundCall); + pendingMO = new GsmConnection(phone.getContext(), checkForTestEmergencyNumber(dialString), + this, foregroundCall); hangupPendingMO = false; if (pendingMO.address == null || pendingMO.address.length() == 0 |
