package com.mercandalli.android.apps.files.file.audio; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.support.v4.app.FragmentManager; import android.support.v7.widget.PopupMenu; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import com.mercandalli.android.apps.files.R; import com.mercandalli.android.apps.files.common.listener.IListener; import com.mercandalli.android.apps.files.file.FileManager; import com.mercandalli.android.apps.files.file.FileModel; import com.mercandalli.android.apps.files.file.audio.metadata.FileAudioMetaDataEditionDialog; import com.mercandalli.android.apps.files.file.audio.metadata.FileAudioMetaDataUtils; import com.mercandalli.android.library.base.dialog.DialogUtils; import com.mercandalli.android.library.base.precondition.Preconditions; /** * A simple class that open a Dialog with the actions related to the {@link FileModel}. */ /* package */ class FileAudioOverflowActions implements PopupMenu.OnMenuItemClickListener { private final Activity mActivity; private final String mUploadString; private final String mRenameString; private final String mDeleteString; private final String mPropertiesString; private final FileManager mFileManager; private final FileAudioActionCallback mFileLocalActionCallback; private final FragmentManager mFragmentManager; private FileAudioModel mFileAudioModel; public FileAudioOverflowActions( final Context context, final FragmentManager fragmentManager, final FileAudioActionCallback fileLocalActionCallback) { Preconditions.checkNotNull(context); Preconditions.checkNotNull(fragmentManager); Preconditions.checkNotNull(fileLocalActionCallback); mActivity = (Activity) context; mFragmentManager = fragmentManager; mFileLocalActionCallback = fileLocalActionCallback; mFileManager = FileManager.getInstance(context); mUploadString = context.getString(R.string.upload); mRenameString = context.getString(R.string.rename); mDeleteString = context.getString(R.string.delete); mPropertiesString = context.getString(R.string.properties); } @Override public boolean onMenuItemClick(final MenuItem item) { final int itemId = item.getItemId(); switch (itemId) { case R.id.popup_overflow_file_audio_upload: upload(mFileAudioModel); return true; case R.id.popup_overflow_file_audio_open_as: openAs(mFileAudioModel); return true; case R.id.popup_overflow_file_audio_rename: rename(mFileAudioModel); return true; case R.id.popup_overflow_file_audio_delete: delete(mFileAudioModel); return true; case R.id.popup_overflow_file_audio_meta_data: editMetadata(mFileAudioModel); return true; case R.id.popup_overflow_file_audio_properties: properties(mFileAudioModel); return true; } return false; } /** * Show the {@link AlertDialog}. */ public void show( final FileAudioModel fileAudioModel, final View overflow, final boolean isLogged) { Preconditions.checkNotNull(fileAudioModel); mFileAudioModel = fileAudioModel; final PopupMenu popupMenu = new PopupMenu(mActivity, overflow); popupMenu.getMenuInflater().inflate(R.menu.popup_overflow_file_audio, popupMenu.getMenu()); final Menu menu = popupMenu.getMenu(); for (int i = 0, size = menu.size(); i < size; i++) { final MenuItem menuItem = menu.getItem(i); final int currentId = menuItem.getItemId(); if (currentId == R.id.popup_overflow_file_audio_upload && !isLogged) { menuItem.setVisible(false); } else if (currentId == R.id.popup_overflow_file_audio_open_as && fileAudioModel.isDirectory()) { menuItem.setVisible(false); } else if (currentId == R.id.popup_overflow_file_audio_meta_data) { menuItem.setVisible(FileAudioMetaDataUtils.isMetaDataEditable(fileAudioModel)); } } popupMenu.setOnMenuItemClickListener(this); popupMenu.show(); } //region Actions private void upload(final FileModel fileModel) { if (fileModel.isDirectory()) { Toast.makeText(mActivity, mActivity.getString(R.string.not_implemented), Toast.LENGTH_SHORT).show(); } else { DialogUtils.alert( mActivity, mUploadString, "Upload file " + fileModel.getName(), mUploadString, new DialogUtils.OnDialogUtilsListener() { @Override public void onDialogUtilsCalledBack() { if (fileModel.getFile() != null) { mFileManager.upload(fileModel, -1, new IListener() { @Override public void execute() { mFileLocalActionCallback.refreshData(); } }); } } }, mActivity.getString(android.R.string.cancel), null); } } /** * Open local file as... (Open a dialog to select). * * @param fileModel The {@link FileModel} to open. */ private void openAs(final FileModel fileModel) { mFileManager.openLocalAs(mActivity, fileModel); } private void rename(final FileModel fileModel) { DialogUtils.prompt( mActivity, mRenameString, "Rename " + (fileModel.isDirectory() ? "directory" : "file") + " " + fileModel.getName() + " ?", "Ok", new DialogUtils.OnDialogUtilsStringListener() { @Override public void onDialogUtilsStringCalledBack(String text) { mFileManager.rename(fileModel, text, new IListener() { @Override public void execute() { mFileLocalActionCallback.refreshData(); } }); } }, "Cancel", null, fileModel.getFullName()); } private void delete(final FileModel fileModel) { DialogUtils.alert( mActivity, mDeleteString, "Delete " + (fileModel.isDirectory() ? "directory" : "file") + " " + fileModel.getName() + " ?", mActivity.getResources().getString(android.R.string.yes), new DialogUtils.OnDialogUtilsListener() { @Override public void onDialogUtilsCalledBack() { mFileManager.delete(fileModel, new IListener() { @Override public void execute() { mFileLocalActionCallback.refreshData(); } }); } }, mActivity.getResources().getString(android.R.string.no), null); } private void editMetadata(final FileAudioModel fileAudioModel) { FileAudioMetaDataEditionDialog.newInstance(fileAudioModel).show(mFragmentManager, null); } private void properties(final FileModel fileModel) { DialogUtils.alert(mActivity, mPropertiesString + " : " + fileModel.getName(), mFileManager.toSpanned(mActivity, fileModel), "OK", null, null, null); } //endregion Actions /** * An interface to provide methods to do actions (rename, cut...) */ /* package */ interface FileAudioActionCallback { void refreshData(); } }