Files
frameworks_base/tests/SoundTriggerTests/src/android/hardware/soundtrigger/SoundTriggerTest.java
Eric Laurent d3b8223377 SoundTrigger API update.
Add sound model update callback.
Add native service state change callback.
Add vendor UUID in sound model description.
Add coarse confidence level in recognition event.
Add capture format in recognition event.

Bug: 12378680.

Change-Id: Id63437819ec7b9a4a69e1ff6185b747e20cad95e
2014-08-04 16:35:27 -07:00

363 lines
14 KiB
Java

/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.soundtrigger;
import android.hardware.soundtrigger.SoundTrigger;
import android.hardware.soundtrigger.SoundTrigger.ConfidenceLevel;
import android.hardware.soundtrigger.SoundTrigger.Keyphrase;
import android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionEvent;
import android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionExtra;
import android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel;
import android.hardware.soundtrigger.SoundTrigger.RecognitionEvent;
import android.media.AudioFormat;
import android.os.Parcel;
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.SmallTest;
import java.util.Arrays;
import java.util.Random;
import java.util.UUID;
public class SoundTriggerTest extends InstrumentationTestCase {
private Random mRandom = new Random();
@SmallTest
public void testKeyphraseParcelUnparcel_noUsers() throws Exception {
Keyphrase keyphrase = new Keyphrase(1, 0, "en-US", "hello", null);
// Write to a parcel
Parcel parcel = Parcel.obtain();
keyphrase.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
Keyphrase unparceled = Keyphrase.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(keyphrase.id, unparceled.id);
assertNull(unparceled.users);
assertEquals(keyphrase.locale, unparceled.locale);
assertEquals(keyphrase.text, unparceled.text);
}
@SmallTest
public void testKeyphraseParcelUnparcel_zeroUsers() throws Exception {
Keyphrase keyphrase = new Keyphrase(1, 0, "en-US", "hello", new int[0]);
// Write to a parcel
Parcel parcel = Parcel.obtain();
keyphrase.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
Keyphrase unparceled = Keyphrase.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(keyphrase.id, unparceled.id);
assertTrue(Arrays.equals(keyphrase.users, unparceled.users));
assertEquals(keyphrase.locale, unparceled.locale);
assertEquals(keyphrase.text, unparceled.text);
}
@SmallTest
public void testKeyphraseParcelUnparcel_pos() throws Exception {
Keyphrase keyphrase = new Keyphrase(1, 0, "en-US", "hello", new int[] {1, 2, 3, 4, 5});
// Write to a parcel
Parcel parcel = Parcel.obtain();
keyphrase.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
Keyphrase unparceled = Keyphrase.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(keyphrase.id, unparceled.id);
assertTrue(Arrays.equals(keyphrase.users, unparceled.users));
assertEquals(keyphrase.locale, unparceled.locale);
assertEquals(keyphrase.text, unparceled.text);
}
@SmallTest
public void testKeyphraseSoundModelParcelUnparcel_noData() throws Exception {
Keyphrase[] keyphrases = new Keyphrase[2];
keyphrases[0] = new Keyphrase(1, 0, "en-US", "hello", new int[] {0});
keyphrases[1] = new Keyphrase(2, 0, "fr-FR", "there", new int[] {1, 2});
KeyphraseSoundModel ksm = new KeyphraseSoundModel(UUID.randomUUID(), UUID.randomUUID(),
null, keyphrases);
// Write to a parcel
Parcel parcel = Parcel.obtain();
ksm.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
KeyphraseSoundModel unparceled = KeyphraseSoundModel.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(ksm.uuid, unparceled.uuid);
assertNull(unparceled.data);
assertEquals(ksm.type, unparceled.type);
assertTrue(Arrays.equals(keyphrases, unparceled.keyphrases));
}
@SmallTest
public void testKeyphraseSoundModelParcelUnparcel_zeroData() throws Exception {
Keyphrase[] keyphrases = new Keyphrase[2];
keyphrases[0] = new Keyphrase(1, 0, "en-US", "hello", new int[] {0});
keyphrases[1] = new Keyphrase(2, 0, "fr-FR", "there", new int[] {1, 2});
KeyphraseSoundModel ksm = new KeyphraseSoundModel(UUID.randomUUID(), UUID.randomUUID(),
new byte[0], keyphrases);
// Write to a parcel
Parcel parcel = Parcel.obtain();
ksm.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
KeyphraseSoundModel unparceled = KeyphraseSoundModel.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(ksm.uuid, unparceled.uuid);
assertEquals(ksm.type, unparceled.type);
assertTrue(Arrays.equals(ksm.keyphrases, unparceled.keyphrases));
assertTrue(Arrays.equals(ksm.data, unparceled.data));
}
@SmallTest
public void testKeyphraseSoundModelParcelUnparcel_noKeyphrases() throws Exception {
byte[] data = new byte[10];
mRandom.nextBytes(data);
KeyphraseSoundModel ksm = new KeyphraseSoundModel(UUID.randomUUID(), UUID.randomUUID(),
data, null);
// Write to a parcel
Parcel parcel = Parcel.obtain();
ksm.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
KeyphraseSoundModel unparceled = KeyphraseSoundModel.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(ksm.uuid, unparceled.uuid);
assertEquals(ksm.type, unparceled.type);
assertNull(unparceled.keyphrases);
assertTrue(Arrays.equals(ksm.data, unparceled.data));
}
@SmallTest
public void testKeyphraseSoundModelParcelUnparcel_zeroKeyphrases() throws Exception {
byte[] data = new byte[10];
mRandom.nextBytes(data);
KeyphraseSoundModel ksm = new KeyphraseSoundModel(UUID.randomUUID(), UUID.randomUUID(),
data, new Keyphrase[0]);
// Write to a parcel
Parcel parcel = Parcel.obtain();
ksm.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
KeyphraseSoundModel unparceled = KeyphraseSoundModel.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(ksm.uuid, unparceled.uuid);
assertEquals(ksm.type, unparceled.type);
assertTrue(Arrays.equals(ksm.keyphrases, unparceled.keyphrases));
assertTrue(Arrays.equals(ksm.data, unparceled.data));
}
@LargeTest
public void testKeyphraseSoundModelParcelUnparcel_largeData() throws Exception {
Keyphrase[] keyphrases = new Keyphrase[2];
keyphrases[0] = new Keyphrase(1, 0, "en-US", "hello", new int[] {0});
keyphrases[1] = new Keyphrase(2, 0, "fr-FR", "there", new int[] {1, 2});
byte[] data = new byte[200 * 1024];
mRandom.nextBytes(data);
KeyphraseSoundModel ksm = new KeyphraseSoundModel(UUID.randomUUID(), UUID.randomUUID(),
data, keyphrases);
// Write to a parcel
Parcel parcel = Parcel.obtain();
ksm.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
KeyphraseSoundModel unparceled = KeyphraseSoundModel.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(ksm.uuid, unparceled.uuid);
assertEquals(ksm.type, unparceled.type);
assertTrue(Arrays.equals(ksm.data, unparceled.data));
assertTrue(Arrays.equals(ksm.keyphrases, unparceled.keyphrases));
}
@SmallTest
public void testRecognitionEventParcelUnparcel_noData() throws Exception {
RecognitionEvent re = new RecognitionEvent(SoundTrigger.RECOGNITION_STATUS_SUCCESS, 1,
true, 2, 3, 4, false, null, null);
// Write to a parcel
Parcel parcel = Parcel.obtain();
re.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
RecognitionEvent unparceled = RecognitionEvent.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(re, unparceled);
}
@SmallTest
public void testRecognitionEventParcelUnparcel_zeroData() throws Exception {
RecognitionEvent re = new RecognitionEvent(SoundTrigger.RECOGNITION_STATUS_FAILURE, 1,
true, 2, 3, 4, false, null, new byte[1]);
// Write to a parcel
Parcel parcel = Parcel.obtain();
re.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
RecognitionEvent unparceled = RecognitionEvent.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(re, unparceled);
}
@SmallTest
public void testRecognitionEventParcelUnparcel_largeData() throws Exception {
byte[] data = new byte[200 * 1024];
mRandom.nextBytes(data);
RecognitionEvent re = new RecognitionEvent(SoundTrigger.RECOGNITION_STATUS_ABORT, 1,
false, 2, 3, 4, false, null, data);
// Write to a parcel
Parcel parcel = Parcel.obtain();
re.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
RecognitionEvent unparceled = RecognitionEvent.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(re, unparceled);
}
@SmallTest
public void testRecognitionEventParcelUnparcel_largeAudioData() throws Exception {
byte[] data = new byte[200 * 1024];
mRandom.nextBytes(data);
RecognitionEvent re = new RecognitionEvent(SoundTrigger.RECOGNITION_STATUS_ABORT, 1,
false, 2, 3, 4, true,
(new AudioFormat.Builder())
.setChannelMask(AudioFormat.CHANNEL_IN_MONO)
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(16000)
.build(),
data);
// Write to a parcel
Parcel parcel = Parcel.obtain();
re.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
RecognitionEvent unparceled = RecognitionEvent.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(re, unparceled);
}
@SmallTest
public void testKeyphraseRecognitionEventParcelUnparcel_noKeyphrases() throws Exception {
KeyphraseRecognitionEvent re = new KeyphraseRecognitionEvent(
SoundTrigger.RECOGNITION_STATUS_SUCCESS, 1, true, 2, 3, 4, false, null, null, null);
// Write to a parcel
Parcel parcel = Parcel.obtain();
re.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
KeyphraseRecognitionEvent unparceled =
KeyphraseRecognitionEvent.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(re, unparceled);
}
@SmallTest
public void testKeyphraseRecognitionEventParcelUnparcel_zeroData() throws Exception {
KeyphraseRecognitionExtra[] kpExtra = new KeyphraseRecognitionExtra[0];
KeyphraseRecognitionEvent re = new KeyphraseRecognitionEvent(
SoundTrigger.RECOGNITION_STATUS_FAILURE, 2, true, 2, 3, 4, false, null, new byte[1],
kpExtra);
// Write to a parcel
Parcel parcel = Parcel.obtain();
re.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
KeyphraseRecognitionEvent unparceled =
KeyphraseRecognitionEvent.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(re, unparceled);
}
@LargeTest
public void testKeyphraseRecognitionEventParcelUnparcel_largeData() throws Exception {
byte[] data = new byte[200 * 1024];
mRandom.nextBytes(data);
KeyphraseRecognitionExtra[] kpExtra = new KeyphraseRecognitionExtra[4];
ConfidenceLevel cl1 = new ConfidenceLevel(1, 90);
ConfidenceLevel cl2 = new ConfidenceLevel(2, 30);
kpExtra[0] = new KeyphraseRecognitionExtra(1,
SoundTrigger.RECOGNITION_MODE_USER_IDENTIFICATION, 0,
new ConfidenceLevel[] {cl1, cl2});
kpExtra[1] = new KeyphraseRecognitionExtra(1,
SoundTrigger.RECOGNITION_MODE_VOICE_TRIGGER, 0,
new ConfidenceLevel[] {cl2});
kpExtra[2] = new KeyphraseRecognitionExtra(1,
SoundTrigger.RECOGNITION_MODE_VOICE_TRIGGER, 0, null);
kpExtra[3] = new KeyphraseRecognitionExtra(1,
SoundTrigger.RECOGNITION_MODE_VOICE_TRIGGER, 0,
new ConfidenceLevel[0]);
KeyphraseRecognitionEvent re = new KeyphraseRecognitionEvent(
SoundTrigger.RECOGNITION_STATUS_FAILURE, 1, true, 2, 3, 4, false, null, data,
kpExtra);
// Write to a parcel
Parcel parcel = Parcel.obtain();
re.writeToParcel(parcel, 0);
// Read from it
parcel.setDataPosition(0);
KeyphraseRecognitionEvent unparceled =
KeyphraseRecognitionEvent.CREATOR.createFromParcel(parcel);
// Verify that they are the same
assertEquals(re, unparceled);
}
}