diff options
author | Tyler Gunn <tgunn@google.com> | 2017-09-20 21:25:48 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-09-20 21:25:48 +0000 |
commit | 29ec0fb19061f2fd1daec19aa38b106626d201ed (patch) | |
tree | 9d82711dccccfdcdb3b8559e800f04fe30d61d01 | |
parent | b4920f635e1f3362593b628fee777ad8dd16199a (diff) | |
parent | 236b6f319ec913b241591f69d45684e8173b6a5e (diff) | |
download | ims-29ec0fb19061f2fd1daec19aa38b106626d201ed.tar.gz |
Merge "Ensure upgrade to video requests are ignored when video disabled."
am: 236b6f319e
Change-Id: Ia93cb15f9fdf3eac4edaebc9241bcb74c25ba1b1
-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; + } } |