From 50cabe923db39bcd74049c7df7d49dd9885098ba Mon Sep 17 00:00:00 2001 From: Ahaan Ugale Date: Mon, 8 Feb 2021 21:15:44 -0800 Subject: [PATCH 1/2] VIMS: Decouple recognizer from interactor in initForUser(). When initializing settings for a user, set the recognizer independently of the interactor. This will allow the default recognizer to be provided by a different package from the interactor. There should be no change to how the interactor is set. Bug: 167597525 Test: manual Test: atest CtsVoiceInteractionTestCases Change-Id: I2da8f72c768b27df21534e265a3d1fb6919c7140 --- .../VoiceInteractionManagerService.java | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java index f687e4bb9567c..954b05c561d29 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java @@ -430,25 +430,17 @@ public class VoiceInteractionManagerService extends SystemService { // Eventually it will be an error to not specify this. setCurInteractor(new ComponentName(curInteractorInfo.getServiceInfo().packageName, curInteractorInfo.getServiceInfo().name), userHandle); - if (curInteractorInfo.getRecognitionService() != null) { - setCurRecognizer( - new ComponentName(curInteractorInfo.getServiceInfo().packageName, - curInteractorInfo.getRecognitionService()), userHandle); - return; - } + } else { + // No voice interactor, so clear the setting. + setCurInteractor(null, userHandle); } - // No voice interactor, we'll just set up a simple recognizer. - initSimpleRecognizer(curInteractorInfo, userHandle); + initRecognizer(userHandle); } - public void initSimpleRecognizer(VoiceInteractionServiceInfo curInteractorInfo, - int userHandle) { + public void initRecognizer(int userHandle) { ComponentName curRecognizer = findAvailRecognizer(null, userHandle); if (curRecognizer != null) { - if (curInteractorInfo == null) { - setCurInteractor(null, userHandle); - } setCurRecognizer(curRecognizer, userHandle); } } @@ -1772,7 +1764,9 @@ public class VoiceInteractionManagerService extends SystemService { synchronized (VoiceInteractionManagerServiceStub.this) { Slog.i(TAG, "Force stopping current voice recognizer: " + getCurRecognizer(userHandle)); - initSimpleRecognizer(null, userHandle); + // TODO: Figure out why the interactor was being cleared and document it. + setCurInteractor(null, userHandle); + initRecognizer(userHandle); } } return hitInt || hitRec; @@ -1843,10 +1837,7 @@ public class VoiceInteractionManagerService extends SystemService { if (curRecognizer == null) { // Could a new recognizer appear when we don't have one pre-installed? if (anyPackagesAppearing()) { - curRecognizer = findAvailRecognizer(null, userHandle); - if (curRecognizer != null) { - setCurRecognizer(curRecognizer, userHandle); - } + initRecognizer(userHandle); } return; } From de203c37c35677c631e2a8b77a7d4188ec4ea9cb Mon Sep 17 00:00:00 2001 From: Ahaan Ugale Date: Mon, 8 Feb 2021 21:21:29 -0800 Subject: [PATCH 2/2] VIMS: Decouple recognizer init from interactor in PackageMonitor. On package modification, set the recognizer independently of the interactor. This will allow keeping the default recognizer provider a different package from the interactor. There should be no change to how the interactor is set. Bug: 167597525 Test: manual Test: atest CtsVoiceInteractionTestCases Change-Id: Ib24f077365cbb0850c61196c2825737db1c1c090 --- .../voiceinteraction/VoiceInteractionManagerService.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java index 954b05c561d29..76698833a9131 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java @@ -1787,6 +1787,9 @@ public class VoiceInteractionManagerService extends SystemService { if (isPackageAppearing(pkgName) != PACKAGE_UNCHANGED) { return; } + if (getCurRecognizer(mCurUser) == null) { + initRecognizer(mCurUser); + } final String curInteractorStr = Settings.Secure.getStringForUser( mContext.getContentResolver(), Settings.Secure.VOICE_INTERACTION_SERVICE, mCurUser); @@ -1801,12 +1804,6 @@ public class VoiceInteractionManagerService extends SystemService { availInteractorInfo.getServiceInfo().packageName, availInteractorInfo.getServiceInfo().name); setCurInteractor(availInteractor, mCurUser); - if (getCurRecognizer(mCurUser) == null && - availInteractorInfo.getRecognitionService() != null) { - setCurRecognizer(new ComponentName( - availInteractorInfo.getServiceInfo().packageName, - availInteractorInfo.getRecognitionService()), mCurUser); - } } } else { if (didSomePackagesChange()) {