diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2019-11-08 23:25:11 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2019-11-08 23:25:11 +0000 |
commit | a3ee0dcd70c32b52a95934c77d566fd388f59d05 (patch) | |
tree | 0a4034a5d03c927d0e4a2cca7ef64676bd8e37a0 | |
parent | d3b8f283fbf73933c44d486798e5fc42e1cf66c9 (diff) | |
parent | 60114b6f29077021236cdd15f8b8dad925cb7a7c (diff) | |
download | telephony-android10-qpr1-c-s1-release.tar.gz |
Snap for 5974828 from 60114b6f29077021236cdd15f8b8dad925cb7a7c to qt-qpr1-c-releaseandroid-10.0.0_r29android-10.0.0_r28android-10.0.0_r25android-10.0.0_r24android-10.0.0_r20android10-qpr1-d-releaseandroid10-qpr1-c-s1-releaseandroid10-qpr1-c-release
Change-Id: I8d6deb9e535a56b42019b8e2c00a53935c8f800a
3 files changed, 54 insertions, 5 deletions
diff --git a/src/java/com/android/internal/telephony/CellBroadcastHandler.java b/src/java/com/android/internal/telephony/CellBroadcastHandler.java index 64f646d4c8..d89f45c4a3 100644 --- a/src/java/com/android/internal/telephony/CellBroadcastHandler.java +++ b/src/java/com/android/internal/telephony/CellBroadcastHandler.java @@ -181,6 +181,8 @@ public class CellBroadcastHandler extends WakeLockStateMachine { logd("Device location is outside the broadcast area " + CbGeoUtils.encodeGeometriesToString(broadcastArea)); } + + sendMessage(EVENT_BROADCAST_NOT_REQUIRED); } /** diff --git a/src/java/com/android/internal/telephony/WakeLockStateMachine.java b/src/java/com/android/internal/telephony/WakeLockStateMachine.java index 5d92ca5adb..1bc6298193 100644 --- a/src/java/com/android/internal/telephony/WakeLockStateMachine.java +++ b/src/java/com/android/internal/telephony/WakeLockStateMachine.java @@ -51,6 +51,9 @@ public abstract class WakeLockStateMachine extends StateMachine { /** Release wakelock after a short timeout when returning to idle state. */ static final int EVENT_RELEASE_WAKE_LOCK = 3; + /** Broadcast not required due to geo-fencing check */ + static final int EVENT_BROADCAST_NOT_REQUIRED = 4; + @UnsupportedAppUsage protected Phone mPhone; @@ -152,13 +155,14 @@ public abstract class WakeLockStateMachine extends StateMachine { @Override public void exit() { mWakeLock.acquire(); - if (DBG) log("acquired wakelock, leaving Idle state"); + if (DBG) log("Idle: acquired wakelock, leaving Idle state"); } @Override public boolean processMessage(Message msg) { switch (msg.what) { case EVENT_NEW_SMS_MESSAGE: + log("Idle: new cell broadcast message"); // transition to waiting state if we sent a broadcast if (handleSmsMessage(msg)) { transitionTo(mWaitingState); @@ -166,9 +170,14 @@ public abstract class WakeLockStateMachine extends StateMachine { return HANDLED; case EVENT_RELEASE_WAKE_LOCK: + log("Idle: release wakelock"); releaseWakeLock(); return HANDLED; + case EVENT_BROADCAST_NOT_REQUIRED: + log("Idle: broadcast not required"); + return HANDLED; + default: return NOT_HANDLED; } @@ -184,19 +193,27 @@ public abstract class WakeLockStateMachine extends StateMachine { public boolean processMessage(Message msg) { switch (msg.what) { case EVENT_NEW_SMS_MESSAGE: - log("deferring message until return to idle"); + log("Waiting: deferring message until return to idle"); deferMessage(msg); return HANDLED; case EVENT_BROADCAST_COMPLETE: - log("broadcast complete, returning to idle"); + log("Waiting: broadcast complete, returning to idle"); transitionTo(mIdleState); return HANDLED; case EVENT_RELEASE_WAKE_LOCK: + log("Waiting: release wakelock"); releaseWakeLock(); return HANDLED; + case EVENT_BROADCAST_NOT_REQUIRED: + log("Waiting: broadcast not required"); + if (mReceiverCount.get() == 0) { + transitionTo(mIdleState); + } + return HANDLED; + default: return NOT_HANDLED; } diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java index ec50981f3e..718a18bc92 100644 --- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java @@ -95,13 +95,13 @@ import com.android.internal.telephony.Connection; import com.android.internal.telephony.LocaleTracker; import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneConstants; -import com.android.internal.telephony.PhoneInternalInterface; import com.android.internal.telephony.ServiceStateTracker; import com.android.internal.telephony.SubscriptionController; import com.android.internal.telephony.TelephonyProperties; import com.android.internal.telephony.dataconnection.DataEnabledSettings; import com.android.internal.telephony.dataconnection.DataEnabledSettings.DataEnabledChangedReason; import com.android.internal.telephony.gsm.SuppServiceNotification; +import com.android.internal.telephony.imsphone.ImsPhone.ImsDialArgs; import com.android.internal.telephony.metrics.CallQualityMetrics; import com.android.internal.telephony.metrics.TelephonyMetrics; import com.android.internal.telephony.nano.TelephonyProto.ImsConnectionState; @@ -301,6 +301,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { private static final int EVENT_REDIAL_WIFI_E911_TIMEOUT = 29; private static final int EVENT_ANSWER_WAITING_CALL = 30; private static final int EVENT_RESUME_NOW_FOREGROUND_CALL = 31; + private static final int EVENT_REDIAL_WITHOUT_RTT = 32; private static final int TIMEOUT_HANGUP_PENDINGMO = 500; @@ -422,7 +423,8 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { private HoldSwapState mHoldSwitchingState = HoldSwapState.INACTIVE; private String mLastDialString = null; - private PhoneInternalInterface.DialArgs mLastDialArgs = null; + private ImsDialArgs mLastDialArgs = null; + /** * Listeners to changes in the phone state. Intended for use by other interested IMS components * without the need to register a full blown {@link android.telephony.PhoneStateListener}. @@ -2385,6 +2387,10 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { .getSystemService(Context.CONNECTIVITY_SERVICE); mgr.setAirplaneMode(false); return; + } else if (reasonInfo.getCode() == ImsReasonInfo.CODE_RETRY_ON_IMS_WITHOUT_RTT) { + Pair<ImsCall, ImsReasonInfo> callInfo = new Pair<>(imsCall, reasonInfo); + sendMessage(obtainMessage(EVENT_REDIAL_WITHOUT_RTT, callInfo)); + return; } else { processCallStateChange(imsCall, ImsPhoneCall.State.DISCONNECTED, cause); } @@ -3416,6 +3422,30 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { sendCallStartFailedDisconnect(callInfo.first, callInfo.second); break; } + + case EVENT_REDIAL_WITHOUT_RTT: { + Pair<ImsCall, ImsReasonInfo> callInfo = (Pair<ImsCall, ImsReasonInfo>) msg.obj; + removeMessages(EVENT_REDIAL_WITHOUT_RTT); + ImsPhoneConnection oldConnection = findConnection(callInfo.first); + if (oldConnection == null) { + sendCallStartFailedDisconnect(callInfo.first, callInfo.second); + break; + } + mForegroundCall.detach(oldConnection); + removeConnection(oldConnection); + try { + mPendingMO = null; + ImsDialArgs newDialArgs = ImsDialArgs.Builder.from(mLastDialArgs) + .setRttTextStream(null) + .build(); + Connection newConnection = + mPhone.getDefaultPhone().dial(mLastDialString, newDialArgs); + oldConnection.onOriginalConnectionReplaced(newConnection); + } catch (CallStateException e) { + sendCallStartFailedDisconnect(callInfo.first, callInfo.second); + } + break; + } } } |