diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-09-03 07:36:23 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-09-03 07:36:23 +0000 |
commit | 4f89585d9a879b9da957431110aeebee4e4a02fe (patch) | |
tree | 44748474edd84bec44c6748e1d14e1e34d2db9c2 | |
parent | 595893125ea83ccdf5d1cbe03897017b6ab9ff18 (diff) | |
parent | a9732050e14a92df8634fb3a0c2364d062bb3f79 (diff) | |
download | ims-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.java | 16 | ||||
-rw-r--r-- | src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java | 33 |
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; + } } |