mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1053110 - Part 4: Move clir logic to TelephonyService. r=hsinyi
This commit is contained in:
parent
a816f91cf4
commit
fda6b3a0e9
@ -1679,20 +1679,6 @@ RilObject.prototype = {
|
||||
this.exitEmergencyCbMode();
|
||||
}
|
||||
|
||||
if (!this._isCdma) {
|
||||
// TODO: Both dial() and sendMMI() functions should be unified at some
|
||||
// point in the future. In the mean time we handle temporary CLIR MMI
|
||||
// commands through the dial() function. Please see bug 889737.
|
||||
let mmi = this._parseMMI(options.number);
|
||||
if (mmi && this._isTemporaryModeCLIR(mmi)) {
|
||||
options.number = mmi.dialNumber;
|
||||
// In temporary mode, MMI_PROCEDURE_ACTIVATION means allowing CLI
|
||||
// presentation, i.e. CLIR_SUPPRESSION. See TS 22.030, Annex B.
|
||||
options.clirMode = mmi.procedure == MMI_PROCEDURE_ACTIVATION ?
|
||||
CLIR_SUPPRESSION : CLIR_INVOCATION;
|
||||
}
|
||||
}
|
||||
|
||||
options.request = REQUEST_DIAL;
|
||||
this.sendDialRequest(options);
|
||||
},
|
||||
@ -2390,6 +2376,20 @@ RilObject.prototype = {
|
||||
{callback: callback});
|
||||
},
|
||||
|
||||
/**
|
||||
* Parse the dial number to extract its mmi code part.
|
||||
*
|
||||
* @param number
|
||||
* Phone number to be parsed
|
||||
*/
|
||||
parseMMIFromDialNumber: function(options) {
|
||||
// We don't have to parse mmi in cdma.
|
||||
if (!this._isCdma) {
|
||||
options.mmi = this._parseMMI(options.number);
|
||||
}
|
||||
this.sendChromeMessage(options);
|
||||
},
|
||||
|
||||
/**
|
||||
* Helper to parse MMI/USSD string. TS.22.030 Figure 3.5.3.2.
|
||||
*/
|
||||
@ -3404,20 +3404,6 @@ RilObject.prototype = {
|
||||
Buf.sendParcel();
|
||||
},
|
||||
|
||||
/**
|
||||
* Checks whether to temporarily suppress caller id for the call.
|
||||
*
|
||||
* @param mmi
|
||||
* MMI full object.
|
||||
*/
|
||||
_isTemporaryModeCLIR: function(mmi) {
|
||||
return (mmi &&
|
||||
mmi.serviceCode == MMI_SC_CLIR &&
|
||||
mmi.dialNumber &&
|
||||
(mmi.procedure == MMI_PROCEDURE_ACTIVATION ||
|
||||
mmi.procedure == MMI_PROCEDURE_DEACTIVATION));
|
||||
},
|
||||
|
||||
/**
|
||||
* Report STK Service is running.
|
||||
*/
|
||||
|
@ -357,6 +357,35 @@ TelephonyService.prototype = {
|
||||
return numbers.indexOf(aNumber) != -1;
|
||||
},
|
||||
|
||||
/**
|
||||
* Checks whether to temporarily suppress caller id for the call.
|
||||
*
|
||||
* @param aMmi
|
||||
* MMI full object.
|
||||
*/
|
||||
_isTemporaryCLIR: function(aMmi) {
|
||||
return (aMmi && aMmi.serviceCode === RIL.MMI_SC_CLIR) && aMmi.dialNumber;
|
||||
},
|
||||
|
||||
/**
|
||||
* Map MMI procedure to CLIR MODE.
|
||||
*
|
||||
* @param aProcedure
|
||||
* MMI procedure
|
||||
*/
|
||||
_getTemporaryCLIRMode: function(aProcedure) {
|
||||
// In temporary mode, MMI_PROCEDURE_ACTIVATION means allowing CLI
|
||||
// presentation, i.e. CLIR_SUPPRESSION. See TS 22.030, Annex B.
|
||||
switch (aProcedure) {
|
||||
case RIL.MMI_PROCEDURE_ACTIVATION:
|
||||
return RIL.CLIR_SUPPRESSION;
|
||||
case RIL.MMI_PROCEDURE_DEACTIVATION:
|
||||
return RIL.CLIR_INVOCATION;
|
||||
default:
|
||||
return RIL.CLIR_DEFAULT;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* nsITelephonyService interface.
|
||||
*/
|
||||
@ -457,6 +486,29 @@ TelephonyService.prototype = {
|
||||
this.notifyCallStateChanged(aClientId, parentCall);
|
||||
},
|
||||
|
||||
_composeDialRequest: function(aClientId, aNumber) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this._sendToRilWorker(aClientId, "parseMMIFromDialNumber",
|
||||
{number: aNumber}, response => {
|
||||
let options = {};
|
||||
let mmi = response.mmi;
|
||||
|
||||
if (!mmi) {
|
||||
resolve({
|
||||
number: aNumber
|
||||
});
|
||||
} else if (this._isTemporaryCLIR(mmi)) {
|
||||
resolve({
|
||||
number: mmi.dialNumber,
|
||||
clirMode: this._getTemporaryCLIRMode(mmi.procedure)
|
||||
});
|
||||
} else {
|
||||
reject(DIAL_ERROR_BAD_NUMBER);
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
isDialing: false,
|
||||
|
||||
dial: function(aClientId, aNumber, aIsDialEmergency, aCallback) {
|
||||
@ -497,27 +549,30 @@ TelephonyService.prototype = {
|
||||
return;
|
||||
}
|
||||
|
||||
let isEmergencyNumber = this._isEmergencyNumber(aNumber);
|
||||
this._composeDialRequest(aClientId, aNumber).then(options => {
|
||||
options.isEmergency = this._isEmergencyNumber(options.number);
|
||||
options.isDialEmergency = aIsDialEmergency;
|
||||
|
||||
if (isEmergencyNumber) {
|
||||
// Automatically select a proper clientId for emergency call.
|
||||
aClientId = gRadioInterfaceLayer.getClientIdForEmergencyCall() ;
|
||||
if (aClientId === -1) {
|
||||
if (DEBUG) debug("Error: No client is avaialble for emergency call.");
|
||||
aCallback.notifyDialError(DIAL_ERROR_INVALID_STATE_ERROR);
|
||||
return;
|
||||
if (options.isEmergency) {
|
||||
// Automatically select a proper clientId for emergency call.
|
||||
aClientId = gRadioInterfaceLayer.getClientIdForEmergencyCall() ;
|
||||
if (aClientId === -1) {
|
||||
if (DEBUG) debug("Error: No client is avaialble for emergency call.");
|
||||
aCallback.notifyDialError(DIAL_ERROR_INVALID_STATE_ERROR);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this._dialInternal(aClientId, options, aCallback);
|
||||
}, cause => {
|
||||
aCallback.notifyDialError(DIAL_ERROR_BAD_NUMBER);
|
||||
});
|
||||
},
|
||||
|
||||
_dialInternal: function(aClientId, aOptions, aCallback) {
|
||||
this.isDialing = true;
|
||||
|
||||
let options = {
|
||||
isDialEmergency: aIsDialEmergency,
|
||||
isEmergency: isEmergencyNumber,
|
||||
number: aNumber
|
||||
};
|
||||
|
||||
this._sendToRilWorker(aClientId, "dial", options, response => {
|
||||
this._sendToRilWorker(aClientId, "dial", aOptions, response => {
|
||||
this.isDialing = false;
|
||||
|
||||
if (!response.success) {
|
||||
|
Loading…
Reference in New Issue
Block a user