Merge mozilla-central into mozilla-inbound on a CLOSED TREE

This commit is contained in:
Ehsan Akhgari 2012-05-02 19:40:48 -04:00
Родитель ac34c40e48 bab14518ab
Коммит 0c4b3513cd
4 изменённых файлов: 104 добавлений и 30 удалений

Просмотреть файл

@ -435,7 +435,7 @@ pref("dom.sms.enabled", true);
pref("dom.sms.whitelist", "file://,http://homescreen.gaiamobile.org,http://sms.gaiamobile.org"); pref("dom.sms.whitelist", "file://,http://homescreen.gaiamobile.org,http://sms.gaiamobile.org");
// Temporary permission hack for WebMobileConnection // Temporary permission hack for WebMobileConnection
pref("dom.mobileconnection.whitelist", "http://homescreen.gaiamobile.org"); pref("dom.mobileconnection.whitelist", "http://system.gaiamobile.org,http://homescreen.gaiamobile.org,http://dialer.gaiamobile.org");
// Temporary permission hack for WebContacts // Temporary permission hack for WebContacts
pref("dom.mozContacts.enabled", true); pref("dom.mozContacts.enabled", true);

Просмотреть файл

@ -305,7 +305,7 @@ RadioInterfaceLayer.prototype = {
break; break;
case "cardstatechange": case "cardstatechange":
this.radioState.cardState = message.cardState; this.radioState.cardState = message.cardState;
ppmm.sendAsyncMessage("RIL:CardStateChange", message); ppmm.sendAsyncMessage("RIL:CardStateChanged", message);
break; break;
case "sms-received": case "sms-received":
this.handleSmsReceived(message); this.handleSmsReceived(message);
@ -361,7 +361,7 @@ RadioInterfaceLayer.prototype = {
voiceInfo); voiceInfo);
return; return;
} }
//TODO emergency calls voiceInfo.emergencyCallsOnly = state.emergencyCallsOnly;
voiceInfo.connected = voiceInfo.connected =
(state.regState == RIL.NETWORK_CREG_STATE_REGISTERED_HOME) || (state.regState == RIL.NETWORK_CREG_STATE_REGISTERED_HOME) ||
(state.regState == RIL.NETWORK_CREG_STATE_REGISTERED_ROAMING); (state.regState == RIL.NETWORK_CREG_STATE_REGISTERED_ROAMING);

Просмотреть файл

@ -145,6 +145,7 @@ const REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE = 104;
const REQUEST_ISIM_AUTHENTICATION = 105; const REQUEST_ISIM_AUTHENTICATION = 105;
const REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU = 106; const REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU = 106;
const REQUEST_STK_SEND_ENVELOPE_WITH_STATUS = 107; const REQUEST_STK_SEND_ENVELOPE_WITH_STATUS = 107;
const REQUEST_DIAL_EMERGENCY_CALL = 10016;
// Akami/Maguro specific parcel types. // Akami/Maguro specific parcel types.
const REQUEST_VOICE_RADIO_TECH = 105; const REQUEST_VOICE_RADIO_TECH = 105;
@ -339,6 +340,10 @@ const NETWORK_CREG_STATE_SEARCHING = 2;
const NETWORK_CREG_STATE_DENIED = 3; const NETWORK_CREG_STATE_DENIED = 3;
const NETWORK_CREG_STATE_UNKNOWN = 4; const NETWORK_CREG_STATE_UNKNOWN = 4;
const NETWORK_CREG_STATE_REGISTERED_ROAMING = 5; const NETWORK_CREG_STATE_REGISTERED_ROAMING = 5;
const NETWORK_CREG_STATE_NOT_SEARCHING_EMERGENCY_CALLS = 10;
const NETWORK_CREG_STATE_SEARCHING_EMERGENCY_CALLS = 12;
const NETWORK_CREG_STATE_DENIED_EMERGENCY_CALLS = 13;
const NETWORK_CREG_STATE_UNKNOWN_EMERGENCY_CALLS = 14;
const NETWORK_CREG_TECH_UNKNOWN = 0; const NETWORK_CREG_TECH_UNKNOWN = 0;
const NETWORK_CREG_TECH_GPRS = 1; const NETWORK_CREG_TECH_GPRS = 1;

Просмотреть файл

