Merge "Add additional faciliator identifying information" into udc-dev

This commit is contained in:
TreeHugger Robot
2023-06-21 06:10:47 +00:00
committed by Android (Google) Code Review
8 changed files with 79 additions and 16 deletions

View File

@@ -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 {

View File

@@ -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());

View File

@@ -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));

View File

@@ -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.
*

View File

@@ -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);

View File

@@ -35,6 +35,7 @@ public class CallMetadataSyncDataTest {
final byte[] appIcon = "appIcon".getBytes();
final String appName = "appName";
final String appIdentifier = "com.google.test";
final String extendedId = "com.google.test/.InCallService";
final int status = 1;
final int direction = android.companion.Telecom.Call.OUTGOING;
final int control1 = 2;
@@ -43,7 +44,7 @@ public class CallMetadataSyncDataTest {
call.setCallerId(callerId);
call.setAppIcon(appIcon);
final CallMetadataSyncData.CallFacilitator callFacilitator =
new CallMetadataSyncData.CallFacilitator(appName, appIdentifier);
new CallMetadataSyncData.CallFacilitator(appName, appIdentifier, extendedId);
call.setFacilitator(callFacilitator);
call.setStatus(status);
call.setDirection(direction);
@@ -59,6 +60,8 @@ public class CallMetadataSyncDataTest {
assertThat(reconstructedCall.getAppIcon()).isEqualTo(appIcon);
assertThat(reconstructedCall.getFacilitator().getName()).isEqualTo(appName);
assertThat(reconstructedCall.getFacilitator().getIdentifier()).isEqualTo(appIdentifier);
assertThat(reconstructedCall.getFacilitator().getExtendedIdentifier())
.isEqualTo(extendedId);
assertThat(reconstructedCall.getStatus()).isEqualTo(status);
assertThat(reconstructedCall.getDirection()).isEqualTo(direction);
assertThat(reconstructedCall.getControls()).containsExactly(control1, control2);

View File

@@ -308,6 +308,18 @@ public class CrossDeviceCallTest {
.isEqualTo(CONTACT_DISPLAY_NAME);
}
@Test
public void getSerializedPhoneAccountHandle_serializesCorrectly() {
final CrossDeviceCall crossDeviceCall = new CrossDeviceCall(
InstrumentationRegistry.getTargetContext(),
mUninitializedCallDetails, /* callAudioState= */ null);
final String result = crossDeviceCall.getSerializedPhoneAccountHandle();
assertWithMessage("Wrong phone account handle serialization").that(result)
.isEqualTo("label::com.google.test/com.google.test.Activity");
}
private Call.Details createCallDetails(int state, int capabilities) {
return createCallDetails(state, capabilities, /* hasContactName= */ true);
}

View File

@@ -195,7 +195,8 @@ public class CrossDeviceSyncControllerTest {
new CrossDeviceSyncController.PhoneAccountManager(mMockContext);
final CallMetadataSyncData callMetadataSyncData = new CallMetadataSyncData();
callMetadataSyncData.addFacilitator(
new CallMetadataSyncData.CallFacilitator("name", "com.google.test"));
new CallMetadataSyncData.CallFacilitator("name", "com.google.test",
"com.google.test/.InCallService"));
phoneAccountManager.updateFacilitators(0, callMetadataSyncData);
phoneAccountManager.updateFacilitators(0, callMetadataSyncData);
verify(mMockTelecomManager, times(1)).registerPhoneAccount(any());
@@ -208,10 +209,12 @@ public class CrossDeviceSyncControllerTest {
new CrossDeviceSyncController.PhoneAccountManager(mMockContext);
final CallMetadataSyncData callMetadataSyncData = new CallMetadataSyncData();
callMetadataSyncData.addFacilitator(
new CallMetadataSyncData.CallFacilitator("name", "com.google.test"));
new CallMetadataSyncData.CallFacilitator("name", "com.google.test",
"com.google.test/.InCallService"));
phoneAccountManager.updateFacilitators(0, callMetadataSyncData);
callMetadataSyncData.addFacilitator(
new CallMetadataSyncData.CallFacilitator("name", "com.google.test2"));
new CallMetadataSyncData.CallFacilitator("name", "com.google.test2",
"com.google.test2/.InCallService"));
phoneAccountManager.updateFacilitators(0, callMetadataSyncData);
verify(mMockTelecomManager, times(2)).registerPhoneAccount(any());
verify(mMockTelecomManager, times(0)).unregisterPhoneAccount(any());
@@ -223,7 +226,8 @@ public class CrossDeviceSyncControllerTest {
new CrossDeviceSyncController.PhoneAccountManager(mMockContext);
final CallMetadataSyncData callMetadataSyncData = new CallMetadataSyncData();
callMetadataSyncData.addFacilitator(
new CallMetadataSyncData.CallFacilitator("name", "com.google.test"));
new CallMetadataSyncData.CallFacilitator("name", "com.google.test",
"com.google.test/.InCallService"));
phoneAccountManager.updateFacilitators(0, callMetadataSyncData);
final CallMetadataSyncData callMetadataSyncData2 = new CallMetadataSyncData();
phoneAccountManager.updateFacilitators(0, callMetadataSyncData2);
@@ -236,7 +240,9 @@ public class CrossDeviceSyncControllerTest {
final CallMetadataSyncData.Call call = new CallMetadataSyncData.Call();
call.setId("123abc");
call.setDirection(android.companion.Telecom.Call.INCOMING);
call.setFacilitator(new CallMetadataSyncData.CallFacilitator("name", "com.android.test"));
call.setFacilitator(
new CallMetadataSyncData.CallFacilitator("name", "com.google.test",
"com.google.test/.InCallService"));
final CallMetadataSyncData callMetadataSyncData = new CallMetadataSyncData();
callMetadataSyncData.addCall(call);
final CrossDeviceSyncController.CallManager callManager =
@@ -252,7 +258,9 @@ public class CrossDeviceSyncControllerTest {
final CallMetadataSyncData.Call call = new CallMetadataSyncData.Call();
call.setId("123abc");
call.setDirection(android.companion.Telecom.Call.OUTGOING);
call.setFacilitator(new CallMetadataSyncData.CallFacilitator("name", "com.android.test"));
call.setFacilitator(
new CallMetadataSyncData.CallFacilitator("name", "com.google.test",
"com.google.test/.InCallService"));
call.setCallerId("555-555-5555");
final CallMetadataSyncData callMetadataSyncData = new CallMetadataSyncData();
callMetadataSyncData.addCall(call);
@@ -269,7 +277,9 @@ public class CrossDeviceSyncControllerTest {
final CallMetadataSyncData.Call call = new CallMetadataSyncData.Call();
call.setId("123abc");
call.setDirection(android.companion.Telecom.Call.OUTGOING);
call.setFacilitator(new CallMetadataSyncData.CallFacilitator("name", "com.android.test"));
call.setFacilitator(
new CallMetadataSyncData.CallFacilitator("name", "com.google.test",
"com.google.test/.InCallService"));
final CallMetadataSyncData callMetadataSyncData = new CallMetadataSyncData();
callMetadataSyncData.addCall(call);
final CrossDeviceSyncController.CallManager callManager =
@@ -316,7 +326,8 @@ public class CrossDeviceSyncControllerTest {
final CallMetadataSyncData.Call call = new CallMetadataSyncData.Call();
call.setId("123abc::originalId");
call.setDirection(android.companion.Telecom.Call.INCOMING);
call.setFacilitator(new CallMetadataSyncData.CallFacilitator("name", "com.android.test"));
call.setFacilitator(new CallMetadataSyncData.CallFacilitator("name", "com.google.test",
"com.google.test/.InCallService"));
final CallMetadataSyncData callMetadataSyncData = new CallMetadataSyncData();
callMetadataSyncData.addCall(call);
final CrossDeviceSyncController.CallManager callManager =
@@ -334,7 +345,8 @@ public class CrossDeviceSyncControllerTest {
final CallMetadataSyncData.Call call = new CallMetadataSyncData.Call();
call.setId("123abc::originalId");
call.setDirection(android.companion.Telecom.Call.OUTGOING);
call.setFacilitator(new CallMetadataSyncData.CallFacilitator("name", "com.android.test"));
call.setFacilitator(new CallMetadataSyncData.CallFacilitator("name", "com.google.test",
"com.google.test/.InCallService"));
call.setCallerId("555-555-5555");
final CallMetadataSyncData callMetadataSyncData = new CallMetadataSyncData();
callMetadataSyncData.addCall(call);
@@ -352,7 +364,8 @@ public class CrossDeviceSyncControllerTest {
final CallMetadataSyncData.Call call = new CallMetadataSyncData.Call();
call.setId("123abc");
call.setDirection(android.companion.Telecom.Call.INCOMING);
call.setFacilitator(new CallMetadataSyncData.CallFacilitator("name", "com.android.test"));
call.setFacilitator(new CallMetadataSyncData.CallFacilitator("name", "com.google.test",
"com.google.test/.InCallService"));
final CallMetadataSyncData callMetadataSyncData = new CallMetadataSyncData();
callMetadataSyncData.addCall(call);
final CrossDeviceSyncController.CallManager callManager =
@@ -369,7 +382,8 @@ public class CrossDeviceSyncControllerTest {
final CallMetadataSyncData.Call call = new CallMetadataSyncData.Call();
call.setId("123abc");
call.setDirection(android.companion.Telecom.Call.OUTGOING);
call.setFacilitator(new CallMetadataSyncData.CallFacilitator("name", "com.android.test"));
call.setFacilitator(new CallMetadataSyncData.CallFacilitator("name", "com.google.test",
"com.google.test/.InCallService"));
call.setCallerId("555-555-5555");
final CallMetadataSyncData callMetadataSyncData = new CallMetadataSyncData();
callMetadataSyncData.addCall(call);