Add DataConnection#isEmergency and use in trySetupData.
If an emergency is occurring we may not want to allow data calls. An emergency is defined as in an Emergency call or in the emergency call back mode. I've added isInEcm and isEmergencyCall to PhoneBase and CDMAPhone. And in DataConnectionTracker added isEmergency which is the or of isInEcm, isEmergencyCall. Also, removed some optimization code in DataConnectionTracker onSetInternalDataEnabled because mInternalDataEnabled defaults to true when a DCT is constructed and without this change trySetupData will not be called leaving ECM if the DCT was just created. Which is what is currently happening on the ICS lead device. Also see b/5471660 as there is similar optimizations in onSetUserDataEnabled and onSetPolicyDataEnabled. Bug: 5437885 Change-Id: Iba81366300fe46eaa9aa6e457d6659b42d6fe927
This commit is contained in:
@@ -679,6 +679,15 @@ public abstract class DataConnectionTracker extends Handler {
|
||||
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) {
|
||||
if (TextUtils.equals(type, Phone.APN_TYPE_DEFAULT)) {
|
||||
return APN_DEFAULT_ID;
|
||||
@@ -998,17 +1007,14 @@ public abstract class DataConnectionTracker extends Handler {
|
||||
|
||||
protected void onSetInternalDataEnabled(boolean enabled) {
|
||||
synchronized (mDataEnabledLock) {
|
||||
final boolean prevEnabled = getAnyDataEnabled();
|
||||
if (mInternalDataEnabled != enabled) {
|
||||
mInternalDataEnabled = enabled;
|
||||
if (prevEnabled != getAnyDataEnabled()) {
|
||||
if (!prevEnabled) {
|
||||
resetAllRetryCounts();
|
||||
onTrySetupData(Phone.REASON_DATA_ENABLED);
|
||||
} else {
|
||||
cleanUpAllConnections(null);
|
||||
}
|
||||
}
|
||||
mInternalDataEnabled = enabled;
|
||||
if (enabled) {
|
||||
log("onSetInternalDataEnabled: changed to enabled, try to setup data call");
|
||||
resetAllRetryCounts();
|
||||
onTrySetupData(Phone.REASON_DATA_ENABLED);
|
||||
} else {
|
||||
log("onSetInternalDataEnabled: changed to disabled, cleanUpAllConnections");
|
||||
cleanUpAllConnections(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -832,6 +832,22 @@ public abstract class PhoneBase extends Handler implements Phone {
|
||||
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 int getPhoneType();
|
||||
|
||||
@@ -848,6 +848,14 @@ public class CDMAPhone extends PhoneBase {
|
||||
mUnknownConnectionRegistrants.notifyResult(this);
|
||||
}
|
||||
|
||||
public boolean isInEmergencyCall() {
|
||||
return mCT.isInEmergencyCall();
|
||||
}
|
||||
|
||||
public boolean isInEcm() {
|
||||
return mIsPhoneInEcmState;
|
||||
}
|
||||
|
||||
void sendEmergencyCallbackModeChange(){
|
||||
//Send an Intent
|
||||
Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED);
|
||||
|
||||
@@ -248,7 +248,7 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
|
||||
boolean desiredPowerState = mCdmaPhone.mSST.getDesiredPowerState();
|
||||
|
||||
if ((mState == State.IDLE || mState == State.SCANNING) &&
|
||||
isDataAllowed() && getAnyDataEnabled()) {
|
||||
isDataAllowed() && getAnyDataEnabled() && !isEmergency()) {
|
||||
boolean retValue = setupData(reason);
|
||||
notifyOffApnsOfAvailability(reason, retValue);
|
||||
return retValue;
|
||||
|
||||
@@ -686,7 +686,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
|
||||
boolean desiredPowerState = mPhone.getServiceStateTracker().getDesiredPowerState();
|
||||
|
||||
if ((apnContext.getState() == State.IDLE || apnContext.getState() == State.SCANNING) &&
|
||||
isDataAllowed(apnContext) && getAnyDataEnabled()) {
|
||||
isDataAllowed(apnContext) && getAnyDataEnabled() && !isEmergency()) {
|
||||
|
||||
if (apnContext.getState() == State.IDLE) {
|
||||
ArrayList<ApnSetting> waitingApns = buildWaitingApns(apnContext.getApnType());
|
||||
|
||||
Reference in New Issue
Block a user