aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2019-11-08 23:25:11 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2019-11-08 23:25:11 +0000
commita3ee0dcd70c32b52a95934c77d566fd388f59d05 (patch)
tree0a4034a5d03c927d0e4a2cca7ef64676bd8e37a0
parentd3b8f283fbf73933c44d486798e5fc42e1cf66c9 (diff)
parent60114b6f29077021236cdd15f8b8dad925cb7a7c (diff)
downloadtelephony-android10-qpr1-c-s1-release.tar.gz
Change-Id: I8d6deb9e535a56b42019b8e2c00a53935c8f800a
-rw-r--r--src/java/com/android/internal/telephony/CellBroadcastHandler.java2
-rw-r--r--src/java/com/android/internal/telephony/WakeLockStateMachine.java23
-rw-r--r--src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java34
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;
+ }
}
}