зеркало из https://github.com/mozilla/gecko-dev.git
104 строки
3.0 KiB
JavaScript
104 строки
3.0 KiB
JavaScript
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
|
|
|
"use strict";
|
|
|
|
this.EXPORTED_SYMBOLS = ["PhoneNumberUtils"];
|
|
|
|
const DEBUG = false;
|
|
function debug(s) { if(DEBUG) dump("-*- PhoneNumberutils: " + s + "\n"); }
|
|
|
|
const Cu = Components.utils;
|
|
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
|
|
Cu.import("resource://gre/modules/PhoneNumber.jsm");
|
|
Cu.import("resource://gre/modules/mcc_iso3166_table.jsm");
|
|
|
|
#ifdef MOZ_B2G_RIL
|
|
XPCOMUtils.defineLazyServiceGetter(this, "mobileConnection",
|
|
"@mozilla.org/ril/content-helper;1",
|
|
"nsIMobileConnectionProvider");
|
|
#endif
|
|
|
|
this.PhoneNumberUtils = {
|
|
// 1. See whether we have a network mcc
|
|
// 2. If we don't have that, look for the simcard mcc
|
|
// 3. If we don't have that or its 0 (not activated), pick up the last used mcc
|
|
// 4. If we don't have, default to some mcc
|
|
|
|
// mcc for Brasil
|
|
_mcc: '724',
|
|
|
|
getCountryName: function getCountryName() {
|
|
let mcc;
|
|
let countryName;
|
|
|
|
#ifdef MOZ_B2G_RIL
|
|
// Get network mcc
|
|
let voice = mobileConnection.voiceConnectionInfo;
|
|
if (voice && voice.network && voice.network.mcc) {
|
|
mcc = voice.network.mcc;
|
|
}
|
|
|
|
// Get SIM mcc
|
|
let iccInfo = mobileConnection.iccInfo;
|
|
if (!mcc && iccInfo.mcc) {
|
|
mcc = iccInfo.mcc;
|
|
}
|
|
|
|
// Attempt to grab last known sim mcc from prefs
|
|
if (!mcc) {
|
|
try {
|
|
mcc = Services.prefs.getCharPref("ril.lastKnownSimMcc");
|
|
} catch (e) {}
|
|
}
|
|
|
|
// Set to default mcc
|
|
if (!mcc) {
|
|
mcc = this._mcc;
|
|
}
|
|
#else
|
|
mcc = this._mcc;
|
|
#endif
|
|
|
|
countryName = MCC_ISO3166_TABLE[mcc];
|
|
if (DEBUG) debug("MCC: " + mcc + "countryName: " + countryName);
|
|
return countryName;
|
|
},
|
|
|
|
parse: function(aNumber) {
|
|
if (DEBUG) debug("call parse: " + aNumber);
|
|
let result = PhoneNumber.Parse(aNumber, this.getCountryName());
|
|
if (DEBUG) {
|
|
if (result) {
|
|
debug("InternationalFormat: " + result.internationalFormat);
|
|
debug("InternationalNumber: " + result.internationalNumber);
|
|
debug("NationalNumber: " + result.nationalNumber);
|
|
debug("NationalFormat: " + result.nationalFormat);
|
|
} else {
|
|
debug("No result!\n");
|
|
}
|
|
}
|
|
return result;
|
|
},
|
|
|
|
parseWithMCC: function(aNumber, aMCC) {
|
|
let countryName = MCC_ISO3166_TABLE[aMCC];
|
|
if (DEBUG) debug("found country name: " + countryName);
|
|
return PhoneNumber.Parse(aNumber, countryName);
|
|
},
|
|
|
|
isPlainPhoneNumber: function isPlainPhoneNumber(aNumber) {
|
|
var isPlain = PhoneNumber.IsPlain(aNumber);
|
|
if (DEBUG) debug("isPlain(" + aNumber + ") " + isPlain);
|
|
return isPlain;
|
|
},
|
|
|
|
normalize: function Normalize(aNumber, aNumbersOnly) {
|
|
var normalized = PhoneNumber.Normalize(aNumber, aNumbersOnly);
|
|
if (DEBUG) debug("normalize(" + aNumber + "): " + normalized + ", " + aNumbersOnly);
|
|
return normalized;
|
|
}
|
|
};
|