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

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

Prepare event-based handovers for deprecation.

am: 715b5c83

Change-Id: I39d4329c340a751b2a8c10056cb3990698317f2d
parents 3301b2d0 715b5c83
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
import android.util.StatsLog;
import android.os.UserHandle;
import android.widget.Toast;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telecom.IVideoProvider;
@@ -2272,10 +2273,20 @@ public class Call implements CreateConnectionResponse, EventManager.Loggable,
    public void sendCallEvent(String event, int targetSdkVer, Bundle extras) {
        if (mConnectionService != null) {
            if (android.telecom.Call.EVENT_REQUEST_HANDOVER.equals(event)) {
                if (targetSdkVer > Build.VERSION_CODES.O_MR1) {
                if (targetSdkVer > Build.VERSION_CODES.P) {
                    Log.e(this, new Exception(), "sendCallEvent failed. Use public api handoverTo" +
                            " for API > 27(O-MR1)");
                    // TODO: Add "return" after DUO team adds new API support for handover
                            " for API > 28(P)");
                    // Event-based Handover APIs are deprecated, so inform the user.
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(mContext, "WARNING: Event-based handover APIs are deprecated "
                                            + "and will no longer function in Android Q.",
                                    Toast.LENGTH_LONG).show();
                        }
                    });

                    // Uncomment and remove toast at feature complete: return;
                }

                // Handover requests are targeted at Telecom, not the ConnectionService.
+4 −0
Original line number Diff line number Diff line
@@ -3571,6 +3571,10 @@ public class CallsManager extends Call.ListenerBase
                mCallAudioManager.getCallAudioState());
        Call handoverToCall = startOutgoingCall(handoverFromCall.getHandle(), handoverToHandle,
                extras, getCurrentUserHandle(), null /* originalIntent */);
        if (handoverToCall == null) {
            handoverFromCall.sendCallEvent(android.telecom.Call.EVENT_HANDOVER_FAILED, null);
            return;
        }
        Log.addEvent(handoverFromCall, LogUtils.Events.START_HANDOVER,
                "handOverFrom=%s, handOverTo=%s", handoverFromCall.getId(), handoverToCall.getId());
        handoverFromCall.setHandoverDestinationCall(handoverToCall);
+3 −2
Original line number Diff line number Diff line
@@ -19,9 +19,10 @@
          package="com.android.server.telecom.testapps">

    <uses-sdk
        android:minSdkVersion="23"
        android:targetSdkVersion="23" />
        android:minSdkVersion="28"
        android:targetSdkVersion="28" />

    <uses-permission android:name="android.permission.ACCEPT_HANDOVER" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
+10 −6
Original line number Diff line number Diff line
@@ -119,12 +119,12 @@ public class SelfManagedCallingActivity extends Activity {
        mPlaceIncomingCallButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                placeIncomingCall(false /* isHandoverFrom */);
                placeIncomingCall();
            }
        });
        mHandoverFrom = (Button) findViewById(R.id.handoverFrom);
        mHandoverFrom.setOnClickListener((v -> {
            placeIncomingCall(true /* isHandoverFrom */);
            initiateHandover();
        }));

        mUseAcct1Button = findViewById(R.id.useAcct1Button);
@@ -176,7 +176,14 @@ public class SelfManagedCallingActivity extends Activity {
        tm.placeCall(Uri.parse(mNumber.getText().toString()), extras);
    }

    private void placeIncomingCall(boolean isHandoverFrom) {
    private void initiateHandover() {
        TelecomManager tm = TelecomManager.from(this);
        PhoneAccountHandle phoneAccountHandle = getSelectedPhoneAccountHandle();
        Uri address = Uri.parse(mNumber.getText().toString());
        tm.acceptHandover(address, VideoProfile.STATE_BIDIRECTIONAL, phoneAccountHandle);
    }

    private void placeIncomingCall() {
        TelecomManager tm = TelecomManager.from(this);
        PhoneAccountHandle phoneAccountHandle = getSelectedPhoneAccountHandle();

@@ -196,9 +203,6 @@ public class SelfManagedCallingActivity extends Activity {
            extras.putInt(TelecomManager.EXTRA_INCOMING_VIDEO_STATE,
                    VideoProfile.STATE_BIDIRECTIONAL);
        }
        if (isHandoverFrom) {
            extras.putBoolean(TelecomManager.EXTRA_IS_HANDOVER, true);
        }
        tm.addNewIncomingCall(getSelectedPhoneAccountHandle(), extras);
    }

+18 −8
Original line number Diff line number Diff line
@@ -24,9 +24,7 @@ import android.telecom.ConnectionService;
import android.telecom.Log;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telecom.VideoProfile;

import java.util.Objects;
import java.util.Random;

/**
@@ -45,13 +43,25 @@ public class SelfManagedConnectionService extends ConnectionService {
            PhoneAccountHandle connectionManagerAccount,
            final ConnectionRequest request) {

        return createSelfManagedConnection(request, false);
        return createSelfManagedConnection(request, false, false /* isHandover */);
    }

    @Override
    public Connection onCreateIncomingConnection(PhoneAccountHandle connectionManagerPhoneAccount,
            ConnectionRequest request) {
        return createSelfManagedConnection(request, true);
        return createSelfManagedConnection(request, true, false /* isHandover */);
    }

    @Override
    public Connection onCreateOutgoingHandoverConnection(PhoneAccountHandle fromPhoneAccountHandle,
            ConnectionRequest request) {
        return createSelfManagedConnection(request, false, true /* isHandover */);
    }

    @Override
    public Connection onCreateIncomingHandoverConnection(PhoneAccountHandle fromPhoneAccountHandle,
            ConnectionRequest request) {
        return createSelfManagedConnection(request, true, true /* isHandover */);
    }

    @Override
@@ -77,7 +87,8 @@ public class SelfManagedConnectionService extends ConnectionService {
        mCallList.notifyConnectionServiceFocusGained();
    }

    private Connection createSelfManagedConnection(ConnectionRequest request, boolean isIncoming) {
    private Connection createSelfManagedConnection(ConnectionRequest request, boolean isIncoming,
            boolean isHandover) {
        SelfManagedConnection connection = new SelfManagedConnection(mCallList,
                getApplicationContext(), isIncoming);
        connection.setListener(mCallList.getConnectionListener());
@@ -98,11 +109,10 @@ public class SelfManagedConnectionService extends ConnectionService {
        if (requestExtras != null) {
            boolean isHoldable = requestExtras.getBoolean(EXTRA_HOLDABLE, false);
            Log.i(this, "createConnection: isHandover=%b, handoverFrom=%s, holdable=%b",
                    requestExtras.getBoolean(TelecomManager.EXTRA_IS_HANDOVER),
                    isHandover,
                    requestExtras.getString(TelecomManager.EXTRA_HANDOVER_FROM_PHONE_ACCOUNT),
                    isHoldable);
            connection.setIsHandover(requestExtras.getBoolean(TelecomManager.EXTRA_IS_HANDOVER,
                    false));
            connection.setIsHandover(isHandover);
            if (isHoldable) {
                connection.setConnectionCapabilities(connection.getConnectionCapabilities() |
                        Connection.CAPABILITY_HOLD | Connection.CAPABILITY_SUPPORT_HOLD);
Loading