• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.voiceenrollment;
18 
19 import java.util.Random;
20 import java.util.UUID;
21 
22 import android.app.Activity;
23 import android.hardware.soundtrigger.SoundTrigger;
24 import android.hardware.soundtrigger.SoundTrigger.Keyphrase;
25 import android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel;
26 import android.os.Bundle;
27 import android.os.UserManager;
28 import android.util.Log;
29 import android.view.View;
30 import android.widget.Toast;
31 
32 public class TestEnrollmentActivity extends Activity {
33     private static final String TAG = "TestEnrollmentActivity";
34     private static final boolean DBG = false;
35 
36     /** Keyphrase related constants, must match those defined in enrollment_application.xml */
37     private static final int KEYPHRASE_ID = 101;
38     private static final int RECOGNITION_MODES = SoundTrigger.RECOGNITION_MODE_VOICE_TRIGGER;
39     private static final String BCP47_LOCALE = "fr-FR";
40     private static final String TEXT = "Hello There";
41 
42     private EnrollmentUtil mEnrollmentUtil;
43     private Random mRandom;
44 
45     @Override
onCreate(Bundle savedInstanceState)46     protected void onCreate(Bundle savedInstanceState) {
47         if (DBG) Log.d(TAG, "onCreate");
48         super.onCreate(savedInstanceState);
49         setContentView(R.layout.main);
50         mEnrollmentUtil = new EnrollmentUtil();
51         mRandom = new Random();
52     }
53 
54     /**
55      * Called when the user clicks the enroll button.
56      * Performs a fresh enrollment.
57      */
onEnrollButtonClicked(View v)58     public void onEnrollButtonClicked(View v) {
59         Keyphrase kp = new Keyphrase(KEYPHRASE_ID, RECOGNITION_MODES, BCP47_LOCALE, TEXT,
60                 new int[] { UserManager.get(this).getUserHandle() /* current user */});
61         UUID modelUuid = UUID.randomUUID();
62         // Generate a fake model to push.
63         byte[] data = new byte[1024];
64         mRandom.nextBytes(data);
65         KeyphraseSoundModel soundModel = new KeyphraseSoundModel(modelUuid, null, data,
66                 new Keyphrase[] { kp });
67         boolean status = mEnrollmentUtil.addOrUpdateSoundModel(soundModel);
68         if (status) {
69             Toast.makeText(
70                     this, "Successfully enrolled, model UUID=" + modelUuid, Toast.LENGTH_SHORT)
71                     .show();
72         } else {
73             Toast.makeText(this, "Failed to enroll!!!" + modelUuid, Toast.LENGTH_SHORT).show();
74         }
75     }
76 
77     /**
78      * Called when the user clicks the un-enroll button.
79      * Clears the enrollment information for the user.
80      */
onUnEnrollButtonClicked(View v)81     public void onUnEnrollButtonClicked(View v) {
82         KeyphraseSoundModel soundModel = mEnrollmentUtil.getSoundModel(KEYPHRASE_ID, BCP47_LOCALE);
83         if (soundModel == null) {
84             Toast.makeText(this, "Sound model not found!!!", Toast.LENGTH_SHORT).show();
85             return;
86         }
87         boolean status = mEnrollmentUtil.deleteSoundModel(KEYPHRASE_ID, BCP47_LOCALE);
88         if (status) {
89             Toast.makeText(this, "Successfully un-enrolled, model UUID=" + soundModel.uuid,
90                     Toast.LENGTH_SHORT)
91                     .show();
92         } else {
93             Toast.makeText(this, "Failed to un-enroll!!!", Toast.LENGTH_SHORT).show();
94         }
95     }
96 
97     /**
98      * Called when the user clicks the re-enroll button.
99      * Uses the previously enrolled sound model and makes changes to it before pushing it back.
100      */
onReEnrollButtonClicked(View v)101     public void onReEnrollButtonClicked(View v) {
102         KeyphraseSoundModel soundModel = mEnrollmentUtil.getSoundModel(KEYPHRASE_ID, BCP47_LOCALE);
103         if (soundModel == null) {
104             Toast.makeText(this, "Sound model not found!!!", Toast.LENGTH_SHORT).show();
105             return;
106         }
107         // Generate a fake model to push.
108         byte[] data = new byte[2048];
109         mRandom.nextBytes(data);
110         KeyphraseSoundModel updated = new KeyphraseSoundModel(soundModel.uuid,
111                 soundModel.vendorUuid, data, soundModel.keyphrases);
112         boolean status = mEnrollmentUtil.addOrUpdateSoundModel(updated);
113         if (status) {
114             Toast.makeText(this, "Successfully re-enrolled, model UUID=" + updated.uuid,
115                     Toast.LENGTH_SHORT)
116                     .show();
117         } else {
118             Toast.makeText(this, "Failed to re-enroll!!!", Toast.LENGTH_SHORT).show();
119         }
120     }
121 }
122