EriManagerpublic final class EriManager extends Object EriManager loads the ERI file definitions and manages the CDMA roaming information. |
Fields Summary |
---|
private static final String | LOG_TAG | private static final boolean | DBG | private static final boolean | VDBG | static final int | ERI_FROM_XML | static final int | ERI_FROM_FILE_SYSTEM | static final int | ERI_FROM_MODEM | private android.content.Context | mContext | private int | mEriFileSource | private boolean | mIsEriFileLoaded | private EriFile | mEriFile |
Methods Summary |
---|
public void | dispose()
mEriFile = new EriFile();
mIsEriFileLoaded = false;
| public int | getCdmaEriIconIndex(int roamInd, int defRoamInd)
return getEriDisplayInformation(roamInd, defRoamInd).mEriIconIndex;
| public int | getCdmaEriIconMode(int roamInd, int defRoamInd)
return getEriDisplayInformation(roamInd, defRoamInd).mEriIconMode;
| public java.lang.String | getCdmaEriText(int roamInd, int defRoamInd)
return getEriDisplayInformation(roamInd, defRoamInd).mEriIconText;
| private com.android.internal.telephony.cdma.EriManager$EriDisplayInformation | getEriDisplayInformation(int roamInd, int defRoamInd)
EriDisplayInformation ret;
// Carrier can use eri.xml to customize any built-in roaming display indications
if (mIsEriFileLoaded) {
EriInfo eriInfo = getEriInfo(roamInd);
if (eriInfo != null) {
if (VDBG) Rlog.v(LOG_TAG, "ERI roamInd " + roamInd + " found in ERI file");
ret = new EriDisplayInformation(
eriInfo.iconIndex,
eriInfo.iconMode,
eriInfo.eriText);
return ret;
}
}
switch (roamInd) {
// Handling the standard roaming indicator (non-ERI)
case EriInfo.ROAMING_INDICATOR_ON:
ret = new EriDisplayInformation(
EriInfo.ROAMING_INDICATOR_ON,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal.R.string.roamingText0).toString());
break;
case EriInfo.ROAMING_INDICATOR_OFF:
ret = new EriDisplayInformation(
EriInfo.ROAMING_INDICATOR_OFF,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal.R.string.roamingText1).toString());
break;
case EriInfo.ROAMING_INDICATOR_FLASH:
ret = new EriDisplayInformation(
EriInfo.ROAMING_INDICATOR_FLASH,
EriInfo.ROAMING_ICON_MODE_FLASH,
mContext.getText(com.android.internal.R.string.roamingText2).toString());
break;
// Handling the standard ERI
case 3:
ret = new EriDisplayInformation(
roamInd,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal.R.string.roamingText3).toString());
break;
case 4:
ret = new EriDisplayInformation(
roamInd,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal.R.string.roamingText4).toString());
break;
case 5:
ret = new EriDisplayInformation(
roamInd,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal.R.string.roamingText5).toString());
break;
case 6:
ret = new EriDisplayInformation(
roamInd,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal.R.string.roamingText6).toString());
break;
case 7:
ret = new EriDisplayInformation(
roamInd,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal.R.string.roamingText7).toString());
break;
case 8:
ret = new EriDisplayInformation(
roamInd,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal.R.string.roamingText8).toString());
break;
case 9:
ret = new EriDisplayInformation(
roamInd,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal.R.string.roamingText9).toString());
break;
case 10:
ret = new EriDisplayInformation(
roamInd,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal.R.string.roamingText10).toString());
break;
case 11:
ret = new EriDisplayInformation(
roamInd,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal.R.string.roamingText11).toString());
break;
case 12:
ret = new EriDisplayInformation(
roamInd,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal.R.string.roamingText12).toString());
break;
// Handling the non standard Enhanced Roaming Indicator (roamInd > 63)
default:
if (!mIsEriFileLoaded) {
// ERI file NOT loaded
if (DBG) Rlog.d(LOG_TAG, "ERI File not loaded");
if(defRoamInd > 2) {
if (VDBG) Rlog.v(LOG_TAG, "ERI defRoamInd > 2 ...flashing");
ret = new EriDisplayInformation(
EriInfo.ROAMING_INDICATOR_FLASH,
EriInfo.ROAMING_ICON_MODE_FLASH,
mContext.getText(com.android.internal
.R.string.roamingText2).toString());
} else {
if (VDBG) Rlog.v(LOG_TAG, "ERI defRoamInd <= 2");
switch (defRoamInd) {
case EriInfo.ROAMING_INDICATOR_ON:
ret = new EriDisplayInformation(
EriInfo.ROAMING_INDICATOR_ON,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal
.R.string.roamingText0).toString());
break;
case EriInfo.ROAMING_INDICATOR_OFF:
ret = new EriDisplayInformation(
EriInfo.ROAMING_INDICATOR_OFF,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal
.R.string.roamingText1).toString());
break;
case EriInfo.ROAMING_INDICATOR_FLASH:
ret = new EriDisplayInformation(
EriInfo.ROAMING_INDICATOR_FLASH,
EriInfo.ROAMING_ICON_MODE_FLASH,
mContext.getText(com.android.internal
.R.string.roamingText2).toString());
break;
default:
ret = new EriDisplayInformation(-1, -1, "ERI text");
}
}
} else {
// ERI file loaded
EriInfo eriInfo = getEriInfo(roamInd);
EriInfo defEriInfo = getEriInfo(defRoamInd);
if (eriInfo == null) {
if (VDBG) {
Rlog.v(LOG_TAG, "ERI roamInd " + roamInd
+ " not found in ERI file ...using defRoamInd " + defRoamInd);
}
if(defEriInfo == null) {
Rlog.e(LOG_TAG, "ERI defRoamInd " + defRoamInd
+ " not found in ERI file ...on");
ret = new EriDisplayInformation(
EriInfo.ROAMING_INDICATOR_ON,
EriInfo.ROAMING_ICON_MODE_NORMAL,
mContext.getText(com.android.internal
.R.string.roamingText0).toString());
} else {
if (VDBG) {
Rlog.v(LOG_TAG, "ERI defRoamInd " + defRoamInd + " found in ERI file");
}
ret = new EriDisplayInformation(
defEriInfo.iconIndex,
defEriInfo.iconMode,
defEriInfo.eriText);
}
} else {
if (VDBG) Rlog.v(LOG_TAG, "ERI roamInd " + roamInd + " found in ERI file");
ret = new EriDisplayInformation(
eriInfo.iconIndex,
eriInfo.iconMode,
eriInfo.eriText);
}
}
break;
}
if (VDBG) Rlog.v(LOG_TAG, "Displaying ERI " + ret.toString());
return ret;
| public int | getEriFileType()Returns the ERI file type value ( 0 for Phase 0, 1 for Phase 1)
return mEriFile.mEriFileType;
| public int | getEriFileVersion()Returns the version of the ERI file
return mEriFile.mVersionNumber;
| private EriInfo | getEriInfo(int roamingIndicator)Returns the EriInfo record associated with roamingIndicator
or null if the entry is not found
if (mEriFile.mRoamIndTable.containsKey(roamingIndicator)) {
return mEriFile.mRoamIndTable.get(roamingIndicator);
} else {
return null;
}
| public int | getEriNumberOfEntries()Returns the number of ERI entries parsed
return mEriFile.mNumberOfEriEntries;
| public boolean | isEriFileLoaded()Returns if the ERI file has been loaded
return mIsEriFileLoaded;
| public void | loadEriFile()
switch (mEriFileSource) {
case ERI_FROM_MODEM:
loadEriFileFromModem();
break;
case ERI_FROM_FILE_SYSTEM:
loadEriFileFromFileSystem();
break;
case ERI_FROM_XML:
default:
loadEriFileFromXml();
break;
}
| private void | loadEriFileFromFileSystem()Load the ERI file from a File System file
In this case the a Phone Support Tool to update the ERI file must be provided
to the Operator
// NOT IMPLEMENTED, Chipset vendor/Operator specific
| private void | loadEriFileFromModem()Load the ERI file from the MODEM through chipset specific RIL_REQUEST_OEM_HOOK
In this case the ERI file can be updated from the Phone Support Tool available
from the Chipset vendor
// NOT IMPLEMENTED, Chipset vendor/Operator specific
| private void | loadEriFileFromXml()Load the ERI file from the application framework resources encoded in XML
XmlPullParser parser = null;
FileInputStream stream = null;
Resources r = mContext.getResources();
try {
if (DBG) Rlog.d(LOG_TAG, "loadEriFileFromXml: check for alternate file");
stream = new FileInputStream(
r.getString(com.android.internal.R.string.alternate_eri_file));
parser = Xml.newPullParser();
parser.setInput(stream, null);
if (DBG) Rlog.d(LOG_TAG, "loadEriFileFromXml: opened alternate file");
} catch (FileNotFoundException e) {
if (DBG) Rlog.d(LOG_TAG, "loadEriFileFromXml: no alternate file");
parser = null;
} catch (XmlPullParserException e) {
if (DBG) Rlog.d(LOG_TAG, "loadEriFileFromXml: no parser for alternate file");
parser = null;
}
if (parser == null) {
if (DBG) Rlog.d(LOG_TAG, "loadEriFileFromXml: open normal file");
parser = r.getXml(com.android.internal.R.xml.eri);
}
try {
XmlUtils.beginDocument(parser, "EriFile");
mEriFile.mVersionNumber = Integer.parseInt(
parser.getAttributeValue(null, "VersionNumber"));
mEriFile.mNumberOfEriEntries = Integer.parseInt(
parser.getAttributeValue(null, "NumberOfEriEntries"));
mEriFile.mEriFileType = Integer.parseInt(
parser.getAttributeValue(null, "EriFileType"));
int parsedEriEntries = 0;
while(true) {
XmlUtils.nextElement(parser);
String name = parser.getName();
if (name == null) {
if (parsedEriEntries != mEriFile.mNumberOfEriEntries)
Rlog.e(LOG_TAG, "Error Parsing ERI file: " + mEriFile.mNumberOfEriEntries
+ " defined, " + parsedEriEntries + " parsed!");
break;
} else if (name.equals("CallPromptId")) {
int id = Integer.parseInt(parser.getAttributeValue(null, "Id"));
String text = parser.getAttributeValue(null, "CallPromptText");
if (id >= 0 && id <= 2) {
mEriFile.mCallPromptId[id] = text;
} else {
Rlog.e(LOG_TAG, "Error Parsing ERI file: found" + id + " CallPromptId");
}
} else if (name.equals("EriInfo")) {
int roamingIndicator = Integer.parseInt(
parser.getAttributeValue(null, "RoamingIndicator"));
int iconIndex = Integer.parseInt(parser.getAttributeValue(null, "IconIndex"));
int iconMode = Integer.parseInt(parser.getAttributeValue(null, "IconMode"));
String eriText = parser.getAttributeValue(null, "EriText");
int callPromptId = Integer.parseInt(
parser.getAttributeValue(null, "CallPromptId"));
int alertId = Integer.parseInt(parser.getAttributeValue(null, "AlertId"));
parsedEriEntries++;
mEriFile.mRoamIndTable.put(roamingIndicator, new EriInfo (roamingIndicator,
iconIndex, iconMode, eriText, callPromptId, alertId));
}
}
if (DBG) Rlog.d(LOG_TAG, "loadEriFileFromXml: eri parsing successful, file loaded");
mIsEriFileLoaded = true;
} catch (Exception e) {
Rlog.e(LOG_TAG, "Got exception while loading ERI file.", e);
} finally {
if (parser instanceof XmlResourceParser) {
((XmlResourceParser)parser).close();
}
try {
if (stream != null) {
stream.close();
}
} catch (IOException e) {
// Ignore
}
}
|
|