From 93273fd60d13a44b9b64dd430bebba1855df525a Mon Sep 17 00:00:00 2001 From: Shuo Qian Date: Wed, 10 Feb 2021 15:12:09 -0800 Subject: [PATCH] Companion InCallService API review Test: atest; make docs Bug: 179116441 Change-Id: Id75e727f6c3fc42132a80f7258bf790be79acf19 Merged-In: Id75e727f6c3fc42132a80f7258bf790be79acf19 --- core/api/current.txt | 2 +- .../java/android/telecom/InCallService.java | 18 ++++++++++++++++++ .../java/android/telecom/TelecomManager.java | 14 +++++++------- .../internal/telecom/ITelecomService.aidl | 4 ++-- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/core/api/current.txt b/core/api/current.txt index 8d8ab5754beb3..e3a28fc09aa3f 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -40249,7 +40249,7 @@ package android.telecom { method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailNumber(android.telecom.PhoneAccountHandle); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handleMmi(String); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handleMmi(String, android.telecom.PhoneAccountHandle); - method public boolean hasCompanionInCallServiceAccess(); + method public boolean hasManageOngoingCallsPermission(); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isInCall(); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isInManagedCall(); method public boolean isIncomingCallPermitted(android.telecom.PhoneAccountHandle); diff --git a/telecomm/java/android/telecom/InCallService.java b/telecomm/java/android/telecom/InCallService.java index 5cf8de8f90785..f20ee7e56d059 100644 --- a/telecomm/java/android/telecom/InCallService.java +++ b/telecomm/java/android/telecom/InCallService.java @@ -138,6 +138,24 @@ import java.util.List; * } * } * } + * + * + *

+ *

Access to InCallService for Wearable Devices

+ *
    + * If your app is a third-party companion app and wants to access InCallService APIs, what your + * app could do are: + *

    + *

      + *
    1. Declare MANAGE_ONGOING_CALLS permission in your manifest + *
    2. Associate with a physical wearable device via the + * {@link android.companion.CompanionDeviceManager} API as a companion app. See: + * https://developer.android.com/guide/topics/connectivity/companion-device-pairing + *
    3. Implement this InCallService with BIND_INCALL_SERVICE permission + *
    + *
+ *

+ * * *

*

Showing the Incoming Call Notification

diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index 472d63946ebc7..17749e8b0a8fc 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -1702,22 +1702,22 @@ public class TelecomManager { } /** - * Returns whether the caller has {@link InCallService} access for companion apps. - * - * A companion app is an app associated with a physical wearable device via the - * {@link android.companion.CompanionDeviceManager} API. + * Returns whether the caller has {@link android.Manifest.permission#MANAGE_ONGOING_CALLS} + * permission. The permission can be obtained by associating with a physical wearable device + * via the {@link android.companion.CompanionDeviceManager} API as a companion app. If the + * caller app has the permission, it has {@link InCallService} access to manage ongoing calls. * * @return {@code true} if the caller has {@link InCallService} access for * companion app; {@code false} otherwise. */ - public boolean hasCompanionInCallServiceAccess() { + public boolean hasManageOngoingCallsPermission() { ITelecomService service = getTelecomService(); if (service != null) { try { - return service.hasCompanionInCallServiceAccess( + return service.hasManageOngoingCallsPermission( mContext.getOpPackageName()); } catch (RemoteException e) { - Log.e(TAG, "RemoteException calling hasCompanionInCallServiceAccess().", e); + Log.e(TAG, "RemoteException calling hasManageOngoingCallsPermission().", e); if (!isSystemProcess()) { e.rethrowAsRuntimeException(); } diff --git a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl index 88ef1b09f6b1f..eb106b50f69de 100644 --- a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl +++ b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl @@ -179,9 +179,9 @@ interface ITelecomService { boolean isInCall(String callingPackage, String callingFeatureId); /** - * @see TelecomServiceImpl#hasCompanionInCallServiceAccess + * @see TelecomServiceImpl#hasManageOngoingCallsPermission */ - boolean hasCompanionInCallServiceAccess(String callingPackage); + boolean hasManageOngoingCallsPermission(String callingPackage); /** * @see TelecomServiceImpl#isInManagedCall