OSDN Git Service

Properly set default voice interactor
authorSvetoslav Ganov <svetoslavganov@google.com>
Thu, 2 Jun 2016 22:25:12 +0000 (15:25 -0700)
committerSvetoslav Ganov <svetoslavganov@google.com>
Thu, 2 Jun 2016 22:25:15 +0000 (15:25 -0700)
We need to figure out the default voice interactor to give
it default permissions. This happens before the user has
been unlocked and if the voice interactor is not direct
boot aware we fail to find it, hence no permissions are
granted. Now we query the package manager for both direct
boot aware and unaware components. This is fine as we
don't interact with the assistant until the user is
unlocked.

bug:28963642

Change-Id: Ide5471fa1798e868c6e3a4b5e87570a5556e2d3f

core/java/android/service/voice/VoiceInteractionServiceInfo.java
services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java

index a9db32b..e1a9a05 100644 (file)
@@ -61,7 +61,11 @@ public class VoiceInteractionServiceInfo {
             throws PackageManager.NameNotFoundException {
         try {
             ServiceInfo si = AppGlobals.getPackageManager().getServiceInfo(comp,
-                    PackageManager.GET_META_DATA, userHandle);
+                    PackageManager.GET_META_DATA
+                            | PackageManager.MATCH_DIRECT_BOOT_AWARE
+                            | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
+                            | PackageManager.MATCH_DEBUG_TRIAGED_MISSING,
+                    userHandle);
             if (si != null) {
                 return si;
             }
index 51f5899..23c58fe 100644 (file)
@@ -19,7 +19,6 @@ package com.android.server.voiceinteraction;
 import android.Manifest;
 import android.app.ActivityManager;
 import android.app.ActivityManagerInternal;
-import android.app.ActivityManagerNative;
 import android.app.AppGlobals;
 import android.content.ComponentName;
 import android.content.ContentResolver;
@@ -415,7 +414,10 @@ public class VoiceInteractionManagerService extends SystemService {
         VoiceInteractionServiceInfo findAvailInteractor(int userHandle, String packageName) {
             List<ResolveInfo> available =
                     mContext.getPackageManager().queryIntentServicesAsUser(
-                            new Intent(VoiceInteractionService.SERVICE_INTERFACE), 0, userHandle);
+                            new Intent(VoiceInteractionService.SERVICE_INTERFACE),
+                            PackageManager.MATCH_DIRECT_BOOT_AWARE
+                                    | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
+                                    | PackageManager.MATCH_DEBUG_TRIAGED_MISSING, userHandle);
             int numAvailable = available.size();
 
             if (numAvailable == 0) {