aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-09-03 07:36:23 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-09-03 07:36:23 +0000
commit4f89585d9a879b9da957431110aeebee4e4a02fe (patch)
tree44748474edd84bec44c6748e1d14e1e34d2db9c2
parent595893125ea83ccdf5d1cbe03897017b6ab9ff18 (diff)
parenta9732050e14a92df8634fb3a0c2364d062bb3f79 (diff)
downloadims-4f89585d9a879b9da957431110aeebee4e4a02fe.tar.gz
release-request-957cd691-fb71-4770-8ff7-a3b9602655a5-for-git_oc-mr1-release-4314464 snap-temp-L54400000099147910
Change-Id: Ib6cada36b85a6aaec410fb2e9e3a08dde94038b4
-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;
+ }
}