191097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn/*
291097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * Copyright (C) 2014 The Android Open Source Project
391097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn *
491097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
591097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * you may not use this file except in compliance with the License.
691097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * You may obtain a copy of the License at
791097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn *
891097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
991097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn *
1091097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * Unless required by applicable law or agreed to in writing, software
1191097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
1291097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1391097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * See the License for the specific language governing permissions and
1491097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn * limitations under the License.
1591097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn */
1691097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn
1791097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornpackage com.android.test.voiceinteraction;
1891097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn
1991097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornimport android.content.Intent;
20c03c9167c2d9a1e22fb2b176b00a0524177fb037Dianne Hackbornimport android.os.Bundle;
217444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddharthaimport android.service.voice.AlwaysOnHotwordDetector;
227444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddharthaimport android.service.voice.AlwaysOnHotwordDetector.Callback;
23db92e35211d875eab75787c593eea2988c8a560fSandeep Siddharthaimport android.service.voice.AlwaysOnHotwordDetector.EventPayload;
2491097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornimport android.service.voice.VoiceInteractionService;
2591097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornimport android.util.Log;
2691097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn
2722968950b814e66a6aa119ea92ae648884cbe0d9Sandeep Siddharthaimport java.util.Arrays;
28dcf3068fcb55f101680e70a8a6f84f3b2c9cb1e3Sandeep Siddharthaimport java.util.Locale;
2922968950b814e66a6aa119ea92ae648884cbe0d9Sandeep Siddhartha
3091097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackbornpublic class MainInteractionService extends VoiceInteractionService {
3191097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn    static final String TAG = "MainInteractionService";
3291097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn
337444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha    private final Callback mHotwordCallback = new Callback() {
347444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha        @Override
35f63bc523eadbe01ce0a5ad52868a5dccb3d5f6ddSandeep Siddhartha        public void onAvailabilityChanged(int status) {
36f63bc523eadbe01ce0a5ad52868a5dccb3d5f6ddSandeep Siddhartha            Log.i(TAG, "onAvailabilityChanged(" + status + ")");
37f63bc523eadbe01ce0a5ad52868a5dccb3d5f6ddSandeep Siddhartha            hotwordAvailabilityChangeHelper(status);
38f63bc523eadbe01ce0a5ad52868a5dccb3d5f6ddSandeep Siddhartha        }
39f63bc523eadbe01ce0a5ad52868a5dccb3d5f6ddSandeep Siddhartha
40f63bc523eadbe01ce0a5ad52868a5dccb3d5f6ddSandeep Siddhartha        @Override
41db92e35211d875eab75787c593eea2988c8a560fSandeep Siddhartha        public void onDetected(EventPayload eventPayload) {
427444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha            Log.i(TAG, "onDetected");
437444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha        }
447444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha
457444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha        @Override
461ed12ddb8c46193cc4d790b9c7d6a5d61afb3311Sandeep Siddhartha        public void onError() {
471ed12ddb8c46193cc4d790b9c7d6a5d61afb3311Sandeep Siddhartha            Log.i(TAG, "onError");
481ed12ddb8c46193cc4d790b9c7d6a5d61afb3311Sandeep Siddhartha        }
49cb4e81c7fe1ec843d80f7604a688c71086c23685Sandeep Siddhartha
50cb4e81c7fe1ec843d80f7604a688c71086c23685Sandeep Siddhartha        @Override
51cb4e81c7fe1ec843d80f7604a688c71086c23685Sandeep Siddhartha        public void onRecognitionPaused() {
52cb4e81c7fe1ec843d80f7604a688c71086c23685Sandeep Siddhartha            Log.i(TAG, "onRecognitionPaused");
53cb4e81c7fe1ec843d80f7604a688c71086c23685Sandeep Siddhartha        }
54cb4e81c7fe1ec843d80f7604a688c71086c23685Sandeep Siddhartha
55cb4e81c7fe1ec843d80f7604a688c71086c23685Sandeep Siddhartha        @Override
56cb4e81c7fe1ec843d80f7604a688c71086c23685Sandeep Siddhartha        public void onRecognitionResumed() {
57cb4e81c7fe1ec843d80f7604a688c71086c23685Sandeep Siddhartha            Log.i(TAG, "onRecognitionResumed");
58cb4e81c7fe1ec843d80f7604a688c71086c23685Sandeep Siddhartha        }
597444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha    };
607444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha
617444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha    private AlwaysOnHotwordDetector mHotwordDetector;
627444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha
6391097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn    @Override
64fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn    public void onReady() {
65fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn        super.onReady();
6691097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn        Log.i(TAG, "Creating " + this);
6722968950b814e66a6aa119ea92ae648884cbe0d9Sandeep Siddhartha        Log.i(TAG, "Keyphrase enrollment error? " + getKeyphraseEnrollmentInfo().getParseError());
6822968950b814e66a6aa119ea92ae648884cbe0d9Sandeep Siddhartha        Log.i(TAG, "Keyphrase enrollment meta-data: "
69d7018200312e4e4dc3f67cf33dc90bf7ce585844Sandeep                + Arrays.toString(getKeyphraseEnrollmentInfo().listKeyphraseMetadata()));
707444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha
71dcf3068fcb55f101680e70a8a6f84f3b2c9cb1e3Sandeep Siddhartha        mHotwordDetector = createAlwaysOnHotwordDetector(
72fb30d6936a4793a3369fbf8bf51fa526b8a77272Sandeep Siddhartha                "Hello There", Locale.forLanguageTag("en-US"), mHotwordCallback);
736daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha    }
746daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha
756daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha    @Override
766daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha    public int onStartCommand(Intent intent, int flags, int startId) {
776daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha        Bundle args = new Bundle();
786daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha        args.putParcelable("intent", new Intent(this, TestInteractionActivity.class));
796daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha        startSession(args);
806daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha        stopSelf(startId);
816daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha        return START_NOT_STICKY;
826daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha    }
837444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha
84f63bc523eadbe01ce0a5ad52868a5dccb3d5f6ddSandeep Siddhartha    private void hotwordAvailabilityChangeHelper(int availability) {
856daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha        Log.i(TAG, "Hotword availability = " + availability);
867444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha        switch (availability) {
876daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha            case AlwaysOnHotwordDetector.STATE_HARDWARE_UNAVAILABLE:
886daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha                Log.i(TAG, "STATE_HARDWARE_UNAVAILABLE");
897444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha                break;
906daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha            case AlwaysOnHotwordDetector.STATE_KEYPHRASE_UNSUPPORTED:
916daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha                Log.i(TAG, "STATE_KEYPHRASE_UNSUPPORTED");
927444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha                break;
936daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha            case AlwaysOnHotwordDetector.STATE_KEYPHRASE_UNENROLLED:
946daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha                Log.i(TAG, "STATE_KEYPHRASE_UNENROLLED");
95ae686a51288031271685861436f7c67201791d09Dharmesh Mokani                Intent enroll = mHotwordDetector.createEnrollIntent();
967444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha                Log.i(TAG, "Need to enroll with " + enroll);
977444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha                break;
986daae9622672e0b38fc2efed29f68061d749caccSandeep Siddhartha            case AlwaysOnHotwordDetector.STATE_KEYPHRASE_ENROLLED:
991ed12ddb8c46193cc4d790b9c7d6a5d61afb3311Sandeep Siddhartha                Log.i(TAG, "STATE_KEYPHRASE_ENROLLED - starting recognition");
1002c0273e50a3162595e9a54030166f2369b039a5aSandeep Siddhartha                if (mHotwordDetector.startRecognition(
1012c0273e50a3162595e9a54030166f2369b039a5aSandeep Siddhartha                        AlwaysOnHotwordDetector.RECOGNITION_FLAG_NONE)) {
1022c0273e50a3162595e9a54030166f2369b039a5aSandeep Siddhartha                    Log.i(TAG, "startRecognition succeeded");
1032c0273e50a3162595e9a54030166f2369b039a5aSandeep Siddhartha                } else {
1042c0273e50a3162595e9a54030166f2369b039a5aSandeep Siddhartha                    Log.i(TAG, "startRecognition failed");
1052c0273e50a3162595e9a54030166f2369b039a5aSandeep Siddhartha                }
1067444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha                break;
1077444c906faef1f7a9a6e6f7a443ba156f1e856beSandeep Siddhartha        }
10891097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn    }
10991097de49b0f683b00e26a75dbc0ac6082344137Dianne Hackborn}
110