Feature request: Select all (particularly in search) #637

This commit is contained in:
Jonas Sandrock 2017-07-15 19:20:07 +02:00 committed by AndyScherzinger
parent f52e40aa4f
commit 6d25c26a8a
No known key found for this signature in database
GPG key ID: 6CADC7E3523C308B
8 changed files with 76 additions and 3 deletions

View file

@ -47,6 +47,7 @@ public class FileMenuFilter {
private static final int SINGLE_SELECT_ITEMS = 1;
private int mNumberOfAllFiles;
private Collection<OCFile> mFiles;
private ComponentsGetter mComponentsGetter;
private Account mAccount;
@ -55,12 +56,14 @@ public class FileMenuFilter {
/**
* Constructor
*
* @param numberOfAllFiles Number of all displayed files
* @param targetFiles Collection of {@link OCFile} file targets of the action to filter in the {@link Menu}.
* @param account ownCloud {@link Account} holding targetFile.
* @param cg Accessor to app components, needed to access synchronization services
* @param context Android {@link Context}, needed to access build setup resources.
*/
public FileMenuFilter(Collection<OCFile> targetFiles, Account account, ComponentsGetter cg, Context context) {
public FileMenuFilter(int numberOfAllFiles, Collection<OCFile> targetFiles, Account account, ComponentsGetter cg, Context context) {
mNumberOfAllFiles = numberOfAllFiles;
mFiles = targetFiles;
mAccount = account;
mComponentsGetter = cg;
@ -76,7 +79,7 @@ public class FileMenuFilter {
* @param context Android {@link Context}, needed to access build setup resources.
*/
public FileMenuFilter(OCFile targetFile, Account account, ComponentsGetter cg, Context context) {
this(Collections.singletonList(targetFile), account, cg, context);
this(1, Collections.singletonList(targetFile), account, cg, context);
}
/**
@ -169,6 +172,22 @@ public class FileMenuFilter {
toShow.add(R.id.action_remove_file);
}
// SELECT ALL
// Show only if at least one item isn't selected.
if (mFiles.size() >= mNumberOfAllFiles) {
toHide.add(R.id.action_select_all);
} else {
toShow.add(R.id.action_select_all);
}
// DESELECT ALL
// Show only if at least one item is selected.
if (mFiles.isEmpty()) {
toHide.add(R.id.action_deselect_all);
} else {
toShow.add(R.id.action_deselect_all);
}
// OPEN WITH (different to preview!)
if (!isSingleFile() || !anyFileDown() || synchronizing) {
toHide.add(R.id.action_open_file_with);

View file

@ -786,6 +786,10 @@ public class FileDisplayActivity extends HookActivity
}
break;
}
case R.id.action_select_all: {
getListOfFilesFragment().selectAllFiles(true);
break;
}
default:
retval = super.onOptionsItemSelected(item);
break;

View file

@ -648,6 +648,10 @@ public class FileListListAdapter extends BaseAdapter {
return files;
}
public Vector<OCFile> getFiles() {
return mFiles;
}
public Filter getFilter() {
if (mFilesFilter == null) {
mFilesFilter = new FilesFilter();

View file

@ -625,6 +625,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
);
mode.setTitle(title);
FileMenuFilter mf = new FileMenuFilter(
mAdapter.getFiles().size(),
checkedFiles,
((FileActivity) getActivity()).getAccount(),
mContainerActivity,
@ -991,12 +992,21 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
getActivity().startActivityForResult(action, FileDisplayActivity.REQUEST_CODE__MOVE_FILES);
return true;
}
case R.id.action_copy:
case R.id.action_copy: {
Intent action = new Intent(getActivity(), FolderPickerActivity.class);
action.putParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES, checkedFiles);
action.putExtra(FolderPickerActivity.EXTRA_ACTION, getResources().getText(R.string.copy_to));
getActivity().startActivityForResult(action, FileDisplayActivity.REQUEST_CODE__COPY_FILES);
return true;
}
case R.id.action_select_all: {
selectAllFiles(true);
return true;
}
case R.id.action_deselect_all: {
selectAllFiles(false);
return true;
}
default:
return false;
}
@ -1594,4 +1604,17 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
public boolean getIsSearchFragment() {
return searchFragment;
}
/**
* De-/select all elements in the current list view.
*
* @param select <code>true</code> to select all, <code>false</code> to deselect all
*/
public void selectAllFiles(boolean select) {
AbsListView listView = getListView();
for (int position = 0; position < listView.getCount(); position++) {
listView.setItemChecked(position, select);
}
}
}

View file

@ -85,6 +85,20 @@
app:showAsAction="never"
android:showAsAction="never"
android:orderInCategory="1" />
<item
android:id="@+id/action_select_all"
android:title="@string/select_all"
android:icon="@drawable/ic_select_all"
app:showAsAction="never"
android:showAsAction="never"
android:orderInCategory="1" />
<item
android:id="@+id/action_deselect_all"
android:title="@string/deselect_all"
android:icon="@drawable/ic_select_all"
app:showAsAction="never"
android:showAsAction="never"
android:orderInCategory="1" />
<item
android:id="@+id/action_send_file"
android:title="@string/actionbar_send_file"

View file

@ -54,6 +54,13 @@
app:showAsAction="never"
android:title="@string/actionbar_sort"
android:contentDescription="@string/actionbar_sort"/>
<item
android:id="@+id/action_select_all"
android:icon="@drawable/ic_select_all"
android:orderInCategory="1"
app:showAsAction="never"
android:title="@string/select_all"
android:contentDescription="@string/select_all"/>
<!-- <item android:id="@+id/search"
android:title="@string/actionbar_search"

View file

@ -491,6 +491,7 @@
<string name="upload_copy_files">kopiere Datei</string>
<string name="upload_move_files">verschiebe Datei</string>
<string name="select_all">Alle auswählen</string>
<string name="deselect_all">Auswahl aufheben</string>
<string name="pref_behaviour_entries_keep_file">im Originalordner behalten</string>
<string name="pref_behaviour_entries_move">in den App-Ordner verschoben</string>

View file

@ -492,6 +492,7 @@
<string name="upload_copy_files">Copy file</string>
<string name="upload_move_files">Move file</string>
<string name="select_all">Select all</string>
<string name="deselect_all">Deselect all</string>
<string name="pref_behaviour_entries_keep_file">kept in original folder</string>
<string name="pref_behaviour_entries_move">moved to app folder</string>