Remove dependency on android.telecom.Call in VideoCallImpl for testing.
VideoCallImpl had a depedency on android.telecom.Call, which was used to get the current video state of a call when the user issues a session modify request (we need to know what the video state was before the request was sent). This proved problematic for unit tests, as android.telecom.Call is a final class and cannot be mocked. These changes assume the VideoCallImpl will instead have a video state property, which is updated by the Call whenever it changes. This removes the dependency on the Call, and makes it possible to unit test the API. Change-Id: Ie67255d68b23e32aa177b30ac6439632fad5cc27
This commit is contained in:
@@ -684,7 +684,7 @@ public final class Call {
|
||||
private int mState;
|
||||
private List<String> mCannedTextResponses = null;
|
||||
private String mRemainingPostDialSequence;
|
||||
private InCallService.VideoCall mVideoCall;
|
||||
private VideoCallImpl mVideoCallImpl;
|
||||
private Details mDetails;
|
||||
|
||||
/**
|
||||
@@ -897,7 +897,7 @@ public final class Call {
|
||||
* @return An {@code Call.VideoCall}.
|
||||
*/
|
||||
public InCallService.VideoCall getVideoCall() {
|
||||
return mVideoCall;
|
||||
return mVideoCallImpl;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1028,10 +1028,14 @@ public final class Call {
|
||||
cannedTextResponsesChanged = true;
|
||||
}
|
||||
|
||||
VideoCallImpl newVideoCallImpl = parcelableCall.getVideoCallImpl();
|
||||
boolean videoCallChanged = parcelableCall.isVideoCallProviderChanged() &&
|
||||
!Objects.equals(mVideoCall, parcelableCall.getVideoCall(this));
|
||||
!Objects.equals(mVideoCallImpl, newVideoCallImpl);
|
||||
if (videoCallChanged) {
|
||||
mVideoCall = parcelableCall.getVideoCall(this);
|
||||
mVideoCallImpl = newVideoCallImpl;
|
||||
}
|
||||
if (mVideoCallImpl != null) {
|
||||
mVideoCallImpl.setVideoState(getDetails().getVideoState());
|
||||
}
|
||||
|
||||
int state = parcelableCall.getState();
|
||||
@@ -1081,7 +1085,7 @@ public final class Call {
|
||||
fireCannedTextResponsesLoaded(mCannedTextResponses);
|
||||
}
|
||||
if (videoCallChanged) {
|
||||
fireVideoCallChanged(mVideoCall);
|
||||
fireVideoCallChanged(mVideoCallImpl);
|
||||
}
|
||||
if (parentChanged) {
|
||||
fireParentChanged(getParent());
|
||||
|
||||
@@ -48,7 +48,7 @@ public final class ParcelableCall implements Parcelable {
|
||||
private final PhoneAccountHandle mAccountHandle;
|
||||
private final boolean mIsVideoCallProviderChanged;
|
||||
private final IVideoProvider mVideoCallProvider;
|
||||
private InCallService.VideoCall mVideoCall;
|
||||
private VideoCallImpl mVideoCall;
|
||||
private final String mParentCallId;
|
||||
private final List<String> mChildCallIds;
|
||||
private final StatusHints mStatusHints;
|
||||
@@ -179,12 +179,13 @@ public final class ParcelableCall implements Parcelable {
|
||||
|
||||
/**
|
||||
* Returns an object for remotely communicating through the video call provider's binder.
|
||||
|
||||
* @return The video call.
|
||||
*/
|
||||
public InCallService.VideoCall getVideoCall(Call call) {
|
||||
public VideoCallImpl getVideoCallImpl() {
|
||||
if (mVideoCall == null && mVideoCallProvider != null) {
|
||||
try {
|
||||
mVideoCall = new VideoCallImpl(mVideoCallProvider, call);
|
||||
mVideoCall = new VideoCallImpl(mVideoCallProvider);
|
||||
} catch (RemoteException ignored) {
|
||||
// Ignore RemoteException.
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ public class VideoCallImpl extends VideoCall {
|
||||
private final VideoCallListenerBinder mBinder;
|
||||
private VideoCall.Callback mCallback;
|
||||
private int mVideoQuality = VideoProfile.QUALITY_UNKNOWN;
|
||||
private Call mCall;
|
||||
private int mVideoState = VideoProfile.STATE_AUDIO_ONLY;
|
||||
|
||||
private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
|
||||
@Override
|
||||
@@ -197,13 +197,12 @@ public class VideoCallImpl extends VideoCall {
|
||||
|
||||
private Handler mHandler;
|
||||
|
||||
VideoCallImpl(IVideoProvider videoProvider, Call call) throws RemoteException {
|
||||
VideoCallImpl(IVideoProvider videoProvider) throws RemoteException {
|
||||
mVideoProvider = videoProvider;
|
||||
mVideoProvider.asBinder().linkToDeath(mDeathRecipient, 0);
|
||||
|
||||
mBinder = new VideoCallListenerBinder();
|
||||
mVideoProvider.addVideoCallback(mBinder);
|
||||
mCall = call;
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
@@ -292,8 +291,7 @@ public class VideoCallImpl extends VideoCall {
|
||||
*/
|
||||
public void sendSessionModifyRequest(VideoProfile requestProfile) {
|
||||
try {
|
||||
VideoProfile originalProfile = new VideoProfile(mCall.getDetails().getVideoState(),
|
||||
mVideoQuality);
|
||||
VideoProfile originalProfile = new VideoProfile(mVideoState, mVideoQuality);
|
||||
|
||||
mVideoProvider.sendSessionModifyRequest(originalProfile, requestProfile);
|
||||
} catch (RemoteException e) {
|
||||
@@ -331,4 +329,12 @@ public class VideoCallImpl extends VideoCall {
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the video state for the current video call.
|
||||
* @param videoState the new video state.
|
||||
*/
|
||||
public void setVideoState(int videoState) {
|
||||
mVideoState = videoState;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user