Skip to content

Commit ba018e3

Browse files
committed
Added Unselect All,
Fixes for crash below Android-8(Oreo) on delete/File properties because of nio support
1 parent 76a212c commit ba018e3

File tree

8 files changed

+77
-3
lines changed

8 files changed

+77
-3
lines changed

filebrowser/src/main/java/com/aditya/filebrowser/ToolbarActionMode.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ else if(item.getItemId()==R.id.action_rename) {
9595
else if(item.getItemId()==R.id.action_selectall) {
9696
mAdapter.selectAll();
9797
}
98+
else if(item.getItemId()==R.id.action_unselectall) {
99+
mAdapter.unSelectAll();
100+
}
98101
return false;
99102
}
100103
}

filebrowser/src/main/java/com/aditya/filebrowser/adapters/CustomAdapter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ public void selectAll() {
3838
notifyDataSetChanged();
3939
}
4040

41+
public void unSelectAll() {
42+
for(int i=0;i<fileList.size();i++) {
43+
filteredfileList.get(i).setSelected(false);
44+
}
45+
notifyDataSetChanged();
46+
}
47+
4148
public void selectItem(int position) {
4249
filteredfileList.get(position).setSelected(true);
4350
notifyDataSetChanged();

filebrowser/src/main/java/com/aditya/filebrowser/fileoperations/FileIO.java

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public void run() {
9191
for (; i < selectedItems.size(); i++) {
9292
mUIUpdateHandler.post(mHelper.progressUpdater(progressDialog, (int)((i/TOTAL_ITEMS)*100), "File: "+selectedItems.get(i).getFile().getName()));
9393
if (selectedItems.get(i).getFile().isDirectory()) {
94-
FileUtils.deleteDirectory(selectedItems.get(i).getFile());
94+
removeDir(selectedItems.get(i).getFile());
9595
} else {
9696
FileUtils.forceDelete(selectedItems.get(i).getFile());
9797
}
@@ -215,7 +215,7 @@ public void getProperties(List<FileItem> selectedItems) {
215215
File f = selectedItems.get(0).getFile().getCanonicalFile();
216216
isDirectory = (f.isDirectory());
217217
String type = isDirectory?mContext.getString(R.string.directory):mContext.getString(R.string.file);
218-
String size = FileUtils.byteCountToDisplaySize(isDirectory?FileUtils.sizeOfDirectory(f):FileUtils.sizeOf(f));
218+
String size = FileUtils.byteCountToDisplaySize(isDirectory ? getDirSize(f):FileUtils.sizeOf(f));
219219
String lastModified = new SimpleDateFormat(Constants.DATE_FORMAT).format(selectedItems.get(0).getFile().lastModified());
220220
msg.append(mContext.getString(R.string.file_type,type));
221221
msg.append(mContext.getString(R.string.file_size,size));
@@ -226,7 +226,7 @@ public void getProperties(List<FileItem> selectedItems) {
226226
for(int i=0;i<selectedItems.size();i++) {
227227
File f = selectedItems.get(0).getFile().getCanonicalFile();
228228
boolean isDirectory = (f.isDirectory());
229-
totalSize += isDirectory?FileUtils.sizeOfDirectory(f):FileUtils.sizeOf(f);
229+
totalSize += isDirectory ? getDirSize(f):FileUtils.sizeOf(f);
230230
}
231231
msg.append(mContext.getString(R.string.file_type_plain)+" "+mContext.getString(R.string.file_type_multiple));
232232
msg.append(mContext.getString(R.string.file_size,FileUtils.byteCountToDisplaySize(totalSize)));
@@ -255,4 +255,53 @@ public void shareMultipleFiles(List<FileItem> filesToBeShared){
255255
UIUtils.ShowToast(mContext.getString(R.string.sharing_no_app),mContext);
256256
}
257257
}
258+
259+
private boolean removeDir(File directoryToBeDeleted) {
260+
File[] allContents = directoryToBeDeleted.listFiles();
261+
if (allContents != null) {
262+
for (File file : allContents) {
263+
removeDir(file);
264+
}
265+
}
266+
return directoryToBeDeleted.delete();
267+
}
268+
269+
private long getDirSize(File root) {
270+
if(root == null){
271+
return 0;
272+
}
273+
if(root.isFile()){
274+
return root.length();
275+
}
276+
try {
277+
if(isFileASymLink(root)){
278+
return 0;
279+
}
280+
} catch (IOException e) {
281+
e.printStackTrace();
282+
return 0;
283+
}
284+
285+
long length = 0;
286+
File[] files = root.listFiles();
287+
if(files == null){
288+
return 0;
289+
}
290+
for (File file : files) {
291+
length += getDirSize(file);
292+
}
293+
294+
return length;
295+
}
296+
297+
private static boolean isFileASymLink(File file) throws IOException {
298+
File canon;
299+
if (file.getParent() == null) {
300+
canon = file;
301+
} else {
302+
File canonDir = file.getParentFile().getCanonicalFile();
303+
canon = new File(canonDir, file.getName());
304+
}
305+
return !canon.getCanonicalFile().equals(canon.getAbsoluteFile());
306+
}
258307
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="24.0"
5+
android:viewportHeight="24.0">
6+
<path
7+
android:fillColor="#FF000000"
8+
android:pathData="M14,5h8v2h-8zM14,10.5h8v2h-8zM14,16h8v2h-8zM2,11.5C2,15.08 4.92,18 8.5,18L9,18v2l3,-3 -3,-3v2h-0.5C6.02,16 4,13.98 4,11.5S6.02,7 8.5,7L12,7L12,5L8.5,5C4.92,5 2,7.92 2,11.5z"/>
9+
</vector>

filebrowser/src/main/res/menu/toolbar_multiselect_menu.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,6 @@
99
android:icon="@drawable/ic_create_black_24dp" app:showAsAction="ifRoom" />
1010
<item android:id="@+id/action_selectall" android:title="@string/selectall"
1111
android:icon="@drawable/ic_format_line_spacing_black_24dp" app:showAsAction="ifRoom" />
12+
<item android:id="@+id/action_unselectall" android:title="@string/unselectall"
13+
android:icon="@drawable/ic_low_priority_black_24dp" app:showAsAction="ifRoom" />
1214
</menu>

filebrowser/src/main/res/menu/toolbar_multiselect_menu_filechooser.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@
55
android:icon="@drawable/ic_info_outline_black_24dp" app:showAsAction="ifRoom" />
66
<item android:id="@+id/action_selectall" android:title="@string/selectall"
77
android:icon="@drawable/ic_format_line_spacing_black_24dp" app:showAsAction="ifRoom" />
8+
<item android:id="@+id/action_unselectall" android:title="@string/unselectall"
9+
android:icon="@drawable/ic_low_priority_black_24dp" app:showAsAction="ifRoom" />
810
</menu>

filebrowser/src/main/res/values-de/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,5 @@
7272
<string name="filter_only">Filtern nach</string>
7373
<string name="sort_by">Sortieren nach</string>
7474
<string name="file_info">%s zul. geändert %s</string>
75+
<string name="unselectall">Alles wiederufen</string>
7576
</resources>

filebrowser/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
<string name="no_app_to_handle">No app found to handle this type of file.</string>
7070
<string name="select_multiple">Select Multiple Files</string>
7171
<string name="external_storage_error">Cannot Locate External Store</string>
72+
<string name="unselectall">Unselect All</string>
7273
<string-array name="filter_options">
7374
<item>Files</item>
7475
<item>Folders</item>

0 commit comments

Comments
 (0)