Fix issue #65055576: VoiceInteractionManagerService sets...

...VOICE_RECOGNITION_SERVICE that is needed for SearchSpeechServices

System setup was incorrectly completely runing off
VoiceInteractionManagerService if the associated feature is not set,
but the service needs to always be running, and instead rely on
the existing logic of reducing functionality if it should not be
running full voice interaction services.

Test: manually booted and ran
Bug: 65055576

Change-Id: I9a83216d45689440c71d657ba2721faf0662b0ff
This commit is contained in:
Dianne Hackborn
2017-08-30 16:21:28 -07:00
parent 61492c85ba
commit 31cb01d5dd
2 changed files with 17 additions and 10 deletions

View File

@@ -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");

View File

@@ -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) {