Merge change 2761 into donut
* changes: TODO's from Teleca with modifications from wink.
This commit is contained in:
BIN
core/res/res/drawable/stat_sys_vp_phone_call_bluetooth.png
Normal file
BIN
core/res/res/drawable/stat_sys_vp_phone_call_bluetooth.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 815 B |
@@ -148,6 +148,24 @@
|
||||
<!-- Meaning: unknown. Example: Service was enabled for: Voice, PAD -->
|
||||
<string name="serviceClassPAD">PAD</string>
|
||||
|
||||
<!-- CDMA Roaming Indicator Strings (non ERI)--> <skip />
|
||||
<!-- Default roaming indicator text -->
|
||||
<string name="roamingText0">Roaming Indicator On</string>
|
||||
<string name="roamingText1">Roaming Indicator Off</string>
|
||||
<string name="roamingText2">Roaming Indicator Flashing</string>
|
||||
<string name="roamingText3">Out of Neighborhood</string>
|
||||
<string name="roamingText4">Out of Building</string>
|
||||
<string name="roamingText5">Roaming - Preferred System</string>
|
||||
<string name="roamingText6">Roaming - Available System</string>
|
||||
<string name="roamingText7">Roaming - Alliance Partner</string>
|
||||
<string name="roamingText8">Roaming - Premium Partner</string>
|
||||
<string name="roamingText9">Roaming - Full Service Functionality</string>
|
||||
<string name="roamingText10">Roaming - Partial Service Functionality</string>
|
||||
<string name="roamingText11">Roaming Banner On</string>
|
||||
<string name="roamingText12">Roaming Banner Off</string>
|
||||
<string name="roamingTextSearching">Searching for Service</string>
|
||||
|
||||
|
||||
<!--
|
||||
{0} is one of "bearerServiceCode*"
|
||||
{1} is dialing number
|
||||
|
||||
@@ -840,30 +840,10 @@ public class StatusBarPolicy {
|
||||
updateDataIcon();
|
||||
}
|
||||
|
||||
// TODO(Teleca): I've add isCdma() to reduce some code duplication and simplify.
|
||||
// Please validate the correctness of these changes
|
||||
private boolean isCdma() {
|
||||
// Is this equivalent, if so it seems simpler?
|
||||
// return ((mPhone != null) && (mPhone.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA));
|
||||
|
||||
if (mServiceState != null) {
|
||||
switch(mServiceState.getRadioTechnology()) {
|
||||
case ServiceState.RADIO_TECHNOLOGY_1xRTT:
|
||||
case ServiceState.RADIO_TECHNOLOGY_EVDO_0:
|
||||
case ServiceState.RADIO_TECHNOLOGY_EVDO_A:
|
||||
case ServiceState.RADIO_TECHNOLOGY_IS95A:
|
||||
case ServiceState.RADIO_TECHNOLOGY_IS95B:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return ((mPhone != null) && (mPhone.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA));
|
||||
}
|
||||
|
||||
// TODO(Teleca): I've add hasService() to reduce some code duplication and simplify.
|
||||
// Please validate the correctness of these changes.
|
||||
private boolean hasService() {
|
||||
if (mServiceState != null) {
|
||||
switch (mServiceState.getState()) {
|
||||
@@ -1223,10 +1203,12 @@ public class StatusBarPolicy {
|
||||
private final void updateCdmaRoamingIcon() {
|
||||
if (!hasService()) {
|
||||
mService.setIconVisibility(mCdmaRoamingIndicatorIcon, false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isCdma()) {
|
||||
mService.setIconVisibility(mCdmaRoamingIndicatorIcon, false);
|
||||
return;
|
||||
}
|
||||
|
||||
int[] iconList = sRoamingIndicatorImages_cdma;
|
||||
@@ -1256,8 +1238,10 @@ public class StatusBarPolicy {
|
||||
mService.setIconVisibility(mCdmaRoamingIndicatorIcon, true);
|
||||
break;
|
||||
case EriInfo.ROAMING_ICON_MODE_FLASH:
|
||||
mCdmaRoamingIndicatorIconData.iconId = com.android.internal.R.drawable.stat_sys_roaming_cdma_flash;
|
||||
mCdmaRoamingIndicatorIconData.iconId =
|
||||
com.android.internal.R.drawable.stat_sys_roaming_cdma_flash;
|
||||
mService.updateIcon(mCdmaRoamingIndicatorIcon, mCdmaRoamingIndicatorIconData, null);
|
||||
mService.setIconVisibility(mCdmaRoamingIndicatorIcon, true);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
@@ -1258,10 +1258,7 @@ public interface CommandsInterface {
|
||||
* @param result
|
||||
* Callback message is empty on completion
|
||||
*/
|
||||
/**
|
||||
* TODO(Teleca): configValuesArray is represented as a RIL_BroadcastSMSConfig
|
||||
* so we think this should be a class with the appropriate parameters not an array?
|
||||
*/
|
||||
// TODO: Change the configValuesArray to a RIL_BroadcastSMSConfig
|
||||
public void setCdmaBroadcastConfig(int[] configValuesArray, Message result);
|
||||
|
||||
/**
|
||||
|
||||
@@ -53,15 +53,6 @@ import java.util.Locale;
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* TODO(Teleca): This has a multitude of methods that are CDMA specific
|
||||
* , (registerForVoicePrivacy, registerCdmaInformationRecord, registerCdmaCallWaiting,
|
||||
* setCdmaRoamingPreference, setCdmaSubscription, getCdmaEriIcon, getCdmaEriText, ...) can
|
||||
* these type of calls be more abstract. For example CallWaiting is common between the GSM/CDMA
|
||||
* it would seem that doesn't need to be cdma specific. Also, should the application be directly
|
||||
* dealing with the CdmaInformationRecord's could they be abstracted to something more generic.
|
||||
*/
|
||||
|
||||
public abstract class PhoneBase implements Phone {
|
||||
private static final String LOG_TAG = "PHONE";
|
||||
private static final boolean LOCAL_DEBUG = true;
|
||||
|
||||
@@ -3302,10 +3302,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
|
||||
send(rr);
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO(Teleca): configValuesArray is represented as a RIL_BroadcastSMSConfig
|
||||
* so we think this should be a class with the appropriate parameters not an array?
|
||||
*/
|
||||
// TODO: Change the configValuesArray to a RIL_BroadcastSMSConfig
|
||||
public void setCdmaBroadcastConfig(int[] configValuesArray, Message response) {
|
||||
RILRequest rr = RILRequest.obtain(RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG, response);
|
||||
|
||||
|
||||
@@ -249,7 +249,7 @@ public class CDMAPhone extends PhoneBase {
|
||||
public DataActivityState getDataActivityState() {
|
||||
DataActivityState ret = DataActivityState.NONE;
|
||||
|
||||
if (mSST.getCurrentCdmaDataConnectionState() != ServiceState.RADIO_TECHNOLOGY_UNKNOWN) {
|
||||
if (mSST.getCurrentCdmaDataConnectionState() == ServiceState.STATE_IN_SERVICE) {
|
||||
|
||||
switch (mDataConnection.getActivity()) {
|
||||
case DATAIN:
|
||||
@@ -384,11 +384,11 @@ public class CDMAPhone extends PhoneBase {
|
||||
}
|
||||
|
||||
public String getLine1Number() {
|
||||
return mRuimRecords.getMdnNumber();
|
||||
return mSST.getMdnNumber();
|
||||
}
|
||||
|
||||
public String getCdmaMIN() {
|
||||
return mRuimRecords.getCdmaMin();
|
||||
return mSST.getCdmaMin();
|
||||
}
|
||||
|
||||
public void getCallWaiting(Message onComplete) {
|
||||
@@ -545,8 +545,7 @@ public class CDMAPhone extends PhoneBase {
|
||||
// already been called
|
||||
|
||||
ret = DataState.DISCONNECTED;
|
||||
} else if (mSST.getCurrentCdmaDataConnectionState()
|
||||
== ServiceState.RADIO_TECHNOLOGY_UNKNOWN) {
|
||||
} else if (mSST.getCurrentCdmaDataConnectionState() != ServiceState.STATE_IN_SERVICE) {
|
||||
// If we're out of service, open TCP sockets may still work
|
||||
// but no data will flow
|
||||
ret = DataState.DISCONNECTED;
|
||||
@@ -1159,61 +1158,7 @@ public class CDMAPhone extends PhoneBase {
|
||||
public int getCdmaEriIconIndex() {
|
||||
int roamInd = getServiceState().getCdmaRoamingIndicator();
|
||||
int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator();
|
||||
int ret = -1;
|
||||
|
||||
switch (roamInd) {
|
||||
// Handling the standard roaming indicator (non-ERI)
|
||||
case EriInfo.ROAMING_INDICATOR_ON:
|
||||
case EriInfo.ROAMING_INDICATOR_OFF:
|
||||
case EriInfo.ROAMING_INDICATOR_FLASH:
|
||||
Log.d(LOG_TAG, "Using Standard Roaming Indicator (non-ERI): " + roamInd);
|
||||
ret = roamInd;
|
||||
break;
|
||||
|
||||
// Handling the Enhanced Roaming Indicator (roamInd > 2)
|
||||
default:
|
||||
if (!mEriManager.isEriFileLoaded()) {
|
||||
/**
|
||||
* TODO(Teleca): What is going on here? Conditionals on the variable being
|
||||
* switched? Seems unreasonably confusing... Especially since the above comment
|
||||
* indicates this should always be true... If we used explicit returns, the
|
||||
* switch could be used to filter specific cases for early bail, and the rest
|
||||
* could then be dealt with outside the switch...
|
||||
*/
|
||||
|
||||
if(defRoamInd > 2) {
|
||||
Log.d(LOG_TAG, "ERI File not loaded, using: "
|
||||
+ EriInfo.ROAMING_INDICATOR_FLASH);
|
||||
ret = EriInfo.ROAMING_INDICATOR_FLASH;
|
||||
} else {
|
||||
Log.d(LOG_TAG, "ERI File not loaded, using: " + defRoamInd);
|
||||
ret = defRoamInd;
|
||||
}
|
||||
} else if (mEriManager.getEriInfo(roamInd) == null) {
|
||||
if(mEriManager.getEriInfo(defRoamInd) == null) {
|
||||
/**
|
||||
* TODO(Teleca): Why the redundant code? Especially since it results in this very strange looking
|
||||
* almost-identical conditional... How about calling each version of mEriManager.getEriInfo just
|
||||
* once, and conditionalizing on the results..
|
||||
*/
|
||||
Log.e(LOG_TAG, "Error: ERI entry: " + roamInd
|
||||
+ " not present, defRoamInd: " + defRoamInd
|
||||
+ " not defined in ERI file");
|
||||
ret = EriInfo.ROAMING_INDICATOR_ON;
|
||||
} else {
|
||||
int iconIndex = mEriManager.getEriInfo(defRoamInd).mIconIndex;
|
||||
Log.d(LOG_TAG, "ERI entry " + roamInd + " not present, using icon: "
|
||||
+ iconIndex);
|
||||
ret = iconIndex;
|
||||
}
|
||||
} else {
|
||||
int iconIndex = mEriManager.getEriInfo(roamInd).mIconIndex;
|
||||
Log.d(LOG_TAG, "Using ERI icon: " + iconIndex);
|
||||
ret = iconIndex;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
return mEriManager.getCdmaEriIconIndex(roamInd, defRoamInd);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1225,60 +1170,7 @@ public class CDMAPhone extends PhoneBase {
|
||||
public int getCdmaEriIconMode() {
|
||||
int roamInd = getServiceState().getCdmaRoamingIndicator();
|
||||
int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator();
|
||||
int ret = -1;
|
||||
|
||||
switch (roamInd) {
|
||||
// Handling the standard roaming indicator (non-ERI)
|
||||
case EriInfo.ROAMING_INDICATOR_ON:
|
||||
case EriInfo.ROAMING_INDICATOR_OFF:
|
||||
Log.d(LOG_TAG, "Using Standard Roaming Indicator (non-ERI): normal");
|
||||
ret = EriInfo.ROAMING_ICON_MODE_NORMAL;
|
||||
break;
|
||||
|
||||
case EriInfo.ROAMING_INDICATOR_FLASH:
|
||||
Log.d(LOG_TAG, "Using Standard Roaming Indicator (non-ERI): flashing");
|
||||
ret = EriInfo.ROAMING_ICON_MODE_FLASH;
|
||||
break;
|
||||
|
||||
// Handling the Enhanced Roaming Indicator (roamInd > 2)
|
||||
default:
|
||||
if (!mEriManager.isEriFileLoaded()) {
|
||||
if(defRoamInd > 2) {
|
||||
Log.d(LOG_TAG, "ERI File not loaded, defRoamInd > 2, flashing");
|
||||
ret = EriInfo.ROAMING_ICON_MODE_FLASH;
|
||||
} else {
|
||||
switch (defRoamInd) {
|
||||
// Handling the standard roaming indicator (non-ERI)
|
||||
case EriInfo.ROAMING_INDICATOR_ON:
|
||||
case EriInfo.ROAMING_INDICATOR_OFF:
|
||||
Log.d(LOG_TAG, "ERI File not loaded, normal");
|
||||
ret = EriInfo.ROAMING_ICON_MODE_NORMAL;
|
||||
break;
|
||||
|
||||
case EriInfo.ROAMING_INDICATOR_FLASH:
|
||||
Log.d(LOG_TAG, "ERI File not loaded, normal");
|
||||
ret = EriInfo.ROAMING_ICON_MODE_FLASH;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (mEriManager.getEriInfo(roamInd) == null) {
|
||||
if(mEriManager.getEriInfo(defRoamInd) == null) {
|
||||
Log.e(LOG_TAG, "Error: defRoamInd not defined in ERI file, normal");
|
||||
ret = EriInfo.ROAMING_ICON_MODE_NORMAL;
|
||||
} else {
|
||||
int mode = mEriManager.getEriInfo(defRoamInd).mIconMode;
|
||||
Log.d(LOG_TAG, "ERI entry " + roamInd + " not present, icon mode: "
|
||||
+ mode);
|
||||
ret = mode;
|
||||
}
|
||||
} else {
|
||||
int mode = mEriManager.getEriInfo(roamInd).mIconMode;
|
||||
Log.d(LOG_TAG, "Using ERI icon mode: " + mode);
|
||||
ret = mode;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
return mEriManager.getCdmaEriIconMode(roamInd, defRoamInd);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1288,94 +1180,6 @@ public class CDMAPhone extends PhoneBase {
|
||||
public String getCdmaEriText() {
|
||||
int roamInd = getServiceState().getCdmaRoamingIndicator();
|
||||
int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator();
|
||||
String ret = "ERI text";
|
||||
|
||||
switch (roamInd) {
|
||||
// Handling the standard roaming indicator (non-ERI)
|
||||
case EriInfo.ROAMING_INDICATOR_ON:
|
||||
ret = EriInfo.ROAMING_TEXT_0;
|
||||
break;
|
||||
case EriInfo.ROAMING_INDICATOR_OFF:
|
||||
ret = EriInfo.ROAMING_TEXT_1;
|
||||
break;
|
||||
case EriInfo.ROAMING_INDICATOR_FLASH:
|
||||
ret = EriInfo.ROAMING_TEXT_2;
|
||||
break;
|
||||
|
||||
// Handling the standard ERI
|
||||
case 3:
|
||||
ret = EriInfo.ROAMING_TEXT_3;
|
||||
break;
|
||||
case 4:
|
||||
ret = EriInfo.ROAMING_TEXT_4;
|
||||
break;
|
||||
case 5:
|
||||
ret = EriInfo.ROAMING_TEXT_5;
|
||||
break;
|
||||
case 6:
|
||||
ret = EriInfo.ROAMING_TEXT_6;
|
||||
break;
|
||||
case 7:
|
||||
ret = EriInfo.ROAMING_TEXT_7;
|
||||
break;
|
||||
case 8:
|
||||
ret = EriInfo.ROAMING_TEXT_8;
|
||||
break;
|
||||
case 9:
|
||||
ret = EriInfo.ROAMING_TEXT_9;
|
||||
break;
|
||||
case 10:
|
||||
ret = EriInfo.ROAMING_TEXT_10;
|
||||
break;
|
||||
case 11:
|
||||
ret = EriInfo.ROAMING_TEXT_11;
|
||||
break;
|
||||
case 12:
|
||||
ret = EriInfo.ROAMING_TEXT_12;
|
||||
break;
|
||||
|
||||
// Handling the non standard Enhanced Roaming Indicator (roamInd > 63)
|
||||
default:
|
||||
if (!mEriManager.isEriFileLoaded()) {
|
||||
if(defRoamInd > 2) {
|
||||
Log.d(LOG_TAG, "ERI File not loaded, defRoamInd > 2, " +
|
||||
EriInfo.ROAMING_TEXT_2);
|
||||
ret = EriInfo.ROAMING_TEXT_2;
|
||||
} else {
|
||||
switch (defRoamInd) {
|
||||
// Handling the standard roaming indicator (non-ERI)
|
||||
case EriInfo.ROAMING_INDICATOR_ON:
|
||||
Log.d(LOG_TAG, "ERI File not loaded, " + EriInfo.ROAMING_TEXT_0);
|
||||
ret = EriInfo.ROAMING_TEXT_0;
|
||||
break;
|
||||
case EriInfo.ROAMING_INDICATOR_OFF:
|
||||
Log.d(LOG_TAG, "ERI File not loaded, " + EriInfo.ROAMING_TEXT_1);
|
||||
ret = EriInfo.ROAMING_TEXT_1;
|
||||
break;
|
||||
case EriInfo.ROAMING_INDICATOR_FLASH:
|
||||
Log.d(LOG_TAG, "ERI File not loaded, " + EriInfo.ROAMING_TEXT_2);
|
||||
ret = EriInfo.ROAMING_TEXT_2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (mEriManager.getEriInfo(roamInd) == null) {
|
||||
if(mEriManager.getEriInfo(defRoamInd) == null) {
|
||||
Log.e(LOG_TAG, "Error: defRoamInd not defined in ERI file, "
|
||||
+ EriInfo.ROAMING_TEXT_0);
|
||||
ret = EriInfo.ROAMING_TEXT_0;
|
||||
} else {
|
||||
String eriText = mEriManager.getEriInfo(defRoamInd).mEriText;
|
||||
Log.d(LOG_TAG, "ERI entry " + roamInd + " not present, eri text: "
|
||||
+ eriText);
|
||||
ret = eriText;
|
||||
}
|
||||
} else {
|
||||
String eriText = mEriManager.getEriInfo(roamInd).mEriText;
|
||||
Log.d(LOG_TAG, "Using ERI text: " + eriText);
|
||||
ret = eriText;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
return mEriManager.getCdmaEriText(roamInd, defRoamInd);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,21 +29,12 @@ public interface CallFailCause {
|
||||
// Busy Tone
|
||||
static final int USER_BUSY = 17;
|
||||
|
||||
// TODO(Teleca): Should we remove commented out values?
|
||||
// // No Tone
|
||||
// static final int NUMBER_CHANGED = 22;
|
||||
// static final int STATUS_ENQUIRY = 30;
|
||||
static final int NORMAL_UNSPECIFIED = 31;
|
||||
//
|
||||
// // Congestion Tone
|
||||
|
||||
// Congestion Tone
|
||||
static final int NO_CIRCUIT_AVAIL = 34;
|
||||
// static final int TEMPORARY_FAILURE = 41;
|
||||
// static final int SWITCHING_CONGESTION = 42;
|
||||
// static final int CHANNEL_NOT_AVAIL = 44;
|
||||
// static final int QOS_NOT_AVAIL = 49;
|
||||
// static final int BEARER_NOT_AVAIL = 58;
|
||||
//
|
||||
// // others
|
||||
|
||||
// others
|
||||
static final int ACM_LIMIT_EXCEEDED = 68;
|
||||
static final int CALL_BARRED = 240;
|
||||
static final int FDN_BLOCKED = 241;
|
||||
|
||||
@@ -361,9 +361,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
||||
boolean desiredPowerState = mCdmaPhone.mSST.getDesiredPowerState();
|
||||
|
||||
if ((state == State.IDLE || state == State.SCANNING)
|
||||
&& (psState == ServiceState.RADIO_TECHNOLOGY_1xRTT ||
|
||||
psState == ServiceState.RADIO_TECHNOLOGY_EVDO_0 ||
|
||||
psState == ServiceState.RADIO_TECHNOLOGY_EVDO_A)
|
||||
&& (psState == ServiceState.STATE_IN_SERVICE)
|
||||
&& ((phone.mCM.getRadioState() == CommandsInterface.RadioState.NV_READY) ||
|
||||
mCdmaPhone.mRuimRecords.getRecordsLoaded())
|
||||
&& (mCdmaPhone.mSST.isConcurrentVoiceAndData() ||
|
||||
|
||||
@@ -69,19 +69,12 @@ import java.util.TimeZone;
|
||||
* {@hide}
|
||||
*/
|
||||
final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
|
||||
//***** Instance Variables
|
||||
CDMAPhone phone;
|
||||
CdmaCellLocation cellLoc;
|
||||
CdmaCellLocation newCellLoc;
|
||||
|
||||
/**
|
||||
* TODO(Teleca): I don't think the initialization to -1 for all of these are
|
||||
* really necessary, I don't seem them in GsmServiceStateTracker. Also,
|
||||
* all of the other initialization is unnecessary as I believe Java guarantees
|
||||
* 0, false & null, but if you think it's better than do all of them there are
|
||||
* a few that aren't initialized.
|
||||
*/
|
||||
|
||||
/**
|
||||
* The access technology currently in use: DATA_ACCESS_
|
||||
*/
|
||||
@@ -89,16 +82,13 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
private int newNetworkType = 0;
|
||||
|
||||
private boolean mCdmaRoaming = false;
|
||||
private int mRoamingIndicator = -1;
|
||||
private int mIsInPrl = -1;
|
||||
private int mDefaultRoamingIndicator = -1;
|
||||
private int mRoamingIndicator;
|
||||
private boolean mIsInPrl;
|
||||
private int mDefaultRoamingIndicator;
|
||||
|
||||
/**
|
||||
* TODO(Teleca): Maybe these should be initialized to STATE_OUT_OF_SERVICE like gprsState
|
||||
* in GsmServiceStateTracker and remove the comment.
|
||||
*/
|
||||
private int cdmaDataConnectionState = -1; // Initially we assume no data connection
|
||||
private int newCdmaDataConnectionState = -1; // Initially we assume no data connection
|
||||
// Initially we assume no data connection
|
||||
private int cdmaDataConnectionState = ServiceState.STATE_OUT_OF_SERVICE;
|
||||
private int newCdmaDataConnectionState = ServiceState.STATE_OUT_OF_SERVICE;
|
||||
private int mRegistrationState = -1;
|
||||
private RegistrantList cdmaDataConnectionAttachedRegistrants = new RegistrantList();
|
||||
private RegistrantList cdmaDataConnectionDetachedRegistrants = new RegistrantList();
|
||||
@@ -117,7 +107,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
|
||||
// We can't register for SIM_RECORDS_LOADED immediately because the
|
||||
// SIMRecords object may not be instantiated yet.
|
||||
private boolean mNeedToRegForRuimLoaded;
|
||||
private boolean mNeedToRegForRuimLoaded = false;
|
||||
|
||||
// Wake lock used while setting time of day.
|
||||
private PowerManager.WakeLock mWakeLock;
|
||||
@@ -125,22 +115,20 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
|
||||
// Keep track of SPN display rules, so we only broadcast intent if something changes.
|
||||
private String curSpn = null;
|
||||
private String curEriText = null;
|
||||
private String curPlmn = null; // it contains the name of the registered network in CDMA can
|
||||
// be the ONS or ERI text
|
||||
private int curSpnRule = 0;
|
||||
|
||||
private String mMdn = null;
|
||||
private int mHomeSystemId = -1;
|
||||
private int mHomeNetworkId = -1;
|
||||
private String mMin = null;
|
||||
private String mMdn;
|
||||
private int mHomeSystemId;
|
||||
private int mHomeNetworkId;
|
||||
private String mMin;
|
||||
|
||||
private boolean isEriTextLoaded = false;
|
||||
private boolean isSubscriptionFromRuim = false;
|
||||
|
||||
/**
|
||||
* TODO(Teleca): Is this purely for debugging purposes, or do we expect this string to be
|
||||
* passed around (eg, to the UI)? If the latter, it would be better to pass around a
|
||||
* reasonCode, and let the UI provide its own strings.
|
||||
*/
|
||||
private String mRegistrationDeniedReason = null;
|
||||
// Registration Denied Reason, General/Authentication Failure, used only for debugging purposes
|
||||
private String mRegistrationDeniedReason;
|
||||
|
||||
//***** Constants
|
||||
static final String LOG_TAG = "CDMA";
|
||||
@@ -243,9 +231,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
Registrant r = new Registrant(h, what, obj);
|
||||
cdmaDataConnectionAttachedRegistrants.add(r);
|
||||
|
||||
if (cdmaDataConnectionState == ServiceState.RADIO_TECHNOLOGY_1xRTT
|
||||
|| cdmaDataConnectionState == ServiceState.RADIO_TECHNOLOGY_EVDO_0
|
||||
|| cdmaDataConnectionState == ServiceState.RADIO_TECHNOLOGY_EVDO_A) {
|
||||
if (cdmaDataConnectionState == ServiceState.STATE_IN_SERVICE) {
|
||||
r.notifyRegistrant();
|
||||
}
|
||||
}
|
||||
@@ -264,9 +250,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
Registrant r = new Registrant(h, what, obj);
|
||||
cdmaDataConnectionDetachedRegistrants.add(r);
|
||||
|
||||
if (cdmaDataConnectionState != ServiceState.RADIO_TECHNOLOGY_1xRTT
|
||||
&& cdmaDataConnectionState != ServiceState.RADIO_TECHNOLOGY_EVDO_0
|
||||
&& cdmaDataConnectionState != ServiceState.RADIO_TECHNOLOGY_EVDO_A) {
|
||||
if (cdmaDataConnectionState != ServiceState.STATE_IN_SERVICE) {
|
||||
r.notifyRegistrant();
|
||||
}
|
||||
}
|
||||
@@ -484,30 +468,40 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
}
|
||||
|
||||
protected void updateSpnDisplay() {
|
||||
String spn = "";
|
||||
boolean showSpn = false;
|
||||
String plmn = "";
|
||||
boolean showPlmn = false;
|
||||
int rule = 0;
|
||||
if (cm.getRadioState().isRUIMReady()) {
|
||||
// TODO RUIM SPN is not implemnted, EF_SPN has to be read and Display Condition
|
||||
// Character Encoding, Language Indicator and SPN has to be set
|
||||
// rule = phone.mRuimRecords.getDisplayRule(ss.getOperatorNumeric());
|
||||
// spn = phone.mSIMRecords.getServiceProvideName();
|
||||
plmn = ss.getOperatorAlphaLong(); // mOperatorAlphaLong contains the ONS
|
||||
// showSpn = (rule & ...
|
||||
showPlmn = true; // showPlmn = (rule & ...
|
||||
|
||||
// TODO(Teleca): Check this method again, because it is not sure at the moment how
|
||||
// the RUIM handles the SIM stuff. Please complete this function.
|
||||
} else {
|
||||
// In this case there is no SPN available from RUIM, we show the ERI text
|
||||
plmn = ss.getOperatorAlphaLong(); // mOperatorAlphaLong contains the ERI text
|
||||
showPlmn = true;
|
||||
}
|
||||
|
||||
//int rule = phone.mRuimRecords.getDisplayRule(ss.getOperatorNumeric());
|
||||
String spn = null; //phone.mRuimRecords.getServiceProviderName();
|
||||
String eri = ss.getOperatorAlphaLong();
|
||||
|
||||
if (!TextUtils.equals(this.curEriText, eri)) {
|
||||
//TODO (rule & SIMRecords.SPN_RULE_SHOW_SPN) == SIMRecords.SPN_RULE_SHOW_SPN;
|
||||
boolean showSpn = false;
|
||||
//TODO (rule & SIMRecords.SPN_RULE_SHOW_PLMN) == SIMRecords.SPN_RULE_SHOW_PLMN;
|
||||
boolean showEri = true;
|
||||
if (rule != curSpnRule
|
||||
|| !TextUtils.equals(spn, curSpn)
|
||||
|| !TextUtils.equals(plmn, curPlmn)) {
|
||||
Intent intent = new Intent(Intents.SPN_STRINGS_UPDATED_ACTION);
|
||||
intent.putExtra(Intents.EXTRA_SHOW_SPN, showSpn);
|
||||
intent.putExtra(Intents.EXTRA_SPN, spn);
|
||||
intent.putExtra(Intents.EXTRA_SHOW_PLMN, showEri);
|
||||
intent.putExtra(Intents.EXTRA_PLMN, eri);
|
||||
intent.putExtra(Intents.EXTRA_SHOW_PLMN, showPlmn);
|
||||
intent.putExtra(Intents.EXTRA_PLMN, plmn);
|
||||
phone.getContext().sendStickyBroadcast(intent);
|
||||
}
|
||||
|
||||
//curSpnRule = rule;
|
||||
//curSpn = spn;
|
||||
this.curEriText = eri;
|
||||
curSpnRule = rule;
|
||||
curSpn = spn;
|
||||
curPlmn = plmn;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -549,54 +543,39 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
}
|
||||
} else try {
|
||||
switch (what) {
|
||||
case EVENT_POLL_STATE_REGISTRATION_CDMA: // Handle RIL_REQUEST_REGISTRATION_STATE,
|
||||
// the offset is because we don't want the
|
||||
// first 3 values in the
|
||||
// responseValuesRegistrationState array.
|
||||
final int offset = 3;
|
||||
case EVENT_POLL_STATE_REGISTRATION_CDMA: // Handle RIL_REQUEST_REGISTRATION_STATE.
|
||||
states = (String[])ar.result;
|
||||
|
||||
/**
|
||||
* TODO(Teleca): Change from array to a "Class" or local
|
||||
* variables so names instead of index's can be used.
|
||||
*/
|
||||
int responseValuesRegistrationState[] = {
|
||||
-1, //[0] radioTechnology
|
||||
-1, //[1] baseStationId
|
||||
-1, //[2] baseStationLatitude
|
||||
-1, //[3] baseStationLongitude
|
||||
0, //[4] cssIndicator; init with 0, because it is treated as a boolean
|
||||
-1, //[5] systemId
|
||||
-1, //[6] networkId
|
||||
-1, //[7] Roaming indicator
|
||||
-1, //[8] Indicates if current system is in PRL
|
||||
-1, //[9] Is default roaming indicator from PRL
|
||||
-1, //[10] If registration state is 3 this is reason for denial
|
||||
};
|
||||
int registrationState = 4; //[0] registrationState
|
||||
int radioTechnology = -1; //[3] radioTechnology
|
||||
int baseStationId = -1; //[4] baseStationId
|
||||
int baseStationLatitude = -1; //[5] baseStationLatitude
|
||||
int baseStationLongitude = -1; //[6] baseStationLongitude
|
||||
int cssIndicator = 0; //[7] init with 0, because it is treated as a boolean
|
||||
int systemId = 0; //[8] systemId
|
||||
int networkId = 0; //[9] networkId
|
||||
int roamingIndicator = -1; //[10] Roaming indicator
|
||||
int systemIsInPrl = 0; //[11] Indicates if current system is in PRL
|
||||
int defaultRoamingIndicator = 0; //[12] Is default roaming indicator from PRL
|
||||
int reasonForDenial = 0; //[13] Denial reason if registrationState = 3
|
||||
|
||||
if (states.length == 14) {
|
||||
try {
|
||||
this.mRegistrationState = Integer.parseInt(states[0]);
|
||||
} catch (NumberFormatException ex) {
|
||||
Log.w(LOG_TAG, "error parsing RegistrationState: " + ex);
|
||||
}
|
||||
try {
|
||||
responseValuesRegistrationState[0] = Integer.parseInt(states[3]);
|
||||
responseValuesRegistrationState[1] = Integer.parseInt(states[4], 16);
|
||||
responseValuesRegistrationState[2] = Integer.parseInt(states[5], 16);
|
||||
responseValuesRegistrationState[3] = Integer.parseInt(states[6], 16);
|
||||
responseValuesRegistrationState[4] = Integer.parseInt(states[7]);
|
||||
responseValuesRegistrationState[5] = Integer.parseInt(states[8]);
|
||||
responseValuesRegistrationState[6] = Integer.parseInt(states[9]);
|
||||
responseValuesRegistrationState[7] = Integer.parseInt(states[10]);
|
||||
responseValuesRegistrationState[8] = Integer.parseInt(states[11]);
|
||||
responseValuesRegistrationState[9] = Integer.parseInt(states[12]);
|
||||
responseValuesRegistrationState[10] = Integer.parseInt(states[13]);
|
||||
registrationState = Integer.parseInt(states[0]);
|
||||
radioTechnology = Integer.parseInt(states[3]);
|
||||
baseStationId = Integer.parseInt(states[4], 16);
|
||||
baseStationLatitude = Integer.parseInt(states[5], 16);
|
||||
baseStationLongitude = Integer.parseInt(states[6], 16);
|
||||
cssIndicator = Integer.parseInt(states[7]);
|
||||
systemId = Integer.parseInt(states[8]);
|
||||
networkId = Integer.parseInt(states[9]);
|
||||
roamingIndicator = Integer.parseInt(states[10]);
|
||||
systemIsInPrl = Integer.parseInt(states[11]);
|
||||
defaultRoamingIndicator = Integer.parseInt(states[12]);
|
||||
reasonForDenial = Integer.parseInt(states[13]);
|
||||
}
|
||||
catch(NumberFormatException ex) {
|
||||
Log.w(LOG_TAG, "Warning! There is an unexpected value"
|
||||
+ "returned as response from "
|
||||
+ "RIL_REQUEST_REGISTRATION_STATE.");
|
||||
Log.w(LOG_TAG, "error parsing RegistrationState: " + ex);
|
||||
}
|
||||
} else {
|
||||
throw new RuntimeException("Warning! Wrong number of parameters returned from "
|
||||
@@ -604,29 +583,28 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
+ states.length);
|
||||
}
|
||||
|
||||
mCdmaRoaming = regCodeIsRoaming(this.mRegistrationState);
|
||||
this.newCdmaDataConnectionState =
|
||||
radioTechnologyToServiceState(responseValuesRegistrationState[0]);
|
||||
newSS.setState (regCodeToServiceState(this.mRegistrationState));
|
||||
newSS.setRadioTechnology(responseValuesRegistrationState[0]);
|
||||
newSS.setCssIndicator(responseValuesRegistrationState[4]);
|
||||
newSS.setSystemAndNetworkId(responseValuesRegistrationState[5],
|
||||
responseValuesRegistrationState[6]);
|
||||
mRegistrationState = registrationState;
|
||||
mCdmaRoaming = regCodeIsRoaming(registrationState);
|
||||
newSS.setState (regCodeToServiceState(registrationState));
|
||||
|
||||
mRoamingIndicator = responseValuesRegistrationState[7];
|
||||
mIsInPrl = responseValuesRegistrationState[8];
|
||||
mDefaultRoamingIndicator = responseValuesRegistrationState[9];
|
||||
this.newCdmaDataConnectionState = radioTechnologyToDataServiceState(radioTechnology);
|
||||
newSS.setRadioTechnology(radioTechnology);
|
||||
newNetworkType = radioTechnology;
|
||||
|
||||
newSS.setCssIndicator(cssIndicator);
|
||||
newSS.setSystemAndNetworkId(systemId, networkId);
|
||||
mRoamingIndicator = roamingIndicator;
|
||||
mIsInPrl = (systemIsInPrl == 0) ? false : true;
|
||||
mDefaultRoamingIndicator = defaultRoamingIndicator;
|
||||
|
||||
newNetworkType = responseValuesRegistrationState[0];
|
||||
|
||||
// values are -1 if not available
|
||||
newCellLoc.setCellLocationData(responseValuesRegistrationState[1],
|
||||
responseValuesRegistrationState[2],
|
||||
responseValuesRegistrationState[3]);
|
||||
newCellLoc.setCellLocationData(baseStationId, baseStationLatitude,
|
||||
baseStationLongitude);
|
||||
|
||||
if (responseValuesRegistrationState[10] == 0) {
|
||||
if (reasonForDenial == 0) {
|
||||
mRegistrationDeniedReason = ServiceStateTracker.REGISTRATION_DENIED_GEN;
|
||||
} else if (responseValuesRegistrationState[10] == 1) {
|
||||
} else if (reasonForDenial == 1) {
|
||||
mRegistrationDeniedReason = ServiceStateTracker.REGISTRATION_DENIED_AUTH;
|
||||
} else {
|
||||
mRegistrationDeniedReason = "";
|
||||
@@ -641,9 +619,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
String opNames[] = (String[])ar.result;
|
||||
|
||||
if (opNames != null && opNames.length >= 3) {
|
||||
// TODO(Teleca): Is this necessary here and in the else clause?
|
||||
newSS.setOperatorName(opNames[0], opNames[1], opNames[2]);
|
||||
if (phone.mCM.getRadioState().isNVReady()) {
|
||||
if (cm.getRadioState().isNVReady()) {
|
||||
// In CDMA in case on NV the ss.mOperatorAlphaLong is set later with the
|
||||
// ERI text, so here is ignored what is coming from the modem
|
||||
newSS.setOperatorName(null, opNames[1], opNames[2]);
|
||||
@@ -695,28 +671,25 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
newSS.setRoaming(mCdmaRoaming);
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO(Teleca): This would be simpler if mIsInPrl was a "boolean" as the
|
||||
* name implies rather than tri-state. Above I've suggested that the -1's
|
||||
* might be able to be removed, if so please simplify this. Otherwise change
|
||||
* the name to mPrlState or some such. Also the logic can be simplified
|
||||
* by testing for "mIsInPrl" only once.
|
||||
*/
|
||||
// Setting SS CdmaRoamingIndicator and CdmaDefaultRoamingIndicator
|
||||
// TODO(Teleca): use constants for the standard roaming indicators
|
||||
if (mIsInPrl == 0 && mRegistrationState == 5) {
|
||||
// System is acquired but prl not loaded or no prl match
|
||||
newSS.setCdmaRoamingIndicator(2); //FLASHING
|
||||
} else if (!namMatch && (mIsInPrl == 1)) {
|
||||
// System is acquired, no nam match, prl match
|
||||
newSS.setCdmaRoamingIndicator(mRoamingIndicator);
|
||||
} else if (namMatch && (mIsInPrl == 1) && mRoamingIndicator <= 2) {
|
||||
// System is acquired, nam match, prl match, mRoamingIndicator <= 2
|
||||
newSS.setCdmaRoamingIndicator(1); //OFF
|
||||
} else if (namMatch && (mIsInPrl == 1) && mRoamingIndicator > 2) {
|
||||
// System is acquired, nam match, prl match, mRoamingIndicator > 2
|
||||
newSS.setCdmaRoamingIndicator(mRoamingIndicator);
|
||||
}
|
||||
// TODO(Teleca): Validate this is correct.
|
||||
if (mIsInPrl) {
|
||||
if (namMatch && (mRoamingIndicator <= 2)) {
|
||||
// System is acquired, prl match, nam match and mRoamingIndicator <= 2
|
||||
newSS.setCdmaRoamingIndicator(EriInfo.ROAMING_INDICATOR_OFF);
|
||||
} else {
|
||||
// System is acquired, prl match, no nam match or mRoamingIndicator > 2
|
||||
newSS.setCdmaRoamingIndicator(mRoamingIndicator);
|
||||
}
|
||||
} else {
|
||||
if (mRegistrationState == 5) {
|
||||
// System is acquired but prl not loaded or no prl match
|
||||
newSS.setCdmaRoamingIndicator(EriInfo.ROAMING_INDICATOR_FLASH);
|
||||
} else {
|
||||
// Use the default indicator
|
||||
}
|
||||
}
|
||||
|
||||
newSS.setCdmaDefaultRoamingIndicator(mDefaultRoamingIndicator);
|
||||
|
||||
// NOTE: Some operator may require to override the mCdmaRoaming (set by the modem)
|
||||
@@ -725,7 +698,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
if (DBG) {
|
||||
log("Set CDMA Roaming Indicator to: " + newSS.getCdmaRoamingIndicator()
|
||||
+ ". mCdmaRoaming = " + mCdmaRoaming + ", namMatch = " + namMatch
|
||||
+ ", mIsInPrl= " + mIsInPrl + ", mRoamingIndicator = " + mRoamingIndicator
|
||||
+ ", mIsInPrl = " + mIsInPrl + ", mRoamingIndicator = " + mRoamingIndicator
|
||||
+ ", mDefaultRoamingIndicator= " + mDefaultRoamingIndicator);
|
||||
}
|
||||
pollStateDone();
|
||||
@@ -882,20 +855,12 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
&& newSS.getState() != ServiceState.STATE_IN_SERVICE;
|
||||
|
||||
boolean hasCdmaDataConnectionAttached =
|
||||
(this.cdmaDataConnectionState != ServiceState.RADIO_TECHNOLOGY_1xRTT
|
||||
&& this.cdmaDataConnectionState != ServiceState.RADIO_TECHNOLOGY_EVDO_0
|
||||
&& this.cdmaDataConnectionState != ServiceState.RADIO_TECHNOLOGY_EVDO_A)
|
||||
&& (this.newCdmaDataConnectionState == ServiceState.RADIO_TECHNOLOGY_1xRTT
|
||||
|| this.newCdmaDataConnectionState == ServiceState.RADIO_TECHNOLOGY_EVDO_0
|
||||
|| this.newCdmaDataConnectionState == ServiceState.RADIO_TECHNOLOGY_EVDO_A);
|
||||
this.cdmaDataConnectionState != ServiceState.STATE_IN_SERVICE
|
||||
&& this.newCdmaDataConnectionState == ServiceState.STATE_IN_SERVICE;
|
||||
|
||||
boolean hasCdmaDataConnectionDetached =
|
||||
(this.cdmaDataConnectionState == ServiceState.RADIO_TECHNOLOGY_1xRTT
|
||||
|| this.cdmaDataConnectionState == ServiceState.RADIO_TECHNOLOGY_EVDO_0
|
||||
|| this.cdmaDataConnectionState == ServiceState.RADIO_TECHNOLOGY_EVDO_A)
|
||||
&& (this.newCdmaDataConnectionState != ServiceState.RADIO_TECHNOLOGY_1xRTT
|
||||
&& this.newCdmaDataConnectionState != ServiceState.RADIO_TECHNOLOGY_EVDO_0
|
||||
&& this.newCdmaDataConnectionState != ServiceState.RADIO_TECHNOLOGY_EVDO_A);
|
||||
this.cdmaDataConnectionState == ServiceState.STATE_IN_SERVICE
|
||||
&& this.newCdmaDataConnectionState != ServiceState.STATE_IN_SERVICE;
|
||||
|
||||
boolean hasCdmaDataConnectionChanged =
|
||||
cdmaDataConnectionState != newCdmaDataConnectionState;
|
||||
@@ -938,18 +903,16 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
}
|
||||
|
||||
if (hasChanged) {
|
||||
if (phone.mCM.getRadioState().isNVReady()) {
|
||||
if (cm.getRadioState().isNVReady()) {
|
||||
String eriText;
|
||||
// Now the CDMAPhone sees the new ServiceState so it can get the new ERI text
|
||||
if (ss.getState() == ServiceState.STATE_IN_SERVICE) {
|
||||
eriText = phone.getCdmaEriText();
|
||||
} else {
|
||||
// Note that this is valid only for mRegistrationState 2,3,4, not 0!
|
||||
/**
|
||||
* TODO(Teleca): From the comment this apparently isn't always true
|
||||
* should there be additional logic with other strings?
|
||||
*/
|
||||
eriText = EriInfo.SEARCHING_TEXT;
|
||||
// Note that ServiceState.STATE_OUT_OF_SERVICE is valid used for
|
||||
// mRegistrationState 0,2,3 and 4
|
||||
eriText = phone.getContext().getText(
|
||||
com.android.internal.R.string.roamingTextSearching).toString();
|
||||
}
|
||||
ss.setCdmaEriText(eriText);
|
||||
}
|
||||
@@ -1047,6 +1010,12 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
return guess;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: This code is exactly the same as in GsmServiceStateTracker
|
||||
* and has a TODO to not poll signal strength if screen is off.
|
||||
* This code should probably be hoisted to the base class so
|
||||
* the fix, when added, works for both.
|
||||
*/
|
||||
private void
|
||||
queueNextSignalStrengthPoll() {
|
||||
if (dontPollSignalStrength || (cm.getRadioState().isGsm())) {
|
||||
@@ -1060,7 +1029,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
msg = obtainMessage();
|
||||
msg.what = EVENT_POLL_SIGNAL_STRENGTH;
|
||||
|
||||
// TODO(Teleca): Don't poll signal strength if screen is off
|
||||
// TODO Don't poll signal strength if screen is off
|
||||
sendMessageDelayed(msg, POLL_PERIOD_MILLIS);
|
||||
}
|
||||
|
||||
@@ -1108,8 +1077,8 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
}
|
||||
|
||||
|
||||
private int radioTechnologyToServiceState(int code) {
|
||||
int retVal = ServiceState.RADIO_TECHNOLOGY_UNKNOWN;
|
||||
private int radioTechnologyToDataServiceState(int code) {
|
||||
int retVal = ServiceState.STATE_OUT_OF_SERVICE;
|
||||
switch(code) {
|
||||
case 0:
|
||||
case 1:
|
||||
@@ -1118,14 +1087,10 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
case 4:
|
||||
case 5:
|
||||
break;
|
||||
case 6:
|
||||
retVal = ServiceState.RADIO_TECHNOLOGY_1xRTT;
|
||||
break;
|
||||
case 7:
|
||||
retVal = ServiceState.RADIO_TECHNOLOGY_EVDO_0;
|
||||
break;
|
||||
case 8:
|
||||
retVal = ServiceState.RADIO_TECHNOLOGY_EVDO_A;
|
||||
case 6: // RADIO_TECHNOLOGY_1xRTT
|
||||
case 7: // RADIO_TECHNOLOGY_EVDO_0
|
||||
case 8: // RADIO_TECHNOLOGY_EVDO_A
|
||||
retVal = ServiceState.STATE_IN_SERVICE;
|
||||
break;
|
||||
default:
|
||||
Log.e(LOG_TAG, "Wrong radioTechnology code.");
|
||||
@@ -1435,4 +1400,12 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
|
||||
Log.d(LOG_TAG, "[CdmaServiceStateTracker] " + s);
|
||||
}
|
||||
|
||||
public String getMdnNumber() {
|
||||
return mMdn;
|
||||
}
|
||||
|
||||
public String getCdmaMin() {
|
||||
return mMin;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,28 +23,6 @@ public final class EriInfo {
|
||||
public static final int ROAMING_ICON_MODE_NORMAL = 0;
|
||||
public static final int ROAMING_ICON_MODE_FLASH = 1;
|
||||
|
||||
/**
|
||||
* TODO(Teleca): These strings appear to be used by the UI
|
||||
* hence they must be changed to resources so they can be
|
||||
* translated to the appropriate language.
|
||||
*/
|
||||
public static final String ROAMING_TEXT_0 = "Roaming Indicator On";
|
||||
public static final String ROAMING_TEXT_1 = "Roaming Indicator Off";
|
||||
public static final String ROAMING_TEXT_2 = "Roaming Indicator Flashing";
|
||||
public static final String ROAMING_TEXT_3 = "Out of Neighborhood";
|
||||
public static final String ROAMING_TEXT_4 = "Out of Building";
|
||||
public static final String ROAMING_TEXT_5 = "Roaming - Preferred System";
|
||||
public static final String ROAMING_TEXT_6 = "Roaming - Available System";
|
||||
public static final String ROAMING_TEXT_7 = "Roaming - Alliance Partner";
|
||||
public static final String ROAMING_TEXT_8 = "Roaming - Premium Partner";
|
||||
public static final String ROAMING_TEXT_9 = "Roaming - Full Service Functionality";
|
||||
public static final String ROAMING_TEXT_10 = "Roaming - Partial Service Functionality";
|
||||
public static final String ROAMING_TEXT_11 = "Roaming Banner On";
|
||||
public static final String ROAMING_TEXT_12 = "Roaming Banner Off";
|
||||
|
||||
public static final String SEARCHING_TEXT = "Searching for Svc.";
|
||||
|
||||
|
||||
public int mRoamingIndicator;
|
||||
public int mIconIndex;
|
||||
public int mIconMode;
|
||||
|
||||
@@ -28,17 +28,12 @@ import com.android.internal.util.XmlUtils;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* TODO(Teleca): Please as some comments on how this class is to
|
||||
* be used. We've removed Handler as a base class and instead
|
||||
* recommend that child classes add a Handler as a member if its
|
||||
* needed.
|
||||
* EriManager loads the ERI file definitions and manages the CDMA roaming information.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
public final class EriManager {
|
||||
|
||||
class EriFile {
|
||||
public static final int MAX_ERI_ENTRIES = 30;
|
||||
|
||||
public int mVersionNumber; // File version number
|
||||
public int mNumberOfEriEntries; // Number of entries
|
||||
@@ -55,7 +50,30 @@ public final class EriManager {
|
||||
this.mCallPromptId = new String[] { "", "", "" };
|
||||
this.mRoamIndTable = new HashMap<Integer, EriInfo>();
|
||||
}
|
||||
}
|
||||
|
||||
class EriDisplayInformation {
|
||||
public int mEriIconIndex;
|
||||
public int mEriIconMode;
|
||||
public String mEriIconText;
|
||||
|
||||
public EriDisplayInformation(int eriIconIndex, int eriIconMode, String eriIconText) {
|
||||
mEriIconIndex = eriIconIndex;
|
||||
mEriIconMode = eriIconMode;
|
||||
mEriIconText = eriIconText;
|
||||
}
|
||||
|
||||
// public void setParameters(int eriIconIndex, int eriIconMode, String eriIconText){
|
||||
// this.mEriIconIndex = eriIconIndex;
|
||||
// this.mEriIconMode = eriIconMode;
|
||||
// this.mEriIconText = eriIconText;
|
||||
// }
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "EriDisplayInformation: {" + " IconIndex: " + mEriIconIndex + " EriIconMode: "
|
||||
+ mEriIconMode + " EriIconText: " + mEriIconText + " }";
|
||||
}
|
||||
}
|
||||
|
||||
static final String LOG_TAG = "CDMA";
|
||||
@@ -67,7 +85,7 @@ public final class EriManager {
|
||||
private PhoneBase mPhone;
|
||||
private Context mContext;
|
||||
private int mEriFileSource = ERI_FROM_XML;
|
||||
private boolean isEriFileLoaded = false;
|
||||
private boolean isEriFileLoaded;
|
||||
private EriFile mEriFile;
|
||||
|
||||
public EriManager(PhoneBase phone, Context context, int eriFileSource) {
|
||||
@@ -214,11 +232,205 @@ public final class EriManager {
|
||||
* Returns the EriInfo record associated with roamingIndicator
|
||||
* or null if the entry is not found
|
||||
*/
|
||||
public EriInfo getEriInfo(int roamingIndicator) {
|
||||
private EriInfo getEriInfo(int roamingIndicator) {
|
||||
if (mEriFile.mRoamIndTable.containsKey(roamingIndicator)) {
|
||||
return mEriFile.mRoamIndTable.get(roamingIndicator);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private EriDisplayInformation getEriDisplayInformation(int roamInd, int defRoamInd){
|
||||
//int iconIndex = -1;
|
||||
//int iconMode = -1;
|
||||
//String iconText = "ERI text";
|
||||
EriDisplayInformation 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 (!isEriFileLoaded) {
|
||||
// ERI file NOT loaded
|
||||
Log.d(LOG_TAG, "ERI File not loaded");
|
||||
if(defRoamInd > 2) {
|
||||
Log.d(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 {
|
||||
Log.d(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
|
||||
Log.d(LOG_TAG, "ERI File loaded");
|
||||
EriInfo eriInfo = getEriInfo(roamInd);
|
||||
EriInfo defEriInfo = getEriInfo(defRoamInd);
|
||||
if (eriInfo == null) {
|
||||
Log.d(LOG_TAG, "ERI roamInd " + roamInd
|
||||
+ " not found in ERI file ...using defRoamInd " + defRoamInd);
|
||||
if(defEriInfo == null) {
|
||||
Log.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 {
|
||||
Log.d(LOG_TAG, "ERI defRoamInd " + defRoamInd + " found in ERI file");
|
||||
ret = new EriDisplayInformation(
|
||||
defEriInfo.mIconIndex,
|
||||
defEriInfo.mIconMode,
|
||||
defEriInfo.mEriText);
|
||||
}
|
||||
} else {
|
||||
Log.d(LOG_TAG, "ERI roamInd " + roamInd + " found in ERI file");
|
||||
ret = new EriDisplayInformation(
|
||||
eriInfo.mIconIndex,
|
||||
eriInfo.mIconMode,
|
||||
eriInfo.mEriText);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
Log.d(LOG_TAG, "Displaying ERI " + ret.toString());
|
||||
return ret;
|
||||
}
|
||||
|
||||
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 String getCdmaEriText(int roamInd, int defRoamInd){
|
||||
return getEriDisplayInformation(roamInd, defRoamInd).mEriIconText;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,11 +55,8 @@ public final class RuimRecords extends IccRecords {
|
||||
|
||||
//***** Instance Variables
|
||||
|
||||
private String mImsi; // TODO(Teleca): to be checked, if this should be removed!
|
||||
private String mMyMobileNumber;
|
||||
private String mSid; // TODO(Teleca): Unused should this be removed
|
||||
private String mNid; // TODO(Teleca): Unused should this be removed
|
||||
private String mMin2Min1;
|
||||
String spn;
|
||||
int spnDisplayCondition;
|
||||
|
||||
//***** Event Constants
|
||||
|
||||
@@ -134,19 +131,6 @@ public final class RuimRecords extends IccRecords {
|
||||
recordsRequested = false;
|
||||
}
|
||||
|
||||
/** Returns null if RUIM is not yet ready */
|
||||
public String getIMSI_M() {
|
||||
return mImsi;
|
||||
}
|
||||
|
||||
public String getMdnNumber() {
|
||||
return mMyMobileNumber;
|
||||
}
|
||||
|
||||
public String getCdmaMin() {
|
||||
return mMin2Min1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVoiceMailNumber(String alphaTag, String voiceNumber, Message onComplete){
|
||||
// In CDMA this is Operator/OEM dependent
|
||||
@@ -171,32 +155,6 @@ public final class RuimRecords extends IccRecords {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the 5 or 6 digit MCC/MNC of the operator that
|
||||
* provided the RUIM card. Returns null of RUIM is not yet ready
|
||||
*/
|
||||
public String getRUIMOperatorNumeric() {
|
||||
if (mImsi == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (mncLength != 0) {
|
||||
// Length = length of MCC + length of MNC
|
||||
// TODO: change spec name
|
||||
// length of mcc = 3 (3GPP2 C.S0005 - Section 2.3)
|
||||
return mImsi.substring(0, 3 + mncLength);
|
||||
}
|
||||
|
||||
// Guess the MNC length based on the MCC if we don't
|
||||
// have a valid value in ef[ad]
|
||||
|
||||
int mcc;
|
||||
|
||||
mcc = Integer.parseInt(mImsi.substring(0,3));
|
||||
|
||||
return mImsi.substring(0, 3 + MccTable.smallestDigitsMccForMnc(mcc));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
AsyncResult ar;
|
||||
@@ -223,28 +181,35 @@ public final class RuimRecords extends IccRecords {
|
||||
/* IO events */
|
||||
|
||||
case EVENT_GET_CDMA_SUBSCRIPTION_DONE:
|
||||
// TODO(Moto):TODO(Teleca): This event was removed by Teleca/QCT
|
||||
// I've left it as it's needed to complete EVENT_OTA_PROVISION_STATUS_CHANGE.
|
||||
// But since various instance variables are removed I've commented
|
||||
// out code that references them. I'm sure this is wrong so
|
||||
// Moto/Teleca/QCT need to come to an agreement. Also see onRuimReady
|
||||
// and onVnReady.
|
||||
|
||||
ar = (AsyncResult)msg.obj;
|
||||
String localTemp[] = (String[])ar.result;
|
||||
if (ar.exception != null) {
|
||||
break;
|
||||
}
|
||||
if(m_ota_commited) {
|
||||
if(mMyMobileNumber != localTemp[0]) {
|
||||
//if(mMyMobileNumber != localTemp[0]) {
|
||||
Intent intent = new Intent(TelephonyIntents.ACTION_CDMA_OTA_MDN_CHANGED);
|
||||
intent.putExtra("mdn", localTemp[0]);
|
||||
Log.d(LOG_TAG,"Broadcasting intent MDN Change in OTA ");
|
||||
ActivityManagerNative.broadcastStickyIntent(intent, null);
|
||||
}
|
||||
//}
|
||||
m_ota_commited=false;
|
||||
}
|
||||
mMyMobileNumber = localTemp[0];
|
||||
mSid = localTemp[1];
|
||||
mNid = localTemp[2];
|
||||
if (localTemp.length >= 3) { // TODO(Moto): remove when new ril always returns min2_min1
|
||||
mMin2Min1 = localTemp[3];
|
||||
}
|
||||
//mMyMobileNumber = localTemp[0];
|
||||
//mSid = localTemp[1];
|
||||
//mNid = localTemp[2];
|
||||
//if (localTemp.length >= 3) { // TODO(Moto): remove when new ril always returns min2_min1
|
||||
// mMin2Min1 = localTemp[3];
|
||||
//}
|
||||
|
||||
Log.d(LOG_TAG, "MDN: " + mMyMobileNumber + " MIN: " + mMin2Min1);
|
||||
//Log.d(LOG_TAG, "MDN: " + mMyMobileNumber + " MIN: " + mMin2Min1);
|
||||
|
||||
break;
|
||||
|
||||
@@ -350,14 +315,14 @@ public final class RuimRecords extends IccRecords {
|
||||
RuimCard.INTENT_VALUE_ICC_READY, null);
|
||||
|
||||
fetchRuimRecords();
|
||||
|
||||
phone.mCM.getCDMASubscription(obtainMessage(EVENT_GET_CDMA_SUBSCRIPTION_DONE));
|
||||
|
||||
|
||||
// TODO(Moto): TODO(Teleca): Work out how to do CDMA subscription
|
||||
// phone.mCM.getCDMASubscription(obtainMessage(EVENT_GET_CDMA_SUBSCRIPTION_DONE));
|
||||
}
|
||||
|
||||
private void onNvReady() {
|
||||
phone.mCM.getCDMASubscription(obtainMessage(EVENT_GET_CDMA_SUBSCRIPTION_DONE));
|
||||
|
||||
// TODO(Moto): TODO(Teleca): Work out how to do CDMA subscription
|
||||
// phone.mCM.getCDMASubscription(obtainMessage(EVENT_GET_CDMA_SUBSCRIPTION_DONE));
|
||||
}
|
||||
|
||||
private void fetchRuimRecords() {
|
||||
|
||||
@@ -151,7 +151,6 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
|
||||
|
||||
private static final int POLL_PDP_MILLIS = 5 * 1000;
|
||||
|
||||
//WINK:TODO: Teleca, is this really gsm specific, what about CDMA?
|
||||
private static final String INTENT_RECONNECT_ALARM = "com.android.internal.telephony.gprs-reconnect";
|
||||
private static final String INTENT_RECONNECT_ALARM_EXTRA_REASON = "reason";
|
||||
|
||||
|
||||
@@ -75,13 +75,6 @@ import java.util.TimeZone;
|
||||
*/
|
||||
final class GsmServiceStateTracker extends ServiceStateTracker {
|
||||
|
||||
/**
|
||||
* TODO(Teleca): John Huang asks: Will you be adding handling of
|
||||
* "reason for registration denied in EVENT_POLL_STATE_REGISTRATION?
|
||||
* I see some handling of this in CdmaServiceStateTracker, but as I
|
||||
* understand it this field was added at the request of a GSM carrier.
|
||||
*/
|
||||
|
||||
//***** Instance Variables
|
||||
GSMPhone phone;
|
||||
GsmCellLocation cellLoc;
|
||||
|
||||
@@ -184,9 +184,6 @@ public class StkService extends Handler implements AppInterface {
|
||||
mCmdIf.unSetOnStkCallSetUp(this);
|
||||
|
||||
this.removeCallbacksAndMessages(null);
|
||||
|
||||
//removing instance
|
||||
sInstance = null;
|
||||
}
|
||||
|
||||
protected void finalize() {
|
||||
@@ -450,7 +447,7 @@ public class StkService extends Handler implements AppInterface {
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for instantiating the Service from the GsmPhone constructor.
|
||||
* Used for instantiating/updating the Service from the GsmPhone constructor.
|
||||
*
|
||||
* @param ci CommandsInterface object
|
||||
* @param sr SIMRecords object
|
||||
|
||||
Reference in New Issue
Block a user