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

Commit 1e312795 authored by Christine Franks's avatar Christine Franks
Browse files

Add additional faciliator identifying information

Include the serialized phone account handle to determine if specific
calls are already available natively on the reciver.

Bug: 286100443
Test: atest
Change-Id: Ifb0c03f54e7cf0cf70a74128a6ccb1b93cad6a41
parent cc112e10
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -88,6 +88,8 @@ message Telecom {
    string name = 1;
    // Unique identifier for this facilitator, such as a package name.
    string identifier = 2;
    // Extended identifier for this facilitator.
    string extended_identifier = 3;
  }

  enum Control {
+2 −1
Original line number Diff line number Diff line
@@ -175,7 +175,8 @@ public class CallMetadataSyncConnectionService extends ConnectionService {
                        : handle.getComponentName().getShortClassName(),
                        phoneAccount != null ? phoneAccount.getExtras().getString(
                                CrossDeviceSyncController.EXTRA_CALL_FACILITATOR_ID)
                                : handle.getComponentName().getPackageName());
                                : handle.getComponentName().getPackageName(),
                        handle.getComponentName().flattenToString());
        call.setFacilitator(callFacilitator);
        call.setDirection(android.companion.Telecom.Call.OUTGOING);
        call.setCallerId(connectionRequest.getAddress().getSchemeSpecificPart());
