diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 221b9b4c815ed..c828accdf031c 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -1331,11 +1331,13 @@ public final class SystemServer { traceEnd(); } - if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_VOICE_RECOGNIZERS)) { - traceBeginAndSlog("StartVoiceRecognitionManager"); - mSystemServiceManager.startService(VOICE_RECOGNITION_MANAGER_SERVICE_CLASS); - traceEnd(); - } + // We need to always start this service, regardless of whether the + // FEATURE_VOICE_RECOGNIZERS feature is set, because it needs to take care + // of initializing various settings. It will internally modify its behavior + // based on that feature. + traceBeginAndSlog("StartVoiceRecognitionManager"); + mSystemServiceManager.startService(VOICE_RECOGNITION_MANAGER_SERVICE_CLASS); + traceEnd(); if (GestureLauncherService.isGestureLauncherEnabled(context.getResources())) { traceBeginAndSlog("StartGestureLauncher"); diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java index 4ffacfd7056aa..1569ac32128be 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java @@ -183,7 +183,7 @@ public class VoiceInteractionManagerService extends SystemService { private final boolean mEnableService; VoiceInteractionManagerServiceStub() { - mEnableService = shouldEnableService(mContext.getResources()); + mEnableService = shouldEnableService(mContext); } // TODO: VI Make sure the caller is the current user or profile @@ -348,10 +348,15 @@ public class VoiceInteractionManagerService extends SystemService { } } - private boolean shouldEnableService(Resources res) { - // VoiceInteractionService should not be enabled on low ram devices unless it has the config flag. - return !ActivityManager.isLowRamDeviceStatic() || - getForceVoiceInteractionServicePackage(res) != null; + private boolean shouldEnableService(Context context) { + // VoiceInteractionService should not be enabled on any low RAM devices + // or devices that have not declared the recognition feature, unless the + // device's configuration has explicitly set the config flag for a fixed + // voice interaction service. + return (!ActivityManager.isLowRamDeviceStatic() + && context.getPackageManager().hasSystemFeature( + PackageManager.FEATURE_VOICE_RECOGNIZERS)) || + getForceVoiceInteractionServicePackage(context.getResources()) != null; } private String getForceVoiceInteractionServicePackage(Resources res) {