Loading services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +38 −5 Original line number Diff line number Diff line Loading @@ -1896,17 +1896,19 @@ public class VoiceInteractionManagerService extends SystemService { String serviceComponentName = serviceInfo.getComponentName() .flattenToShortString(); String serviceRecognizerName = new ComponentName(pkg, voiceInteractionServiceInfo.getRecognitionService()) .flattenToShortString(); if (voiceInteractionServiceInfo.getRecognitionService() == null) { Slog.e(TAG, "The RecognitionService must be set to avoid boot " + "loop on earlier platform version. Also make sure that this " + "is a valid RecognitionService when running on Android 11 " + "or earlier."); serviceComponentName = ""; } Settings.Secure.putStringForUser(getContext().getContentResolver(), Settings.Secure.ASSISTANT, serviceComponentName, userId); Settings.Secure.putStringForUser(getContext().getContentResolver(), Settings.Secure.VOICE_INTERACTION_SERVICE, serviceComponentName, userId); return; } Loading Loading @@ -1947,6 +1949,29 @@ public class VoiceInteractionManagerService extends SystemService { } } private void resetServicesIfNoRecognitionService(ComponentName serviceComponent, int userHandle) { for (ResolveInfo resolveInfo : queryInteractorServices(userHandle, serviceComponent.getPackageName())) { VoiceInteractionServiceInfo serviceInfo = new VoiceInteractionServiceInfo( mContext.getPackageManager(), resolveInfo.serviceInfo); if (!serviceInfo.getSupportsAssist()) { continue; } if (serviceInfo.getRecognitionService() == null) { Slog.e(TAG, "The RecognitionService must be set to " + "avoid boot loop on earlier platform version. " + "Also make sure that this is a valid " + "RecognitionService when running on Android 11 " + "or earlier."); setCurInteractor(null, userHandle); resetCurAssistant(userHandle); } } } PackageMonitor mPackageMonitor = new PackageMonitor() { @Override public boolean onHandleForceStop(Intent intent, String[] packages, int uid, boolean doit) { Loading Loading @@ -2090,6 +2115,7 @@ public class VoiceInteractionManagerService extends SystemService { change = isPackageAppearing(curInteractor.getPackageName()); if (change != PACKAGE_UNCHANGED) { resetServicesIfNoRecognitionService(curInteractor, userHandle); // If current interactor is now appearing, for any reason, then // restart our connection with it. if (mImpl != null && curInteractor.getPackageName().equals( Loading @@ -2112,6 +2138,13 @@ public class VoiceInteractionManagerService extends SystemService { initForUser(userHandle); return; } change = isPackageAppearing(curAssistant.getPackageName()); if (change != PACKAGE_UNCHANGED) { // It is possible to update Assistant without a voice interactor to one // with a voice-interactor. We should make sure the recognition service // is set to avoid boot loop. resetServicesIfNoRecognitionService(curAssistant, userHandle); } } // There is no interactor, so just deal with a simple recognizer. Loading Loading
services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +38 −5 Original line number Diff line number Diff line Loading @@ -1896,17 +1896,19 @@ public class VoiceInteractionManagerService extends SystemService { String serviceComponentName = serviceInfo.getComponentName() .flattenToShortString(); String serviceRecognizerName = new ComponentName(pkg, voiceInteractionServiceInfo.getRecognitionService()) .flattenToShortString(); if (voiceInteractionServiceInfo.getRecognitionService() == null) { Slog.e(TAG, "The RecognitionService must be set to avoid boot " + "loop on earlier platform version. Also make sure that this " + "is a valid RecognitionService when running on Android 11 " + "or earlier."); serviceComponentName = ""; } Settings.Secure.putStringForUser(getContext().getContentResolver(), Settings.Secure.ASSISTANT, serviceComponentName, userId); Settings.Secure.putStringForUser(getContext().getContentResolver(), Settings.Secure.VOICE_INTERACTION_SERVICE, serviceComponentName, userId); return; } Loading Loading @@ -1947,6 +1949,29 @@ public class VoiceInteractionManagerService extends SystemService { } } private void resetServicesIfNoRecognitionService(ComponentName serviceComponent, int userHandle) { for (ResolveInfo resolveInfo : queryInteractorServices(userHandle, serviceComponent.getPackageName())) { VoiceInteractionServiceInfo serviceInfo = new VoiceInteractionServiceInfo( mContext.getPackageManager(), resolveInfo.serviceInfo); if (!serviceInfo.getSupportsAssist()) { continue; } if (serviceInfo.getRecognitionService() == null) { Slog.e(TAG, "The RecognitionService must be set to " + "avoid boot loop on earlier platform version. " + "Also make sure that this is a valid " + "RecognitionService when running on Android 11 " + "or earlier."); setCurInteractor(null, userHandle); resetCurAssistant(userHandle); } } } PackageMonitor mPackageMonitor = new PackageMonitor() { @Override public boolean onHandleForceStop(Intent intent, String[] packages, int uid, boolean doit) { Loading Loading @@ -2090,6 +2115,7 @@ public class VoiceInteractionManagerService extends SystemService { change = isPackageAppearing(curInteractor.getPackageName()); if (change != PACKAGE_UNCHANGED) { resetServicesIfNoRecognitionService(curInteractor, userHandle); // If current interactor is now appearing, for any reason, then // restart our connection with it. if (mImpl != null && curInteractor.getPackageName().equals( Loading @@ -2112,6 +2138,13 @@ public class VoiceInteractionManagerService extends SystemService { initForUser(userHandle); return; } change = isPackageAppearing(curAssistant.getPackageName()); if (change != PACKAGE_UNCHANGED) { // It is possible to update Assistant without a voice interactor to one // with a voice-interactor. We should make sure the recognition service // is set to avoid boot loop. resetServicesIfNoRecognitionService(curAssistant, userHandle); } } // There is no interactor, so just deal with a simple recognizer. Loading