package nl.sogeti.android.gpstracker.actions; import java.util.Timer; import java.util.TimerTask; import nl.sogeti.android.gpstracker.R; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.AbsSpinner; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.Spinner; public class SpeakSummary extends Activity { private static final int MY_DATA_CHECK_CODE = 42; private final OnClickListener mOkayOnClickListener = new OnClickListener() { public void onClick( View v ) { long item = mSpinner.getSelectedItemId(); int period = 1000 * SpeakSummary.this.getResources().getIntArray( R.array.intervals_values )[(int) item]; startTimer( period ); } }; private final OnClickListener mCancelOnClickListener = new OnClickListener() { public void onClick( View v ) { stopTimer(); } }; private final TimerTask mTimerTask = new TimerTask() { @Override public void run() { Log.d( TAG, "TimerTask#run()" ); Intent speak = new Intent( SpeakerService.ACTION_SPEAK, mTrackUri, SpeakSummary.this, SpeakerService.class ); SpeakSummary.this.startService( speak ); } }; protected Intent mSpeaker; private static final String TAG = SpeakSummary.class.getSimpleName(); private AbsSpinner mSpinner; private Uri mTrackUri; private Timer mTimer ; private Button mOkayButton; @Override protected void onCreate( Bundle load ) { Log.d( TAG, "onCreate(" ); super.onCreate( load ); setContentView( R.layout.voiceover ); mOkayButton = (Button) findViewById( R.id.voiceover_btn_okay ); mOkayButton.setOnClickListener( this.mOkayOnClickListener ); Button cancel = (Button) findViewById( R.id.voiceover_btn_cancel ); cancel.setOnClickListener( this.mCancelOnClickListener ); this.mTrackUri = this.getIntent().getData(); mSpeaker = new Intent( SpeakerService.ACTION_PREPARE, mTrackUri, SpeakSummary.this, SpeakerService.class ); mSpinner = (Spinner) findViewById( R.id.voiceover_interval ); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.intervals, android.R.layout.simple_spinner_item ); adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item ); mSpinner.setAdapter( adapter ); checkTTS(); } private void checkTTS() { Intent checkIntent = new Intent(); checkIntent.setAction( TextToSpeech.Engine.ACTION_CHECK_TTS_DATA ); startActivityForResult( checkIntent, MY_DATA_CHECK_CODE ); } protected void onActivityResult( int requestCode, int resultCode, Intent data ) { if( requestCode == MY_DATA_CHECK_CODE ) { if( resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS ) { mOkayButton.setEnabled( true ); } else { // missing data, install it Intent installIntent = new Intent(); installIntent.setAction( TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA ); checkTTS(); } } } protected void stopTimer() { this.stopService( mSpeaker ); if( this.mTimer != null ) { this.mTimer.cancel(); this.mTimer.purge(); this.mTimer = null; } } protected void startTimer( long period ) { if( period > 10000 ) { this.startService( mSpeaker ); this.mTimer = new Timer(); this.mTimer.scheduleAtFixedRate( this.mTimerTask, period, period ); } else { Log.e( TAG, "Update interval is to small, should not happen! "+ period + "miliseconds" ); } } }