Move public consts to HotwordRecognitionService
- The HotwordRecognitionService is the only public component of
Hotword recognition allowing others to implement hotword recognition
- The client API is not available for use by all, hence the consts need
to be moved to the service class.
- Ideally we'd have retained the public consts in the client side API
(HotwordRecognizer)
Change-Id: Ibd0d1c0d0514ec4e8f7c284e22c5fa6b7ef3df26
diff --git a/api/current.txt b/api/current.txt
index 4e17144e..ed1cd7b 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -22805,6 +22805,15 @@
method public android.os.IBinder onBind(android.content.Intent);
method public abstract void onStartHotwordRecognition(android.speech.hotword.HotwordRecognitionService.Callback);
method public abstract void onStopHotwordRecognition();
+ field public static final int ERROR_AUDIO = 1; // 0x1
+ field public static final int ERROR_CLIENT = 4; // 0x4
+ field public static final int ERROR_FAILED = 3; // 0x3
+ field public static final int ERROR_RECOGNIZER_BUSY = 2; // 0x2
+ field public static final int ERROR_SERVICE_ALREADY_STARTED = 6; // 0x6
+ field public static final int ERROR_TIMEOUT = 5; // 0x5
+ field public static final int ERROR_UNAVAILABLE = 7; // 0x7
+ field public static final int EVENT_TYPE_PROMPT_CHANGED = 1; // 0x1
+ field public static final java.lang.String KEY_PROMPT_TEXT = "prompt_text";
field public static final java.lang.String SERVICE_INTERFACE = "android.speech.hotword.HotwordRecognitionService";
}
diff --git a/core/java/android/speech/hotword/HotwordRecognitionService.java b/core/java/android/speech/hotword/HotwordRecognitionService.java
index 7a26e0c..9a59f19 100644
--- a/core/java/android/speech/hotword/HotwordRecognitionService.java
+++ b/core/java/android/speech/hotword/HotwordRecognitionService.java
@@ -47,6 +47,39 @@
/** Debugging flag */
private static final boolean DBG = false;
+ /**
+ * Key used to retrieve a string to be displayed to the user passed to the
+ * {@link android.speech.hotword.HotwordRecognitionListener#onHotwordEvent(int, Bundle)} method.
+ */
+ public static final String KEY_PROMPT_TEXT = "prompt_text";
+
+ /**
+ * Event type used to indicate to the user that the prompt for
+ * hotword recognition has changed.
+ */
+ public static final int EVENT_TYPE_PROMPT_CHANGED = 1;
+
+ /** Audio recording error. */
+ public static final int ERROR_AUDIO = 1;
+
+ /** RecognitionService busy. */
+ public static final int ERROR_RECOGNIZER_BUSY = 2;
+
+ /** This indicates a permanent failure and the clients shouldn't retry on this */
+ public static final int ERROR_FAILED = 3;
+
+ /** Client-side errors */
+ public static final int ERROR_CLIENT = 4;
+
+ /** The service timed out */
+ public static final int ERROR_TIMEOUT = 5;
+
+ /** The service received concurrent start calls */
+ public static final int ERROR_SERVICE_ALREADY_STARTED = 6;
+
+ /** Hotword recognition is unavailable on the device */
+ public static final int ERROR_UNAVAILABLE = 7;
+
private static final int MSG_START_RECOGNITION = 1;
private static final int MSG_STOP_RECOGNITION = 2;
@@ -94,7 +127,7 @@
HotwordRecognitionService.this.onStartHotwordRecognition(mCurrentCallback);
} else {
try {
- listener.onHotwordError(HotwordRecognizer.ERROR_RECOGNIZER_BUSY);
+ listener.onHotwordError(ERROR_RECOGNIZER_BUSY);
} catch (RemoteException e) {
if (DBG) Log.d(TAG, "onError call from startRecognition failed");
}
@@ -105,10 +138,10 @@
private void dispatchStopRecognition(IHotwordRecognitionListener listener) {
try {
if (mCurrentCallback == null) {
- listener.onHotwordError(HotwordRecognizer.ERROR_CLIENT);
+ listener.onHotwordError(ERROR_CLIENT);
Log.w(TAG, "stopRecognition called with no preceding startRecognition - ignoring");
} else if (mCurrentCallback.mListener.asBinder() != listener.asBinder()) {
- listener.onHotwordError(HotwordRecognizer.ERROR_RECOGNIZER_BUSY);
+ listener.onHotwordError(ERROR_RECOGNIZER_BUSY);
Log.w(TAG, "stopRecognition called by a different caller - ignoring");
} else { // the correct state
mCurrentCallback.onHotwordRecognitionStopped();
@@ -192,7 +225,7 @@
}
try {
Log.e(TAG, "Recognition service called without HOTWORD_RECOGNITION permissions");
- listener.onHotwordError(HotwordRecognizer.ERROR_FAILED);
+ listener.onHotwordError(ERROR_FAILED);
} catch (RemoteException e) {
Log.e(TAG, "onHotwordError(ERROR_FAILED) message failed", e);
}
diff --git a/core/java/android/speech/hotword/HotwordRecognizer.java b/core/java/android/speech/hotword/HotwordRecognizer.java
index 939c11d..9f05f31 100644
--- a/core/java/android/speech/hotword/HotwordRecognizer.java
+++ b/core/java/android/speech/hotword/HotwordRecognizer.java
@@ -50,39 +50,6 @@
/** Log messages identifier */
private static final String TAG = "HotwordRecognizer";
- /**
- * Key used to retrieve a string to be displayed to the user passed to the
- * {@link android.speech.hotword.HotwordRecognitionListener#onHotwordEvent(int, Bundle)} method.
- */
- public static final String PROMPT_TEXT = "prompt_text";
-
- /**
- * Event type used to indicate to the user that the hotword service has changed
- * its state.
- */
- public static final int EVENT_TYPE_STATE_CHANGED = 1;
-
- /** Audio recording error. */
- public static final int ERROR_AUDIO = 1;
-
- /** RecognitionService busy. */
- public static final int ERROR_RECOGNIZER_BUSY = 2;
-
- /** This indicates a permanent failure and the clients shouldn't retry on this */
- public static final int ERROR_FAILED = 3;
-
- /** Client-side errors */
- public static final int ERROR_CLIENT = 4;
-
- /** The service timed out */
- public static final int ERROR_TIMEOUT = 5;
-
- /** The service received concurrent start calls */
- public static final int ERROR_SERVICE_ALREADY_STARTED = 6;
-
- /** Hotword recognition is unavailable on the device */
- public static final int ERROR_UNAVAILABLE = 7;
-
/** action codes */
private static final int MSG_START = 1;
private static final int MSG_STOP = 2;
@@ -209,7 +176,7 @@
if (mServiceComponent == null) {
Log.e(TAG, "no selected voice recognition service");
- mListener.onHotwordError(ERROR_CLIENT);
+ mListener.onHotwordError(HotwordRecognitionService.ERROR_CLIENT);
return;
} else {
serviceIntent.setComponent(mServiceComponent);
@@ -219,12 +186,12 @@
Log.e(TAG, "bind to recognition service failed");
mConnection = null;
mService = null;
- mListener.onHotwordError(ERROR_CLIENT);
+ mListener.onHotwordError(HotwordRecognitionService.ERROR_CLIENT);
return;
}
putMessage(Message.obtain(mHandler, MSG_START));
} else {
- mListener.onHotwordError(ERROR_SERVICE_ALREADY_STARTED);
+ mListener.onHotwordError(HotwordRecognitionService.ERROR_SERVICE_ALREADY_STARTED);
return;
}
}
@@ -252,7 +219,7 @@
if (DBG) Log.d(TAG, "service startRecognition command succeeded");
} catch (final RemoteException e) {
Log.e(TAG, "startRecognition() failed", e);
- mListener.onHotwordError(ERROR_CLIENT);
+ mListener.onHotwordError(HotwordRecognitionService.ERROR_CLIENT);
}
}
@@ -268,7 +235,7 @@
if (DBG) Log.d(TAG, "service stopRecognition command succeeded");
} catch (final RemoteException e) {
Log.e(TAG, "stopRecognition() failed", e);
- mListener.onHotwordError(ERROR_CLIENT);
+ mListener.onHotwordError(HotwordRecognitionService.ERROR_CLIENT);
} finally {
mPendingTasks.clear();
mService = null;
@@ -281,7 +248,7 @@
if (mService != null) {
return true;
}
- mListener.onHotwordError(ERROR_CLIENT);
+ mListener.onHotwordError(HotwordRecognitionService.ERROR_CLIENT);
Log.e(TAG, "not connected to the recognition service");
return false;
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
index 78b842c..40a1af6 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
@@ -50,6 +50,7 @@
import android.os.UserManager;
import android.provider.Settings;
import android.speech.hotword.HotwordRecognitionListener;
+import android.speech.hotword.HotwordRecognitionService;
import android.speech.hotword.HotwordRecognizer;
import android.telephony.TelephonyManager;
import android.util.AttributeSet;
@@ -1775,11 +1776,13 @@
public void onHotwordEvent(int eventType, Bundle eventBundle) {
if (DEBUG) Log.d(TAG, "onHotwordEvent: " + eventType);
- if (eventType == HotwordRecognizer.EVENT_TYPE_STATE_CHANGED) {
- if (eventBundle != null && eventBundle.containsKey(HotwordRecognizer.PROMPT_TEXT)) {
- new KeyguardMessageArea.Helper(
- (View) getSecurityView(mCurrentSecuritySelection))
- .setMessage(eventBundle.getString(HotwordRecognizer.PROMPT_TEXT),true);
+ if (eventType == HotwordRecognitionService.EVENT_TYPE_PROMPT_CHANGED) {
+ if (eventBundle != null
+ && eventBundle.containsKey(HotwordRecognitionService.KEY_PROMPT_TEXT)) {
+ new KeyguardMessageArea
+ .Helper((View) getSecurityView(mCurrentSecuritySelection))
+ .setMessage(eventBundle.getString(
+ HotwordRecognitionService.KEY_PROMPT_TEXT),true);
}
}
}