/** * Copyright (c) 2012 Vinayak Solutions Private Limited * See the file license.txt for copying permission. */ package com.vinsol.expensetracker.entry; import java.io.File; import java.util.HashMap; import java.util.Map; import android.os.Bundle; import android.os.SystemClock; import android.util.TypedValue; import android.view.View; import android.widget.Button; import android.widget.Chronometer; import android.widget.Chronometer.OnChronometerTickListener; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.flurry.android.FlurryAgent; import com.vinsol.expensetracker.Constants; import com.vinsol.expensetracker.R; import com.vinsol.expensetracker.helpers.AudioPlay; import com.vinsol.expensetracker.helpers.RecordingHelper; import com.vinsol.expensetracker.utils.DisplayTimeForChronometer; import com.vinsol.expensetracker.utils.MyCountDownTimer; public class Voice extends EditAbstract { private RelativeLayout editVoiceDetails; private Chronometer editTimeDetailsChronometer; private Button editStopButton; private Button editPlayButton; private Button editRerecordButton; private MyCountDownTimer countDownTimer; private RecordingHelper mRecordingHelper; private AudioPlay mAudioPlay; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ////// ******** Initializing and assigning memory to UI Items ********** ///////// editVoiceDetails = (RelativeLayout) findViewById(R.id.edit_voice_details); editTimeDetailsChronometer = (Chronometer) findViewById(R.id.edit_time_details_chronometer); editStopButton = (Button) findViewById(R.id.edit_stop_button); editPlayButton = (Button) findViewById(R.id.edit_play_button); editRerecordButton = (Button) findViewById(R.id.edit_rerecord_button); typeOfEntry = R.string.voice; typeOfEntryFinished = R.string.finished_voiceentry; typeOfEntryUnfinished = R.string.unfinished_voiceentry; editHelper(); createDatabaseEntry(); setFavoriteHelper(); // ////// ******** Starts Recording each time activity starts ****** /////// if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { setGraphicsVoice(); if (intentExtras.containsKey(Constants.KEY_ENTRY_LIST_EXTRA) && !setUnknown) { File tempFile; if(isFromFavorite) { tempFile = fileHelper.getAudioFileFavorite(mFavoriteList.id); } else { tempFile = fileHelper.getAudioFileEntry(entry.id); } if (tempFile.canRead()) { if(isFromFavorite) { mAudioPlay = new AudioPlay(mFavoriteList.id, this, isFromFavorite); } else { mAudioPlay = new AudioPlay(entry.id, this, isFromFavorite); } editStopButton.setVisibility(View.GONE); editPlayButton.setVisibility(View.VISIBLE); editRerecordButton.setVisibility(View.VISIBLE); editTimeDetailsChronometer.setText(new DisplayTimeForChronometer().getDisplayTime(mAudioPlay.getPlayBackTime())); } else { editTimeDetailsChronometer.setText("Audio File Missing"); editTimeDetailsChronometer.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); editRerecordButton.setVisibility(View.VISIBLE); editStopButton.setVisibility(View.GONE); editPlayButton.setVisibility(View.GONE); } } else { if(!isFromFavorite) { mRecordingHelper = new RecordingHelper(fileHelper.getAudioFileEntry(entry.id), this); mRecordingHelper.startRecording(); controlVoiceChronometer(); } } } else { Toast.makeText(this, "sdcard not available", Toast.LENGTH_LONG).show(); } setClickListeners(); } @Override protected void onPause() { ////// ****** stop recording & audio playback ***** /////// stopRecordingAndPlayback(); super.onPause(); } private void setClickListeners() { //////// ******* Adding Click Listeners to UI Items ******** ////////// editStopButton.setOnClickListener(this); editPlayButton.setOnClickListener(this); editRerecordButton.setOnClickListener(this); } private void controlVoiceChronometer() { editTimeDetailsChronometer.start(); editTimeDetailsChronometer.setOnChronometerTickListener(new OnChronometerTickListener() { @Override public void onChronometerTick(Chronometer chronometer) { if (editTimeDetailsChronometer.getText().length() > 5) { editTimeDetailsChronometer.stop(); editStopButton.setVisibility(View.GONE); editPlayButton.setVisibility(View.VISIBLE); editRerecordButton.setVisibility(View.VISIBLE); } } }); } private void setGraphicsVoice() { ////// ****** Shows Voice Details ********//////// editVoiceDetails.setVisibility(View.VISIBLE); } @Override public void onClick(View v) { super.onClick(v); // ///// ******** Adding On Click Actions to click listeners ********* ////////// switch (v.getId()) { // // ***** if stop button pressed ****** ////// case R.id.edit_stop_button: stopRecording(true); break; // // ***** if play button pressed ****** ////// case R.id.edit_play_button: // //// ******** to handle playback of recorded file ********* //////// if(isFromFavorite) { mAudioPlay = new AudioPlay(mFavoriteList.id, this, isFromFavorite); } else { mAudioPlay = new AudioPlay(entry.id, this, isFromFavorite); } // ///// ******* Chronometer Starts Countdown ****** /////// countDownTimer = new MyCountDownTimer(mAudioPlay.getPlayBackTime(), 1000, editTimeDetailsChronometer,editStopButton,editPlayButton,mAudioPlay); // //// ****** Handles UI items on button click ****** /////// editPlayButton.setVisibility(View.GONE); editStopButton.setVisibility(View.VISIBLE); editRerecordButton.setVisibility(View.VISIBLE); // /// ******** Start Audio Playback and counter to play audio // ****** /////// if (!mAudioPlay.isAudioPlaying()) { mAudioPlay.startPlayBack(); } else { mAudioPlay.stopPlayBack(); mAudioPlay.startPlayBack(); } countDownTimer.start(); break; // // ***** if rerecord button pressed ****** ////// case R.id.edit_rerecord_button: isChanged = true; if(countDownTimer != null) {countDownTimer.cancel();} // /// ******* If Audio PlayBack is there stop playing audio *******////// if (mAudioPlay != null && mAudioPlay.isAudioPlaying()) {mAudioPlay.stopPlayBack();} // //// ****** Handles UI items on button click ****** /////// editPlayButton.setVisibility(View.GONE); editStopButton.setVisibility(View.VISIBLE); editRerecordButton.setVisibility(View.GONE); // //// ****** Restarts chronometer and recording ******* //////// if(mRecordingHelper != null && mRecordingHelper.isRecording()) {mRecordingHelper.stopRecording();} File mPath; mDatabaseAdapter.open(); if(isFromFavorite) { mPath = fileHelper.getAudioFileFavorite(mFavoriteList.id); mDatabaseAdapter.updateFileUploadedFavoriteTable(mFavoriteList.id); } else { mPath = fileHelper.getAudioFileEntry(entry.id); mDatabaseAdapter.updateFileUploadedEntryTable(entry.id); } mDatabaseAdapter.close(); mRecordingHelper = new RecordingHelper(mPath, this); mRecordingHelper.startRecording(); editTimeDetailsChronometer.setTextSize(TypedValue.COMPLEX_UNIT_SP, 36); editTimeDetailsChronometer.setBase(SystemClock.elapsedRealtime()); editTimeDetailsChronometer.start(); break; default: break; } } @Override protected void deleteFile() { editTimeDetailsChronometer.stop(); fileHelper.deleteAllEntryFiles(entry.id); } @Override protected Boolean checkEntryModified() { if(super.checkEntryModified() || isChanged) return true; else return false; } @Override protected boolean doTaskIfChanged() { return isChanged; } @Override protected void setDefaultTitle() { if(isFromFavorite) { ((TextView)findViewById(R.id.header_title)).setText(getString(R.string.edit_favorite)+" "+getString(R.string.finished_voiceentry)); } else { ((TextView)findViewById(R.id.header_title)).setText(getString(R.string.finished_voiceentry)); } } @Override protected boolean checkFavoriteComplete() { if(editAmount != null && !editAmount.getText().toString().equals("")) { return true; } return false; } @Override public void onBackPressed() { stopRecordingAndPlayback(); super.onBackPressed(); } private void stopRecordingAndPlayback() { if(mRecordingHelper != null && mRecordingHelper.isRecording()) { if(editTimeDetailsChronometer != null) {editTimeDetailsChronometer.stop();} mRecordingHelper.stopRecording(); } if(mAudioPlay != null && mAudioPlay.isAudioPlaying()) { if(editTimeDetailsChronometer != null) {editTimeDetailsChronometer.stop();} if(isFromFavorite) { mAudioPlay = new AudioPlay(mFavoriteList.id , this, isFromFavorite); } else { mAudioPlay = new AudioPlay(entry.id , this, isFromFavorite); } if(editTimeDetailsChronometer != null) {editTimeDetailsChronometer.setText(new DisplayTimeForChronometer().getDisplayTime(mAudioPlay.getPlayBackTime()));} mAudioPlay.stopPlayBack(); } } private void stopRecording(boolean isComingFromViewClick) { if(countDownTimer != null){countDownTimer.cancel();} // //// ****** Handles UI items on button click ****** /////// editStopButton.setVisibility(View.GONE); editPlayButton.setVisibility(View.VISIBLE); editRerecordButton.setVisibility(View.VISIBLE); // //// ******* Stop Recording Audio and stop chronometer ******** //////// if(mRecordingHelper != null && mRecordingHelper.isRecording()) {mRecordingHelper.stopRecording();} editTimeDetailsChronometer.stop(); if(mAudioPlay != null && mAudioPlay.isAudioPlaying()) {mAudioPlay.stopPlayBack();} if(isFromFavorite) { mAudioPlay = new AudioPlay(mFavoriteList.id , this, isFromFavorite); } else { mAudioPlay = new AudioPlay(entry.id , this, isFromFavorite); } String displayTime = new DisplayTimeForChronometer().getDisplayTime(mAudioPlay.getPlayBackTime()); editTimeDetailsChronometer.setText(displayTime); Map<String, String> map = new HashMap<String, String>(); map.put("Display Time ", displayTime); FlurryAgent.onEvent(getString(R.string.audio_recording_time),map); } }