diff options
4 files changed, 30 insertions, 12 deletions
diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java index d7efa91fb28b..eb1666d5a918 100644 --- a/core/java/android/app/ActivityManagerInternal.java +++ b/core/java/android/app/ActivityManagerInternal.java @@ -261,6 +261,11 @@ public abstract class ActivityManagerInternal { public abstract void notifyNetworkPolicyRulesUpdated(int uid, long procStateSeq); /** + * Called after the voice interaction service has changed. + */ + public abstract void notifyActiveVoiceInteractionServiceChanged(ComponentName component); + + /** * Called after virtual display Id is updated by * {@link com.android.server.vr.Vr2dDisplay} with a specific * {@param vr2dDisplayId}. diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 5d6cf749bd1c..119ec77d7873 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -250,7 +250,6 @@ import android.app.assist.AssistStructure; import android.app.backup.IBackupManager; import android.app.servertransaction.ConfigurationChangeItem; import android.app.usage.UsageEvents; -import android.app.usage.UsageStats; import android.app.usage.UsageStatsManagerInternal; import android.appwidget.AppWidgetManager; import android.content.ActivityNotFoundException; @@ -628,7 +627,13 @@ public class ActivityManagerService extends IActivityManager.Stub /** All system services */ SystemServiceManager mSystemServiceManager; - AssistUtils mAssistUtils; + + // Wrapper around VoiceInteractionServiceManager + private AssistUtils mAssistUtils; + + // Keeps track of the active voice interaction service component, notified from + // VoiceInteractionManagerService + ComponentName mActiveVoiceInteractionServiceComponent; private Installer mInstaller; @@ -24392,6 +24397,13 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @Override + public void notifyActiveVoiceInteractionServiceChanged(ComponentName component) { + synchronized (ActivityManagerService.this) { + mActiveVoiceInteractionServiceComponent = component; + } + } + /** * Called after virtual display Id is updated by * {@link com.android.server.vr.Vr2dDisplay} with a specific diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index 60a623677825..d42c5de910cb 100644 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -1050,11 +1050,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo * @return whether the given package name can launch an assist activity. */ private boolean canLaunchAssistActivity(String packageName) { - if (service.mAssistUtils == null) { - return false; - } - - final ComponentName assistComponent = service.mAssistUtils.getActiveServiceComponentName(); + final ComponentName assistComponent = service.mActiveVoiceInteractionServiceComponent; if (assistComponent != null) { return assistComponent.getPackageName().equals(packageName); } diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java index 2d93da9fa9fa..c0685f927398 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java @@ -75,7 +75,6 @@ import com.android.server.soundtrigger.SoundTriggerInternal; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.List; -import java.util.TreeSet; /** * SystemService that publishes an IVoiceInteractionManagerService. @@ -442,11 +441,11 @@ public class VoiceInteractionManagerService extends SystemService { mImpl.shutdownLocked(); } if (hasComponent) { - mImpl = new VoiceInteractionManagerServiceImpl(mContext, - UiThread.getHandler(), this, mCurUser, serviceComponent); + setImplLocked(new VoiceInteractionManagerServiceImpl(mContext, + UiThread.getHandler(), this, mCurUser, serviceComponent)); mImpl.startLocked(); } else { - mImpl = null; + setImplLocked(null); } } } @@ -1177,6 +1176,12 @@ public class VoiceInteractionManagerService extends SystemService { } } + private void setImplLocked(VoiceInteractionManagerServiceImpl impl) { + mImpl = impl; + mAmInternal.notifyActiveVoiceInteractionServiceChanged( + getActiveServiceComponentName()); + } + class SettingsObserver extends ContentObserver { SettingsObserver(Handler handler) { super(handler); @@ -1219,7 +1224,7 @@ public class VoiceInteractionManagerService extends SystemService { unloadAllKeyphraseModels(); if (mImpl != null) { mImpl.shutdownLocked(); - mImpl = null; + setImplLocked(null); } setCurInteractor(null, userHandle); setCurRecognizer(null, userHandle); |