|
@@ -31,7 +31,6 @@ import android.os.Bundle;
|
|
|
import android.preference.PreferenceManager;
|
|
|
import android.support.v4.widget.SwipeRefreshLayout;
|
|
|
import android.view.ActionMode;
|
|
|
-import android.view.ContextMenu;
|
|
|
import android.view.LayoutInflater;
|
|
|
import android.view.Menu;
|
|
|
import android.view.MenuInflater;
|
|
@@ -69,14 +68,14 @@ import com.owncloud.android.ui.preview.PreviewTextFragment;
|
|
|
import com.owncloud.android.utils.FileStorageUtils;
|
|
|
|
|
|
import java.io.File;
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
|
/**
|
|
|
* A Fragment that lists all files and folders in a given path.
|
|
|
*
|
|
|
* TODO refactor to get rid of direct dependency on FileDisplayActivity
|
|
|
*/
|
|
|
-public class OCFileListFragment extends ExtendedListFragment
|
|
|
- implements FileActionsDialogFragment.FileActionsDialogFragmentListener {
|
|
|
+public class OCFileListFragment extends ExtendedListFragment {
|
|
|
|
|
|
private static final String TAG = OCFileListFragment.class.getSimpleName();
|
|
|
|
|
@@ -100,7 +99,6 @@ public class OCFileListFragment extends ExtendedListFragment
|
|
|
private FileListListAdapter mAdapter;
|
|
|
private boolean mJustFolders;
|
|
|
|
|
|
- private OCFile mTargetFile;
|
|
|
|
|
|
private boolean miniFabClicked = false;
|
|
|
|
|
@@ -338,56 +336,34 @@ public class OCFileListFragment extends ExtendedListFragment
|
|
|
|
|
|
private void registerLongClickListener() {
|
|
|
getListView().setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
|
|
|
+ private Menu menu;
|
|
|
+
|
|
|
@Override
|
|
|
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
|
|
|
- // Capture total checked items
|
|
|
final int checkedCount = getListView().getCheckedItemCount();
|
|
|
- // Set the CAB title according to total checked items
|
|
|
- mode.setTitle(checkedCount + " Selected");
|
|
|
+ // TODO Tobi extract to values
|
|
|
+ mode.setTitle(checkedCount + " selected");
|
|
|
|
|
|
- if (checked){
|
|
|
- mAdapter.setNewSelection(position,checked);
|
|
|
+ if (checked) {
|
|
|
+ mAdapter.setNewSelection(position, checked);
|
|
|
} else {
|
|
|
mAdapter.removeSelection(position);
|
|
|
}
|
|
|
+
|
|
|
+ // TODO maybe change: only recreate menu if count changes
|
|
|
+ menu.clear();
|
|
|
+ if (checkedCount == 1) {
|
|
|
+ createContextMenu(menu);
|
|
|
+ } else {
|
|
|
+ // download, move, copy, delete
|
|
|
+ getActivity().getMenuInflater().inflate(R.menu.multiple_file_actions_menu, menu);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
|
|
|
-
|
|
|
-// Bundle args = getArguments();
|
|
|
-// boolean allowContextualActions =
|
|
|
-// (args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
|
|
|
-// if (allowContextualActions) {
|
|
|
-// MenuInflater inflater = getActivity().getMenuInflater();
|
|
|
-// inflater.inflate(R.menu.file_actions_menu, menu);
|
|
|
-// AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
|
|
|
-// OCFile targetFile = (OCFile) mAdapter.getItem(info.position);
|
|
|
-//
|
|
|
-// if (mContainerActivity.getStorageManager() != null) {
|
|
|
-// FileMenuFilter mf = new FileMenuFilter(
|
|
|
-// targetFile,
|
|
|
-// mContainerActivity.getStorageManager().getAccount(),
|
|
|
-// mContainerActivity,
|
|
|
-// getActivity()
|
|
|
-// );
|
|
|
-// mf.filter(menu);
|
|
|
-// }
|
|
|
-//
|
|
|
-// /// TODO break this direct dependency on FileDisplayActivity... if possible
|
|
|
-// MenuItem item = menu.findItem(R.id.action_open_file_with);
|
|
|
-// FileFragment frag = ((FileDisplayActivity)getActivity()).getSecondFragment();
|
|
|
-// if (frag != null && frag instanceof FileDetailFragment &&
|
|
|
-// frag.getFile().getFileId() == targetFile.getFileId()) {
|
|
|
-// item = menu.findItem(R.id.action_see_details);
|
|
|
-// if (item != null) {
|
|
|
-// item.setVisible(false);
|
|
|
-// item.setEnabled(false);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
- mode.getMenuInflater().inflate(R.menu.file_actions_menu, menu);
|
|
|
+ this.menu = menu;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -398,12 +374,7 @@ public class OCFileListFragment extends ExtendedListFragment
|
|
|
|
|
|
@Override
|
|
|
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
|
|
|
- if (mAdapter.getCheckedItemPositions().size() == 1) {
|
|
|
- return onFileActionChosen(item.getItemId(), mAdapter.getCheckedItemPositions().get(0));
|
|
|
- } else if (mAdapter.getCheckedItemPositions().size() > 1){
|
|
|
- return false;
|
|
|
- }
|
|
|
- return false;
|
|
|
+ return onFileActionChosen(item.getItemId());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -562,17 +533,17 @@ public class OCFileListFragment extends ExtendedListFragment
|
|
|
* {@inheritDoc}
|
|
|
*/
|
|
|
// TODO Tobi needed?
|
|
|
- @Override
|
|
|
- public void onCreateContextMenu(
|
|
|
- ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
|
|
+ public void createContextMenu(Menu menu) {
|
|
|
Bundle args = getArguments();
|
|
|
boolean allowContextualActions =
|
|
|
(args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
|
|
|
if (allowContextualActions) {
|
|
|
MenuInflater inflater = getActivity().getMenuInflater();
|
|
|
inflater.inflate(R.menu.file_actions_menu, menu);
|
|
|
- AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
|
|
|
- OCFile targetFile = (OCFile) mAdapter.getItem(info.position);
|
|
|
+ OCFile targetFile = null;
|
|
|
+ if (mAdapter.getCheckedItems().size() == 1){
|
|
|
+ targetFile = mAdapter.getCheckedItems().get(0);
|
|
|
+ }
|
|
|
|
|
|
if (mContainerActivity.getStorageManager() != null) {
|
|
|
FileMenuFilter mf = new FileMenuFilter(
|
|
@@ -602,81 +573,119 @@ public class OCFileListFragment extends ExtendedListFragment
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * {@inheritDoc}
|
|
|
- */
|
|
|
- @Override
|
|
|
- public boolean onFileActionChosen(int menuId, int filePosition) {
|
|
|
- mTargetFile = (OCFile) mAdapter.getItem(filePosition);
|
|
|
- switch (menuId) {
|
|
|
- case R.id.action_share_file: {
|
|
|
- mContainerActivity.getFileOperationsHelper().showShareFile(mTargetFile);
|
|
|
- return true;
|
|
|
- }
|
|
|
- case R.id.action_open_file_with: {
|
|
|
- mContainerActivity.getFileOperationsHelper().openFile(mTargetFile);
|
|
|
- return true;
|
|
|
- }
|
|
|
- case R.id.action_rename_file: {
|
|
|
- RenameFileDialogFragment dialog = RenameFileDialogFragment.newInstance(mTargetFile);
|
|
|
- dialog.show(getFragmentManager(), FileDetailFragment.FTAG_RENAME_FILE);
|
|
|
- return true;
|
|
|
- }
|
|
|
- case R.id.action_remove_file: {
|
|
|
- RemoveFileDialogFragment dialog = RemoveFileDialogFragment.newInstance(mTargetFile);
|
|
|
- dialog.show(getFragmentManager(), ConfirmationDialogFragment.FTAG_CONFIRMATION);
|
|
|
- return true;
|
|
|
- }
|
|
|
- case R.id.action_download_file:
|
|
|
- case R.id.action_sync_file: {
|
|
|
- mContainerActivity.getFileOperationsHelper().syncFile(mTargetFile);
|
|
|
- return true;
|
|
|
- }
|
|
|
- case R.id.action_cancel_sync: {
|
|
|
- ((FileDisplayActivity)mContainerActivity).cancelTransference(mTargetFile);
|
|
|
- return true;
|
|
|
- }
|
|
|
- case R.id.action_see_details: {
|
|
|
- mContainerActivity.showDetails(mTargetFile);
|
|
|
- return true;
|
|
|
- }
|
|
|
- case R.id.action_send_file: {
|
|
|
- // Obtain the file
|
|
|
- if (!mTargetFile.isDown()) { // Download the file
|
|
|
- Log_OC.d(TAG, mTargetFile.getRemotePath() + " : File must be downloaded");
|
|
|
- ((FileDisplayActivity) mContainerActivity).startDownloadForSending(mTargetFile);
|
|
|
+ public boolean onFileActionChosen(int menuId) {
|
|
|
+ if (mAdapter.getCheckedItems().size() == 1){
|
|
|
+ OCFile mTargetFile = mAdapter.getCheckedItems().get(0);
|
|
|
|
|
|
- } else {
|
|
|
- mContainerActivity.getFileOperationsHelper().sendDownloadedFile(mTargetFile);
|
|
|
+ switch (menuId) {
|
|
|
+ case R.id.action_share_file: {
|
|
|
+ mContainerActivity.getFileOperationsHelper().showShareFile(mTargetFile);
|
|
|
+ return true;
|
|
|
}
|
|
|
- return true;
|
|
|
- }
|
|
|
- case R.id.action_move: {
|
|
|
- Intent action = new Intent(getActivity(), FolderPickerActivity.class);
|
|
|
+ case R.id.action_open_file_with: {
|
|
|
+ mContainerActivity.getFileOperationsHelper().openFile(mTargetFile);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_rename_file: {
|
|
|
+ RenameFileDialogFragment dialog = RenameFileDialogFragment.newInstance(mTargetFile);
|
|
|
+ dialog.show(getFragmentManager(), FileDetailFragment.FTAG_RENAME_FILE);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_remove_file: {
|
|
|
+ RemoveFileDialogFragment dialog = RemoveFileDialogFragment.newInstance(mTargetFile);
|
|
|
+ dialog.show(getFragmentManager(), ConfirmationDialogFragment.FTAG_CONFIRMATION);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_download_file:
|
|
|
+ case R.id.action_sync_file: {
|
|
|
+ mContainerActivity.getFileOperationsHelper().syncFile(mTargetFile);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_cancel_sync: {
|
|
|
+ ((FileDisplayActivity) mContainerActivity).cancelTransference(mTargetFile);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_see_details: {
|
|
|
+ mContainerActivity.showDetails(mTargetFile);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_send_file: {
|
|
|
+ // Obtain the file
|
|
|
+ if (!mTargetFile.isDown()) { // Download the file
|
|
|
+ Log_OC.d(TAG, mTargetFile.getRemotePath() + " : File must be downloaded");
|
|
|
+ ((FileDisplayActivity) mContainerActivity).startDownloadForSending(mTargetFile);
|
|
|
|
|
|
- // Pass mTargetFile that contains info of selected file/folder
|
|
|
- action.putExtra(FolderPickerActivity.EXTRA_FILE, mTargetFile);
|
|
|
- getActivity().startActivityForResult(action, FileDisplayActivity.REQUEST_CODE__MOVE_FILES);
|
|
|
- return true;
|
|
|
- }
|
|
|
- case R.id.action_favorite_file: {
|
|
|
- mContainerActivity.getFileOperationsHelper().toggleFavorite(mTargetFile, true);
|
|
|
- return true;
|
|
|
- }
|
|
|
- case R.id.action_unfavorite_file: {
|
|
|
- mContainerActivity.getFileOperationsHelper().toggleFavorite(mTargetFile, false);
|
|
|
- return true;
|
|
|
+ } else {
|
|
|
+ mContainerActivity.getFileOperationsHelper().sendDownloadedFile(mTargetFile);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_move: {
|
|
|
+ Intent action = new Intent(getActivity(), FolderPickerActivity.class);
|
|
|
+
|
|
|
+ // Pass mTargetFile that contains info of selected file/folder
|
|
|
+ ArrayList files = new ArrayList();
|
|
|
+ files.add(mTargetFile);
|
|
|
+ action.putParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES, files);
|
|
|
+ getActivity().startActivityForResult(action, FileDisplayActivity.REQUEST_CODE__MOVE_FILES);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_favorite_file: {
|
|
|
+ mContainerActivity.getFileOperationsHelper().toggleFavorite(mTargetFile, true);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_unfavorite_file: {
|
|
|
+ mContainerActivity.getFileOperationsHelper().toggleFavorite(mTargetFile, false);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_copy:
|
|
|
+ Intent action = new Intent(getActivity(), FolderPickerActivity.class);
|
|
|
+
|
|
|
+ // Pass mTargetFile that contains info of selected file/folder
|
|
|
+ action.putExtra(FolderPickerActivity.EXTRA_FILE, mTargetFile);
|
|
|
+ getActivity().startActivityForResult(action, FileDisplayActivity.REQUEST_CODE__COPY_FILES);
|
|
|
+ return true;
|
|
|
+ default:
|
|
|
+ return false;
|
|
|
}
|
|
|
- case R.id.action_copy:
|
|
|
- Intent action = new Intent(getActivity(), FolderPickerActivity.class);
|
|
|
+ } else {
|
|
|
+ ArrayList<OCFile> mTargetFiles = mAdapter.getCheckedItems();
|
|
|
|
|
|
- // Pass mTargetFile that contains info of selected file/folder
|
|
|
- action.putExtra(FolderPickerActivity.EXTRA_FILE, mTargetFile);
|
|
|
- getActivity().startActivityForResult(action, FileDisplayActivity.REQUEST_CODE__COPY_FILES);
|
|
|
- return true;
|
|
|
- default:
|
|
|
- return false;
|
|
|
+ switch (menuId) {
|
|
|
+// case R.id.action_remove_file: {
|
|
|
+// RemoveFileDialogFragment dialog = RemoveFileDialogFragment.newInstance(mTargetFile);
|
|
|
+// dialog.show(getFragmentManager(), ConfirmationDialogFragment.FTAG_CONFIRMATION);
|
|
|
+// return true;
|
|
|
+// }
|
|
|
+ case R.id.action_download_file:
|
|
|
+ case R.id.action_sync_file: {
|
|
|
+ mContainerActivity.getFileOperationsHelper().syncFiles(mTargetFiles);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_move: {
|
|
|
+ Intent action = new Intent(getActivity(), FolderPickerActivity.class);
|
|
|
+ action.putParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES, mTargetFiles);
|
|
|
+ getActivity().startActivityForResult(action, FileDisplayActivity.REQUEST_CODE__MOVE_FILES);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_favorite_file: {
|
|
|
+ mContainerActivity.getFileOperationsHelper().toggleFavorites(mTargetFiles, true);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_unfavorite_file: {
|
|
|
+ mContainerActivity.getFileOperationsHelper().toggleFavorites(mTargetFiles, false);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ case R.id.action_copy:
|
|
|
+ Intent action = new Intent(getActivity(), FolderPickerActivity.class);
|
|
|
+ action.putParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES, mTargetFiles);
|
|
|
+ getActivity().startActivityForResult(action, FileDisplayActivity.REQUEST_CODE__COPY_FILES);
|
|
|
+ return true;
|
|
|
+ default:
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -685,8 +694,7 @@ public class OCFileListFragment extends ExtendedListFragment
|
|
|
@Override
|
|
|
public boolean onContextItemSelected (MenuItem item) {
|
|
|
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
|
|
|
- boolean matched = onFileActionChosen(item.getItemId(),
|
|
|
- ((AdapterContextMenuInfo) item.getMenuInfo()).position);
|
|
|
+ boolean matched = onFileActionChosen(item.getItemId());
|
|
|
if(!matched) {
|
|
|
return super.onContextItemSelected(item);
|
|
|
} else {
|