Merge "Change sendSessionModifyRequest VideoProvider API signature." into mnc-dev

This commit is contained in:
Tyler Gunn
2015-05-06 16:01:29 +00:00
committed by Android (Google) Code Review
9 changed files with 50 additions and 20 deletions

View File

@@ -30446,7 +30446,7 @@ package android.telecom {
method public void handleCallSessionEvent(int); method public void handleCallSessionEvent(int);
method public abstract void onRequestCameraCapabilities(); method public abstract void onRequestCameraCapabilities();
method public abstract void onRequestConnectionDataUsage(); method public abstract void onRequestConnectionDataUsage();
method public abstract void onSendSessionModifyRequest(android.telecom.VideoProfile); method public abstract void onSendSessionModifyRequest(android.telecom.VideoProfile, android.telecom.VideoProfile);
method public abstract void onSendSessionModifyResponse(android.telecom.VideoProfile); method public abstract void onSendSessionModifyResponse(android.telecom.VideoProfile);
method public abstract void onSetCamera(java.lang.String); method public abstract void onSetCamera(java.lang.String);
method public abstract void onSetDeviceOrientation(int); method public abstract void onSetDeviceOrientation(int);

View File

@@ -32567,7 +32567,7 @@ package android.telecom {
method public void handleCallSessionEvent(int); method public void handleCallSessionEvent(int);
method public abstract void onRequestCameraCapabilities(); method public abstract void onRequestCameraCapabilities();
method public abstract void onRequestConnectionDataUsage(); method public abstract void onRequestConnectionDataUsage();
method public abstract void onSendSessionModifyRequest(android.telecom.VideoProfile); method public abstract void onSendSessionModifyRequest(android.telecom.VideoProfile, android.telecom.VideoProfile);
method public abstract void onSendSessionModifyResponse(android.telecom.VideoProfile); method public abstract void onSendSessionModifyResponse(android.telecom.VideoProfile);
method public abstract void onSetCamera(java.lang.String); method public abstract void onSetCamera(java.lang.String);
method public abstract void onSetDeviceOrientation(int); method public abstract void onSetDeviceOrientation(int);

View File

@@ -1000,9 +1000,9 @@ public final class Call {
} }
boolean videoCallChanged = parcelableCall.isVideoCallProviderChanged() && boolean videoCallChanged = parcelableCall.isVideoCallProviderChanged() &&
!Objects.equals(mVideoCall, parcelableCall.getVideoCall()); !Objects.equals(mVideoCall, parcelableCall.getVideoCall(this));
if (videoCallChanged) { if (videoCallChanged) {
mVideoCall = parcelableCall.getVideoCall(); mVideoCall = parcelableCall.getVideoCall(this);
} }
int state = parcelableCall.getState(); int state = parcelableCall.getState();

View File

@@ -16,6 +16,7 @@
package android.telecom; package android.telecom;
import com.android.internal.os.SomeArgs;
import com.android.internal.telecom.IVideoCallback; import com.android.internal.telecom.IVideoCallback;
import com.android.internal.telecom.IVideoProvider; import com.android.internal.telecom.IVideoProvider;
@@ -471,9 +472,16 @@ public abstract class Connection implements Conferenceable {
case MSG_SET_ZOOM: case MSG_SET_ZOOM:
onSetZoom((Float) msg.obj); onSetZoom((Float) msg.obj);
break; break;
case MSG_SEND_SESSION_MODIFY_REQUEST: case MSG_SEND_SESSION_MODIFY_REQUEST: {
onSendSessionModifyRequest((VideoProfile) msg.obj); SomeArgs args = (SomeArgs) msg.obj;
try {
onSendSessionModifyRequest((VideoProfile) args.arg1,
(VideoProfile) args.arg2);
} finally {
args.recycle();
}
break; break;
}
case MSG_SEND_SESSION_MODIFY_RESPONSE: case MSG_SEND_SESSION_MODIFY_RESPONSE:
onSendSessionModifyResponse((VideoProfile) msg.obj); onSendSessionModifyResponse((VideoProfile) msg.obj);
break; break;
@@ -527,9 +535,11 @@ public abstract class Connection implements Conferenceable {
mMessageHandler.obtainMessage(MSG_SET_ZOOM, value).sendToTarget(); mMessageHandler.obtainMessage(MSG_SET_ZOOM, value).sendToTarget();
} }
public void sendSessionModifyRequest(VideoProfile requestProfile) { public void sendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) {
mMessageHandler.obtainMessage( SomeArgs args = SomeArgs.obtain();
MSG_SEND_SESSION_MODIFY_REQUEST, requestProfile).sendToTarget(); args.arg1 = fromProfile;
args.arg2 = toProfile;
mMessageHandler.obtainMessage(MSG_SEND_SESSION_MODIFY_REQUEST, args).sendToTarget();
} }
public void sendSessionModifyResponse(VideoProfile responseProfile) { public void sendSessionModifyResponse(VideoProfile responseProfile) {
@@ -606,9 +616,11 @@ public abstract class Connection implements Conferenceable {
* Some examples of session modification requests: upgrade connection from audio to video, * Some examples of session modification requests: upgrade connection from audio to video,
* downgrade connection from video to audio, pause video. * downgrade connection from video to audio, pause video.
* *
* @param requestProfile The requested connection video properties. * @param fromProfile The video properties prior to the request.
* @param toProfile The video properties with the requested changes made.
*/ */
public abstract void onSendSessionModifyRequest(VideoProfile requestProfile); public abstract void onSendSessionModifyRequest(VideoProfile fromProfile,
VideoProfile toProfile);
/**te /**te
* Provides a response to a request to change the current connection session video * Provides a response to a request to change the current connection session video

View File

@@ -178,10 +178,10 @@ public final class ParcelableCall implements Parcelable {
* Returns an object for remotely communicating through the video call provider's binder. * Returns an object for remotely communicating through the video call provider's binder.
* @return The video call. * @return The video call.
*/ */
public InCallService.VideoCall getVideoCall() { public InCallService.VideoCall getVideoCall(Call call) {
if (mVideoCall == null && mVideoCallProvider != null) { if (mVideoCall == null && mVideoCallProvider != null) {
try { try {
mVideoCall = new VideoCallImpl(mVideoCallProvider); mVideoCall = new VideoCallImpl(mVideoCallProvider, call);
} catch (RemoteException ignored) { } catch (RemoteException ignored) {
// Ignore RemoteException. // Ignore RemoteException.
} }

View File

@@ -350,9 +350,9 @@ public final class RemoteConnection {
} }
} }
public void sendSessionModifyRequest(VideoProfile reqProfile) { public void sendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) {
try { try {
mVideoProviderBinder.sendSessionModifyRequest(reqProfile); mVideoProviderBinder.sendSessionModifyRequest(fromProfile, toProfile);
} catch (RemoteException e) { } catch (RemoteException e) {
} }
} }

View File

@@ -40,6 +40,8 @@ public class VideoCallImpl extends VideoCall {
private final IVideoProvider mVideoProvider; private final IVideoProvider mVideoProvider;
private final VideoCallListenerBinder mBinder; private final VideoCallListenerBinder mBinder;
private VideoCall.Callback mCallback; private VideoCall.Callback mCallback;
private int mVideoQuality = VideoProfile.QUALITY_UNKNOWN;
private Call mCall;
private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() { private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
@Override @Override
@@ -161,6 +163,7 @@ public class VideoCallImpl extends VideoCall {
(CameraCapabilities) msg.obj); (CameraCapabilities) msg.obj);
break; break;
case MSG_CHANGE_VIDEO_QUALITY: case MSG_CHANGE_VIDEO_QUALITY:
mVideoQuality = msg.arg1;
mCallback.onVideoQualityChanged(msg.arg1); mCallback.onVideoQualityChanged(msg.arg1);
break; break;
default: default:
@@ -171,12 +174,13 @@ public class VideoCallImpl extends VideoCall {
private Handler mHandler; private Handler mHandler;
VideoCallImpl(IVideoProvider videoProvider) throws RemoteException { VideoCallImpl(IVideoProvider videoProvider, Call call) throws RemoteException {
mVideoProvider = videoProvider; mVideoProvider = videoProvider;
mVideoProvider.asBinder().linkToDeath(mDeathRecipient, 0); mVideoProvider.asBinder().linkToDeath(mDeathRecipient, 0);
mBinder = new VideoCallListenerBinder(); mBinder = new VideoCallListenerBinder();
mVideoProvider.addVideoCallback(mBinder); mVideoProvider.addVideoCallback(mBinder);
mCall = call;
} }
public void destroy() { public void destroy() {
@@ -251,10 +255,24 @@ public class VideoCallImpl extends VideoCall {
} }
} }
/** {@inheritDoc} */ /**
* Sends a session modification request to the video provider.
* <p>
* The {@link InCallService} will create the {@code requestProfile} based on the current
* video state (i.e. {@link Call.Details#getVideoState()}). It is, however, possible that the
* video state maintained by the {@link InCallService} could get out of sync with what is known
* by the {@link android.telecom.Connection.VideoProvider}. To remove ambiguity, the
* {@link VideoCallImpl} passes along the pre-modify video profile to the {@code VideoProvider}
* to ensure it has full context of the requested change.
*
* @param requestProfile The requested video profile.
*/
public void sendSessionModifyRequest(VideoProfile requestProfile) { public void sendSessionModifyRequest(VideoProfile requestProfile) {
try { try {
mVideoProvider.sendSessionModifyRequest(requestProfile); VideoProfile originalProfile = new VideoProfile(mCall.getDetails().getVideoState(),
mVideoQuality);
mVideoProvider.sendSessionModifyRequest(originalProfile, requestProfile);
} catch (RemoteException e) { } catch (RemoteException e) {
} }
} }

View File

@@ -39,7 +39,7 @@ oneway interface IVideoProvider {
void setZoom(float value); void setZoom(float value);
void sendSessionModifyRequest(in VideoProfile reqProfile); void sendSessionModifyRequest(in VideoProfile fromProfile, in VideoProfile toProfile);
void sendSessionModifyResponse(in VideoProfile responseProfile); void sendSessionModifyResponse(in VideoProfile responseProfile);

View File

@@ -52,7 +52,7 @@ oneway interface IImsVideoCallProvider {
void setZoom(float value); void setZoom(float value);
void sendSessionModifyRequest(in VideoProfile reqProfile); void sendSessionModifyRequest(in VideoProfile fromProfile, in VideoProfile toProfile);
void sendSessionModifyResponse(in VideoProfile responseProfile); void sendSessionModifyResponse(in VideoProfile responseProfile);