@ -77,11 +77,15 @@ const PARCEL_SIZE_SIZE = UINT32_SIZE;
const PDU_HEX_OCTET_SIZE = 4; const PDU_HEX_OCTET_SIZE = 4;
const DEFAULT_EMERGENCY_NUMBERS = ["112", "911"];
let RILQUIRKS_CALLSTATE_EXTRA_UINT32 = false; let RILQUIRKS_CALLSTATE_EXTRA_UINT32 = false;
let RILQUIRKS_DATACALLSTATE_DOWN_IS_UP = false; let RILQUIRKS_DATACALLSTATE_DOWN_IS_UP = false;
// This flag defaults to true since on RIL v6 and later, we get the // This flag defaults to true since on RIL v6 and later, we get the
// version number via the UNSOLICITED_RIL_CONNECTED parcel. // version number via the UNSOLICITED_RIL_CONNECTED parcel.
let RILQUIRKS_V5_LEGACY = true; let RILQUIRKS_V5_LEGACY = true;
let RILQUIRKS_REQUEST_USE_DIAL_EMERGENCY_CALL = false;
let RILQUIRKS_MODEM_DEFAULTS_TO_EMERGENCY_MODE = false;
/** /**
* This object contains helpers buffering incoming data & deconstructing it * This object contains helpers buffering incoming data & deconstructing it
@ -688,34 +692,46 @@ let RIL = {
return; return;
} }
// The Samsung Galaxy S2 I-9100 radio sends an extra Uint32 in the
// call state.
let model_id = libcutils.property_get("ril.model_id");
if (DEBUG) debug("Detected RIL model " + model_id);
if (model_id == "I9100") {
if (DEBUG) {
debug("Detected I9100, enabling " +
"RILQUIRKS_CALLSTATE_EXTRA_UINT32, " +
"RILQUIRKS_DATACALLSTATE_DOWN_IS_UP.");
}
RILQUIRKS_CALLSTATE_EXTRA_UINT32 = true;
RILQUIRKS_DATACALLSTATE_DOWN_IS_UP = true;
}
if (model_id == "I9023" || model_id == "I9020") {
if (DEBUG) {
debug("Detected I9020/I9023, enabling " +
"RILQUIRKS_DATACALLSTATE_DOWN_IS_UP");
}
RILQUIRKS_DATACALLSTATE_DOWN_IS_UP = true;
}
let ril_impl = libcutils.property_get("gsm.version.ril-impl"); let ril_impl = libcutils.property_get("gsm.version.ril-impl");
if (ril_impl == "Qualcomm RIL 1.0") { if (DEBUG) debug("Detected RIL implementation " + ril_impl);
if (DEBUG) { switch (ril_impl) {
debug("Detected Qualcomm RIL 1.0, " + case "Samsung RIL(IPC) v2.0":
"disabling RILQUIRKS_V5_LEGACY to false"); // The Samsung Galaxy S2 I-9100 radio sends an extra Uint32 in the
} // call state.
RILQUIRKS_V5_LEGACY = false; let model_id = libcutils.property_get("ril.model_id");
if (DEBUG) debug("Detected RIL model " + model_id);
if (model_id == "I9100") {
if (DEBUG) {
debug("Detected I9100, enabling " +
"RILQUIRKS_DATACALLSTATE_DOWN_IS_UP, " +
"RILQUIRKS_REQUEST_USE_DIAL_EMERGENCY_CALL.");
}
RILQUIRKS_DATACALLSTATE_DOWN_IS_UP = true;
RILQUIRKS_REQUEST_USE_DIAL_EMERGENCY_CALL = true;
if (RILQUIRKS_V5_LEGACY) {
if (DEBUG) debug("...and RILQUIRKS_CALLSTATE_EXTRA_UINT32");
RILQUIRKS_CALLSTATE_EXTRA_UINT32 = true;
}
}
if (model_id == "I9023" || model_id == "I9020") {
if (DEBUG) {
debug("Detected I9020/I9023, enabling " +
"RILQUIRKS_DATACALLSTATE_DOWN_IS_UP");
}
RILQUIRKS_DATACALLSTATE_DOWN_IS_UP = true;
}
break;
case "Qualcomm RIL 1.0":
if (DEBUG) {
debug("Detected Qualcomm RIL 1.0, " +
"disabling RILQUIRKS_V5_LEGACY and " +
"enabling RILQUIRKS_MODEM_DEFAULTS_TO_EMERGENCY_MODE.");
}
RILQUIRKS_V5_LEGACY = false;
RILQUIRKS_MODEM_DEFAULTS_TO_EMERGENCY_MODE = true;
break;
} }
this.rilQuirksInitialized = true; this.rilQuirksInitialized = true;
}, },
@ -1132,7 +1148,26 @@ let RIL = {
* Integer doing something XXX TODO * Integer doing something XXX TODO
*/ */
dial: function dial(options) { dial: function dial(options) {
let token = Buf.newParcel(REQUEST_DIAL); let dial_request_type = REQUEST_DIAL;
if (this.voiceRegistrationState.emergencyCallsOnly) {
if (!this._isEmergencyNumber(options.number)) {
if (DEBUG) {
// TODO: Notify an error here so that the DOM will see an error event.
debug(options.number + " is not a valid emergency number.");
}
return;
}
if (RILQUIRKS_REQUEST_USE_DIAL_EMERGENCY_CALL) {
dial_request_type = REQUEST_DIAL_EMERGENCY_CALL;
}
} else {
if (this._isEmergencyNumber(options.number) &&
RILQUIRKS_REQUEST_USE_DIAL_EMERGENCY_CALL) {
dial_request_type = REQUEST_DIAL_EMERGENCY_CALL;
}
}
let token = Buf.newParcel(dial_request_type);
Buf.writeString(options.number); Buf.writeString(options.number);
Buf.writeUint32(options.clirMode || 0); Buf.writeUint32(options.clirMode || 0);
Buf.writeUint32(options.uusInfo || 0); Buf.writeUint32(options.uusInfo || 0);
@ -1429,6 +1464,29 @@ let RIL = {
Buf.simpleRequest(REQUEST_LAST_CALL_FAIL_CAUSE); Buf.simpleRequest(REQUEST_LAST_CALL_FAIL_CAUSE);
}, },
/**
* Check a given number against the list of emergency numbers provided by the RIL.
*
* @param number
* The number to look up.
*/
_isEmergencyNumber: function _isEmergencyNumber(number) {
// Check read-write ecclist property first.
let numbers = libcutils.property_get("ril.ecclist");
if (!numbers) {
// Then read-only ecclist property since others RIL only uses this.
numbers = libcutils.property_get("ro.ril.ecclist");
}
if (numbers) {
numbers = numbers.split(",");
} else {
// No ecclist system property, so use our own list.
numbers = DEFAULT_EMERGENCY_NUMBERS;
}
return numbers.indexOf(number) != -1;
},
/** /**
* Process ICC status. * Process ICC status.
@ -1613,12 +1671,23 @@ let RIL = {
}, },
_processVoiceRegistrationState: function _processVoiceRegistrationState(state) { _processVoiceRegistrationState: function _processVoiceRegistrationState(state) {
this.initRILQuirks();
let rs = this.voiceRegistrationState; let rs = this.voiceRegistrationState;
let stateChanged = false; let stateChanged = false;
let regState = RIL.parseInt(state[0], NETWORK_CREG_STATE_UNKNOWN); let regState = RIL.parseInt(state[0], NETWORK_CREG_STATE_UNKNOWN);
if (rs.regState != regState) { if (rs.regState != regState) {
rs.regState = regState; rs.regState = regState;
if (RILQUIRKS_MODEM_DEFAULTS_TO_EMERGENCY_MODE) {
rs.emergencyCallsOnly =
(regState != NETWORK_CREG_STATE_REGISTERED_HOME) &&
(regState != NETWORK_CREG_STATE_REGISTERED_ROAMING);
} else {
rs.emergencyCallsOnly =
(regState >= NETWORK_CREG_STATE_NOT_SEARCHING_EMERGENCY_CALLS) &&
(regState <= NETWORK_CREG_STATE_UNKNOWN_EMERGENCY_CALLS);
}
stateChanged = true; stateChanged = true;
if (regState == NETWORK_CREG_STATE_REGISTERED_HOME || if (regState == NETWORK_CREG_STATE_REGISTERED_HOME ||
regState == NETWORK_CREG_STATE_REGISTERED_ROAMING) { regState == NETWORK_CREG_STATE_REGISTERED_ROAMING) {