+18 −2
Original line number Diff line number Diff line
@@ -75,13 +75,15 @@ class CallMetadataSyncData {
    public static class CallFacilitator {
        private String mName;
        private String mIdentifier;
        private String mExtendedIdentifier;
        private boolean mIsTel;

        CallFacilitator() {}

        CallFacilitator(String name, String identifier) {
        CallFacilitator(String name, String identifier, String extendedIdentifier) {
            mName = name;
            mIdentifier = identifier;
            mExtendedIdentifier = extendedIdentifier;
        }

        public String getName() {
@@ -92,6 +94,10 @@ class CallMetadataSyncData {
            return mIdentifier;
        }

        public String getExtendedIdentifier() {
            return mExtendedIdentifier;
        }

        public boolean isTel() {
            return mIsTel;
        }
@@ -104,6 +110,10 @@ class CallMetadataSyncData {
            mIdentifier = identifier;
        }

        public void setExtendedIdentifier(String extendedIdentifier) {
            mExtendedIdentifier = extendedIdentifier;
        }

        public void setIsTel(boolean isTel) {
            mIsTel = isTel;
        }
@@ -170,6 +180,8 @@ class CallMetadataSyncData {
                "com.android.server.companion.datatransfer.contextsync.extra.FACILITATOR_NAME";
        private static final String EXTRA_FACILITATOR_ID =
                "com.android.server.companion.datatransfer.contextsync.extra.FACILITATOR_ID";
        private static final String EXTRA_FACILITATOR_EXT_ID =
                "com.android.server.companion.datatransfer.contextsync.extra.FACILITATOR_EXT_ID";
        private static final String EXTRA_STATUS =
                "com.android.server.companion.datatransfer.contextsync.extra.STATUS";
        private static final String EXTRA_DIRECTION =
@@ -192,7 +204,10 @@ class CallMetadataSyncData {
                call.setAppIcon(bundle.getByteArray(EXTRA_APP_ICON));
                final String facilitatorName = bundle.getString(EXTRA_FACILITATOR_NAME);
                final String facilitatorIdentifier = bundle.getString(EXTRA_FACILITATOR_ID);
                call.setFacilitator(new CallFacilitator(facilitatorName, facilitatorIdentifier));
                final String facilitatorExtendedIdentifier =
                        bundle.getString(EXTRA_FACILITATOR_EXT_ID);
                call.setFacilitator(new CallFacilitator(facilitatorName, facilitatorIdentifier,
                        facilitatorExtendedIdentifier));
                call.setStatus(bundle.getInt(EXTRA_STATUS));
                call.setDirection(bundle.getInt(EXTRA_DIRECTION));
                call.setControls(new HashSet<>(bundle.getIntegerArrayList(EXTRA_CONTROLS)));
@@ -207,6 +222,7 @@ class CallMetadataSyncData {
            bundle.putByteArray(EXTRA_APP_ICON, mAppIcon);
            bundle.putString(EXTRA_FACILITATOR_NAME, mFacilitator.getName());
            bundle.putString(EXTRA_FACILITATOR_ID, mFacilitator.getIdentifier());
            bundle.putString(EXTRA_FACILITATOR_EXT_ID, mFacilitator.getExtendedIdentifier());
            bundle.putInt(EXTRA_STATUS, mStatus);
            bundle.putInt(EXTRA_DIRECTION, mDirection);
            bundle.putIntegerArrayList(EXTRA_CONTROLS, new ArrayList<>(mControls));
+7 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ public class CrossDeviceCall {
    private final int mUserId;
    @VisibleForTesting boolean mIsEnterprise;
    private final String mCallingAppPackageName;
    private final String mSerializedPhoneAccountHandle;
    private String mCallingAppName;
    private byte[] mCallingAppIcon;
    private String mCallerDisplayName;
@@ -89,6 +90,8 @@ public class CrossDeviceCall {
                .equals(handle.getComponentName());
        mCallingAppPackageName = handle != null
                ? callDetails.getAccountHandle().getComponentName().getPackageName() : "";
        mSerializedPhoneAccountHandle = handle != null
                ? handle.getId() + SEPARATOR + handle.getComponentName().flattenToString() : "";
        mIsEnterprise = (callDetails.getCallProperties() & Call.Details.PROPERTY_ENTERPRISE_CALL)
                == Call.Details.PROPERTY_ENTERPRISE_CALL;
        final PackageManager packageManager = context.getPackageManager();
@@ -247,6 +250,10 @@ public class CrossDeviceCall {
        return mCallingAppPackageName;
    }

    public String getSerializedPhoneAccountHandle() {
        return mSerializedPhoneAccountHandle;
    }

    /**
     * Get a human-readable "caller id" to display as the origin of the call.
     *
+9 −1
Original line number Diff line number Diff line
@@ -280,7 +280,7 @@ public class CrossDeviceSyncController {
                    mCallFacilitators.add(
                            new CallMetadataSyncData.CallFacilitator(
                                    defaultOutgoingTelAccount.getLabel().toString(),
                                    FACILITATOR_ID_SYSTEM));
                                    FACILITATOR_ID_SYSTEM, FACILITATOR_ID_SYSTEM));
                }
            }
        }
@@ -574,6 +574,10 @@ public class CrossDeviceSyncController {
                case (int) Telecom.CallFacilitator.IDENTIFIER:
                    facilitator.setIdentifier(pis.readString(Telecom.CallFacilitator.IDENTIFIER));
                    break;
                case (int) Telecom.CallFacilitator.EXTENDED_IDENTIFIER:
                    facilitator.setExtendedIdentifier(
                            pis.readString(Telecom.CallFacilitator.EXTENDED_IDENTIFIER));
                    break;
                default:
                    Slog.e(TAG, "Unhandled field in Facilitator:"
                            + ProtoUtils.currentFieldToString(pis));
@@ -649,6 +653,8 @@ public class CrossDeviceSyncController {
            final long facilitatorToken = pos.start(Telecom.Call.Origin.FACILITATOR);
            pos.write(Telecom.CallFacilitator.NAME, call.getCallingAppName());
            pos.write(Telecom.CallFacilitator.IDENTIFIER, call.getCallingAppPackageName());
            pos.write(Telecom.CallFacilitator.EXTENDED_IDENTIFIER,
                    call.getSerializedPhoneAccountHandle());
            pos.end(facilitatorToken);
            pos.end(originToken);
            pos.write(Telecom.Call.STATUS, call.getStatus());
@@ -662,6 +668,8 @@ public class CrossDeviceSyncController {
            final long facilitatorsToken = pos.start(Telecom.FACILITATORS);
            pos.write(Telecom.CallFacilitator.NAME, facilitator.getName());
            pos.write(Telecom.CallFacilitator.IDENTIFIER, facilitator.getIdentifier());
            pos.write(Telecom.CallFacilitator.EXTENDED_IDENTIFIER,
                    facilitator.getExtendedIdentifier());
            pos.end(facilitatorsToken);
        }
        pos.end(telecomToken);
Loading