Merge "Fixing CTS verifier test for Microphone" into oc-dev
am: 272f8dfe0c
Change-Id: I3f94eeb2ad60687dc47518d4c68aaff5191fc597
diff --git a/apps/CtsVerifier/res/layout/audio_frequency_mic_activity.xml b/apps/CtsVerifier/res/layout/audio_frequency_mic_activity.xml
index bdf9e7c..272a9fc 100644
--- a/apps/CtsVerifier/res/layout/audio_frequency_mic_activity.xml
+++ b/apps/CtsVerifier/res/layout/audio_frequency_mic_activity.xml
@@ -32,161 +32,200 @@
android:orientation="vertical"
>
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:scrollbars="vertical"
- android:gravity="bottom"
- android:id="@+id/audio_general_headset_port_exists"
- android:text="@string/audio_general_headset_port_exists" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- >
-
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/audio_general_headset_no"
- android:text="@string/audio_general_headset_no"
- android:nextFocusForward="@+id/audio_general_headset_yes"
- android:nextFocusDown="@+id/audio_frequency_mic_speakers_ready_btn"
- android:nextFocusRight="@+id/audio_general_headset_yes" />
-
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/audio_general_headset_yes"
- android:text="@string/audio_general_headset_yes"
- android:nextFocusForward="@+id/audio_frequency_mic_speakers_ready_btn"
- android:nextFocusDown="@+id/audio_frequency_mic_speakers_ready_btn"
- android:nextFocusLeft="@+id/audio_general_headset_no"
- android:nextFocusRight="@+id/audio_frequency_mic_speakers_ready_btn" />
-
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:id="@+id/info_text"
- android:text="@string/audio_frequency_mic_instructions" />
-
- <ProgressBar
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:id="@+id/audio_frequency_mic_progress_bar" />
- </LinearLayout>
-
- <Button
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/audio_frequency_mic_speakers_ready_btn"
- android:text="@string/audio_frequency_mic_speakers_ready_btn"
- android:nextFocusForward="@+id/audio_frequency_mic_test1_btn"
- android:nextFocusUp="@+id/audio_general_headset_yes"
- android:nextFocusDown="@+id/audio_frequency_mic_test1_btn"
- android:nextFocusLeft="@+id/audio_general_headset_yes"
- android:nextFocusRight="@+id/audio_frequency_mic_test1_btn" />
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:scrollbars="vertical"
- android:gravity="bottom"
- android:id="@+id/audio_frequency_mic_speakers_ready_status"
- android:text="@string/audio_frequency_mic_speakers_ready_status" />
-
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:id="@+id/audio_frequency_mic_layout_test1"
+ android:id="@+id/frequency_mic_layout_test_noise"
>
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="?android:colorAccent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="@string/audio_frequency_mic_instructions2"
- android:id="@+id/audio_frequency_mic_instructions2" />
+ android:text="@string/frequency_mic_noise_instructions"
+ android:id="@+id/frequency_mic_noise_instructions" />
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/audio_frequency_mic_test1_btn"
- android:id="@+id/audio_frequency_mic_test1_btn"
- android:nextFocusForward="@+id/audio_frequency_mic_mic_ready_btn"
- android:nextFocusUp="@+id/audio_frequency_mic_speakers_ready_btn"
- android:nextFocusDown="@+id/audio_frequency_mic_mic_ready_btn"
- android:nextFocusLeft="@+id/audio_frequency_mic_speakers_ready_btn"
- android:nextFocusRight="@+id/audio_frequency_mic_mic_ready_btn" />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/audio_frequency_mic_results_text"
- android:id="@+id/audio_frequency_mic_results1_text" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:id="@+id/audio_frequency_mic_layout_test2a"
- >
-
- <Button
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:id="@+id/audio_frequency_mic_mic_ready_btn"
- android:text="@string/audio_frequency_mic_mic_ready_btn"
- android:nextFocusForward="@+id/audio_frequency_mic_test2_btn"
- android:nextFocusUp="@+id/audio_frequency_mic_test1_btn"
- android:nextFocusDown="@+id/audio_frequency_mic_test2_btn"
- android:nextFocusLeft="@+id/audio_frequency_mic_test1_btn"
- android:nextFocusRight="@+id/audio_frequency_mic_test2_btn" />
+ android:orientation="horizontal">
- <TextView
- android:layout_width="wrap_content"
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_weight="2">
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:soundEffectsEnabled="false"
+ android:text="@string/frequency_mic_test_noise_btn"
+ android:id="@+id/frequency_mic_test_noise_btn" />
+ <ProgressBar
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:id="@+id/frequency_mic_test_noise_progress_bar" />
+ </LinearLayout>
+
+ <View
+ android:layout_width="1dp"
+ android:layout_height="match_parent"
+ android:background="?android:colorAccent" />
+
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_weight="1">
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:soundEffectsEnabled="false"
+ android:text="@string/frequency_mic_play"
+ android:id="@+id/frequency_mic_play_noise_btn" />
+ </LinearLayout>
+ </LinearLayout>
+ <TextView
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:text="@string/audio_frequency_mic_usb_status"
- android:id="@+id/audio_frequency_mic_usb_status" />
+ android:text="@string/frequency_mic_test_noise_result"
+ android:id="@+id/frequency_mic_test_noise_result" />
</LinearLayout>
<LinearLayout
- android:orientation="vertical"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/audio_frequency_mic_layout_test2b"
- >
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:id="@+id/frequency_mic_layout_test_usb_background">
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/audio_frequency_mic_test2_btn"
- android:id="@+id/audio_frequency_mic_test2_btn"
- android:nextFocusForward="@+id/pass_button"
- android:nextFocusUp="@+id/audio_frequency_mic_mic_ready_btn"
- android:nextFocusDown="@+id/pass_button"
- android:nextFocusLeft="@+id/audio_frequency_mic_mic_ready_btn"
- android:nextFocusRight="@+id/pass_button" />
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="?android:colorAccent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="@string/audio_frequency_mic_results_text"
- android:id="@+id/audio_frequency_mic_results_text" />
+ android:scrollbars="vertical"
+ android:gravity="bottom"
+ android:text="@string/frequency_mic_test_usb_background_instructions"
+ android:id="@+id/frequency_mic_test_usb_background_instructions" />
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_weight="2">
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:soundEffectsEnabled="false"
+ android:text="@string/frequency_mic_test_usb_background_btn"
+ android:id="@+id/frequency_mic_test_usb_background_btn" />
+ <ProgressBar
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:id="@+id/frequency_mic_test_usb_background_progress_bar" />
+ </LinearLayout>
+ </LinearLayout>
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/frequency_mic_test_usb_background_result"
+ android:id="@+id/frequency_mic_test_usb_background_result" />
</LinearLayout>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:id="@+id/frequency_mic_layout_test_usb_noise">
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="?android:colorAccent" />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:scrollbars="vertical"
+ android:gravity="bottom"
+ android:text="@string/frequency_mic_test_usb_noise_instructions"
+ android:id="@+id/frequency_mic_test_usb_noise_instructions" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_weight="2">
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:soundEffectsEnabled="false"
+ android:text="@string/frequency_mic_test_usb_noise_btn"
+ android:id="@+id/frequency_mic_test_usb_noise_btn" />
+ <ProgressBar
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:id="@+id/frequency_mic_test_usb_noise_progress_bar" />
+ </LinearLayout>
+
+ <View
+ android:layout_width="1dp"
+ android:layout_height="match_parent"
+ android:background="?android:colorAccent" />
+
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_weight="1">
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:soundEffectsEnabled="false"
+ android:text="@string/frequency_mic_play"
+ android:id="@+id/frequency_mic_play_usb_noise_btn" />
+ </LinearLayout>
+ </LinearLayout>
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/frequency_mic_test_usb_noise_result"
+ android:id="@+id/frequency_mic_test_usb_noise_result" />
+ </LinearLayout>
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="?android:colorAccent" />
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/frequency_mic_test_global_result"
+ android:id="@+id/frequency_mic_test_global_result" />
+
<include layout="@layout/pass_fail_buttons" />
</LinearLayout>
</ScrollView>
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index 2f19c9c..4108b01 100755
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -3570,30 +3570,31 @@
<!-- Audio Frequency Microphone Test -->
<string name="audio_frequency_mic_test">Audio Frequency Microphone Test</string>
- <string name="audio_frequency_mic_info">
+ <string name="frequency_mic_info">
This test requires an external USB reference microphone and external speakers.
- Please use the headphone connector to connect external speakers. Position the device 40 cms
- from the speakers and proceed with the instructions on the screen.
- The system will measure frequency response of the built in microphone.
+ The test signals can be played from the device under test (DUT) or from a secondary device (e.g. when your DUT can’t support a USB microphone and external speakers simultaneously, or DUT does not have headphone output).
+Follow the instructions on the screen to measure the frequency response for the built in microphone.
</string>
- <string name="audio_frequency_mic_instructions">
- Please connect external speakers using the headphone connector. Please unplug any USB audio device (if any)
+
+ <string name="frequency_mic_play">Play</string>
+ <string name="frequency_mic_stop">Stop</string>
+ <string name="frequency_mic_noise_instructions">TEST NOISE: Position speakers 40 cms from device under test.
+ Press [PLAY] to play broadband white noise. Press [TEST]
</string>
- <string name="audio_frequency_mic_speakers_ready_btn">External speakers ready</string>
- <string name="audio_frequency_mic_speakers_ready_status">...</string>
- <string name="audio_frequency_mic_instructions2">
- Please position the speakers 40 cms from the device under test and press TEST 1
- </string>
- <string name="audio_frequency_mic_test1_btn">Test 1</string>
- <string name="audio_frequency_mic_usb_status">Waiting for USB microphone...</string>
- <string name="audio_frequency_mic_connect_mic">Please Connect USB microphone, position it next to
- the built in microphone in the device and press USB reference microphone</string>
- <string name="audio_frequency_mic_mic_ready_btn">USB Reference microphone ready</string>
- <string name="audio_frequency_mic_mic_ready_text">USB Audio device detected\n\nPlease set up Device Under test
- in quiet room, and Microphone 20 cms perpendicular to center of screen, then press TEST</string>
- <string name="audio_frequency_mic_mic_not_ready_text">"No USB Audio device detected. Please reconnect."</string>
- <string name="audio_frequency_mic_test2_btn">Test 2</string>
- <string name="audio_frequency_mic_results_text">Results...</string>
+ <string name="frequency_mic_test_noise_btn">Test</string>
+ <string name="frequency_mic_test_noise_result">Results...</string>
+
+ <string name="frequency_mic_test_usb_background_instructions">TEST USB BACKGROUND: Connect USB microphone and position it right next to microphone under test.
+ No source of noise should be active during this test. Press [TEST]</string>
+ <string name="frequency_mic_test_usb_background_btn">Test</string>
+ <string name="frequency_mic_test_usb_background_result">Results...</string>
+
+ <string name="frequency_mic_test_usb_noise_instructions">TEST USB NOISE: Connect USB microphone and position it right next to microphone under test.
+ Position speakers 40 cms from device under test. Press [PLAY] to play broadband white noise. Press [TEST]</string>
+ <string name="frequency_mic_test_usb_noise_btn">Test</string>
+ <string name="frequency_mic_test_usb_noise_result">Results...</string>
+
+ <string name="frequency_mic_test_global_result">Global Results...</string>
<!-- Audio Frequency Unprocessed Test -->
<string name="audio_frequency_unprocessed_test">Audio Frequency Unprocessed Test</string>
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audio/AudioFrequencyMicActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/audio/AudioFrequencyMicActivity.java
index ce7eb3f..129fb72 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audio/AudioFrequencyMicActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audio/AudioFrequencyMicActivity.java
@@ -18,11 +18,13 @@
import com.android.cts.verifier.PassFailButtons;
import com.android.cts.verifier.R;
+
import com.android.cts.verifier.audio.wavelib.*;
import com.android.compatibility.common.util.ReportLog;
import com.android.compatibility.common.util.ResultType;
import com.android.compatibility.common.util.ResultUnit;
import android.content.Context;
+
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
@@ -59,36 +61,50 @@
private static final String TAG = "AudioFrequencyMicActivity";
private static final int TEST_STARTED = 900;
- private static final int TEST_ENDED = 901;
- private static final int TEST_MESSAGE = 902;
- private static final int TEST1_MESSAGE = 903;
- private static final int TEST1_ENDED = 904;
+ private static final int TEST_MESSAGE = 903;
+ private static final int TEST_ENDED = 904;
+ private static final int TEST_ENDED_ERROR = 905;
+
private static final double MIN_ENERGY_BAND_1 = -50.0; //dB Full Scale
private static final double MAX_ENERGY_BAND_1_BASE = -60.0; //dB Full Scale
private static final double MIN_FRACTION_POINTS_IN_BAND = 0.3;
private static final double MAX_VAL = Math.pow(2, 15);
private static final double CLIP_LEVEL = (MAX_VAL-10) / MAX_VAL;
+ private static final int TEST_NONE = -1;
+ private static final int TEST_NOISE = 0;
+ private static final int TEST_USB_BACKGROUND = 1;
+ private static final int TEST_USB_NOISE = 2;
+ private static final int TEST_COUNT = 3;
+ private int mCurrentTest = TEST_NONE;
+ private boolean mTestsDone[] = new boolean[TEST_COUNT];
+
+ private static final int TEST_DURATION_DEFAULT = 2000;
+ private static final int TEST_DURATION_NOISE = TEST_DURATION_DEFAULT;
+ private static final int TEST_DURATION_USB_BACKGROUND = TEST_DURATION_DEFAULT;
+ private static final int TEST_DURATION_USB_NOISE = TEST_DURATION_DEFAULT;
+
final OnBtnClickListener mBtnClickListener = new OnBtnClickListener();
Context mContext;
- Button mHeadsetPortYes;
- Button mHeadsetPortNo;
+ LinearLayout mLayoutTestNoise;
+ Button mButtonTestNoise;
+ ProgressBar mProgressNoise;
+ TextView mResultTestNoise;
+ Button mButtonPlayNoise;
- Button mSpeakersReady; //user signal to have connected external speakers
- Button mTest1Button; //execute test 1
- Button mUsbMicReady; //user signal to have connected USB Microphone
- Button mTest2Button; //user to start test
- String mUsbDevicesInfo; //usb device info for report
- LinearLayout mLayoutTest1;
- LinearLayout mLayoutTest2a;
- LinearLayout mLayoutTest2b;
+ LinearLayout mLayoutTestUsbBackground;
+ Button mButtonTestUsbBackground;
+ ProgressBar mProgressUsbBackground;
+ TextView mResultTestUsbBackground;
- TextView mSpeakerReadyText;
- TextView mTest2Result;
- TextView mUsbStatusText;
- TextView mTest1Result;
- ProgressBar mProgressBar;
+ LinearLayout mLayoutTestUsbNoise;
+ Button mButtonTestUsbNoise;
+ ProgressBar mProgressUsbNoise;
+ TextView mResultTestUsbNoise;
+ Button mButtonPlayUsbNoise;
+
+ TextView mGlobalResultText;
private boolean mIsRecording = false;
private final Object mRecordingLock = new Object();
@@ -112,87 +128,54 @@
private DspWindow mWindow;
private DspFftServer mFftServer;
- private VectorAverage mFreqAverageMain = new VectorAverage();
+ private VectorAverage mFreqAverageUsbBackground = new VectorAverage();
+ private VectorAverage mFreqAverageNoise = new VectorAverage();
+ private VectorAverage mFreqAverageUsbNoise = new VectorAverage();
- private VectorAverage mFreqAverageBase = new VectorAverage();
- private VectorAverage mFreqAverageBuiltIn = new VectorAverage();
- private VectorAverage mFreqAverageReference = new VectorAverage();
- private int mCurrentTest = -1;
int mBands = 4;
AudioBandSpecs[] bandSpecsArray = new AudioBandSpecs[mBands];
AudioBandSpecs[] baseBandSpecsArray = new AudioBandSpecs[mBands];
- private class OnBtnClickListener implements OnClickListener {
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.audio_frequency_mic_speakers_ready_btn:
- testSpeakersReady();
- setMaxLevel();
- testMaxLevel();
- break;
- case R.id.audio_frequency_mic_test1_btn:
- startTest1();
- break;
- case R.id.audio_frequency_mic_mic_ready_btn:
- testUSB();
- break;
- case R.id.audio_frequency_mic_test2_btn:
- startTest2();
- break;
- case R.id.audio_general_headset_yes:
- Log.i(TAG, "User confirms Headset Port existence");
- mSpeakersReady.setEnabled(true);
- recordHeasetPortFound(true);
- mHeadsetPortYes.setEnabled(false);
- mHeadsetPortNo.setEnabled(false);
- break;
- case R.id.audio_general_headset_no:
- Log.i(TAG, "User denies Headset Port existence");
- recordHeasetPortFound(false);
- getPassButton().setEnabled(true);
- mHeadsetPortYes.setEnabled(false);
- mHeadsetPortNo.setEnabled(false);
- break;
- }
- }
- }
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.audio_frequency_mic_activity);
mContext = this;
- mHeadsetPortYes = (Button)findViewById(R.id.audio_general_headset_yes);
- mHeadsetPortYes.setOnClickListener(mBtnClickListener);
- mHeadsetPortNo = (Button)findViewById(R.id.audio_general_headset_no);
- mHeadsetPortNo.setOnClickListener(mBtnClickListener);
+ //Test Noise
+ mLayoutTestNoise = (LinearLayout) findViewById(R.id.frequency_mic_layout_test_noise);
+ mButtonTestNoise = (Button) findViewById(R.id.frequency_mic_test_noise_btn);
+ mButtonTestNoise.setOnClickListener(mBtnClickListener);
+ mProgressNoise = (ProgressBar) findViewById(R.id.frequency_mic_test_noise_progress_bar);
+ mResultTestNoise = (TextView) findViewById(R.id.frequency_mic_test_noise_result);
+ mButtonPlayNoise = (Button) findViewById(R.id.frequency_mic_play_noise_btn);
+ mButtonPlayNoise.setOnClickListener(mBtnClickListener);
+ showWait(mProgressNoise, false);
- mSpeakerReadyText = (TextView) findViewById(R.id.audio_frequency_mic_speakers_ready_status);
+ //USB Background
+ mLayoutTestUsbBackground = (LinearLayout)
+ findViewById(R.id.frequency_mic_layout_test_usb_background);
+ mButtonTestUsbBackground = (Button)
+ findViewById(R.id.frequency_mic_test_usb_background_btn);
+ mButtonTestUsbBackground.setOnClickListener(mBtnClickListener);
+ mProgressUsbBackground = (ProgressBar)
+ findViewById(R.id.frequency_mic_test_usb_background_progress_bar);
+ mResultTestUsbBackground = (TextView)
+ findViewById(R.id.frequency_mic_test_usb_background_result);
+ showWait(mProgressUsbBackground, false);
- mSpeakersReady = (Button)findViewById(R.id.audio_frequency_mic_speakers_ready_btn);
- mSpeakersReady.setOnClickListener(mBtnClickListener);
- mSpeakersReady.setEnabled(false);
- mTest1Button = (Button)findViewById(R.id.audio_frequency_mic_test1_btn);
- mTest1Button.setOnClickListener(mBtnClickListener);
- mTest1Result = (TextView)findViewById(R.id.audio_frequency_mic_results1_text);
- mLayoutTest1 = (LinearLayout) findViewById(R.id.audio_frequency_mic_layout_test1);
- mLayoutTest2a = (LinearLayout) findViewById(R.id.audio_frequency_mic_layout_test2a);
- mLayoutTest2b = (LinearLayout) findViewById(R.id.audio_frequency_mic_layout_test2b);
- mUsbMicReady = (Button)findViewById(R.id.audio_frequency_mic_mic_ready_btn);
- mUsbMicReady.setOnClickListener(mBtnClickListener);
+ mLayoutTestUsbNoise = (LinearLayout) findViewById(R.id.frequency_mic_layout_test_usb_noise);
+ mButtonTestUsbNoise = (Button) findViewById(R.id.frequency_mic_test_usb_noise_btn);
+ mButtonTestUsbNoise.setOnClickListener(mBtnClickListener);
+ mProgressUsbNoise = (ProgressBar)
+ findViewById(R.id.frequency_mic_test_usb_noise_progress_bar);
+ mResultTestUsbNoise = (TextView) findViewById(R.id.frequency_mic_test_usb_noise_result);
+ mButtonPlayUsbNoise = (Button) findViewById(R.id.frequency_mic_play_usb_noise_btn);
+ mButtonPlayUsbNoise.setOnClickListener(mBtnClickListener);
+ showWait(mProgressUsbNoise, false);
- mUsbStatusText = (TextView)findViewById(R.id.audio_frequency_mic_usb_status);
- mTest2Button = (Button)findViewById(R.id.audio_frequency_mic_test2_btn);
- mTest2Button.setOnClickListener(mBtnClickListener);
- mTest2Result = (TextView)findViewById(R.id.audio_frequency_mic_results_text);
- mProgressBar = (ProgressBar)findViewById(R.id.audio_frequency_mic_progress_bar);
- showWait(false);
- enableLayout(mLayoutTest1, false);
- enableLayout(mLayoutTest2a, false);
- enableLayout(mLayoutTest2b, false);
+ mGlobalResultText = (TextView) findViewById(R.id.frequency_mic_test_global_result);
mSPlayer = new SoundPlayerObject();
mSPlayer.setSoundWithResId(getApplicationContext(), R.raw.stereo_mono_white_noise_48);
@@ -211,7 +194,7 @@
setPassFailButtonClickListeners();
getPassButton().setEnabled(false);
setInfoResources(R.string.audio_frequency_mic_test,
- R.string.audio_frequency_mic_info, -1);
+ R.string.frequency_mic_info, -1);
//Init bands for BuiltIn/Reference test
bandSpecsArray[0] = new AudioBandSpecs(
@@ -256,6 +239,65 @@
5.0, -50.0 /* stop top,bottom value */);
}
+ private void playerToggleButton(int buttonId) {
+ if (playerIsPlaying()) {
+ playerStopAll();
+ } else {
+ playerTransport(true);
+ setButtonPlayStatus(buttonId);
+ }
+ }
+
+ private class OnBtnClickListener implements OnClickListener {
+ @Override
+ public void onClick(View v) {
+ int id = v.getId();
+ switch (id) {
+ case R.id.frequency_mic_test_noise_btn:
+ startTest(TEST_NOISE);
+ break;
+ case R.id.frequency_mic_play_noise_btn:
+ playerToggleButton(id);
+ break;
+ case R.id.frequency_mic_test_usb_background_btn:
+ startTest(TEST_USB_BACKGROUND);
+ break;
+ case R.id.frequency_mic_test_usb_noise_btn:
+ startTest(TEST_USB_NOISE);
+ break;
+ case R.id.frequency_mic_play_usb_noise_btn:
+ playerToggleButton(id);
+ break;
+ }
+ }
+ }
+
+ private void setButtonPlayStatus(int playResId) {
+ String play = getResources().getText(R.string.frequency_mic_play).toString();
+ String stop = getResources().getText(R.string.frequency_mic_stop).toString();
+
+ mButtonPlayNoise.setText(playResId == R.id.frequency_mic_play_noise_btn ? stop : play);
+ mButtonPlayUsbNoise.setText(playResId ==
+ R.id.frequency_mic_play_usb_noise_btn ? stop : play);
+ }
+
+ private void playerTransport(boolean play) {
+ if (!mSPlayer.isAlive()) {
+ mSPlayer.start();
+ }
+ mSPlayer.play(play);
+ }
+
+ private boolean playerIsPlaying() {
+ return mSPlayer.isPlaying();
+ }
+
+ private void playerStopAll() {
+ if (mSPlayer.isAlive() && mSPlayer.isPlaying()) {
+ mSPlayer.play(false);
+ setButtonPlayStatus(-1);
+ }
+ }
/**
* enable test ui elements
@@ -267,184 +309,193 @@
}
}
- /**
- * show active progress bar
- */
- private void showWait(boolean show) {
+ private void showWait(ProgressBar pb, boolean show) {
if (show) {
- mProgressBar.setVisibility(View.VISIBLE);
+ pb.setVisibility(View.VISIBLE);
} else {
- mProgressBar.setVisibility(View.INVISIBLE);
+ pb.setVisibility(View.INVISIBLE);
}
}
- /**
- * Start the loopback audio test
- */
- private void startTest1() {
+ private void showWait(int testId, boolean show) {
+ switch(testId) {
+ case TEST_NOISE:
+ showWait(mProgressNoise, show);
+ break;
+ case TEST_USB_BACKGROUND:
+ showWait(mProgressUsbBackground, show);
+ break;
+ case TEST_USB_NOISE:
+ showWait(mProgressUsbNoise, show);
+ break;
+ }
+ }
+
+ private String getTestString(int testId) {
+ String name = "undefined";
+ switch(testId) {
+ case TEST_NOISE:
+ name = "BuiltIn_noise";
+ break;
+ case TEST_USB_BACKGROUND:
+ name = "USB_background";
+ break;
+ case TEST_USB_NOISE:
+ name = "USB_noise";
+ break;
+ }
+ return name;
+ }
+
+ private void showMessage(int testId, String msg) {
+ if (msg != null && msg.length() > 0) {
+ switch(testId) {
+ case TEST_NOISE:
+ mResultTestNoise.setText(msg);
+ break;
+ case TEST_USB_BACKGROUND:
+ mResultTestUsbBackground.setText(msg);
+ break;
+ case TEST_USB_NOISE:
+ mResultTestUsbNoise.setText(msg);
+ break;
+ }
+ }
+ }
+
+ Thread mTestThread;
+ private void startTest(int testId) {
if (mTestThread != null && !mTestThread.isAlive()) {
mTestThread = null; //kill it.
}
if (mTestThread == null) {
Log.v(TAG,"Executing test Thread");
- mTestThread = new Thread(mTest1Runnable);
- //getPassButton().setEnabled(false);
- if (!mSPlayer.isAlive())
- mSPlayer.start();
+ switch(testId) {
+ case TEST_NOISE:
+ mTestThread = new Thread(new TestRunnable(TEST_NOISE) {
+ public void run() {
+ super.run();
+ if (!mUsbMicConnected) {
+ sendMessage(mTestId, TEST_MESSAGE,
+ "Testing Built in Microphone: Noise");
+ mFreqAverageNoise.reset();
+ mFreqAverageNoise.setCaptureType(VectorAverage.CAPTURE_TYPE_MAX);
+ record(TEST_DURATION_NOISE);
+ sendMessage(mTestId, TEST_ENDED, "Testing Completed");
+ mTestsDone[mTestId] = true;
+ } else {
+ sendMessage(mTestId, TEST_ENDED_ERROR,
+ "Please Unplug USB Microphone");
+ mTestsDone[mTestId] = false;
+ }
+ }
+ });
+ break;
+ case TEST_USB_BACKGROUND:
+ playerStopAll();
+ mTestThread = new Thread(new TestRunnable(TEST_USB_BACKGROUND) {
+ public void run() {
+ super.run();
+ if (mUsbMicConnected) {
+ sendMessage(mTestId, TEST_MESSAGE,
+ "Testing USB Microphone: background");
+ mFreqAverageUsbBackground.reset();
+ mFreqAverageUsbBackground.setCaptureType(
+ VectorAverage.CAPTURE_TYPE_AVERAGE);
+ record(TEST_DURATION_USB_BACKGROUND);
+ sendMessage(mTestId, TEST_ENDED, "Testing Completed");
+ mTestsDone[mTestId] = true;
+ } else {
+ sendMessage(mTestId, TEST_ENDED_ERROR,
+ "USB Microphone not detected.");
+ mTestsDone[mTestId] = false;
+ }
+ }
+ });
+ break;
+ case TEST_USB_NOISE:
+ mTestThread = new Thread(new TestRunnable(TEST_USB_NOISE) {
+ public void run() {
+ super.run();
+ if (mUsbMicConnected) {
+ sendMessage(mTestId, TEST_MESSAGE, "Testing USB Microphone: Noise");
+ mFreqAverageUsbNoise.reset();
+ mFreqAverageUsbNoise.setCaptureType(VectorAverage.CAPTURE_TYPE_MAX);
+ record(TEST_DURATION_USB_NOISE);
+ sendMessage(mTestId, TEST_ENDED, "Testing Completed");
+ mTestsDone[mTestId] = true;
+ } else {
+ sendMessage(mTestId, TEST_ENDED_ERROR,
+ "USB Microphone not detected.");
+ mTestsDone[mTestId] = false;
+ }
+ }
+ });
+ break;
+ }
mTestThread.start();
} else {
Log.v(TAG,"test Thread already running.");
}
}
-
- Thread mTestThread;
- Runnable mTest1Runnable = new Runnable() {
- public void run() {
- Message msg = Message.obtain();
- msg.what = TEST_STARTED;
- mMessageHandler.sendMessage(msg);
-
- setMinLevel();
- sendMessage("Testing Background Environment");
- mCurrentTest = 0;
- mSPlayer.setBalance(0.5f);
- mFreqAverageBase.reset();
- play();
-
- setMaxLevel();
- sendMessage("Testing Built in Microphone");
- mCurrentTest = 1;
- mFreqAverageBuiltIn.reset();
- mSPlayer.setBalance(0.5f);
- play();
-
- mCurrentTest = -1;
- sendMessage("Testing Completed");
-
- Message msg2 = Message.obtain();
- msg2.what = TEST1_ENDED;
- mMessageHandler.sendMessage(msg2);
+ public class TestRunnable implements Runnable {
+ public int mTestId;
+ public boolean mUsbMicConnected;
+ TestRunnable(int testId) {
+ Log.v(TAG,"New TestRunnable");
+ mTestId = testId;
}
-
- private void play() {
+ public void run() {
+ mCurrentTest = mTestId;
+ sendMessage(mTestId, TEST_STARTED,"");
+ mUsbMicConnected =
+ UsbMicrophoneTester.getIsMicrophoneConnected(getApplicationContext());
+ };
+ public void record(int durationMs) {
startRecording();
- mSPlayer.play(true);
-
try {
- Thread.sleep(2000);
+ Thread.sleep(durationMs);
} catch (InterruptedException e) {
e.printStackTrace();
//restore interrupted status
Thread.currentThread().interrupt();
}
-
- mSPlayer.play(false);
stopRecording();
}
-
- private void sendMessage(String str) {
+ public void sendMessage(int testId, int msgType, String str) {
Message msg = Message.obtain();
- msg.what = TEST1_MESSAGE;
+ msg.what = msgType;
msg.obj = str;
+ msg.arg1 = testId;
mMessageHandler.sendMessage(msg);
}
- };
-
- /**
- * Start the loopback audio test
- */
- private void startTest2() {
- if (mTestThread != null && !mTestThread.isAlive()) {
- mTestThread = null; //kill it.
- }
-
- if (mTestThread == null) {
- Log.v(TAG,"Executing test2 Thread");
- mTestThread = new Thread(mTest2Runnable);
- //getPassButton().setEnabled(false);
- if (!mSPlayer.isAlive())
- mSPlayer.start();
- mTestThread.start();
- } else {
- Log.v(TAG,"test Thread already running.");
- }
}
- Runnable mTest2Runnable = new Runnable() {
- public void run() {
- Message msg = Message.obtain();
- msg.what = TEST_STARTED;
- mMessageHandler.sendMessage(msg);
-
- sendMessage("Testing Reference USB Microphone");
- mCurrentTest = 2;
- mFreqAverageReference.reset();
- mSPlayer.setBalance(0.5f);
- play();
-
- mCurrentTest = -1;
- sendMessage("Testing Completed");
-
- Message msg2 = Message.obtain();
- msg2.what = TEST_ENDED;
- mMessageHandler.sendMessage(msg2);
- }
-
- private void play() {
- startRecording();
- mSPlayer.play(true);
-
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- //restore interrupted status
- Thread.currentThread().interrupt();
- }
-
- mSPlayer.play(false);
- stopRecording();
- }
-
- private void sendMessage(String str) {
- Message msg = Message.obtain();
- msg.what = TEST_MESSAGE;
- msg.obj = str;
- mMessageHandler.sendMessage(msg);
- }
- };
-
private Handler mMessageHandler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
+ int testId = msg.arg1; //testId
+ String str = (String) msg.obj;
switch (msg.what) {
case TEST_STARTED:
- showWait(true);
- getPassButton().setEnabled(false);
+ showWait(testId, true);
+ break;
+ case TEST_MESSAGE:
+ showMessage(testId, str);
break;
case TEST_ENDED:
- showWait(false);
- computeTest2Results();
+ showWait(testId, false);
+ playerStopAll();
+ showMessage(testId, str);
+ appendResultsToScreen(testId, "test finished");
+ computeAllResults();
break;
- case TEST1_MESSAGE: {
- String str = (String)msg.obj;
- if (str != null) {
- mTest1Result.setText(str);
- }
- }
- break;
- case TEST1_ENDED:
- showWait(false);
- computeTest1Results();
- break;
- case TEST_MESSAGE: {
- String str = (String)msg.obj;
- if (str != null) {
- mTest2Result.setText(str);
- }
- }
- break;
+ case TEST_ENDED_ERROR:
+ showWait(testId, false);
+ playerStopAll();
+ showMessage(testId, str);
+ computeAllResults();
default:
Log.e(TAG, String.format("Unknown message: %d", msg.what));
}
@@ -516,41 +567,54 @@
}
}
+ private void computeAllResults() {
+ StringBuilder sb = new StringBuilder();
- /**
- * compute test1 results
- */
- private void computeTest1Results() {
+ boolean allDone = true;
- Results resultsBase = new Results("Base");
- if (computeResultsForVector(mFreqAverageBase, resultsBase, true, baseBandSpecsArray)) {
- appendResultsToScreen(resultsBase.toString(), mTest1Result);
- recordTestResults(resultsBase);
+ for (int i = 0; i < TEST_COUNT; i++) {
+ allDone = allDone & mTestsDone[i];
+ sb.append(String.format("%s : %s\n", getTestString(i),
+ mTestsDone[i] ? "DONE" :" NOT DONE"));
}
- Results resultsBuiltIn = new Results("BuiltIn");
- if (computeResultsForVector(mFreqAverageBuiltIn, resultsBuiltIn, false, bandSpecsArray)) {
- appendResultsToScreen(resultsBuiltIn.toString(), mTest1Result);
+ if (allDone) {
+ sb.append(computeResults());
+ } else {
+ sb.append("Please execute all tests for results\n");
+ }
+ mGlobalResultText.setText(sb.toString());
+ }
+
+ private String computeResults() {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append("\n");
+
+ Results resultsBuiltIn = new Results(getTestString(TEST_NOISE));
+ if (computeResultsForVector(mFreqAverageNoise, resultsBuiltIn, false, bandSpecsArray)) {
+ sb.append(resultsBuiltIn.toString());
+ sb.append("\n");
recordTestResults(resultsBuiltIn);
}
- //tell user to connect USB Microphone
- appendResultsToScreen("\n\n" +
- getResources().getText(R.string.audio_frequency_mic_connect_mic), mTest1Result);
- enableLayout(mLayoutTest2a, true);
- }
+ Results resultsBase = new Results(getTestString(TEST_USB_BACKGROUND));
+ if (computeResultsForVector(mFreqAverageUsbBackground, resultsBase, true,
+ baseBandSpecsArray)) {
+ sb.append(resultsBase.toString());
+ sb.append("\n");
+ recordTestResults(resultsBase);
+ }
- /**
- * compute test results
- */
- private void computeTest2Results() {
- Results resultsReference = new Results("Reference");
- if (computeResultsForVector(mFreqAverageReference, resultsReference,
- false, bandSpecsArray)) {
- appendResultsToScreen(resultsReference.toString(),mTest2Result);
- recordTestResults(resultsReference);
+ Results resultsUsbNoise = new Results(getTestString(TEST_USB_NOISE));
+ if (computeResultsForVector(mFreqAverageUsbNoise, resultsUsbNoise, false,
+ bandSpecsArray)) {
+ sb.append(resultsUsbNoise.toString());
+ sb.append("\n");
+ recordTestResults(resultsUsbNoise);
getPassButton().setEnabled(true);
}
+ return sb.toString();
}
private boolean computeResultsForVector(VectorAverage freqAverage, Results results,
@@ -598,7 +662,7 @@
currentBand = 0;
for (int i = 0; i < points; i++) {
double freq = (double)mSamplingRate * i / (double)mBlockSizeSamples;
- if (freq > bandSpecs[currentBand].mFreqStop) {
+ if (freq > bandSpecs[currentBand].mFreqStop) {
currentBand++;
if (currentBand >= mBands)
break;
@@ -623,6 +687,20 @@
text.setText(currentText + "\n" + str);
}
+ private void appendResultsToScreen(int testId, String str) {
+ switch(testId) {
+ case TEST_NOISE:
+ appendResultsToScreen(str, mResultTestNoise);
+ break;
+ case TEST_USB_BACKGROUND:
+ appendResultsToScreen(str, mResultTestUsbBackground);
+ break;
+ case TEST_USB_NOISE:
+ appendResultsToScreen(str, mResultTestUsbNoise);
+ break;
+ }
+ }
+
/**
* Store test results in log
*/
@@ -809,17 +887,15 @@
halfMagnitude[i] = Math.sqrt(mC.mReal[i] * mC.mReal[i] + mC.mImag[i] * mC.mImag[i]);
}
- mFreqAverageMain.setData(halfMagnitude, false); //average all of them!
-
switch(mCurrentTest) {
- case 0:
- mFreqAverageBase.setData(halfMagnitude, false);
+ case TEST_NOISE:
+ mFreqAverageNoise.setData(halfMagnitude, false);
break;
- case 1:
- mFreqAverageBuiltIn.setData(halfMagnitude, false);
+ case TEST_USB_BACKGROUND:
+ mFreqAverageUsbBackground.setData(halfMagnitude, false);
break;
- case 2:
- mFreqAverageReference.setData(halfMagnitude, false);
+ case TEST_USB_NOISE:
+ mFreqAverageUsbNoise.setData(halfMagnitude, false);
break;
}
}
@@ -842,32 +918,4 @@
}
}
- private void testSpeakersReady() {
- boolean isUsbConnected =
- UsbMicrophoneTester.getIsMicrophoneConnected(getApplicationContext());
- if (isUsbConnected) {
- mSpeakerReadyText.setText(" USB device detected, please remove it");
- enableLayout(mLayoutTest1, false);
- //fail
- } else {
- mSpeakerReadyText.setText(" No USB device detected. OK");
- enableLayout(mLayoutTest1, true);
- }
- }
-
- private void testUSB() {
- boolean isConnected = UsbMicrophoneTester.getIsMicrophoneConnected(getApplicationContext());
- mUsbDevicesInfo = UsbMicrophoneTester.getUSBDeviceListString(getApplicationContext());
-
- if (isConnected) {
- mUsbStatusText.setText(
- getResources().getText(R.string.audio_frequency_mic_mic_ready_text));
- enableLayout(mLayoutTest2b, true);
- } else {
- mUsbStatusText.setText(
- getResources().getText(R.string.audio_frequency_mic_mic_not_ready_text));
- enableLayout(mLayoutTest2b, false);
- }
- }
-
}