From b22697f14c763724f1c82d2c3b33c720cdb9cb25 Mon Sep 17 00:00:00 2001 From: Christine Franks Date: Mon, 1 May 2023 11:45:25 -0700 Subject: [PATCH] Add PhoneAccounts on boot completed The accounts aren't ready earlier Bug: 265466098 Test: atest FrameworksServicesTests:com.android.server.companion.datatransfer.contextsync Change-Id: I9049c9af05b3f7d585c79b6a8a09b5e6c24f028f --- .../CompanionDeviceManagerService.java | 1 + .../CrossDeviceSyncController.java | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java index 7975e49541a06..ed61d645dc6e2 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java @@ -306,6 +306,7 @@ public class CompanionDeviceManagerService extends SystemService { } else if (phase == PHASE_BOOT_COMPLETED) { // Run the Inactive Association Removal job service daily. InactiveAssociationsRemovalService.schedule(getContext()); + mCrossDeviceSyncController.onBootCompleted(); } } diff --git a/services/companion/java/com/android/server/companion/datatransfer/contextsync/CrossDeviceSyncController.java b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CrossDeviceSyncController.java index 937d7fed35429..8c6ff86d6d63b 100644 --- a/services/companion/java/com/android/server/companion/datatransfer/contextsync/CrossDeviceSyncController.java +++ b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CrossDeviceSyncController.java @@ -146,6 +146,31 @@ public class CrossDeviceSyncController { mPhoneAccountManager = new PhoneAccountManager(mContext); } + /** Invoke set-up tasks that happen when boot is completed. */ + public void onBootCompleted() { + if (!CompanionDeviceConfig.isEnabled(CompanionDeviceConfig.ENABLE_CONTEXT_SYNC_TELECOM)) { + return; + } + + mPhoneAccountManager.onBootCompleted(); + + final TelecomManager telecomManager = mContext.getSystemService(TelecomManager.class); + if (telecomManager.getCallCapablePhoneAccounts().size() != 0) { + final PhoneAccountHandle defaultOutgoingTelAccountHandle = + telecomManager.getDefaultOutgoingPhoneAccount(PhoneAccount.SCHEME_TEL); + if (defaultOutgoingTelAccountHandle != null) { + final PhoneAccount defaultOutgoingTelAccount = telecomManager.getPhoneAccount( + defaultOutgoingTelAccountHandle); + if (defaultOutgoingTelAccount != null) { + mCallFacilitators.add( + new CallMetadataSyncData.CallFacilitator( + defaultOutgoingTelAccount.getLabel().toString(), + FACILITATOR_ID_SYSTEM)); + } + } + } + } + private void processCallCreateRequests(int associationId, CallMetadataSyncData callMetadataSyncData) { final Iterator iterator = @@ -546,6 +571,10 @@ public class CrossDeviceSyncController { CallMetadataSyncConnectionService.class); } + void onBootCompleted() { + mTelecomManager.clearPhoneAccounts(); + } + PhoneAccountHandle getPhoneAccountHandle(int associationId, String appIdentifier) { return mPhoneAccountHandles.get( new PhoneAccountHandleIdentifier(associationId, appIdentifier));