diff options
author | Tyler Gunn <tgunn@google.com> | 2017-08-17 15:55:53 -0700 |
---|---|---|
committer | Tyler Gunn <tgunn@google.com> | 2017-08-17 15:55:53 -0700 |
commit | 9d6410a77eefdb35f72a17d62e3c4dc21a71ea18 (patch) | |
tree | 849998803bf8d35d6b177fea43780b78a66caae5 | |
parent | 88f6ce488201377fff61e0de9f3384614305187f (diff) | |
download | ims-9d6410a77eefdb35f72a17d62e3c4dc21a71ea18.tar.gz |
Ensure upgrade to video requests are ignored when video disabled.
When video is disabled (due to mobile data being off), we will automatically
reject any incoming requests to upgrade to video.
Test: Manual
Bug: 36900451
Change-Id: I9991cc9940aef417ec7f05cb61e777bf0d354c93
-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; + } } |