package com.asp.radiorake; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; import android.widget.*; import com.aspillai.R; import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.Collections; public class RecordingsActivity extends RecordioBaseActivity { private String TAG = "com.asp.radiorake.RecordingsActivity"; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.recordings); final File recFolder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + getString(R.string.app_name)); final ArrayList<String> fileNames = getFileList(); final ListView fileList = (ListView) findViewById(R.id.recordings_lst_files); final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.recordings_list_item, fileNames); fileList.setAdapter(adapter); fileList.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> adapterView, View view, int pos, final long id) { if (!fileNames.get(0).equals(getString(R.string.no_recordings_available))) { AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); builder.setTitle(fileNames.get((int) id)) .setItems(new String[]{"Play", "Rename", "Delete"}, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int item) { switch (item) { // Play case 0: final RadioApplication radioApplication = (RadioApplication) getApplication(); if (alreadyPlaying() || radioApplication.isBuffering()) { AlertDialog.Builder builder = new AlertDialog.Builder(RecordingsActivity.this); StringBuilder sb = new StringBuilder("Stop playing "); if (!radioApplication.isBuffering()) { sb.append(radioApplication.getPlayingType() == RadioApplication.PlayingStream ? radioApplication.getPlayingStation().getStationName() : radioApplication.getPlayingFileDetails().getName()); } sb.append("?"); builder.setMessage(sb.toString()) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) { // Need to wait until buffering is complete before continuing updateActivity("Preparing to play" + fileNames.get((int) id)); while (radioApplication.isBuffering()) { try { Thread.sleep(500); } catch (InterruptedException ignored) { } } radioApplication.getMediaPlayer().reset(); Intent playerIntent = new Intent("com.statichiss.recordio.PlayerService"); playerIntent.putExtra(getString(R.string.player_service_operation_key), RadioApplication.StartPlayingFile); playerIntent.putExtra(getString(R.string.player_service_file_name_key), fileNames.get((int) id)); PlayerService.sendWakefulWork(RecordingsActivity.this, playerIntent); Intent radioActivityIntent = new Intent(RecordingsActivity.this, RadioActivity.class); startActivity(radioActivityIntent); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) { } }); builder.create().show(); } else { Intent playerIntent = new Intent("com.asp.radiorake.PlayerService"); playerIntent.putExtra(getString(R.string.player_service_operation_key), RadioApplication.StartPlayingFile); playerIntent.putExtra(getString(R.string.player_service_file_name_key), fileNames.get((int) id)); PlayerService.sendWakefulWork(RecordingsActivity.this, playerIntent); Intent radioActivityIntent = new Intent(RecordingsActivity.this, RadioActivity.class); startActivity(radioActivityIntent); } break; // Rename case 1: final EditText newName = new EditText(RecordingsActivity.this); newName.setSingleLine(); newName.setText(fileNames.get((int) id)); AlertDialog.Builder builder = new AlertDialog.Builder(RecordingsActivity.this) .setTitle("Rename file") .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) { if (!new File(recFolder, fileNames.get((int) id)).renameTo(new File(recFolder, newName.getText().toString()))) { Log.e(TAG, "Failed to rename " + fileNames.get((int) id) + " to " + newName.getText().toString()); Toast.makeText(getApplicationContext(), "Failed to rename file", Toast.LENGTH_SHORT).show(); } fileNames.set((int) id, newName.getText().toString()); adapter.notifyDataSetChanged(); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) { } }); builder.setView(newName); AlertDialog dialog = builder.create(); dialog.show(); break; // Delete case 2: new AlertDialog.Builder(RecordingsActivity.this) .setMessage("Delete " + fileNames.get((int) id) + "?") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) { if (!new File(recFolder, fileNames.get((int) id)).delete()) { Log.e(TAG, "Failed to delete " + fileNames.get((int) id)); Toast.makeText(getApplicationContext(), "Failed to delete " + fileNames.get((int) id), Toast.LENGTH_SHORT).show(); } else { fileNames.remove((int) id); if (fileNames.size() == 0) { fileNames.add("No recordings available"); } adapter.notifyDataSetChanged(); } } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) { } }) .show(); break; default: Log.e(TAG, "Unexpected option returned from File dialog, option #" + item); break; } } }); builder.create().show(); } } }); } private ArrayList<String> getFileList() { final File recFolder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + getString(R.string.app_name)); final String[] files = recFolder.list(new FilenameFilter() { public boolean accept(File file, String name) { return name.endsWith("mp3"); } }); final ArrayList<String> fileNames = new ArrayList<String>(); if (files != null && files.length > 0) { Collections.addAll(fileNames, files); } else { fileNames.add(getString(R.string.no_recordings_available)); } return fileNames; } private void updateActivity(String text) { Intent intent = new Intent(getString(R.string.player_service_update_playing_key)); ((RadioApplication) getApplication()).setPlayingStatus(text); getApplicationContext().sendBroadcast(intent); } @Override public void onBackPressed() { Intent RadioActivityIntent = new Intent(RecordingsActivity.this, RadioActivity.class); startActivity(RadioActivityIntent); finish(); } }