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