Merge "Companion InCallService API review"

This commit is contained in:
Shuo Qian
2021-03-01 16:46:36 +00:00
committed by Gerrit Code Review
4 changed files with 35 additions and 16 deletions

View File

@@ -38706,7 +38706,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);

View File

@@ -138,6 +138,24 @@ import java.util.List;
* }
* }
* }
*
* </pre>
* <p id="companionInCallService">
* <h3>Access to InCallService for Wearable Devices</h3>
* <ol>
* If your app is a third-party companion app and wants to access InCallService APIs, what your
* app could do are:
* <p>
* <ol>
* <li> Declare MANAGE_ONGOING_CALLS permission in your manifest
* <li> 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
* <li> Implement this InCallService with BIND_INCALL_SERVICE permission
* </ol>
* </ol>
* <p>
*
* </pre>
* <p id="incomingCallNotification">
* <h3>Showing the Incoming Call Notification</h3>

View File

@@ -1649,24 +1649,25 @@ 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() {
try {
if (isServiceConnected()) {
return getTelecomService().hasCompanionInCallServiceAccess(
public boolean hasManageOngoingCallsPermission() {
ITelecomService service = getTelecomService();
if (service != null) {
try {
return service.hasManageOngoingCallsPermission(
mContext.getOpPackageName());
}
} catch (RemoteException e) {
Log.e(TAG, "RemoteException calling hasCompanionInCallServiceAccess().", e);
if (!isSystemProcess()) {
e.rethrowAsRuntimeException();
} catch (RemoteException e) {
Log.e(TAG, "RemoteException calling hasManageOngoingCallsPermission().", e);
if (!isSystemProcess()) {
e.rethrowAsRuntimeException();
}
}
}
return false;

View File

@@ -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