Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b0078ccd authored by Tyler Gunn's avatar Tyler Gunn Committed by android-build-merger
Browse files

Merge "Cleanup video provider binder code." am: 398794c0

am: bd9bf9f9

Change-Id: Ia92320bb9a283c97ac81bb76dcc01975597e14be
parents 12726efe bd9bf9f9
Loading
Loading
Loading
Loading
+17 −5
Original line number Original line Diff line number Diff line
@@ -25,8 +25,11 @@ import android.net.Uri;
import android.os.Build;
import android.os.Build;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.os.ParcelFileDescriptor;


import com.android.internal.telecom.IVideoProvider;

import java.io.IOException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.OutputStreamWriter;
@@ -2132,13 +2135,22 @@ public final class Call {
            cannedTextResponsesChanged = true;
            cannedTextResponsesChanged = true;
        }
        }


        VideoCallImpl newVideoCallImpl = parcelableCall.getVideoCallImpl(mCallingPackage,
        IVideoProvider previousVideoProvider = mVideoCallImpl == null ? null :
                mTargetSdkVersion);
                mVideoCallImpl.getVideoProvider();
        boolean videoCallChanged = parcelableCall.isVideoCallProviderChanged() &&
        IVideoProvider newVideoProvider = parcelableCall.getVideoProvider();
                !Objects.equals(mVideoCallImpl, newVideoCallImpl);

        // parcelableCall.isVideoCallProviderChanged is only true when we have a video provider
        // specified; so we should check if the actual IVideoProvider changes as well.
        boolean videoCallChanged = parcelableCall.isVideoCallProviderChanged()
                && !Objects.equals(previousVideoProvider, newVideoProvider);
        if (videoCallChanged) {
        if (videoCallChanged) {
            mVideoCallImpl = newVideoCallImpl;
            if (mVideoCallImpl != null) {
                mVideoCallImpl.destroy();
            }
            }
            mVideoCallImpl = parcelableCall.isVideoCallProviderChanged() ?
                    parcelableCall.getVideoCallImpl(mCallingPackage, mTargetSdkVersion) : null;
        }

        if (mVideoCallImpl != null) {
        if (mVideoCallImpl != null) {
            mVideoCallImpl.setVideoState(getDetails().getVideoState());
            mVideoCallImpl.setVideoState(getDetails().getVideoState());
        }
        }
+5 −0
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@ import android.annotation.UnsupportedAppUsage;
import android.net.Uri;
import android.net.Uri;
import android.os.Build;
import android.os.Build;
import android.os.Bundle;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;
import android.os.RemoteException;
import android.os.RemoteException;
@@ -225,6 +226,10 @@ public final class ParcelableCall implements Parcelable {
        return mVideoCall;
        return mVideoCall;
    }
    }


    public IVideoProvider getVideoProvider() {
        return mVideoCallProvider;
    }

    public boolean getIsRttCallChanged() {
    public boolean getIsRttCallChanged() {
        return mIsRttCallChanged;
        return mIsRttCallChanged;
    }
    }
+20 −1
Original line number Original line Diff line number Diff line
@@ -32,6 +32,8 @@ 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;


import java.util.NoSuchElementException;

/**
/**
 * Implementation of a Video Call, which allows InCallUi to communicate commands to the underlying
 * Implementation of a Video Call, which allows InCallUi to communicate commands to the underlying
 * {@link Connection.VideoProvider}, and direct callbacks from the
 * {@link Connection.VideoProvider}, and direct callbacks from the
@@ -53,7 +55,11 @@ public class VideoCallImpl extends VideoCall {
    private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
    private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
        @Override
        @Override
        public void binderDied() {
        public void binderDied() {
            try {
                mVideoProvider.asBinder().unlinkToDeath(this, 0);
                mVideoProvider.asBinder().unlinkToDeath(this, 0);
            } catch (NoSuchElementException nse) {
                // Already unlinked in destroy below.
            }
        }
        }
    };
    };


@@ -222,6 +228,11 @@ public class VideoCallImpl extends VideoCall {
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 127403196)
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 127403196)
    public void destroy() {
    public void destroy() {
        unregisterCallback(mCallback);
        unregisterCallback(mCallback);
        try {
            mVideoProvider.asBinder().unlinkToDeath(mDeathRecipient, 0);
        } catch (NoSuchElementException nse) {
            // Already unlinked in binderDied above.
        }
    }
    }


    /** {@inheritDoc} */
    /** {@inheritDoc} */
@@ -353,4 +364,12 @@ public class VideoCallImpl extends VideoCall {
    public void setVideoState(int videoState) {
    public void setVideoState(int videoState) {
        mVideoState = videoState;
        mVideoState = videoState;
    }
    }

    /**
     * Get the video provider binder.
     * @return the video provider binder.
     */
    public IVideoProvider getVideoProvider() {
        return mVideoProvider;
    }
}
}