package com.jadn.cc.ui;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.os.Bundle;
import android.os.Handler;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import com.jadn.cc.R;
import com.jadn.cc.core.CarCastApplication;
import com.jadn.cc.util.MailRecordings;
import com.jadn.cc.util.Recording;
import com.jadn.cc.util.RecordingSet;
import com.jadn.cc.util.Updater;
public class AudioRecorder extends BaseActivity {
Updater updater;
// Need handler for callbacks to the UI thread
final Handler handler = new Handler();
RecordingSet recordingSet;
final Runnable mUpdateResults = new Runnable() {
@Override
public void run() {
ListView listView = (ListView) findViewById(R.id.audioRecorderListing);
if (listView.getCount() != recordingSet.getRecordings().size())
showRecordings();
}
};
@Override
protected void onPause() {
super.onPause();
updater.allDone();
}
@Override
protected void onResume() {
super.onResume();
updater = new Updater(handler, mUpdateResults);
}
private Button fb(int id) {
return (Button) findViewById(id);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
if (item.getTitle().equals("Play")) {
Recording recording = recordingSet.getRecordings().get(info.position);
recording.play();
}
if (item.getTitle().equals("Delete")) {
Recording recording = recordingSet.getRecordings().get(info.position);
recordingSet.delete(recording);
showRecordings();
}
return true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recorder);
recordingSet = new RecordingSet(this);
setTitle(CarCastApplication.getAppTitle() + ": Audio Note Recorder");
setReadyToRecord(true);
fb(R.id.audioRecorderRecordButton).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
recordingSet.record();
// transition to record mode
setReadyToRecord(false);
}
});
fb(R.id.audioRecorderCancelButton).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
recordingSet.cancel();
// transition back to ready
setReadyToRecord(true);
}
});
fb(R.id.audioRecorderSaveButton).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
recordingSet.save();
// transition back to ready
setReadyToRecord(true);
showRecordings();
// only let wifi connected trigger this 4 now,
// contentService.publishRecordings();
}
});
ListView listView = (ListView) findViewById(R.id.audioRecorderListing);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
recordingSet.getRecordings().get(position).play();
}
});
registerForContextMenu(listView);
showRecordings();
updater = new Updater(handler, mUpdateResults);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add("Play");
menu.add("Delete");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.audio_recorder_menu, menu);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
if (item.getItemId() == R.id.deleteAll) {
recordingSet.deleteAll();
showRecordings();
}
if (item.getItemId() == R.id.sendAudioToEmail) {
if(MailRecordings.isAudioSendingConfigured(contentService))
contentService.publishRecordings(this);
else
Toast.makeText(this, "Audio Note emailing not configured. See settings.", Toast.LENGTH_LONG).show();
}
return super.onMenuItemSelected(featureId, item);
}
private void setReadyToRecord(boolean ready) {
if (ready) {
fb(R.id.audioRecorderRecordButton).setVisibility(View.VISIBLE);
fb(R.id.audioRecorderCancelButton).setVisibility(View.INVISIBLE);
fb(R.id.audioRecorderSaveButton).setVisibility(View.INVISIBLE);
((ProgressBar) findViewById(R.id.audioRecorderBusy)).setVisibility(View.INVISIBLE);
} else {
fb(R.id.audioRecorderRecordButton).setVisibility(View.INVISIBLE);
fb(R.id.audioRecorderCancelButton).setVisibility(View.VISIBLE);
fb(R.id.audioRecorderSaveButton).setVisibility(View.VISIBLE);
((ProgressBar) findViewById(R.id.audioRecorderBusy)).setVisibility(View.VISIBLE);
}
}
private void showRecordings() {
ListView listView = (ListView) findViewById(R.id.audioRecorderListing);
List<Recording> recordings = recordingSet.getRecordings();
ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
for (Recording recording : recordings) {
HashMap<String, String> item = new HashMap<String, String>();
item.put("line1", "");
item.put("line2", recording.getTimeString());
item.put("amountHeard", recording.getDurationString());
list.add(item);
}
/*
* ArrayAdapter<HashMap<String, String>> notes = new ArrayAdapter<HashMap<String, String>>(this,
* R.layout.recorded_items, list);
*/
SimpleAdapter notes = new SimpleAdapter(this, list, R.layout.recorded_items, new String[] { "line1", "line2", "amountHeard" },
new int[] { R.id.firstLine, R.id.secondLine, R.id.amountHeard });
listView.setAdapter(notes);
}
}