Introduce hasCompanionInCallServiceAccess API

It retruns whether the caller has InCallService access for the companion
 apps. A companion app is an app associated with a physical wearable
 device via the {@link android.companion.CompanionDeviceManager} API.

Test: cts
Bug: 169595473
Change-Id: Id659bfae8556e965d3c31613848bde808f28a858
Merged-In: Id659bfae8556e965d3c31613848bde808f28a858
(cherry picked from commit 4d0652699a)
This commit is contained in:
sqian
2020-11-11 00:45:46 +00:00
parent f501120399
commit dfb7ca01a8
4 changed files with 36 additions and 0 deletions

View File

@@ -46296,6 +46296,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 @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

@@ -44464,6 +44464,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 @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

@@ -32,6 +32,7 @@ import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
@@ -1588,6 +1589,30 @@ public class TelecomManager {
return false;
}
/**
* 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.
*
* @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(
mContext.getOpPackageName());
}
} catch (RemoteException e) {
Log.e(TAG, "RemoteException calling hasCompanionInCallServiceAccess().", e);
if (!isSystemProcess()) {
e.rethrowAsRuntimeException();
}
}
return false;
}
/**
* Returns whether there is an ongoing call originating from a managed
* {@link ConnectionService}. An ongoing call can be in dialing, ringing, active or holding
@@ -2384,6 +2409,10 @@ public class TelecomManager {
}
}
private boolean isSystemProcess() {
return Process.myUid() == Process.SYSTEM_UID;
}
private ITelecomService getTelecomService() {
if (mTelecomServiceOverride != null) {
return mTelecomServiceOverride;

View File

@@ -178,6 +178,11 @@ interface ITelecomService {
*/
boolean isInCall(String callingPackage, String callingFeatureId);
/**
* @see TelecomServiceImpl#hasCompanionInCallServiceAccess
*/
boolean hasCompanionInCallServiceAccess(String callingPackage);
/**
* @see TelecomServiceImpl#isInManagedCall
*/