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;
+ }
+ }
+}