diff options
author | Tyler Gunn <tgunn@google.com> | 2017-08-31 15:13:01 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-08-31 15:13:01 +0000 |
commit | a9732050e14a92df8634fb3a0c2364d062bb3f79 (patch) | |
tree | 44748474edd84bec44c6748e1d14e1e34d2db9c2 | |
parent | 118e5a88b580c98242094021063166cb0f9369ef (diff) | |
parent | 9d6410a77eefdb35f72a17d62e3c4dc21a71ea18 (diff) | |
download | ims-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.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; + } } |