aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Gunn <tgunn@google.com>2017-08-17 15:55:53 -0700
committerTyler Gunn <tgunn@google.com>2017-08-17 15:55:53 -0700
commit9d6410a77eefdb35f72a17d62e3c4dc21a71ea18 (patch)
tree849998803bf8d35d6b177fea43780b78a66caae5
parent88f6ce488201377fff61e0de9f3384614305187f (diff)
downloadims-9d6410a77eefdb35f72a17d62e3c4dc21a71ea18.tar.gz
Ensure upgrade to video requests are ignored when video disabled.
When video is disabled (due to mobile data being off), we will automatically reject any incoming requests to upgrade to video. Test: Manual Bug: 36900451 Change-Id: I9991cc9940aef417ec7f05cb61e777bf0d354c93
-rw-r--r--src/java/com/android/ims/ImsCall.java16
-rw-r--r--src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java33
2 files changed, 45 insertions, 4 deletions
diff --git a/src/java/com/android/ims/ImsCall.java b/src/java/com/android/ims/ImsCall.java
index 74924e9c..716687d7 100644
--- a/src/java/com/android/ims/ImsCall.java
+++ b/src/java/com/android/ims/ImsCall.java
@@ -3447,6 +3447,20 @@ public class ImsCall implements ICall {
if (mCallProfile == null) {
return false;
}
+ int radioTechnology = getRadioTechnology();
+ return radioTechnology == ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN;
+ }
+ }
+
+ /**
+ * Determines the radio access technology for the {@link ImsCall}.
+ * @return The {@link ServiceState} {@code RIL_RADIO_TECHNOLOGY_*} code in use.
+ */
+ public int getRadioTechnology() {
+ synchronized(mLockObj) {
+ if (mCallProfile == null) {
+ return ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN;
+ }
String callType = mCallProfile.getCallExtra(ImsCallProfile.EXTRA_CALL_RAT_TYPE);
if (callType == null || callType.isEmpty()) {
callType = mCallProfile.getCallExtra(ImsCallProfile.EXTRA_CALL_RAT_TYPE_ALT);
@@ -3461,7 +3475,7 @@ public class ImsCall implements ICall {
radioTechnology = ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN;
}
- return radioTechnology == ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN;
+ return radioTechnology;
}
}
diff --git a/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java b/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java
index ca4078f9..a77000db 100644
--- a/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java
+++ b/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java
@@ -70,6 +70,7 @@ public class ImsVideoCallProviderWrapper extends Connection.VideoProvider {
private VideoPauseTracker mVideoPauseTracker = new VideoPauseTracker();
private boolean mUseVideoPauseWorkaround = false;
private int mCurrentVideoState;
+ private boolean mIsVideoEnabled = true;
private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
@Override
@@ -151,9 +152,25 @@ public class ImsVideoCallProviderWrapper extends Connection.VideoProvider {
public void handleMessage(Message msg) {
SomeArgs args;
switch (msg.what) {
- case MSG_RECEIVE_SESSION_MODIFY_REQUEST:
- receiveSessionModifyRequest((VideoProfile) msg.obj);
- break;
+ case MSG_RECEIVE_SESSION_MODIFY_REQUEST: {
+ VideoProfile videoProfile = (VideoProfile) msg.obj;
+ if (!VideoProfile.isVideo(mCurrentVideoState) && VideoProfile.isVideo(
+ videoProfile.getVideoState()) && !mIsVideoEnabled) {
+ // Video is disabled, reject the request.
+ Log.i(ImsVideoCallProviderWrapper.this,
+ "receiveSessionModifyRequest: requestedVideoState=%s; rejecting "
+ + "as video is disabled.",
+ videoProfile.getVideoState());
+ try {
+ mVideoCallProvider.sendSessionModifyResponse(
+ new VideoProfile(VideoProfile.STATE_AUDIO_ONLY));
+ } catch (RemoteException e) {
+ }
+ return;
+ }
+ receiveSessionModifyRequest(videoProfile);
+ }
+ break;
case MSG_RECEIVE_SESSION_MODIFY_RESPONSE:
args = (SomeArgs) msg.obj;
try {
@@ -566,4 +583,14 @@ public class ImsVideoCallProviderWrapper extends Connection.VideoProvider {
}
mCurrentVideoState = newVideoState;
}
+
+ /**
+ * Sets whether video is enabled locally or not.
+ * Used to reject incoming video requests when video is disabled locally due to data being
+ * disabled on a call where video calls are metered.
+ * @param isVideoEnabled {@code true} if video is locally enabled, {@code false} otherwise.
+ */
+ public void setIsVideoEnabled(boolean isVideoEnabled) {
+ mIsVideoEnabled = isVideoEnabled;
+ }
}