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

Commit 31de23da authored by Hall Liu's avatar Hall Liu
Browse files

Add SDK compatibility code for new call states

Add code that translates the new call states to old call states for
in-call UIs that don't yet support background call screening.

Test: CTS
Bug: 140317205
Change-Id: I104f5f7ab3e3dc075e1d9ed5c64fcd924f9a977b
parent 038d1b5b
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -2739,6 +2739,10 @@ package android.telecom {
    method public void exitBackgroundAudioProcessing(boolean);
    method public void exitBackgroundAudioProcessing(boolean);
  }
  }


  public static class Call.Details {
    method public String getTelecomCallId();
  }

  public final class CallAudioState implements android.os.Parcelable {
  public final class CallAudioState implements android.os.Parcelable {
    ctor public CallAudioState(boolean, int, int, @Nullable android.bluetooth.BluetoothDevice, @NonNull java.util.Collection<android.bluetooth.BluetoothDevice>);
    ctor public CallAudioState(boolean, int, int, @Nullable android.bluetooth.BluetoothDevice, @NonNull java.util.Collection<android.bluetooth.BluetoothDevice>);
  }
  }
+4 −0
Original line number Original line Diff line number Diff line
@@ -728,6 +728,7 @@ public final class Call {
        }
        }


        /** {@hide} */
        /** {@hide} */
        @TestApi
        public String getTelecomCallId() {
        public String getTelecomCallId() {
            return mTelecomCallId;
            return mTelecomCallId;
        }
        }
@@ -2137,6 +2138,9 @@ public final class Call {
        }
        }


        int state = parcelableCall.getState();
        int state = parcelableCall.getState();
        if (mTargetSdkVersion < Phone.SDK_VERSION_R && state == Call.STATE_SIMULATED_RINGING) {
            state = Call.STATE_RINGING;
        }
        boolean stateChanged = mState != state;
        boolean stateChanged = mState != state;
        if (stateChanged) {
        if (stateChanged) {
            mState = state;
            mState = state;
+2 −0
Original line number Original line Diff line number Diff line
@@ -374,6 +374,8 @@ public abstract class CallScreeningService extends Service {
                        new ComponentName(getPackageName(), getClass().getName()));
                        new ComponentName(getPackageName(), getClass().getName()));
            } else if (response.getSilenceCall()) {
            } else if (response.getSilenceCall()) {
                mCallScreeningAdapter.silenceCall(callDetails.getTelecomCallId());
                mCallScreeningAdapter.silenceCall(callDetails.getTelecomCallId());
            } else if (response.getShouldScreenCallFurther()) {
                mCallScreeningAdapter.screenCallFurther(callDetails.getTelecomCallId());
            } else {
            } else {
                mCallScreeningAdapter.allowCall(callDetails.getTelecomCallId());
                mCallScreeningAdapter.allowCall(callDetails.getTelecomCallId());
            }
            }
+33 −8
Original line number Original line Diff line number Diff line
@@ -21,7 +21,6 @@ import android.annotation.UnsupportedAppUsage;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothDevice;
import android.os.Build;
import android.os.Build;
import android.os.Bundle;
import android.os.Bundle;
import android.os.RemoteException;
import android.util.ArrayMap;
import android.util.ArrayMap;


import java.util.Collections;
import java.util.Collections;
@@ -111,6 +110,10 @@ public final class Phone {
        public void onSilenceRinger(Phone phone) { }
        public void onSilenceRinger(Phone phone) { }
    }
    }


    // TODO: replace all usages of this with the actual R constant from Build.VERSION_CODES
    /** @hide */
    public static final int SDK_VERSION_R = 30;

    // A Map allows us to track each Call by its Telecom-specified call ID
    // A Map allows us to track each Call by its Telecom-specified call ID
    private final Map<String, Call> mCallByTelecomCallId = new ArrayMap<>();
    private final Map<String, Call> mCallByTelecomCallId = new ArrayMap<>();


@@ -143,6 +146,12 @@ public final class Phone {
    }
    }


    final void internalAddCall(ParcelableCall parcelableCall) {
    final void internalAddCall(ParcelableCall parcelableCall) {
        if (mTargetSdkVersion < SDK_VERSION_R
                && parcelableCall.getState() == Call.STATE_AUDIO_PROCESSING) {
            Log.i(this, "Skipping adding audio processing call for sdk compatibility");
            return;
        }

        Call call = new Call(this, parcelableCall.getId(), mInCallAdapter,
        Call call = new Call(this, parcelableCall.getId(), mInCallAdapter,
                parcelableCall.getState(), mCallingPackage, mTargetSdkVersion);
                parcelableCall.getState(), mCallingPackage, mTargetSdkVersion);
        mCallByTelecomCallId.put(parcelableCall.getId(), call);
        mCallByTelecomCallId.put(parcelableCall.getId(), call);
@@ -164,10 +173,26 @@ public final class Phone {
    }
    }


    final void internalUpdateCall(ParcelableCall parcelableCall) {
    final void internalUpdateCall(ParcelableCall parcelableCall) {
        if (mTargetSdkVersion < SDK_VERSION_R
                && parcelableCall.getState() == Call.STATE_AUDIO_PROCESSING) {
            Log.i(this, "removing audio processing call during update for sdk compatibility");
            Call call = mCallByTelecomCallId.get(parcelableCall.getId());
            if (call != null) {
                internalRemoveCall(call);
            }
            return;
        }

        Call call = mCallByTelecomCallId.get(parcelableCall.getId());
        Call call = mCallByTelecomCallId.get(parcelableCall.getId());
        if (call != null) {
        if (call != null) {
            checkCallTree(parcelableCall);
            checkCallTree(parcelableCall);
            call.internalUpdate(parcelableCall, mCallByTelecomCallId);
            call.internalUpdate(parcelableCall, mCallByTelecomCallId);
        } else {
            // This call may have come out of audio processing. Try adding it if our target sdk
            // version is low enough.
            if (mTargetSdkVersion < SDK_VERSION_R) {
                internalAddCall(parcelableCall);
            }
        }
        }
    }
    }