mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1155142 - Part 3: Refactor MobileIdentityManager. r=ferjm
This commit is contained in:
parent
2ff7fb2cbf
commit
2eb26952d0
@ -171,13 +171,13 @@ this.MobileIdentityManager = {
|
||||
this._iccInfo = [];
|
||||
|
||||
for (let i = 0; i < this.ril.numRadioInterfaces; i++) {
|
||||
let rilContext = this.ril.getRadioInterface(i).rilContext;
|
||||
if (!rilContext) {
|
||||
log.warn("Tried to get the RIL context for an invalid service ID " + i);
|
||||
let icc = this.iccService.getIccByServiceId(i);
|
||||
if (!icc) {
|
||||
log.warn("Tried to get the Icc instance for an invalid service ID " + i);
|
||||
continue;
|
||||
}
|
||||
|
||||
let info = rilContext.iccInfo;
|
||||
let info = icc.iccInfo;
|
||||
if (!info || !info.iccid ||
|
||||
!info.mcc || !info.mcc.length ||
|
||||
!info.mnc || !info.mnc.length) {
|
||||
@ -185,6 +185,20 @@ this.MobileIdentityManager = {
|
||||
continue;
|
||||
}
|
||||
|
||||
// GSM SIMs may have MSISDN while CDMA SIMs may have MDN
|
||||
let phoneNumber = null;
|
||||
try {
|
||||
if (info.iccType === "sim" || info.iccType === "usim") {
|
||||
let gsmInfo = info.QueryInterface(Ci.nsIGsmIccInfo);
|
||||
phoneNumber = gsmInfo.msisdn;
|
||||
} else if (info.iccType === "ruim" || info.iccType === "csim") {
|
||||
let cdmaInfo = info.QueryInterface(Ci.nsICdmaIccInfo);
|
||||
phoneNumber = cdmaInfo.mdn;
|
||||
}
|
||||
} catch (e) {
|
||||
log.error("Failed to retrieve phoneNumber: " + e);
|
||||
}
|
||||
|
||||
let connection = this.mobileConnectionService.getItemByServiceId(i);
|
||||
let voice = connection && connection.voice;
|
||||
let data = connection && connection.data;
|
||||
@ -208,18 +222,14 @@ this.MobileIdentityManager = {
|
||||
iccId: info.iccid,
|
||||
mcc: info.mcc,
|
||||
mnc: info.mnc,
|
||||
// GSM SIMs may have MSISDN while CDMA SIMs may have MDN
|
||||
msisdn: info.msisdn || info.mdn || null,
|
||||
msisdn: phoneNumber,
|
||||
operator: operator,
|
||||
roaming: voice && voice.roaming
|
||||
});
|
||||
|
||||
// We need to subscribe to ICC change notifications so we can refresh
|
||||
// the cache if any change is observed.
|
||||
let icc = this.iccService.getIccByServiceId(i);
|
||||
if (icc) {
|
||||
icc.registerListener(iccListener);
|
||||
}
|
||||
icc.registerListener(iccListener);
|
||||
}
|
||||
|
||||
return this._iccInfo;
|
||||
|
@ -46,16 +46,37 @@ const MCC = "aMcc";
|
||||
const ANOTHER_MCC = "anotherMcc";
|
||||
const OPERATOR = "aOperator";
|
||||
const ANOTHER_OPERATOR = "anotherOperator";
|
||||
const ICC_INFO = {
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIGsmIccInfo,
|
||||
Ci.nsIIccInfo]),
|
||||
iccType: "usim",
|
||||
iccid: ICC_ID,
|
||||
mcc: MCC,
|
||||
mnc: MNC,
|
||||
msisdn: PHONE_NUMBER,
|
||||
operator: OPERATOR
|
||||
};
|
||||
const ANOTHER_ICC_INFO = {
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIGsmIccInfo,
|
||||
Ci.nsIIccInfo]),
|
||||
iccType: "usim",
|
||||
iccid: ANOTHER_ICC_ID,
|
||||
mcc: ANOTHER_MCC,
|
||||
mnc: ANOTHER_MNC,
|
||||
msisdn: ANOTHER_PHONE_NUMBER,
|
||||
operator: ANOTHER_OPERATOR
|
||||
};
|
||||
const INVALID_ICC_INFO = {
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIGsmIccInfo,
|
||||
Ci.nsIIccInfo]),
|
||||
iccType: "usim",
|
||||
iccid: null,
|
||||
mcc: "",
|
||||
mnc: "",
|
||||
msisdn: "",
|
||||
operator: ""
|
||||
};
|
||||
const RADIO_INTERFACE = {
|
||||
rilContext: {
|
||||
iccInfo: {
|
||||
iccid: ICC_ID,
|
||||
mcc: MCC,
|
||||
mnc: MNC,
|
||||
msisdn: PHONE_NUMBER,
|
||||
operator: OPERATOR
|
||||
}
|
||||
},
|
||||
voice: {
|
||||
network: {
|
||||
shortName: OPERATOR
|
||||
@ -69,15 +90,6 @@ const RADIO_INTERFACE = {
|
||||
}
|
||||
};
|
||||
const ANOTHER_RADIO_INTERFACE = {
|
||||
rilContext: {
|
||||
iccInfo: {
|
||||
iccid: ANOTHER_ICC_ID,
|
||||
mcc: ANOTHER_MCC,
|
||||
mnc: ANOTHER_MNC,
|
||||
msisdn: ANOTHER_PHONE_NUMBER,
|
||||
operator: ANOTHER_OPERATOR
|
||||
}
|
||||
},
|
||||
voice: {
|
||||
network: {
|
||||
shortName: ANOTHER_OPERATOR
|
||||
@ -92,15 +104,6 @@ const ANOTHER_RADIO_INTERFACE = {
|
||||
};
|
||||
|
||||
const INVALID_RADIO_INTERFACE = {
|
||||
rilContext: {
|
||||
iccInfo: {
|
||||
iccid: null,
|
||||
mcc: "",
|
||||
mnc: "",
|
||||
msisdn: "",
|
||||
operator: ""
|
||||
}
|
||||
},
|
||||
voice: {
|
||||
network: {
|
||||
shortName: ""
|
||||
|
@ -1003,33 +1003,35 @@ add_test(function() {
|
||||
};
|
||||
|
||||
MobileIdentityManager._iccService = {
|
||||
_iccs: [],
|
||||
_listeners: [],
|
||||
_iccInfos: [ICC_INFO, ANOTHER_ICC_INFO],
|
||||
getIccByServiceId: function(aClientId) {
|
||||
let self = this;
|
||||
this_iccs.push({
|
||||
return {
|
||||
get iccInfo() {
|
||||
return self._iccInfos[aClientId];
|
||||
},
|
||||
registerListener: function(aIccListener) {
|
||||
self._listeners.push(aIccListener);
|
||||
},
|
||||
unregisterListener: function() {
|
||||
self._listeners.pop();
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
let ui = new MockUi();
|
||||
ui.startFlow = function() {
|
||||
// At this point we've already built the ICC cache.
|
||||
let interfaces = MobileIdentityManager._ril._interfaces;
|
||||
for (let i = 0; i < interfaces.length; i++) {
|
||||
let interfaceIccInfo = interfaces[i].rilContext.iccInfo;
|
||||
let mockIccInfo = [ICC_INFO, ANOTHER_ICC_INFO];
|
||||
for (let i = 0; i < mockIccInfo.length; i++) {
|
||||
let mIdIccInfo = MobileIdentityManager._iccInfo[i];
|
||||
do_check_eq(interfaceIccInfo.iccid, mIdIccInfo.iccId);
|
||||
do_check_eq(interfaceIccInfo.mcc, mIdIccInfo.mcc);
|
||||
do_check_eq(interfaceIccInfo.mnc, mIdIccInfo.mnc);
|
||||
do_check_eq(interfaceIccInfo.msisdn, mIdIccInfo.msisdn);
|
||||
do_check_eq(interfaceIccInfo.operator, mIdIccInfo.operator);
|
||||
do_check_eq(mockIccInfo[i].iccid, mIdIccInfo.iccId);
|
||||
do_check_eq(mockIccInfo[i].mcc, mIdIccInfo.mcc);
|
||||
do_check_eq(mockIccInfo[i].mnc, mIdIccInfo.mnc);
|
||||
do_check_eq(mockIccInfo[i].msisdn, mIdIccInfo.msisdn);
|
||||
do_check_eq(mockIccInfo[i].operator, mIdIccInfo.operator);
|
||||
}
|
||||
|
||||
// We should have listeners for each valid icc.
|
||||
@ -1111,18 +1113,21 @@ add_test(function() {
|
||||
};
|
||||
|
||||
MobileIdentityManager._iccService = {
|
||||
_iccs: [],
|
||||
_listeners: [],
|
||||
_iccInfos: [INVALID_ICC_INFO],
|
||||
getIccByServiceId: function(aClientId) {
|
||||
let self = this;
|
||||
this_iccs.push({
|
||||
return {
|
||||
get iccInfo() {
|
||||
return self._iccInfos[aClientId];
|
||||
},
|
||||
registerListener: function(aIccListener) {
|
||||
self._listeners.push(aIccListener);
|
||||
},
|
||||
unregisterListener: function() {
|
||||
self._listeners.pop();
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user