aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Gunn <tgunn@google.com>2017-08-31 15:13:01 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2017-08-31 15:13:01 +0000
commita9732050e14a92df8634fb3a0c2364d062bb3f79 (patch)
tree44748474edd84bec44c6748e1d14e1e34d2db9c2
parent118e5a88b580c98242094021063166cb0f9369ef (diff)
parent9d6410a77eefdb35f72a17d62e3c4dc21a71ea18 (diff)
downloadims-a9732050e14a92df8634fb3a0c2364d062bb3f79.tar.gz
Merge "Ensure upgrade to video requests are ignored when video disabled." into oc-mr1-dev
-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;
+ }
}