Issue #17551667: Voice interaction service should be disabled...
...by default on Svelte devices
Also make sure the voice_recognizers feature is not enabled on
low-ram devices, with a new facility for platform feature
declarations to say they should be ignored on low ram devices.
Change-Id: I833c04b12e0e566dd682ed20adb0985c677a696f
diff --git a/services/core/java/com/android/server/SystemConfig.java b/services/core/java/com/android/server/SystemConfig.java
index f4fb519..92fbc1e 100644
--- a/services/core/java/com/android/server/SystemConfig.java
+++ b/services/core/java/com/android/server/SystemConfig.java
@@ -16,6 +16,7 @@
package com.android.server;
+import android.app.ActivityManager;
import android.content.pm.FeatureInfo;
import android.os.*;
import android.os.Process;
@@ -177,6 +178,8 @@
return;
}
+ final boolean lowRam = ActivityManager.isLowRamDeviceStatic();
+
try {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(permReader);
@@ -276,10 +279,17 @@
} else if ("feature".equals(name)) {
String fname = parser.getAttributeValue(null, "name");
+ boolean allowed;
+ if (!lowRam) {
+ allowed = true;
+ } else {
+ String notLowRam = parser.getAttributeValue(null, "notLowRam");
+ allowed = !"true".equals(notLowRam);
+ }
if (fname == null) {
Slog.w(TAG, "<feature> without name at "
+ parser.getPositionDescription());
- } else {
+ } else if (allowed) {
//Log.i(TAG, "Got feature " + fname);
FeatureInfo fi = new FeatureInfo();
fi.name = fname;
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index 82b7f8b..f5d4867 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -136,11 +136,14 @@
Settings.Secure.VOICE_INTERACTION_SERVICE, userHandle);
ComponentName curRecognizer = getCurRecognizer(userHandle);
VoiceInteractionServiceInfo curInteractorInfo = null;
- if (curInteractorStr == null && curRecognizer != null) {
+ if (curInteractorStr == null && curRecognizer != null
+ && !ActivityManager.isLowRamDeviceStatic()) {
// If there is no interactor setting, that means we are upgrading
// from an older platform version. If the current recognizer is not
// set or matches the preferred recognizer, then we want to upgrade
// the user to have the default voice interaction service enabled.
+ // Note that we don't do this for low-RAM devices, since we aren't
+ // supporting voice interaction services there.
curInteractorInfo = findAvailInteractor(userHandle, curRecognizer);
if (curInteractorInfo != null) {
// Looks good! We'll apply this one. To make it happen, we clear the
@@ -150,6 +153,15 @@
}
}
+ // If we are on a svelte device, make sure an interactor is not currently
+ // enabled; if it is, turn it off.
+ if (ActivityManager.isLowRamDeviceStatic() && curInteractorStr != null) {
+ if (!TextUtils.isEmpty(curInteractorStr)) {
+ setCurInteractor(null, userHandle);
+ curInteractorStr = "";
+ }
+ }
+
if (curRecognizer != null) {
// If we already have at least a recognizer, then we probably want to
// leave things as they are... unless something has disappeared.
@@ -171,10 +183,11 @@
}
}
- // Initializing settings, look for an interactor first.
- if (curInteractorInfo == null) {
+ // Initializing settings, look for an interactor first (but only on non-svelte).
+ if (curInteractorInfo == null && !ActivityManager.isLowRamDeviceStatic()) {
curInteractorInfo = findAvailInteractor(userHandle, null);
}
+
if (curInteractorInfo != null) {
// Eventually it will be an error to not specify this.
setCurInteractor(new ComponentName(curInteractorInfo.getServiceInfo().packageName,