Back to project page SoundRecorder.
The source code is released under:
MIT License
If you think the Android project SoundRecorder listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.danielkim.soundrecorder.adapters; /*from w w w .j a v a 2 s. c o m*/ import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Environment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.danielkim.soundrecorder.DBHelper; import com.danielkim.soundrecorder.R; import com.danielkim.soundrecorder.RecordingItem; import com.danielkim.soundrecorder.fragments.PlaybackFragment; import com.danielkim.soundrecorder.listeners.OnDatabaseChangedListener; import java.io.File; import java.text.SimpleDateFormat; import java.util.Locale; import java.util.concurrent.TimeUnit; /** * Created by Daniel on 12/29/2014. */ public class FileViewerAdapter extends RecyclerView.Adapter<FileViewerAdapter.RecordingsViewHolder> implements OnDatabaseChangedListener{ private static final String LOG_TAG = "FileViewerAdapter"; private DBHelper mDatabase; private static final SimpleDateFormat mDateAddedFormatter = new SimpleDateFormat("MMM dd, yyyy - hh:mm a", Locale.getDefault()); RecordingItem item; Context mContext; LinearLayoutManager llm; public FileViewerAdapter(Context context, LinearLayoutManager linearLayoutManager) { super(); mContext = context; mDatabase = new DBHelper(mContext); mDatabase.setOnDatabaseChangedListener(this); llm = linearLayoutManager; } @Override public void onBindViewHolder(final RecordingsViewHolder holder, int position) { item = getItem(position); long itemDuration = item.getLength(); long minutes = TimeUnit.MILLISECONDS.toMinutes(itemDuration); long seconds = TimeUnit.MILLISECONDS.toSeconds(itemDuration) - TimeUnit.MINUTES.toSeconds(minutes); holder.vName.setText(item.getName()); holder.vLength.setText(String.format("%02d:%02d", minutes, seconds)); holder.vDateAdded.setText(mDateAddedFormatter.format(item.getTime())); // define an on click listener to open PlaybackFragment holder.cardView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { PlaybackFragment playbackFragment = new PlaybackFragment().newInstance(getItem(holder.getPosition())); FragmentTransaction transaction = ((FragmentActivity) mContext) .getSupportFragmentManager() .beginTransaction(); playbackFragment.show(transaction, "dialog_playback"); } catch (Exception e) { Log.e(LOG_TAG, "exception", e); } } }); holder.cardView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { final CharSequence[] items = { "Rename File", "Delete File" }; // File delete confirm AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle(mContext.getString(R.string.dialog_title_options)); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { if (item == 0) { renameFileDialog(holder.getPosition()); } else if (item == 1) { deleteFileDialog(holder.getPosition()); } } }); builder.setCancelable(true); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); return false; } }); } @Override public RecordingsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater. from(parent.getContext()). inflate(R.layout.card_view, parent, false); mContext = parent.getContext(); return new RecordingsViewHolder(itemView); } public static class RecordingsViewHolder extends RecyclerView.ViewHolder { protected TextView vName; protected TextView vLength; protected TextView vDateAdded; protected View cardView; public RecordingsViewHolder(View v) { super(v); vName = (TextView) v.findViewById(R.id.file_name_text); vLength = (TextView) v.findViewById(R.id.file_length_text); vDateAdded = (TextView) v.findViewById(R.id.file_date_added_text); cardView = v.findViewById(R.id.card_view); } } @Override public int getItemCount() { return mDatabase.getCount(); } public RecordingItem getItem(int position) { return mDatabase.getItemAt(position); } @Override public void onNewDatabaseEntryAdded() { //item added to top of the list notifyItemInserted(getItemCount() - 1); llm.scrollToPosition(getItemCount() - 1); } @Override //TODO public void onDatabaseEntryRenamed() { } public void remove(int position) { //remove item from database, recyclerview and storage //delete file from storage File file = new File(getItem(position).getFilePath()); file.delete(); Toast.makeText(mContext, getItem(position).getName() + " successfully deleted", Toast.LENGTH_SHORT).show(); mDatabase.removeItemWithId(getItem(position).getId()); notifyItemRemoved(position); } //TODO public void removeOutOfApp(String filePath) { //user deletes a saved recording out of the application through another application } public void rename(int position, String name) { //rename a file String mFilePath = Environment.getExternalStorageDirectory().getAbsolutePath(); mFilePath += "/SoundRecorder/" + name; File f = new File(mFilePath); if (f.exists() && !f.isDirectory()) { //file name is not unique, cannot rename file. Toast.makeText(mContext, "The file " + name + " already exists. Please choose a different file name", Toast.LENGTH_SHORT).show(); } else { //file name is unique, rename file File oldFilePath = new File(getItem(position).getFilePath()); oldFilePath.renameTo(f); mDatabase.renameItem(getItem(position), name); notifyItemChanged(position); } } public void renameFileDialog (final int position) { // File rename dialog AlertDialog.Builder renameFileBuilder = new AlertDialog.Builder(mContext); LayoutInflater inflater = LayoutInflater.from(mContext); View view = inflater.inflate(R.layout.dialog_rename_file, null); final EditText input = (EditText) view.findViewById(R.id.new_name); renameFileBuilder.setTitle(mContext.getString(R.string.dialog_title_rename)); renameFileBuilder.setCancelable(true); renameFileBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { try { String value = input.getText().toString().trim() + ".mp4"; rename(position, value); } catch (Exception e) { Log.e(LOG_TAG, "exception", e); } dialog.cancel(); } }); renameFileBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); renameFileBuilder.setView(view); AlertDialog alert = renameFileBuilder.create(); alert.show(); } public void deleteFileDialog (final int position) { // File delete confirm AlertDialog.Builder confirmDelete = new AlertDialog.Builder(mContext); confirmDelete.setTitle(mContext.getString(R.string.dialog_title_delete)); confirmDelete.setMessage(mContext.getString(R.string.dialog_text_delete)); confirmDelete.setCancelable(true); confirmDelete.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { try { //remove item from database, recyclerview, and storage remove(position); } catch (Exception e) { Log.e(LOG_TAG, "exception", e); } dialog.cancel(); } }); confirmDelete.setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = confirmDelete.create(); alert.show(); } }