package com.DeviceTest;
|
|
import java.io.File;
|
|
import android.app.Activity;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.media.AudioManager;
|
import android.os.Bundle;
|
import android.os.Environment;
|
import android.os.Handler;
|
import android.os.Message;
|
import android.os.StatFs;
|
import android.util.Log;
|
import android.view.KeyEvent;
|
import android.view.View;
|
import android.view.Window;
|
import android.view.View.OnClickListener;
|
import android.widget.Button;
|
import android.widget.TextView;
|
|
import com.DeviceTest.helper.ControlButtonUtil;
|
import com.DeviceTest.helper.Recorder;
|
import com.DeviceTest.helper.VUMeter;
|
|
public class PhoneMicTestActivity extends Activity implements OnClickListener{
|
private static final String TAG = PhoneMicTestActivity.class
|
.getSimpleName();
|
|
private final static String ERRMSG = "Record error";
|
private final static int RECORD_TIME = 3;
|
private static final int MSG_TEST_MIC_ING = 8738;
|
private static final int MSG_TEST_MIC_OVER = 13107;
|
private static final int MSG_TEST_MIC_START = 4369;
|
private boolean isSDcardTestOk = false;
|
private AudioManager mAudioManager;
|
private Handler mHandler;
|
private int mOldVolume;
|
private Recorder mRecorder;
|
private TextView mResult;
|
boolean mSpeakerOn = false;
|
private TextView mText;
|
int mTimes;
|
TextView mTitle;
|
private Button mBtnRetest;
|
private VUMeter mVUMeter;
|
|
public PhoneMicTestActivity() {
|
this.mHandler = new MyHandler();
|
}
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
|
getWindow().addFlags(1152);
|
setContentView(R.layout.phonemictest);
|
|
mVUMeter = (VUMeter) findViewById(R.id.uvMeter);
|
this.mResult = (TextView) findViewById(R.id.phoneresultText);
|
this.mResult.setVisibility(View.VISIBLE);
|
this.mResult.setGravity(17);
|
ControlButtonUtil.initControlButtonView(this);
|
mBtnRetest = (Button)findViewById(R.id.btn_retest);
|
mBtnRetest.setOnClickListener(this);
|
mBtnRetest.setEnabled(false);
|
this.mRecorder = new Recorder();
|
this.mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
|
mVUMeter.setRecorder(mRecorder);
|
}
|
|
@Override
|
protected void onResume() {
|
|
super.onResume();
|
|
this.isSDcardTestOk = false;
|
if (!Environment.getExternalStorageState().equals(
|
Environment.MEDIA_MOUNTED)) {
|
this.mResult.setText(R.string.InsertSdCard);
|
return;
|
}
|
|
if (!isSDcardHasSpace()) {
|
this.mResult.setText(R.string.SdCardNospace);
|
stopMediaPlayBack();
|
return;
|
}
|
stopMediaPlayBack();
|
this.isSDcardTestOk = true;
|
|
this.mOldVolume = this.mAudioManager
|
.getStreamVolume(AudioManager.STREAM_MUSIC);
|
int maxVolume = this.mAudioManager
|
.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
|
this.mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
|
maxVolume, 0);
|
|
this.mSpeakerOn = mAudioManager.isSpeakerphoneOn();
|
|
if (!this.mSpeakerOn) {
|
this.mAudioManager.setSpeakerphoneOn(true);
|
}
|
this.mHandler.sendEmptyMessage(MSG_TEST_MIC_START);
|
|
}
|
|
@Override
|
protected void onPause() {
|
|
super.onPause();
|
|
if (this.isSDcardTestOk) {
|
|
switch (this.mRecorder.state()) {
|
|
case Recorder.IDLE_STATE:
|
this.mRecorder.delete();
|
break;
|
case Recorder.PLAYING_STATE:
|
this.mRecorder.stop();
|
this.mRecorder.delete();
|
break;
|
case Recorder.RECORDING_STATE:
|
this.mRecorder.stop();
|
this.mRecorder.clear();
|
break;
|
}
|
|
|
mAudioManager.setStreamVolume(3, mOldVolume, 0);
|
|
if (mSpeakerOn) {
|
mAudioManager.setSpeakerphoneOn(false);
|
|
}
|
}
|
|
}
|
|
public void stopMediaPlayBack() {
|
Intent localIntent = new Intent("com.android.music.musicservicecommand");
|
localIntent.putExtra("command", "pause");
|
sendBroadcast(localIntent);
|
}
|
|
public boolean isSDcardHasSpace() {
|
File pathFile = android.os.Environment.getExternalStorageDirectory();
|
|
StatFs statfs = new StatFs(pathFile.getPath());
|
|
if (statfs.getAvailableBlocks() > 1) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
class MyHandler extends Handler {
|
MyHandler() {
|
}
|
|
@Override
|
public void handleMessage(Message msg) {
|
|
|
switch (msg.what) {
|
default:
|
case MSG_TEST_MIC_START:
|
|
removeMessages(MSG_TEST_MIC_START);
|
mTimes = RECORD_TIME;
|
|
mResult.setText(" "+mTimes+" ");
|
mRecorder.startRecording(3, ".amr");
|
sendEmptyMessageDelayed(MSG_TEST_MIC_ING, 1000L);
|
break;
|
case MSG_TEST_MIC_ING:
|
|
|
|
if (mTimes > 0) {
|
|
mResult.setText(" "+mTimes+" ");
|
mTimes--;
|
Log.i(TAG, "mTimes=" + mTimes);
|
sendEmptyMessageDelayed(MSG_TEST_MIC_ING, 1000L);
|
} else {
|
removeMessages(MSG_TEST_MIC_ING);
|
sendEmptyMessage(MSG_TEST_MIC_OVER);
|
|
}
|
|
break;
|
case MSG_TEST_MIC_OVER:
|
removeMessages(MSG_TEST_MIC_OVER);
|
mRecorder.stopRecording();
|
if (mRecorder.sampleLength() > 0) {
|
mResult.setText(R.string.HeadsetRecodrSuccess);
|
mRecorder.startPlayback();
|
} else {
|
mResult.setText(R.string.RecordError);
|
}
|
mBtnRetest.setEnabled(true);
|
break;
|
}
|
|
mVUMeter.invalidate();
|
}
|
|
}
|
|
public void onClick(View v) {
|
switch (this.mRecorder.state()) {
|
|
case Recorder.IDLE_STATE:
|
this.mRecorder.delete();
|
break;
|
case Recorder.PLAYING_STATE:
|
this.mRecorder.stop();
|
this.mRecorder.delete();
|
break;
|
}
|
mRecorder.stopPlayback();
|
mBtnRetest.setEnabled(false);
|
this.mHandler.sendEmptyMessage(MSG_TEST_MIC_START);
|
|
}
|
public boolean dispatchKeyEvent(KeyEvent event) {
|
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
|
return false;
|
}
|
return super.dispatchKeyEvent(event);
|
}
|
}
|