diff --git a/core/api/current.txt b/core/api/current.txt index 08387fc7033dc..6bcf0c62d5350 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -7039,6 +7039,7 @@ package android.app { public final class VoiceInteractor { method public android.app.VoiceInteractor.Request getActiveRequest(String); method public android.app.VoiceInteractor.Request[] getActiveRequests(); + method @NonNull public String getPackageName(); method public boolean isDestroyed(); method public void notifyDirectActionsChanged(); method public boolean registerOnDestroyedCallback(@NonNull java.util.concurrent.Executor, @NonNull Runnable); diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl index cc8b182f3e414..490afc13ee975 100644 --- a/core/java/android/app/IActivityTaskManager.aidl +++ b/core/java/android/app/IActivityTaskManager.aidl @@ -128,6 +128,7 @@ interface IActivityTaskManager { int callingUid, in Intent intent, in String resolvedType, in IVoiceInteractionSession session, in IVoiceInteractor interactor, int flags, in ProfilerInfo profilerInfo, in Bundle options, int userId); + String getVoiceInteractorPackageName(in IBinder callingVoiceInteractor); int startAssistantActivity(in String callingPackage, in String callingFeatureId, int callingPid, int callingUid, in Intent intent, in String resolvedType, in Bundle options, int userId); @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MANAGE_GAME_ACTIVITY)") diff --git a/core/java/android/app/VoiceInteractor.java b/core/java/android/app/VoiceInteractor.java index 433b275d4759c..7014d69635381 100644 --- a/core/java/android/app/VoiceInteractor.java +++ b/core/java/android/app/VoiceInteractor.java @@ -1168,6 +1168,23 @@ public final class VoiceInteractor { } } + /** + * @return the package name of the service providing the VoiceInteractionService. + */ + @NonNull + public String getPackageName() { + String packageName = null; + if (mActivity != null && mInteractor != null) { + try { + packageName = ActivityTaskManager.getService() + .getVoiceInteractorPackageName(mInteractor.asBinder()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + return packageName == null ? "" : packageName; + } + void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { String innerPrefix = prefix + " "; if (mActiveRequests.size() > 0) { diff --git a/core/java/android/service/voice/VoiceInteractionManagerInternal.java b/core/java/android/service/voice/VoiceInteractionManagerInternal.java index c80640910bc2b..b20dccc8adfac 100644 --- a/core/java/android/service/voice/VoiceInteractionManagerInternal.java +++ b/core/java/android/service/voice/VoiceInteractionManagerInternal.java @@ -49,6 +49,13 @@ public abstract class VoiceInteractionManagerInternal { */ public abstract boolean hasActiveSession(String packageName); + /** + * Returns the package name of the active session. + * + * @param callingVoiceInteractor the voice interactor binder from the calling VoiceInteractor. + */ + public abstract String getVoiceInteractorPackageName(IBinder callingVoiceInteractor); + /** * Gets the identity of the currently active HotwordDetectionService. * @@ -82,4 +89,4 @@ public abstract class VoiceInteractionManagerInternal { return mOwnerUid; } } -} \ No newline at end of file +} diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 580ab1798f539..9f8d0978ceea8 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -1694,6 +1694,12 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { .execute(); } + @Override + public String getVoiceInteractorPackageName(IBinder callingVoiceInteractor) { + return LocalServices.getService(VoiceInteractionManagerInternal.class) + .getVoiceInteractorPackageName(callingVoiceInteractor); + } + @Override public int startAssistantActivity(String callingPackage, @NonNull String callingFeatureId, int callingPid, int callingUid, Intent intent, String resolvedType, Bundle bOptions, diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java index 1285a84ea752c..8cbbe947d32d7 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java @@ -262,6 +262,25 @@ public class VoiceInteractionManagerService extends SystemService { return TextUtils.equals(packageName, session.mSessionComponentName.getPackageName()); } + @Override + public String getVoiceInteractorPackageName(IBinder callingVoiceInteractor) { + VoiceInteractionManagerServiceImpl impl = + VoiceInteractionManagerService.this.mServiceStub.mImpl; + if (impl == null) { + return null; + } + VoiceInteractionSessionConnection session = + impl.mActiveSession; + if (session == null) { + return null; + } + IVoiceInteractor voiceInteractor = session.mInteractor; + if (voiceInteractor == null || voiceInteractor.asBinder() != callingVoiceInteractor) { + return null; + } + return session.mSessionComponentName.getPackageName(); + } + @Override public HotwordDetectionServiceIdentity getHotwordDetectionServiceIdentity() { // IMPORTANT: This is called when performing permission checks; do not lock!