Home | History | Annotate | Download | only in voiceinteraction
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.test.voiceinteraction;
     18 
     19 import android.content.Intent;
     20 import android.os.Bundle;
     21 import android.service.voice.AlwaysOnHotwordDetector;
     22 import android.service.voice.AlwaysOnHotwordDetector.Callback;
     23 import android.service.voice.AlwaysOnHotwordDetector.EventPayload;
     24 import android.service.voice.VoiceInteractionService;
     25 import android.util.Log;
     26 
     27 import java.util.Arrays;
     28 import java.util.Locale;
     29 
     30 public class MainInteractionService extends VoiceInteractionService {
     31     static final String TAG = "MainInteractionService";
     32 
     33     private final Callback mHotwordCallback = new Callback() {
     34         @Override
     35         public void onAvailabilityChanged(int status) {
     36             Log.i(TAG, "onAvailabilityChanged(" + status + ")");
     37             hotwordAvailabilityChangeHelper(status);
     38         }
     39 
     40         @Override
     41         public void onDetected(EventPayload eventPayload) {
     42             Log.i(TAG, "onDetected");
     43         }
     44 
     45         @Override
     46         public void onError() {
     47             Log.i(TAG, "onError");
     48         }
     49 
     50         @Override
     51         public void onRecognitionPaused() {
     52             Log.i(TAG, "onRecognitionPaused");
     53         }
     54 
     55         @Override
     56         public void onRecognitionResumed() {
     57             Log.i(TAG, "onRecognitionResumed");
     58         }
     59     };
     60 
     61     private AlwaysOnHotwordDetector mHotwordDetector;
     62 
     63     @Override
     64     public void onReady() {
     65         super.onReady();
     66         Log.i(TAG, "Creating " + this);
     67         Log.i(TAG, "Keyphrase enrollment error? " + getKeyphraseEnrollmentInfo().getParseError());
     68         Log.i(TAG, "Keyphrase enrollment meta-data: "
     69                 + Arrays.toString(getKeyphraseEnrollmentInfo().listKeyphraseMetadata()));
     70 
     71         mHotwordDetector = createAlwaysOnHotwordDetector(
     72                 "Hello There", Locale.forLanguageTag("en-US"), mHotwordCallback);
     73     }
     74 
     75     @Override
     76     public int onStartCommand(Intent intent, int flags, int startId) {
     77         Bundle args = new Bundle();
     78         args.putParcelable("intent", new Intent(this, TestInteractionActivity.class));
     79         startSession(args);
     80         stopSelf(startId);
     81         return START_NOT_STICKY;
     82     }
     83 
     84     private void hotwordAvailabilityChangeHelper(int availability) {
     85         Log.i(TAG, "Hotword availability = " + availability);
     86         switch (availability) {
     87             case AlwaysOnHotwordDetector.STATE_HARDWARE_UNAVAILABLE:
     88                 Log.i(TAG, "STATE_HARDWARE_UNAVAILABLE");
     89                 break;
     90             case AlwaysOnHotwordDetector.STATE_KEYPHRASE_UNSUPPORTED:
     91                 Log.i(TAG, "STATE_KEYPHRASE_UNSUPPORTED");
     92                 break;
     93             case AlwaysOnHotwordDetector.STATE_KEYPHRASE_UNENROLLED:
     94                 Log.i(TAG, "STATE_KEYPHRASE_UNENROLLED");
     95                 Intent enroll = mHotwordDetector.createEnrollIntent();
     96                 Log.i(TAG, "Need to enroll with " + enroll);
     97                 break;
     98             case AlwaysOnHotwordDetector.STATE_KEYPHRASE_ENROLLED:
     99                 Log.i(TAG, "STATE_KEYPHRASE_ENROLLED - starting recognition");
    100                 if (mHotwordDetector.startRecognition(
    101                         AlwaysOnHotwordDetector.RECOGNITION_FLAG_NONE)) {
    102                     Log.i(TAG, "startRecognition succeeded");
    103                 } else {
    104                     Log.i(TAG, "startRecognition failed");
    105                 }
    106                 break;
    107         }
    108     }
    109 }
    110