Loading api/current.txt +9 −0 Original line number Diff line number Diff line Loading @@ -22819,6 +22819,15 @@ package android.speech.hotword { 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"; } core/java/android/speech/hotword/HotwordRecognitionService.java +37 −4 Original line number Diff line number Diff line Loading @@ -47,6 +47,39 @@ public abstract class HotwordRecognitionService extends Service { /** 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; Loading Loading @@ -94,7 +127,7 @@ public abstract class HotwordRecognitionService extends Service { 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"); } Loading @@ -105,10 +138,10 @@ public abstract class HotwordRecognitionService extends Service { 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(); Loading Loading @@ -192,7 +225,7 @@ public abstract class HotwordRecognitionService extends Service { } 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); } Loading core/java/android/speech/hotword/HotwordRecognizer.java +6 −39 Original line number Diff line number Diff line Loading @@ -50,39 +50,6 @@ public class HotwordRecognizer { /** 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; Loading Loading @@ -209,7 +176,7 @@ public class HotwordRecognizer { 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); Loading @@ -219,12 +186,12 @@ public class HotwordRecognizer { 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; } } Loading Loading @@ -252,7 +219,7 @@ public class HotwordRecognizer { 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); } } Loading @@ -268,7 +235,7 @@ public class HotwordRecognizer { 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; Loading @@ -281,7 +248,7 @@ public class HotwordRecognizer { 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; } Loading packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java +8 −5 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import android.os.UserHandle; 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; Loading Loading @@ -1775,11 +1776,13 @@ public class KeyguardHostView extends KeyguardViewBase { 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); } } } Loading Loading
api/current.txt +9 −0 Original line number Diff line number Diff line Loading @@ -22819,6 +22819,15 @@ package android.speech.hotword { 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"; }
core/java/android/speech/hotword/HotwordRecognitionService.java +37 −4 Original line number Diff line number Diff line Loading @@ -47,6 +47,39 @@ public abstract class HotwordRecognitionService extends Service { /** 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; Loading Loading @@ -94,7 +127,7 @@ public abstract class HotwordRecognitionService extends Service { 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"); } Loading @@ -105,10 +138,10 @@ public abstract class HotwordRecognitionService extends Service { 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(); Loading Loading @@ -192,7 +225,7 @@ public abstract class HotwordRecognitionService extends Service { } 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); } Loading
core/java/android/speech/hotword/HotwordRecognizer.java +6 −39 Original line number Diff line number Diff line Loading @@ -50,39 +50,6 @@ public class HotwordRecognizer { /** 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; Loading Loading @@ -209,7 +176,7 @@ public class HotwordRecognizer { 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); Loading @@ -219,12 +186,12 @@ public class HotwordRecognizer { 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; } } Loading Loading @@ -252,7 +219,7 @@ public class HotwordRecognizer { 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); } } Loading @@ -268,7 +235,7 @@ public class HotwordRecognizer { 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; Loading @@ -281,7 +248,7 @@ public class HotwordRecognizer { 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; } Loading
packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java +8 −5 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import android.os.UserHandle; 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; Loading Loading @@ -1775,11 +1776,13 @@ public class KeyguardHostView extends KeyguardViewBase { 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); } } } Loading