Loading src/java/com/android/internal/telephony/GsmCdmaCallTracker.java +7 −14 Original line number Diff line number Diff line Loading @@ -107,7 +107,6 @@ public class GsmCdmaCallTracker extends CallTracker { private boolean mPendingCallInEcm; private boolean mIsInEmergencyCall; private int mPendingCallClirMode; private boolean mIsEcmTimerCanceled; private int m3WayCallFlashDelay; /** Loading Loading @@ -189,7 +188,7 @@ public class GsmCdmaCallTracker extends CallTracker { mPendingCallInEcm = false; mIsInEmergencyCall = false; mPendingCallClirMode = CommandsInterface.CLIR_DEFAULT; mIsEcmTimerCanceled = false; mPhone.setEcmCanceledForEmergency(false /*isCanceled*/); m3WayCallFlashDelay = 0; mCi.registerForCallWaitingInfo(this, EVENT_CALL_WAITING_INFO_CDMA, null); } Loading Loading @@ -369,12 +368,6 @@ public class GsmCdmaCallTracker extends CallTracker { @UnsupportedAppUsage private void handleEcmTimer(int action) { mPhone.handleTimerInEmergencyCallbackMode(action); switch(action) { case GsmCdmaPhone.CANCEL_ECM_TIMER: mIsEcmTimerCanceled = true; break; case GsmCdmaPhone.RESTART_ECM_TIMER: mIsEcmTimerCanceled = false; break; default: Rlog.e(LOG_TAG, "handleEcmTimer, unsupported action " + action); } } //CDMA Loading Loading @@ -435,7 +428,7 @@ public class GsmCdmaCallTracker extends CallTracker { // Cancel Ecm timer if a second emergency call is originating in Ecm mode if (isPhoneInEcmMode && isEmergencyCall) { handleEcmTimer(GsmCdmaPhone.CANCEL_ECM_TIMER); mPhone.handleTimerInEmergencyCallbackMode(GsmCdmaPhone.CANCEL_ECM_TIMER); } // The new call must be assigned to the foreground call. Loading Loading @@ -862,8 +855,9 @@ public class GsmCdmaCallTracker extends CallTracker { mHangupPendingMO = false; // Re-start Ecm timer when an uncompleted emergency call ends if (!isPhoneTypeGsm() && mIsEcmTimerCanceled) { handleEcmTimer(GsmCdmaPhone.RESTART_ECM_TIMER); if (!isPhoneTypeGsm() && mPhone.isEcmCanceledForEmergency()) { mPhone.handleTimerInEmergencyCallbackMode( GsmCdmaPhone.RESTART_ECM_TIMER); } try { Loading Loading @@ -953,8 +947,8 @@ public class GsmCdmaCallTracker extends CallTracker { } // Re-start Ecm timer when the connected emergency call ends if (mIsEcmTimerCanceled) { handleEcmTimer(GsmCdmaPhone.RESTART_ECM_TIMER); if (mPhone.isEcmCanceledForEmergency()) { mPhone.handleTimerInEmergencyCallbackMode(GsmCdmaPhone.RESTART_ECM_TIMER); } // If emergency call is not going through while dialing checkAndEnableDataCallAfterEmergencyCallDropped(); Loading Loading @@ -1816,7 +1810,6 @@ public class GsmCdmaCallTracker extends CallTracker { pw.println(" mPendingCallInEcm=" + mPendingCallInEcm); pw.println(" mIsInEmergencyCall=" + mIsInEmergencyCall); pw.println(" mPendingCallClirMode=" + mPendingCallClirMode); pw.println(" mIsEcmTimerCanceled=" + mIsEcmTimerCanceled); } } Loading src/java/com/android/internal/telephony/GsmCdmaPhone.java +3 −1 Original line number Diff line number Diff line Loading @@ -794,7 +794,7 @@ public class GsmCdmaPhone extends Phone { public void sendEmergencyCallStateChange(boolean callActive) { if (!isPhoneTypeCdma()) { // It possible that this method got called from ImsPhoneCallTracker# logi("sendEmergencyCallbackModeChange - skip for non-cdma"); logi("sendEmergencyCallStateChange - skip for non-cdma"); return; } if (mBroadcastEmergencyCallStateChanges) { Loading Loading @@ -3483,12 +3483,14 @@ public class GsmCdmaPhone extends Phone { case CANCEL_ECM_TIMER: removeCallbacks(mExitEcmRunnable); mEcmTimerResetRegistrants.notifyResult(Boolean.TRUE); setEcmCanceledForEmergency(true /*isCanceled*/); break; case RESTART_ECM_TIMER: long delayInMillis = TelephonyProperties.ecm_exit_timer() .orElse(DEFAULT_ECM_EXIT_TIMER_VALUE); postDelayed(mExitEcmRunnable, delayInMillis); mEcmTimerResetRegistrants.notifyResult(Boolean.FALSE); setEcmCanceledForEmergency(false /*isCanceled*/); break; default: Rlog.e(LOG_TAG, "handleTimerInEmergencyCallbackMode, unsupported action " + action); Loading src/java/com/android/internal/telephony/Phone.java +29 −1 Original line number Diff line number Diff line Loading @@ -178,7 +178,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { @VisibleForTesting protected static final int EVENT_ICC_CHANGED = 30; // Single Radio Voice Call Continuity private static final int EVENT_SRVCC_STATE_CHANGED = 31; @VisibleForTesting protected static final int EVENT_SRVCC_STATE_CHANGED = 31; private static final int EVENT_INITIATE_SILENT_REDIAL = 32; private static final int EVENT_RADIO_NOT_AVAILABLE = 33; private static final int EVENT_UNSOL_OEM_HOOK_RAW = 34; Loading Loading @@ -290,6 +291,9 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { // Keep track of whether or not the phone is in Emergency Callback Mode for Phone and // subclasses protected boolean mIsPhoneInEcmState = false; // Keep track of the case where ECM was cancelled to place another outgoing emergency call. // We will need to restart it after the emergency call ends. protected boolean mEcmCanceledForEmergency = false; private volatile long mTimeLastEmergencySmsSentMs = EMERGENCY_SMS_NO_TIME_RECORDED; // Variable to cache the video capability. When RAT changes, we lose this info and are unable Loading Loading @@ -997,9 +1001,14 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { if (from.isInEmergencyCall()) { setIsInEmergencyCall(); } setEcmCanceledForEmergency(from.isEcmCanceledForEmergency()); } protected void migrate(RegistrantList to, RegistrantList from) { if (from == null) { // May be null in some cases, such as testing. return; } from.removeCleared(); for (int i = 0, n = from.size(); i < n; i++) { Registrant r = (Registrant) from.get(i); Loading Loading @@ -2506,6 +2515,24 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { mIsPhoneInEcmState = isInEcm; } /** * @return true if this Phone is in an emergency call that caused emergency callback mode to be * canceled, false if not. */ public boolean isEcmCanceledForEmergency() { return mEcmCanceledForEmergency; } /** * Set whether or not this Phone has an active emergency call that was placed during emergency * callback mode and caused it to be temporarily canceled. * @param isCanceled true if an emergency call was placed that caused ECM to be canceled, false * if it is not in this state. */ public void setEcmCanceledForEmergency(boolean isCanceled) { mEcmCanceledForEmergency = isCanceled; } @UnsupportedAppUsage private static int getVideoState(Call call) { int videoState = VideoProfile.STATE_AUDIO_ONLY; Loading Loading @@ -4232,6 +4259,7 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { pw.println(" getActiveApnTypes()=" + getActiveApnTypes()); pw.println(" needsOtaServiceProvisioning=" + needsOtaServiceProvisioning()); pw.println(" isInEmergencySmsMode=" + isInEmergencySmsMode()); pw.println(" isEcmCanceledForEmergency=" + isEcmCanceledForEmergency()); pw.println(" service state=" + getServiceState()); pw.flush(); pw.println("++++++++++++++++++++++++++++++++"); Loading src/java/com/android/internal/telephony/imsphone/ImsPhone.java +2 −0 Original line number Diff line number Diff line Loading @@ -1785,12 +1785,14 @@ public class ImsPhone extends ImsPhoneBase { case CANCEL_ECM_TIMER: removeCallbacks(mExitEcmRunnable); ((GsmCdmaPhone) mDefaultPhone).notifyEcbmTimerReset(Boolean.TRUE); setEcmCanceledForEmergency(true /*isCanceled*/); break; case RESTART_ECM_TIMER: long delayInMillis = TelephonyProperties.ecm_exit_timer() .orElse(DEFAULT_ECM_EXIT_TIMER_VALUE); postDelayed(mExitEcmRunnable, delayInMillis); ((GsmCdmaPhone) mDefaultPhone).notifyEcbmTimerReset(Boolean.FALSE); setEcmCanceledForEmergency(false /*isCanceled*/); break; default: loge("handleTimerInEmergencyCallbackMode, unsupported action " + action); Loading src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +4 −17 Original line number Diff line number Diff line Loading @@ -468,7 +468,6 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { private boolean mIsInEmergencyCall = false; private boolean mIsDataEnabled = false; private boolean mIsEcmTimerCanceled = false; private int pendingCallClirMode; private int mPendingCallVideoState; Loading Loading @@ -1200,7 +1199,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { boolean holdBeforeDial = prepareForDialing(dialArgs); if (isPhoneInEcmMode && isEmergencyNumber) { handleEcmTimer(ImsPhone.CANCEL_ECM_TIMER); mPhone.handleTimerInEmergencyCallbackMode(ImsPhone.CANCEL_ECM_TIMER); } // If the call is to an emergency number and the carrier does not support video emergency Loading Loading @@ -1408,16 +1407,6 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { @UnsupportedAppUsage private void handleEcmTimer(int action) { mPhone.handleTimerInEmergencyCallbackMode(action); switch (action) { case ImsPhone.CANCEL_ECM_TIMER: mIsEcmTimerCanceled = true; break; case ImsPhone.RESTART_ECM_TIMER: mIsEcmTimerCanceled = false; break; default: log("handleEcmTimer, unsupported action " + action); } } private void dialInternal(ImsPhoneConnection conn, int clirMode, int videoState, Loading Loading @@ -2326,8 +2315,8 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { } if (!isEmergencyCallInList) { if (mIsEcmTimerCanceled) { handleEcmTimer(ImsPhone.RESTART_ECM_TIMER); if (mPhone.isEcmCanceledForEmergency()) { mPhone.handleTimerInEmergencyCallbackMode(ImsPhone.RESTART_ECM_TIMER); } mIsInEmergencyCall = false; mPhone.sendEmergencyCallStateChange(false); Loading Loading @@ -3768,7 +3757,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { private void resetState() { mIsInEmergencyCall = false; mIsEcmTimerCanceled = false; mPhone.setEcmCanceledForEmergency(false); } //****** Overridden from Handler Loading Loading @@ -4127,8 +4116,6 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { pw.increaseIndent(); mOperationLocalLog.dump(pw); pw.decreaseIndent(); pw.println(" mIsEcmTimerCanceled=" + mIsEcmTimerCanceled); pw.flush(); pw.println("++++++++++++++++++++++++++++++++"); Loading Loading
src/java/com/android/internal/telephony/GsmCdmaCallTracker.java +7 −14 Original line number Diff line number Diff line Loading @@ -107,7 +107,6 @@ public class GsmCdmaCallTracker extends CallTracker { private boolean mPendingCallInEcm; private boolean mIsInEmergencyCall; private int mPendingCallClirMode; private boolean mIsEcmTimerCanceled; private int m3WayCallFlashDelay; /** Loading Loading @@ -189,7 +188,7 @@ public class GsmCdmaCallTracker extends CallTracker { mPendingCallInEcm = false; mIsInEmergencyCall = false; mPendingCallClirMode = CommandsInterface.CLIR_DEFAULT; mIsEcmTimerCanceled = false; mPhone.setEcmCanceledForEmergency(false /*isCanceled*/); m3WayCallFlashDelay = 0; mCi.registerForCallWaitingInfo(this, EVENT_CALL_WAITING_INFO_CDMA, null); } Loading Loading @@ -369,12 +368,6 @@ public class GsmCdmaCallTracker extends CallTracker { @UnsupportedAppUsage private void handleEcmTimer(int action) { mPhone.handleTimerInEmergencyCallbackMode(action); switch(action) { case GsmCdmaPhone.CANCEL_ECM_TIMER: mIsEcmTimerCanceled = true; break; case GsmCdmaPhone.RESTART_ECM_TIMER: mIsEcmTimerCanceled = false; break; default: Rlog.e(LOG_TAG, "handleEcmTimer, unsupported action " + action); } } //CDMA Loading Loading @@ -435,7 +428,7 @@ public class GsmCdmaCallTracker extends CallTracker { // Cancel Ecm timer if a second emergency call is originating in Ecm mode if (isPhoneInEcmMode && isEmergencyCall) { handleEcmTimer(GsmCdmaPhone.CANCEL_ECM_TIMER); mPhone.handleTimerInEmergencyCallbackMode(GsmCdmaPhone.CANCEL_ECM_TIMER); } // The new call must be assigned to the foreground call. Loading Loading @@ -862,8 +855,9 @@ public class GsmCdmaCallTracker extends CallTracker { mHangupPendingMO = false; // Re-start Ecm timer when an uncompleted emergency call ends if (!isPhoneTypeGsm() && mIsEcmTimerCanceled) { handleEcmTimer(GsmCdmaPhone.RESTART_ECM_TIMER); if (!isPhoneTypeGsm() && mPhone.isEcmCanceledForEmergency()) { mPhone.handleTimerInEmergencyCallbackMode( GsmCdmaPhone.RESTART_ECM_TIMER); } try { Loading Loading @@ -953,8 +947,8 @@ public class GsmCdmaCallTracker extends CallTracker { } // Re-start Ecm timer when the connected emergency call ends if (mIsEcmTimerCanceled) { handleEcmTimer(GsmCdmaPhone.RESTART_ECM_TIMER); if (mPhone.isEcmCanceledForEmergency()) { mPhone.handleTimerInEmergencyCallbackMode(GsmCdmaPhone.RESTART_ECM_TIMER); } // If emergency call is not going through while dialing checkAndEnableDataCallAfterEmergencyCallDropped(); Loading Loading @@ -1816,7 +1810,6 @@ public class GsmCdmaCallTracker extends CallTracker { pw.println(" mPendingCallInEcm=" + mPendingCallInEcm); pw.println(" mIsInEmergencyCall=" + mIsInEmergencyCall); pw.println(" mPendingCallClirMode=" + mPendingCallClirMode); pw.println(" mIsEcmTimerCanceled=" + mIsEcmTimerCanceled); } } Loading
src/java/com/android/internal/telephony/GsmCdmaPhone.java +3 −1 Original line number Diff line number Diff line Loading @@ -794,7 +794,7 @@ public class GsmCdmaPhone extends Phone { public void sendEmergencyCallStateChange(boolean callActive) { if (!isPhoneTypeCdma()) { // It possible that this method got called from ImsPhoneCallTracker# logi("sendEmergencyCallbackModeChange - skip for non-cdma"); logi("sendEmergencyCallStateChange - skip for non-cdma"); return; } if (mBroadcastEmergencyCallStateChanges) { Loading Loading @@ -3483,12 +3483,14 @@ public class GsmCdmaPhone extends Phone { case CANCEL_ECM_TIMER: removeCallbacks(mExitEcmRunnable); mEcmTimerResetRegistrants.notifyResult(Boolean.TRUE); setEcmCanceledForEmergency(true /*isCanceled*/); break; case RESTART_ECM_TIMER: long delayInMillis = TelephonyProperties.ecm_exit_timer() .orElse(DEFAULT_ECM_EXIT_TIMER_VALUE); postDelayed(mExitEcmRunnable, delayInMillis); mEcmTimerResetRegistrants.notifyResult(Boolean.FALSE); setEcmCanceledForEmergency(false /*isCanceled*/); break; default: Rlog.e(LOG_TAG, "handleTimerInEmergencyCallbackMode, unsupported action " + action); Loading
src/java/com/android/internal/telephony/Phone.java +29 −1 Original line number Diff line number Diff line Loading @@ -178,7 +178,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { @VisibleForTesting protected static final int EVENT_ICC_CHANGED = 30; // Single Radio Voice Call Continuity private static final int EVENT_SRVCC_STATE_CHANGED = 31; @VisibleForTesting protected static final int EVENT_SRVCC_STATE_CHANGED = 31; private static final int EVENT_INITIATE_SILENT_REDIAL = 32; private static final int EVENT_RADIO_NOT_AVAILABLE = 33; private static final int EVENT_UNSOL_OEM_HOOK_RAW = 34; Loading Loading @@ -290,6 +291,9 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { // Keep track of whether or not the phone is in Emergency Callback Mode for Phone and // subclasses protected boolean mIsPhoneInEcmState = false; // Keep track of the case where ECM was cancelled to place another outgoing emergency call. // We will need to restart it after the emergency call ends. protected boolean mEcmCanceledForEmergency = false; private volatile long mTimeLastEmergencySmsSentMs = EMERGENCY_SMS_NO_TIME_RECORDED; // Variable to cache the video capability. When RAT changes, we lose this info and are unable Loading Loading @@ -997,9 +1001,14 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { if (from.isInEmergencyCall()) { setIsInEmergencyCall(); } setEcmCanceledForEmergency(from.isEcmCanceledForEmergency()); } protected void migrate(RegistrantList to, RegistrantList from) { if (from == null) { // May be null in some cases, such as testing. return; } from.removeCleared(); for (int i = 0, n = from.size(); i < n; i++) { Registrant r = (Registrant) from.get(i); Loading Loading @@ -2506,6 +2515,24 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { mIsPhoneInEcmState = isInEcm; } /** * @return true if this Phone is in an emergency call that caused emergency callback mode to be * canceled, false if not. */ public boolean isEcmCanceledForEmergency() { return mEcmCanceledForEmergency; } /** * Set whether or not this Phone has an active emergency call that was placed during emergency * callback mode and caused it to be temporarily canceled. * @param isCanceled true if an emergency call was placed that caused ECM to be canceled, false * if it is not in this state. */ public void setEcmCanceledForEmergency(boolean isCanceled) { mEcmCanceledForEmergency = isCanceled; } @UnsupportedAppUsage private static int getVideoState(Call call) { int videoState = VideoProfile.STATE_AUDIO_ONLY; Loading Loading @@ -4232,6 +4259,7 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { pw.println(" getActiveApnTypes()=" + getActiveApnTypes()); pw.println(" needsOtaServiceProvisioning=" + needsOtaServiceProvisioning()); pw.println(" isInEmergencySmsMode=" + isInEmergencySmsMode()); pw.println(" isEcmCanceledForEmergency=" + isEcmCanceledForEmergency()); pw.println(" service state=" + getServiceState()); pw.flush(); pw.println("++++++++++++++++++++++++++++++++"); Loading
src/java/com/android/internal/telephony/imsphone/ImsPhone.java +2 −0 Original line number Diff line number Diff line Loading @@ -1785,12 +1785,14 @@ public class ImsPhone extends ImsPhoneBase { case CANCEL_ECM_TIMER: removeCallbacks(mExitEcmRunnable); ((GsmCdmaPhone) mDefaultPhone).notifyEcbmTimerReset(Boolean.TRUE); setEcmCanceledForEmergency(true /*isCanceled*/); break; case RESTART_ECM_TIMER: long delayInMillis = TelephonyProperties.ecm_exit_timer() .orElse(DEFAULT_ECM_EXIT_TIMER_VALUE); postDelayed(mExitEcmRunnable, delayInMillis); ((GsmCdmaPhone) mDefaultPhone).notifyEcbmTimerReset(Boolean.FALSE); setEcmCanceledForEmergency(false /*isCanceled*/); break; default: loge("handleTimerInEmergencyCallbackMode, unsupported action " + action); Loading
src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +4 −17 Original line number Diff line number Diff line Loading @@ -468,7 +468,6 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { private boolean mIsInEmergencyCall = false; private boolean mIsDataEnabled = false; private boolean mIsEcmTimerCanceled = false; private int pendingCallClirMode; private int mPendingCallVideoState; Loading Loading @@ -1200,7 +1199,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { boolean holdBeforeDial = prepareForDialing(dialArgs); if (isPhoneInEcmMode && isEmergencyNumber) { handleEcmTimer(ImsPhone.CANCEL_ECM_TIMER); mPhone.handleTimerInEmergencyCallbackMode(ImsPhone.CANCEL_ECM_TIMER); } // If the call is to an emergency number and the carrier does not support video emergency Loading Loading @@ -1408,16 +1407,6 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { @UnsupportedAppUsage private void handleEcmTimer(int action) { mPhone.handleTimerInEmergencyCallbackMode(action); switch (action) { case ImsPhone.CANCEL_ECM_TIMER: mIsEcmTimerCanceled = true; break; case ImsPhone.RESTART_ECM_TIMER: mIsEcmTimerCanceled = false; break; default: log("handleEcmTimer, unsupported action " + action); } } private void dialInternal(ImsPhoneConnection conn, int clirMode, int videoState, Loading Loading @@ -2326,8 +2315,8 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { } if (!isEmergencyCallInList) { if (mIsEcmTimerCanceled) { handleEcmTimer(ImsPhone.RESTART_ECM_TIMER); if (mPhone.isEcmCanceledForEmergency()) { mPhone.handleTimerInEmergencyCallbackMode(ImsPhone.RESTART_ECM_TIMER); } mIsInEmergencyCall = false; mPhone.sendEmergencyCallStateChange(false); Loading Loading @@ -3768,7 +3757,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { private void resetState() { mIsInEmergencyCall = false; mIsEcmTimerCanceled = false; mPhone.setEcmCanceledForEmergency(false); } //****** Overridden from Handler Loading Loading @@ -4127,8 +4116,6 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { pw.increaseIndent(); mOperationLocalLog.dump(pw); pw.decreaseIndent(); pw.println(" mIsEcmTimerCanceled=" + mIsEcmTimerCanceled); pw.flush(); pw.println("++++++++++++++++++++++++++++++++"); Loading