From 20b5ad30d062ede5721a767fe011003b0e8f39d1 Mon Sep 17 00:00:00 2001 From: Christine Franks Date: Wed, 25 Jan 2023 15:21:28 -0800 Subject: [PATCH] Require syncing be enabled before storing calls Bug: 266740193 Test: atest CtsTelecomTestCases:android.telecom.cts.AdhocConferenceTest#testAddNewIncomingConferenceFailed --abi x86_64 Change-Id: I6cc7f3ccb954fc2224ebce780c3db4ad34b225c5 --- .../contextsync/CallMetadataSyncCallback.java | 2 ++ .../CallMetadataSyncInCallService.java | 33 ++++++++++++++++--- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncCallback.java b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncCallback.java index 56e777f046be9..7c339d2134835 100644 --- a/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncCallback.java +++ b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncCallback.java @@ -22,4 +22,6 @@ public abstract class CallMetadataSyncCallback { abstract void processCallControlAction(int crossDeviceCallId, int callControlAction); abstract void requestCrossDeviceSync(int userId); + + abstract void updateStatus(int userId, boolean shouldSyncCallMetadata); } diff --git a/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncInCallService.java b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncInCallService.java index 97e70a46de23a..ae4766ac9fda4 100644 --- a/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncInCallService.java +++ b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncInCallService.java @@ -39,6 +39,8 @@ public class CallMetadataSyncInCallService extends InCallService { @VisibleForTesting final Map mCurrentCalls = new HashMap<>(); + @VisibleForTesting + boolean mShouldSync; final Call.Callback mTelecomCallback = new Call.Callback() { @Override public void onDetailsChanged(Call call, Call.Details details) { @@ -92,12 +94,29 @@ public class CallMetadataSyncInCallService extends InCallService { @Override void requestCrossDeviceSync(int userId) { } + + @Override + void updateStatus(int userId, boolean shouldSyncCallMetadata) { + if (userId == getUserId()) { + mShouldSync = shouldSyncCallMetadata; + if (shouldSyncCallMetadata) { + initializeCalls(); + } else { + mCurrentCalls.clear(); + } + } + } }; @Override public void onCreate() { super.onCreate(); - if (CompanionDeviceConfig.isEnabled(CompanionDeviceConfig.ENABLE_CONTEXT_SYNC_TELECOM)) { + initializeCalls(); + } + + private void initializeCalls() { + if (CompanionDeviceConfig.isEnabled(CompanionDeviceConfig.ENABLE_CONTEXT_SYNC_TELECOM) + && mShouldSync) { mCurrentCalls.putAll(getCalls().stream().collect(Collectors.toMap(call -> call, call -> new CrossDeviceCall(getPackageManager(), call, getCallAudioState())))); } @@ -119,7 +138,8 @@ public class CallMetadataSyncInCallService extends InCallService { @Override public void onCallAdded(Call call) { - if (CompanionDeviceConfig.isEnabled(CompanionDeviceConfig.ENABLE_CONTEXT_SYNC_TELECOM)) { + if (CompanionDeviceConfig.isEnabled(CompanionDeviceConfig.ENABLE_CONTEXT_SYNC_TELECOM) + && mShouldSync) { mCurrentCalls.put(call, new CrossDeviceCall(getPackageManager(), call, getCallAudioState())); } @@ -127,21 +147,24 @@ public class CallMetadataSyncInCallService extends InCallService { @Override public void onCallRemoved(Call call) { - if (CompanionDeviceConfig.isEnabled(CompanionDeviceConfig.ENABLE_CONTEXT_SYNC_TELECOM)) { + if (CompanionDeviceConfig.isEnabled(CompanionDeviceConfig.ENABLE_CONTEXT_SYNC_TELECOM) + && mShouldSync) { mCurrentCalls.remove(call); } } @Override public void onMuteStateChanged(boolean isMuted) { - if (CompanionDeviceConfig.isEnabled(CompanionDeviceConfig.ENABLE_CONTEXT_SYNC_TELECOM)) { + if (CompanionDeviceConfig.isEnabled(CompanionDeviceConfig.ENABLE_CONTEXT_SYNC_TELECOM) + && mShouldSync) { mCurrentCalls.values().forEach(call -> call.updateMuted(isMuted)); } } @Override public void onSilenceRinger() { - if (CompanionDeviceConfig.isEnabled(CompanionDeviceConfig.ENABLE_CONTEXT_SYNC_TELECOM)) { + if (CompanionDeviceConfig.isEnabled(CompanionDeviceConfig.ENABLE_CONTEXT_SYNC_TELECOM) + && mShouldSync) { mCurrentCalls.values().forEach(call -> call.updateSilencedIfRinging()); } }