From 05a124901c065e3cb1edeb5c846fd9048c9a6dce Mon Sep 17 00:00:00 2001 From: Christine Franks Date: Fri, 16 Dec 2022 11:41:33 -0800 Subject: [PATCH] Set up cross-device InCallService Bug: 261885804 Test: atest FrameworksServicesTests:com.android.server.companion.datatransfer.contextsync Change-Id: I3e7501536fb20bb96fd2798c186e3dfa2a4f67fa --- core/res/AndroidManifest.xml | 8 ++ .../CallMetadataSyncInCallService.java | 75 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncInCallService.java diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 83fbbcb44d546..5347c5b73ae92 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -7424,6 +7424,14 @@ android:permission="android.permission.BIND_JOB_SERVICE" > + + + + + + mCurrentCalls = new HashSet<>(); + + @Override + public void onCreate() { + super.onCreate(); + mCurrentCalls.addAll(getCalls().stream().map(CrossDeviceCall::new).toList()); + } + + @Override + public void onCallAdded(Call call) { + onCallAdded(new CrossDeviceCall(call)); + } + + @VisibleForTesting + void onCallAdded(CrossDeviceCall call) { + mCurrentCalls.add(call); + } + + @Override + public void onCallRemoved(Call call) { + mCurrentCalls.removeIf(crossDeviceCall -> crossDeviceCall.getCall().equals(call)); + } + + /** Data holder for a telecom call and additional metadata. */ + public static final class CrossDeviceCall { + private static final AtomicLong sNextId = new AtomicLong(1); + + private final Call mCall; + private final long mId; + + public CrossDeviceCall(Call call) { + mCall = call; + mId = sNextId.getAndIncrement(); + } + + public Call getCall() { + return mCall; + } + + public long getId() { + return mId; + } + } +}