Merge "Add DataConnection#isEmergency and use in trySetupData." into ics-mr0

This commit is contained in:
Wink Saville
2011-10-18 13:35:43 -07:00
committed by Android (Google) Code Review
5 changed files with 43 additions and 13 deletions

View File

@ -676,6 +676,15 @@ public abstract class DataConnectionTracker extends Handler {
return result; return result;
} }
protected boolean isEmergency() {
final boolean result;
synchronized (mDataEnabledLock) {
result = mPhone.isInEcm() || mPhone.isInEmergencyCall();
}
log("isEmergency: result=" + result);
return result;
}
protected int apnTypeToId(String type) { protected int apnTypeToId(String type) {
if (TextUtils.equals(type, Phone.APN_TYPE_DEFAULT)) { if (TextUtils.equals(type, Phone.APN_TYPE_DEFAULT)) {
return APN_DEFAULT_ID; return APN_DEFAULT_ID;
@ -981,20 +990,17 @@ public abstract class DataConnectionTracker extends Handler {
protected void onSetInternalDataEnabled(boolean enabled) { protected void onSetInternalDataEnabled(boolean enabled) {
synchronized (mDataEnabledLock) { synchronized (mDataEnabledLock) {
final boolean prevEnabled = getAnyDataEnabled();
if (mInternalDataEnabled != enabled) {
mInternalDataEnabled = enabled; mInternalDataEnabled = enabled;
if (prevEnabled != getAnyDataEnabled()) { if (enabled) {
if (!prevEnabled) { log("onSetInternalDataEnabled: changed to enabled, try to setup data call");
resetAllRetryCounts(); resetAllRetryCounts();
onTrySetupData(Phone.REASON_DATA_ENABLED); onTrySetupData(Phone.REASON_DATA_ENABLED);
} else { } else {
log("onSetInternalDataEnabled: changed to disabled, cleanUpAllConnections");
cleanUpAllConnections(null); cleanUpAllConnections(null);
} }
} }
} }
}
}
public void cleanUpAllConnections(String cause) { public void cleanUpAllConnections(String cause) {
Message msg = obtainMessage(EVENT_CLEAN_UP_ALL_CONNECTIONS); Message msg = obtainMessage(EVENT_CLEAN_UP_ALL_CONNECTIONS);

View File

@ -832,6 +832,22 @@ public abstract class PhoneBase extends Handler implements Phone {
mNotifier.notifyOtaspChanged(this, otaspMode); mNotifier.notifyOtaspChanged(this, otaspMode);
} }
/**
* @return true if a mobile originating emergency call is active
*/
public boolean isInEmergencyCall() {
return false;
}
/**
* @return true if we are in the emergency call back mode. This is a period where
* the phone should be using as little power as possible and be ready to receive an
* incoming call from the emergency operator.
*/
public boolean isInEcm() {
return false;
}
public abstract String getPhoneName(); public abstract String getPhoneName();
public abstract int getPhoneType(); public abstract int getPhoneType();

View File

@ -848,6 +848,14 @@ public class CDMAPhone extends PhoneBase {
mUnknownConnectionRegistrants.notifyResult(this); mUnknownConnectionRegistrants.notifyResult(this);
} }
public boolean isInEmergencyCall() {
return mCT.isInEmergencyCall();
}
public boolean isInEcm() {
return mIsPhoneInEcmState;
}
void sendEmergencyCallbackModeChange(){ void sendEmergencyCallbackModeChange(){
//Send an Intent //Send an Intent
Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED); Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED);

View File

@ -248,7 +248,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
boolean desiredPowerState = mCdmaPhone.mSST.getDesiredPowerState(); boolean desiredPowerState = mCdmaPhone.mSST.getDesiredPowerState();
if ((mState == State.IDLE || mState == State.SCANNING) && if ((mState == State.IDLE || mState == State.SCANNING) &&
isDataAllowed() && getAnyDataEnabled()) { isDataAllowed() && getAnyDataEnabled() && !isEmergency()) {
boolean retValue = setupData(reason); boolean retValue = setupData(reason);
notifyOffApnsOfAvailability(reason); notifyOffApnsOfAvailability(reason);
return retValue; return retValue;

View File

@ -686,7 +686,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
boolean desiredPowerState = mPhone.getServiceStateTracker().getDesiredPowerState(); boolean desiredPowerState = mPhone.getServiceStateTracker().getDesiredPowerState();
if ((apnContext.getState() == State.IDLE || apnContext.getState() == State.SCANNING) && if ((apnContext.getState() == State.IDLE || apnContext.getState() == State.SCANNING) &&
isDataAllowed(apnContext) && getAnyDataEnabled()) { isDataAllowed(apnContext) && getAnyDataEnabled() && !isEmergency()) {
if (apnContext.getState() == State.IDLE) { if (apnContext.getState() == State.IDLE) {
ArrayList<ApnSetting> waitingApns = buildWaitingApns(apnContext.getApnType()); ArrayList<ApnSetting> waitingApns = buildWaitingApns(apnContext.getApnType());